You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 3d50a43
Browse filesBrowse the repository at this point in the historyBrowse files
docs(agents): instructions treat ui/ as a workspace, not the objectui sibling repo (#26216)
<!-- claude-projects-attribution: {"github_login":"os-tesla"} -->
_Requested by **Tesla** · [project
thread](https://claude.ai/code/project/chan_01AXsQkLFKRdQCqQ3RTr6Jao?thread=cmsg_01AXsQkLFKRdQCqQ3RTr6JaoKs8hmc2q8bGsPhpaAWD8EY)_
Part of #25712
Part of objectstack#25677
## What
Item 4 of #25712 (slice 2h): the instruction set stops treating objectui
as a sibling repository now that it lives in `ui/`.
- **Root `AGENTS.md`** drops the `objectui#` references and every
sibling-checkout step (`pnpm objectui:refresh`, pin moves,
`.cache/objectui-*`, the PD#15 pin item). The Frontend section, the
monorepo layout line, Context Routing (`ui/**` → `ui/AGENTS.md`) and
Post-Task step 4 now describe `ui/` as a workspace of this repo. 1117 →
1112 lines.
- **`ui/AGENTS.md`** is rewritten as a nested file scoped to `ui/` (630
→ 261 lines). It keeps the UI-specific rules and no longer restates root
rules (governed surfaces, merge queue, changesets, release); a new §9
points at the root file for those.
- **Lane charter** (folded in per the PM's ruling on the claim):
`SKILL.md` gains a `domain:ui` lane-table row (with `packages/console`,
removed from the unowned row) and loses the pin-consumer clause of the
hold rule; `references/lanes/ui.md` and
`references/cross-repo-coordination.md` describe `ui/` as a workspace
here, with the sister-repo, pin-lag and pin-bump lines deleted and no
new lane rules; `scripts/pm/ensure-pm-labels.sh` keeps `domain:ui` in
the main-repo lane loop.
- **Gates that quoted the old text**:
`scripts/check-closing-keyword-parity.mjs` drops the stale
`ui/AGENTS.md` non-parser row; `ui/scripts/check-required-check-set.mjs`
docblock and its test retire the leg that read a phrase the rewrite
removed (the gate's own remedy text prescribes this).
- **Ratchet** (`scripts/pm/check-skill-line-ratchet.mjs`): ceilings
lowered to the landed counts — `AGENTS.md` 1117 → 1112,
`cross-repo-coordination.md` 51 → 47, `lanes/ui.md` 38 → 23. `SKILL.md`
stays at 319: the new row was paid by deleting the hold rule's pin
clause and folding the rest of that line into the `pm:on-hold` rule it
qualified. No raise, no cross-file move.
Untouched by design: the sdui-manifest paragraph in root `AGENTS.md`
("Moving the pin has a second half…") is byte-identical for 2g/2i, and
no sdui files are in this diff.
Clause-②: no
Metadata-protocol: none
## Verification
- Head `22fcfd7f`; 10 files, +123 / −547 (under the 3000-line threshold,
so no split).
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack`: 54 derived gates, 54 exit 0.
`check:doc-formula-expressions` first exited 3 (prerequisite: unbuilt
`@objectstack/formula`/`@objectstack/lint`); after `pnpm exec turbo run
build --filter=@objectstack/formula --filter=@objectstack/lint` it exits
0.
- `pnpm check:pm-skill-ratchet`: exit 0.
- `pnpm --dir ui exec vitest run
scripts/__tests__/check-required-check-set.test.ts`: 24/24.
- Push battery (`GITHUB_ACTIONS=true GITHUB_EVENT_NAME=push node
scripts/pm/check-dispatch-gates.mjs`, both tiers): 2182 cases pass, 0
fail (fast 1917, slow 265).
- Model tier: dispatch-gates names clause ① for the `SKILL.md` edit. The
edit is one table row plus one deleted clause, recorded as the
one-line-class mechanical exit (PM ruling on the claim thread).
## Follow-up (not in this PR)
Remaining places that still treat objectui as a separate repo, left for
a later card so this PR does not widen:
- `.claude/skills/pm-dispatch/references/`: `lanes/triage.md:5`,
`lanes/director.md:81` (objectui pin chain), `lanes/hotcrm.md:15`,
`dispatch-runbook.md:89`, `filing-gate.md:42-43`,
`platform-readings.md:239,389`, `rest-channel.md:78`,
`review-checklist.md:23`, `seat-post-protocol.md:80`, `true-green.md:18`
(objectui section), `decision-analysis.md:47`.
- `.claude/agents/os-dev.md:73,125,157,309,310` (objectui force-push,
script spelling, labeler and changeset rows).
- `.claude/skills/checklist-test/SKILL.md:69,135` and
`.claude/skills/dogfood-verification/SKILL.md:76-107` (`.objectui-sha`,
`pnpm objectui:build`, vendored console).
- `.claude/settings.json` allow-list rows for
`repos/objectstack-ai/objectui/**` (13).
- Provenance-only mentions (no change needed):
`.claude/hooks/guard-*.sh` comments citing objectui incidents;
`skills/objectui/**` is the product skill bundle's name.
## 维护者速读(草稿)
1. **改了什么**:根 `AGENTS.md` 与 pm-dispatch 技能不再把 objectui
当兄弟仓;`ui/AGENTS.md` 改为只管 `ui/` 的嵌套文件,不重述根规则;`domain:ui` 进入本仓车道表。
2. **为什么**:objectui 已并入本仓 `ui/`(#25677),旧的兄弟仓步骤(`pnpm
objectui:refresh`、pin 移动等)已无对象,留着会误导执行席。
3. **风险**:纯文档与门禁文案;两个门禁随引用文本调整,行数上限只降不升。
4. **验证**:54 个派生门禁全绿,push battery 2182/0,ratchet 绿。
5. **席位意见**:
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01P33kUswHotSHBLPc6UVn6n
---------
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: AGENTS.md
+18-23Lines changed: 18 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -135,7 +135,7 @@ layer at least as close to the code (ruling record 6120820653).
135
135
136
136
| Scenario | Command | Notes |
137
137
|:---|:---|:---|
138
-
|**Frontend debug** (UI in `../objectui` calls backend) |`PORT=3000 pnpm dev`|`pnpm dev` = the **showcase** kitchen-sink app (default; best for exercising the platform). Port **must** be 3000 (UI hard-wired); persistent state; leave running. For the minimal CRM app instead: `PORT=3000 pnpm dev:crm`. |
138
+
|**Frontend debug** (the Console in `ui/` calls backend) |`PORT=3000 pnpm dev`|`pnpm dev` = the **showcase** kitchen-sink app (default; best for exercising the platform). Port **must** be 3000 (UI hard-wired); persistent state; leave running. For the minimal CRM app instead: `PORT=3000 pnpm dev:crm`. |
139
139
|**Backend-only debug**|`pnpm dev -- --fresh -p <random>`| Random high port; ephemeral tempdir; **you must kill it** when done |
140
140
141
141
`--fresh`: ephemeral tempdir (auto-deleted on exit) + `--seed-admin` (POSTs sign-up, prints creds — default
This repo ships **backend only**. All Studio/Console UI work happens in `../objectui` (separate repo, checked out next
159
-
to `framework/`). Workflow: edit + commit + push in `../objectui`, then in `framework/` run `pnpm objectui:refresh` to
160
-
pull its build into `packages/console/`.
161
-
162
-
Other scripts: `objectui:bump` (pull only), `objectui:build`, `objectui:clean`. ⛔ Never hand-edit
163
-
`packages/console/dist/` or `.cache/objectui-*/` — regenerated.
158
+
The Studio/Console UI lives in this workspace under `ui/` (`@object-ui/*`; the Console source is `ui/apps/console`),
159
+
and `ui/AGENTS.md` adds that tree's own rules to this file's. `pnpm console:build` builds the Console and copies its
160
+
dist into `packages/console/` (`packages/console/build-dist.sh`). ⛔ Never hand-edit `packages/console/dist/`.
164
161
165
162
**Moving the pin has a second half: regenerate the committed manifest** — `pnpm objectui:build`, then
166
163
`node scripts/gen-sdui-manifest-node.mjs`, which reads objectui's BUILT tree at the pin (never an npm install, whose
167
164
version string names an older commit) and takes no arguments; `scripts/check-sdui-manifest.mjs` reds until you do.
168
165
`objectui:bump` and `objectui:refresh` print the step, and the console build ships that same tracked file in
169
166
`packages/console/dist/`. Full procedure: `docs/releases-maintenance.md`.
170
167
171
-
**Fast iteration on `../objectui` src (no commit/refresh loop):** run objectui's own console dev server —
172
-
`cd ../objectui && pnpm --filter @object-ui/console dev` (Vite on **:5180**, HMR). Its `/api` proxy targets
168
+
**Fast iteration on `ui/` src (no rebuild loop):** run the Console dev server —
169
+
`pnpm --filter @object-ui/console dev` (Vite on **:5180**, HMR). Its `/api` proxy targets
173
170
`DEV_PROXY_TARGET || http://localhost:3000`, so **run the backend you're testing on :3000** (`PORT=3000 pnpm dev` for
174
-
showcase) and browse `:5180`. Note `:3001/_console` (or whatever the backend serves) is the **published** console, not
175
-
your `../objectui` src — only `:5180` reflects local UI edits. See `../objectui/AGENTS.md` for the app-id /
171
+
showcase) and browse `:5180`. Note `:3001/_console` (or whatever the backend serves) is the **built** console, not
172
+
your `ui/` src — only `:5180` reflects local UI edits. See `ui/AGENTS.md` for the app-id /
176
173
localStorage / auth gotchas.
177
174
178
175
---
@@ -231,7 +228,7 @@ localStorage / auth gotchas.
231
228
`.claude/hooks/guard-main-checkout.sh` blocks `Edit`/`Write`/`NotebookEdit`, and
232
229
`.claude/hooks/guard-main-checkout-bash.sh` blocks the identical write arriving through **Bash** (`>`/`>>`
233
230
redirection, `sed -i`, `perl -i`, `tee`, `cp`, `mv`, `rm`, `touch`) — and both check the **target file's own
234
-
repo**, so sibling repos (`objectui`/`cloud`) you touch are covered too (deliberate non-task override:
231
+
repo**, so sibling repos (`cloud`, `hotcrm`) you touch are covered too (deliberate non-task override:
235
232
`OS_ALLOW_MAIN_EDITS=1`, one switch for both). The Bash guard is precision-first: it never blocks reads, and any
236
233
shape it cannot resolve with confidence (`bash -c …`, `xargs`, `node -e`, a `$VAR`/glob target) is allowed through
237
234
— the rule still outranks the hook. **A worktree isolates neither the stash nor the build cache** — the
@@ -302,7 +299,7 @@ localStorage / auth gotchas.
302
299
15.**⛔ A version release is performed by the maintainer, by hand — no AI seat publishes, tags, cuts a Release, or
303
300
triggers a release, and none merges the Version Packages PR.** A rule that binds every seat lives here,
304
301
not only in a lane-specific skill file. **Release-adjacent work stays open to every seat**: the release board,
305
-
`.objectui-sha` pin bumps, version reconciliation, writing changesets, compiling release notes when asked, and
302
+
version reconciliation, writing changesets, compiling release notes when asked, and
306
303
*verifying* release state (`npm view`, `git ls-remote --tags`) are ordinary tasks. What is reserved is the
307
304
**release act itself**: ⛔ running `changeset publish` / `pnpm run release`, ⛔ pushing a version tag, ⛔
308
305
cutting a GitHub Release, ⛔ pushing a runtime image, ⛔ `workflow_dispatch`-ing `release.yml` in any lane but
@@ -568,11 +565,10 @@ Even inside your own worktree, operate defensively:
568
565
|`packages/spec/dist`|`check:api-surface` reports *other people's* exports as "N breaking (removed/narrowed)"; `check:i18n-coverage` rejects an example config for a value the spec allows | both read the built `.d.ts`, not `src/`|
569
566
|`node_modules`| a package fails to resolve a dependency it plainly declares (`Cannot find package 'hono'`) | the merge moved `pnpm-lock.yaml`|
570
567
|`packages/runtime/.objectstack/`|`datasource-autoconnect` sees each row 6× | gitignored fixture state accumulating across runs |
571
-
|`.cache/objectui-*`|`pnpm lint` reports dozens of errors in files you have never opened | a full objectui checkout left by `build-console.sh`, linted as if it were ours |
|`examples/**`| Example Author | Minimal, runnable, uses `defineStack`. App or platform, on any tree: could this be written from the metadata alone, with no knowledge of this company? No ⇒ the app; yes ⇒ the platform, and a **gap** until it does — `.claude/skills/pm-dispatch/references/app-platform-boundary.md`|
0 commit comments