Skip to content

docs: narrative cost — 42.5% of source lines are comments, workflows 58.6%, AGENTS.md is 103 KB with three stale claims, ROADMAP.md still says v3.3.2 and 80 Storybook stories #25919

Closed

Description

@os-zhuang

Ruled: 6435359095 · letter A for PR 2 (prior 6386217274 A) · 2026-10-27T06:34Z

维护者速读

全仓非测试源码 643,658 行里 273,486 行是注释(42.5 %),packages/types/src 69.6 %;.github/workflows 11,342 行里 58.6 % 是 #;24,922 行源码引用 issue 号,涉及 3,186 个不同的 objectui 卡。AGENTS.md 103 KB / 630 行,§9 运维叙事占 66 %,含 3 处过期声明;ROADMAP.md 1,899 行停在「May 6 2026 · v3.3.2 · 80 Storybook stories」(仓里没有 Storybook)。仓库几乎全由 AI 席位写入,叙事是每个会话的强制 token 成本,也是受管面每次改动的复审成本。建议:规范核心与事故史分家,注释写不变量不写事故史,存量不横扫。

Measured (2026-10-24, HEAD 7981384; comment lines matched by the pattern "optional whitespace then // or /* or *")

  • Non-test source (packages + console, excluding locale packs): 643,658 lines, 273,486 comment (42.5 %), 337,531 code. Excluding packages/types: 39.5 %. packages/types/src alone: 45,265 of 64,991 (69.6 %). Tests: 1,225,145 lines, 27.7 % comments. scripts/*.mjs: 99,378 lines, 43.1 %. Workflows: 6,651 of 11,342 lines are # (ci.yml 1,688 of 2,868; changeset-release.yml 1,091 of 1,545 = 70 %). Root configs (eslint, vitest, tsconfig*, turbo): 67.1 %.
  • Issue citations in non-test source: 24,922 lines match objectui#NNNN|objectstack#NNNN|#NNNN+; 3,186 distinct objectui# numbers. 86 test files pin workflow prose; 678 reference AGENTS.md.
  • AGENTS.md: 103,232 bytes, 630 lines; §9 "Operational Rules" is 66 % of the code points; 107 distinct issue citations, 16 dated rulings, 72 ⛔ markers; 15 scripts and 10 pnpm commands are named as re-deriving instruments against roughly 90 prose-only paragraphs; 33 commits in 49 days. Stale claims inside the governed file: the "Local dev" section says framework serves the published console from packages/console/dist (no such directory; the console is apps/console); the "能 push 分支,却删不掉远端 ref" bullet says the container has no gh CLI (which gh → /usr/local/bin/gh, and the merge-queue section instructs gh pr merge --auto); the "依赖与锁文件" section says overrides point to file:node_modules/.cache/objectstack/<name> while package.json and the lockfile say file:.objectstack-pin/<name> (moved by objectui#13008); "39 个包一起发" versus 40 entries in the fixed group.
  • ROADMAP.md: 1,899 lines; header "Last Updated: May 6, 2026 · Current Published Version: v3.3.2 · Spec Version: @objectstack/spec ^4.0.4" against the real 18.0.0; claims "80 Storybook stories" — no .storybook directory or dependency anywhere (positive control: tailwind-merge found). docs/ARCHITECTURE.md is the 2026-04 app-shell extraction guide; 31 of its lines are byte-identical to docs/CONSOLE-STREAMLINING-SUMMARY.md. .github/prompts/ (three Copilot prompt files, 624 lines, naming Framer Motion, 0 dependencies) sits outside every doc gate's scan roots although AGENTS.md declares itself the single instruction file. docs/adr has 11 files, no index; the tree cites 96 distinct ADR numbers (ADR-0049 1,321 times) that resolve only in objectstack.
  • A concrete collision this style produces: scripts/__tests__/changeset-release-action-ref-pin.test.ts pins the changesets/action SHA in prose while .github/dependabot.yml groups weekly github-actions bumps; run 40054697521's Test (shard 8/16) went red on it.

Recommendation

  • AGENTS.md to a normative core of at most about 250 lines: each rule once, with its instrument pointer (pnpm check:* / test name), no incident narrative; move the incident write-ups (stash collision, ref delete, FETCH_HEAD, GitHub byte rewriting, workflow registry) into docs/postmortems/ or the governed .claude/skills/objectui-contributor/guides/; move the local-dev / port / multi-stack procedure into console-development.md; fix the three stale claims in the same PR. (Governed surface.)
  • Workflows and scripts: a comment budget — one line of why plus a link; rationale lives in the ADR or the issue. Re-measure with the pattern above.
  • ROADMAP.md cut to at most 40 lines pointing at milestones and labels (drop its SCAN_ROOTS row in check-doc-links.mjs); delete docs/CONSOLE-STREAMLINING-SUMMARY.md and .github/prompts/; rename docs/ARCHITECTURE.md to what it is or fold it into content/docs/guide/architecture-overview.md; add a 20-line docs/adr/README.md saying numbers are allocated in objectstack.
  • Exempt changesets/action from the Dependabot group or have the pin test read the SHA from the one place both share.
  • Code comments going forward: invariants, not incident history (the history stays on the PR / issue). Existing comments are not swept — this is a rule for new writing, and it argues against part of the current 完善设计器的每一个细节 objectui#9 / [WIP] Update documentation for project objectui#11 practice, so it is the maintainer's call.

Benefit: roughly 20k fewer tokens of mandatory context per agent session (token count is 未实测 — a tokenizer over AGENTS.md settles it); thousands fewer governed lines to re-approve per workflow change; the pin-versus-prose class of red disappears.

Refs: objectui#7833, objectui#7800, objectui#12255, objectui#13008.

Filed by the read-only whole-repo review session https://claude.ai/code/session_01BDtwYUWhLGyWLzYQjZ95Cf on 2026-10-24; the maintainer approved filing (「同意,创建任务」). Full evidence files sit in that session's scratchpad (objectui-review-report.md, findings-*.md). ⛔ Not a claim; for triage to grade and route. Ruled; see the first line.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    Contributor

    Triage: first grade — documentation · priority:p3 · domain:devx · area:devpath · needs-user-decision · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-24T14:57Z

    ⛔ Not a claim, ⛔ not a dispatch. finding comes off.

    • For the maintainer: cut AGENTS.md to a normative core of about 250 lines, move the incident narrative out, and set a comment budget for workflows and scripts. These are rules-and-process changes on a governed surface. This is the same question as objectstack-ai/cloud#3194 for cloud.
    • Triage leaning: yes, on condition that every ⛔/"never" rule stays in the core file, moved verbatim. Fixing the three stale claims and cutting ROADMAP.md need no ruling and can go first.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    Contributor

    Director increment · batch objectstack-ai/objectui#390 item 2 · 2026-10-24T15:35Z

    Director seat, summon objectstack-ai/objectui#49 (session session_0162wFwDdLFGhaSvDdSnZ9Sx, account os-zhuang, in GOVERNED_APPROVERS — this seat submits no review and clicks nothing; written as objectstack-fleet[bot] through the relay; ledger #12708). ⛔ Not a ruling. The card carries no four-facet block; the block below is the seat's.

    Premise re-check (objectui origin/main 0984c77e1915): AGENTS.md 103,232 bytes, 630 lines; 53 lines carry ⛔ and 24 say "never" — the census a restructure must leave unchanged. ROADMAP.md 1,899 lines; header "Last Updated: May 6, 2026 · v3.3.2"; line 37 claims "80 Storybook stories" while .storybook is absent from the tree (control: AGENTS.md present). packages/console/dist is absent while AGENTS.md:587 names it. .github/prompts/ and docs/CONSOLE-STREAMLINING-SUMMARY.md are present; docs/postmortems/ and docs/adr/README.md are absent; package.json:204–205 pins file:.objectstack-pin/…. The gh CLI claim and the Dependabot group were not re-measured by this seat; the filer's readings stand as the filer's.

    Sibling ruling, inherited. cloud#3194 → A (ruling 6385321890, summon objectstack-ai/objectui#50 batch objectstack-ai/objectui#389 item 5, 2026-10-24): AGENTS.md becomes a core-rules file of at most 10 KB; every other section moves verbatim to topic pages (byte-preserving moves shown with git diff --color-moved, no sentence reworded); CLAUDE.md says the core plus its linked pages are the one instruction set. Under the skill's rule that a new branch of a ruled family reuses the mother ruling with its reasoning, the AGENTS.md half of this card takes those parameters as written. The objectui particulars — where the incident write-ups go (docs/postmortems/ or the governed .claude/skills/objectui-contributor/guides/) and the ≤250-line figure — are execution parameters of the same letter, not a semantic difference. The triage condition rides along: every ⛔ / "never" rule stays in the core verbatim, and the PR shows the 53 / 24 census unchanged.

    Needs no ruling (triage and seat agree): fixing the three stale claims; cutting ROADMAP.md to a short pointer file and dropping its SCAN_ROOTS row in check-doc-links.mjs; deleting docs/CONSOLE-STREAMLINING-SUMMARY.md and .github/prompts/; renaming or folding docs/ARCHITECTURE.md; a 20-line docs/adr/README.md; exempting changesets/action from the Dependabot group or reading the pinned SHA from one shared place. These ride the first PR; the AGENTS.md lines among them are Tier H and wait for the maintainer's approval as every governed change does.

    Left for the maintainer — two writing rules the mother ruling does not cover:

    Option What Cost
    A (recommended) Adopt both as prose rules in the new core: (i) in workflows and scripts a comment is one line of why plus a link, and the rationale lives in the ADR or the issue; (ii) code comments state invariants, not incident history — the history stays on the PR or the issue. No numeric budget, no new gate; the re-measure is the card's grep pattern, run by hand. Existing comments are not swept two lines in the core; 0 code
    B Restructure only; the writing rules stay as they are (the current objectstack-ai/objectui#9 / objectstack-ai/objectui#11 practice) 0

    Seat's recommendation: A. On ① both rules are what the mother ruling already does for AGENTS.md, applied one file down: a rule once, with its instrument pointer, and the story elsewhere. On ② every session pays the read (103 KB in full; the token count is unmeasured, the byte count is not), and the pin-versus-prose class already turned a test shard red (run 40054697521). On ③ an invariant in a comment is checkable and an incident narrative is not; A's risk is losing a regression's context, which is why the history stays on the PR and the pin tests read their SHA from one shared place. On ④ A adds no gate and no number — a comment budget as a gate would be a new gate, which the skill defaults to no, and the seat does not recommend one. Confidence gap: whether objectui's objectstack-ai/objectui#9 / objectstack-ai/objectui#11 comment practice is itself a maintainer ruling rather than current practice is unverified; if it is, B is the safer reading until the maintainer says otherwise.

    Workload: domain:devx lane · 2 PRs — PR 1 housekeeping and the stale claims (S; Tier H for the AGENTS.md lines); PR 2 the AGENTS.md restructure (M; Tier H; byte-preserving moves; ⛔ census before and after). Precedent: none landed (cloud#3194's PR is not yet open).

    os-decision-facets

    维护者速读

    AGENTS.md 拆成核心规则加主题页这一半,cloud 今天已经裁过 A(cloud#3194),objectui 这张直接继承、不用再裁,条件是所有 ⛔ 规则原文留在核心里(现在 53 行,拆完还得是 53 行)。剩下要您定的只有两条写法规则:工作流和脚本的注释只写一句为什么加一个链接;代码注释写不变量、不写事故史。席位意见 A(两条都采纳,写成规则,不加门禁、不定数字)。回 13455 A 或 B 即可。


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    Contributor

    Ruling: batch objectstack-ai/objectui#390 item 2 · letter A · maintainer 「13455 A」 2026-10-24T15:47Z

    Director seat, summon objectstack-ai/objectui#49 (session session_0162wFwDdLFGhaSvDdSnZ9Sx, account os-zhuang, in GOVERNED_APPROVERS — this seat submits no review and clicks nothing; written as objectstack-fleet[bot] through the relay; ledger #12708, opening mark 6377506702). The maintainer answered in the summon chat, verbatim: 「13455 A」, on the seat increment 6386101274 and the triage grade 6385702437.

    Governing text: cloud#3194 ruling 6385321890 (letter A: a core-rules AGENTS.md of at most 10 KB, every other section moved verbatim to topic pages, CLAUDE.md naming core plus linked pages as the one instruction set); objectui AGENTS.md:563 (a seat never submits an approving review on a governed-surface pull request); objectui CLAUDE.md ("AGENTS.md is the source of truth").

    What the ruling binds (letter A):

    1. The AGENTS.md half inherits cloud#3194 A as written. AGENTS.md (today 103,232 bytes, 630 lines at objectui origin/main 0984c77e1915) becomes a core-rules file of at most 10 KB — each rule once, with its instrument pointer (pnpm check:* / test name), one line per topic page — and every other section moves verbatim: incident write-ups to docs/postmortems/ or the governed .claude/skills/objectui-contributor/guides/, the local-dev / port / multi-stack procedure to console-development.md. Byte-preserving moves shown with git diff --color-moved; no sentence reworded. CLAUDE.md says the core plus its linked pages are the one instruction set. Condition (triage 6385702437, kept): every ⛔ and "never" rule stays in the core verbatim — the census is 53 ⛔ lines and 24 "never" lines today and must read the same after the move.
    2. Two writing rules enter the new core as prose, with no gate and no numeric budget: (i) in workflows and scripts a comment is one line of why plus a link; the rationale lives in the ADR or the issue; (ii) code comments state invariants, not incident history — the history stays on the PR or the issue. Existing comments are not swept; the re-measure is the card's grep pattern, run by hand. Not taken: B (restructure only, writing rules unchanged); a comment budget enforced as a gate (a new gate; not recommended, not ruled).
    3. Housekeeping, no ruling owed, rides the first PR: fix the three stale claims (packages/console/dist at AGENTS.md:587 — absent in the tree; the gh CLI claim; the pin path, package.json:204–205 reads file:.objectstack-pin/…); cut ROADMAP.md (1,899 lines, header May 6 2026, "80 Storybook stories" with no .storybook) to a pointer file of at most about 40 lines and drop its SCAN_ROOTS row in scripts/check-doc-links.mjs; delete docs/CONSOLE-STREAMLINING-SUMMARY.md and .github/prompts/; rename or fold docs/ARCHITECTURE.md; add a 20-line docs/adr/README.md saying numbers are allocated in objectstack; exempt changesets/action from the Dependabot group or have the pin test read the SHA from the one shared place.

    Workload of the letter: domain:devx lane · 2 PRs — PR 1 housekeeping and stale claims (S; Tier H for the AGENTS.md lines); PR 2 the AGENTS.md restructure (M; Tier H; byte-preserving moves; ⛔ / never census before and after). No landed precedent (cloud#3194's PR is not yet open). Both PRs wait for the maintainer's approval as governed changes.

    Execution: needs-user-decision → pm:queue in this act; priority:p3, domain:devx, area:devpath stay as triage set them. The lane dispatches PR 1 first, then PR 2.

    os-decision-facets

    • ① 项目长远合理性:规则一次、带仪器指针、事故史另放,与 cloud#3194 同形;两条写法规则把同一原则推到工作流、脚本和代码注释。
    • ② 实际业务拉动:每个会话强制读 103 KB;pin 与散文冲突已让一个测试分片变红。
    • ③ 防 AI 犯错:不变量可检查、事故叙事不可检查;历史留在 PR / issue 上,⛔ 规则逐字保留并数数。
    • ④ 创业阶段不扩散:不加门禁、不定数字预算;受管行数变少。

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Transferred 2026-10-26T03:59Z from objectstack-ai/objectui#13455, with its comments and timeline; the old URL redirects here. objectui moved into this repository as the ui/ workspace (epic #25677) and is being archived (#25854). The body is left exactly as filed.

    Paths. Read every repository path in the body with a ui/ prefix: packages/types/src is now ui/packages/types/src; .github/workflows is now ui/.github/workflows; packages/types is now ui/packages/types; apps/console is now ui/apps/console; docs/ARCHITECTURE.md is now ui/docs/ARCHITECTURE.md; docs/CONSOLE-STREAMLINING-SUMMARY.md is now ui/docs/CONSOLE-STREAMLINING-SUMMARY.md; .github/prompts is now ui/.github/prompts; docs/adr is now ui/docs/adr; and 3 more the same way.

    Not found under ui/ or at the root on main e167956e3f: packages/console/dist, scripts/__tests__/changeset-release-action-ref-pin.test.ts, docs/postmortems, docs/adr/README.md; re-check that premise before work starts.

    References. The bare issue numbers in the body were written in objectui and now resolve against this repository by mistake; read them as objectstack-ai/objectui#11.

    No stale pm:dispatched or assignee to strip.


    Generated by Claude Code

  5. 32 remaining items

  6. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Dispatched under claim 6497608495 · 2026-10-29T13:14Z: cloud session session_01QSeKYoC3JrEqdXJwZ69A8m (mode:cloud, TIER_DEFAULT), branch claude/issue-25919-ui-agents-core. The report comes back here as os-dev-report.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYoC3JrEqdXJwZ69A8m
    os-dev-report

    {
      "issue": 25919,
      "status": "done",
      "branch": "claude/issue-25919-ui-agents-core",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27576",
      "session": "session_01QSeKYoC3JrEqdXJwZ69A8m",
      "premise_still_valid": true,
      "summary": "PR 2 of #25919, draft #27576, labelled skip-changeset, with no assignees and no reviewers. ui/AGENTS.md is now a normative core: 36,140 B over 261 lines became 32,591 B over 221 lines at head dbb5e1cb, with no cap per 6485892110. Moved byte-preserving: the §9 'Local dev — console UI ↔ backend' and '每个 agent 独立测试栈' subsections went to guides/console-development.md under a new '## Local dev and per-agent stacks'. The 测试纪律 opening measurement paragraph, the 失败现场 and 顺手体检 bullets and the 前情 objectui#3010 line went to a new guides/flaky-tests.md. Each moved block left one pointer line in the core, and the objectui-contributor SKILL.md table gained a row for the new guide. §5 gained #12 (a workflow or script comment is one line of why plus a link) and #13 (code comments state invariants, not incident history), as prose with no gate. Five stale claims were fixed: the :3001 console port; the §7 plugin-msw bullet; the §2 styling.md path, now 'at the repository root'; §5 #8, now packages/app-shell/src/urlParams.ts; the §6 registry snippet, now the real Registry.ts path and class, and the renderer loop now calls ComponentRegistry.get. Census: 27 = 27 ⛔/never lines, all in the core. 26 are byte-identical; #8 differs only by the ordered 9-byte path prefix. The line set's bytes went from 16,789 to 16,798. check-agent-test-spelling's counter-example bullet (trap two) stayed in the core, so the script and its test were not edited.",
      "tests": "head f0fcb4cb (dbb5e1cb only merges origin/main 556f3230, which touches no ui path). pnpm --dir ui exec vitest run --maxWorkers=2 scripts/__tests__/check-skills-paths.test.ts scripts/__tests__/check-shell-escape-residue.test.ts scripts/__tests__/check-doc-links.test.ts → Test Files 3 passed (3), Tests 196 passed (196); the lock printed VERDICT command-exit 0. Under ui/: node scripts/check-skills-paths.mjs exit 0 ('86/87 stated path(s) resolve ... 1 baselined'). It was first red on the moved root-relative packages/console/dist token, which the gate resolves against ui/; the moved line now names the built Console as the @objectstack/console package's dist/. node scripts/check-shell-escape-residue.mjs exit 0. node scripts/check-doc-links.mjs exit 0 ('Links are valid across 14 scan roots'). Move proof: git diff --color-moved=plain over ui marks 103 of 134 changed lines as moved. A line comparison found every removed non-blank line re-added byte-identical except 9, and those 9 are exactly the listed stale-claim lines. No ablation: docs only, no tested behaviour changed.",
      "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 13 commands, each with its exit captured before any pipe: check-closing-keyword-parity 0; its --self-test 0; check-comment-mask-corpus 0; check:agent-test-spelling 0; check:driver-memory-census 0; check:gitlink-declared 0; check:nul-bytes 0; check:pm-governed-merges 0; check:published-files 0; check:refd-timer-probe 0; check:tier-file-adoption 0; check:undeclared-dep-imports 0; check:watch-hint-literal 0. --ran: '13 derived famil(ies) accounted for — 13 run, 0 NOT-MEASURED (a DERIVED zero ...)'. The first pass ran before pnpm install, and 4 families exited 3 (PREREQUISITE NOT MET); all 13 were re-run after the install. PR check-runs on dbb5e1cb at report time: 16 in_progress (the Lint · * and Type Check · * lanes), Check Changeset success, the rest skipped. CI convergence is in_progress.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0 — reads went through gh api (the card, its comments, PR #27576 read-back, check-runs); no MCP GitHub tool was called",
      "api_writes": "3 — git push of claude/issue-25919-ui-agents-core (git, not REST); relay pr_create run 40883212855 (POST /repos/objectstack-ai/objectstack/pulls draft + POST /issues/27576/labels skip-changeset; read-back 9857 B sent = stored, assignees none); this os-dev-report comment via scripts/pm/post-stamped.mjs",
      "open_questions": [
        {
          "question": "Ruling 6407900763 item 1 also says CLAUDE.md names the core plus its linked pages as the one instruction set. ui/CLAUDE.md is outside this claim's file surface and was not edited. Should it be?",
          "options": [
            "A: a one-line ui/CLAUDE.md follow-up on this PR, after the seat widens the surface (Tier H, same review)",
            "B: leave it. ui/CLAUDE.md already says AGENTS.md is the source of truth, and the core points to its pages"
          ],
          "recommendation": "A, because it is the ruling's literal text and costs one line in a PR that is already Tier H"
        },
        {
          "question": "The dispatch ordered both the §5 #8 path fix and '27 lines byte-identical'. #8 is a census line, so both cannot hold. I applied the fix, so 26 lines are byte-identical and 1 differs by 9 bytes. Is that the intended reading?",
          "options": [
            "A: keep the fix (as done)",
            "B: revert #8 to keep all 27 byte-identical and leave the stale path"
          ],
          "recommendation": "A, because the fix was ordered explicitly, and a stale path inside a ⛔ line misdirects every reader"
        },
        {
          "question": "Dispatch says every comment body opens with the signature line, but os-dev.md puts os-dev-report alone on the first line. post-stamped.mjs refuses a body whose first non-empty line is not the signature. Should os-dev.md be aligned?",
          "options": [
            "A: align os-dev.md: signature first, os-dev-report on the next line (as posted here)",
            "B: post-stamped.mjs exempts os-dev-report bodies"
          ],
          "recommendation": "A, because the tool enforces the signature mechanically, and the PM scan can key on the marker as the second line"
        }
      ],
      "out_of_scope_findings": [
        "class: a · reach: named producer — the published skills/objectui/guides/data-integration.md teaches 'import { MSWPlugin } from @objectstack/plugin-msw', and no such package exists in the workspace or as a dependency · evidence: no packages/plugins/*msw*, no msw in any package.json · dedupe words: plugin-msw, MSWPlugin, data-integration.md, mock server",
        "carrier: none — noted, not filed: the existing '### Rule #1: Official MSW Integration' in ui/.claude/skills/objectui-contributor/guides/console-development.md repeats the same nonexistent package (a sibling of the finding above; outside this card's fix list)",
        "carrier: none — noted, not filed: the docs/agents/build-and-test.md heading 'Which console :3001/_console serves' still names :3001; the root AGENTS.md links to it (root-side, outside this card's surface)",
        "carrier: none — noted, not filed: §7's surviving census line still says 'Verify the client baseUrl matches the mock server'. It stays verbatim under the census rule even though no mock server exists"
      ]
    }

    Generated by Claude Code

  8. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYoC3JrEqdXJwZ69A8m
    os-dev-report

    {
      "issue": 25919,
      "status": "done",
      "branch": "claude/issue-25919-ui-agents-core",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27576",
      "session": "session_01QSeKYoC3JrEqdXJwZ69A8m",
      "premise_still_valid": true,
      "summary": "Addendum to report 6498180390. This is the seat's patch round from session_01QSeKYmTYfaPbLQD4BJfomW: OQ1 → A, OQ2 → A, OQ3 noted. ui/CLAUDE.md was edited in one sentence, and it restates no rule. The new text: '**[AGENTS.md](./AGENTS.md) is the single source of truth for working under `ui/` — it and the topic pages it links to are one instruction set, maintained in one place; read it before your first edit.**'. Commit 1a085dc7, then origin/main 1ed33609 was merged at ccc751c5 (no rebase, no force) and pushed. ui/AGENTS.md and ui/.claude/** are byte-unchanged since dbb5e1cb, so the census still reads 27, and the §5 #8 path fix is kept. The PR body was not PATCHed; the changes it needs are in pr_body_changes_for_the_seat.",
      "tests": "head ccc751c5. The only new path is ui/CLAUDE.md, which no ui test reads. Under ui/: node scripts/check-doc-links.mjs exit 0; node scripts/check-shell-escape-residue.mjs exit 0, and that gate scans CLAUDE.md. The earlier ui vitest run (3 files, 196 tests passed) covered ui/AGENTS.md and ui/.claude, which this round did not touch.",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack on ccc751c5: the change set is now 5 paths (+ ui/CLAUDE.md), and the derived command set is identical to the earlier 13. Each exit was captured before any pipe and all are 0: check-closing-keyword-parity, its --self-test, check-comment-mask-corpus, check:agent-test-spelling, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:pm-governed-merges, check:published-files, check:refd-timer-probe, check:tier-file-adoption, check:undeclared-dep-imports, check:watch-hint-literal. --ran: '13 derived famil(ies) accounted for — 13 run, 0 NOT-MEASURED (a DERIVED zero ...)'. CI on ccc751c5 is in_progress at report time.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0 — no MCP GitHub tool called",
      "api_writes": "2 this round — git push dbb5e1cb..ccc751c5 (git, not REST); this addendum comment via scripts/pm/post-stamped.mjs (relay)",
      "pr_body_changes_for_the_seat": [
        "In '## 维护者速读', the 先看 line: after ③ `guides/flaky-tests.md`, add ';④ `ui/CLAUDE.md` 的一句话'.",
        "In '## What changes', under '**New text:**': add a bullet: '`ui/CLAUDE.md`: its one line now names `AGENTS.md` and the topic pages it links to as one instruction set, maintained in one place (6407900763 item 1; surface widened by the seat for this file only). No rule is restated there.'",
        "In '## Acceptance notes': delete the bullet that begins '**`ui/CLAUDE.md` is not edited.**'.",
        "In '### ⛔ / never census', replace the paragraph after the table with: '27 = 27: 26 lines byte-identical and in the same order, plus 1 that differs only by the ordered path fix. That line is §5 #8 (\"UI state lives where it can survive\"): its path `app-shell/src/urlParams.ts` gained the 9-byte prefix `packages/`, which is why the line set grows 16,789 → 16,798 bytes. The fix was ordered by the dispatch (reading 6455483141) because the old path does not resolve from `ui/`, and the seat kept it (OQ2 → A). No ⛔ / never line moved out of the core.' Also change the after row's head from `dbb5e1cb` to `ccc751c5`, which is byte-identical for ui/AGENTS.md.",
        "In '## Verification', the details summary: 'head f0fcb4cb' → 'head ccc751c5 (re-run after the ui/CLAUDE.md commit and the origin/main merge; same 13 commands, all exit 0)'."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: seat — the plugin-msw findings stay out of scope per the seat; the seat files the published-skill one (skills/objectui/guides/data-integration.md)"
      ]
    }

    Generated by Claude Code

  9. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    待裁:ui/AGENTS.md 核心 32.6 KB 收不收,两条 should-fix 现在修还是另开 PR · 2026-10-29T16:40Z

    一句话问题: PR #27576(head ccc751c5f6)把 ui/AGENTS.md 从 36,140 B 精简到 32,591 B,所有 ⛔/never 行都原样留在核心里。可是你的裁决 6485892110 说过,核心远超约 20 KB 的估计时要拿回来给你看,不能直接执行。席位派发时漏了这一步,现在补上。

    背景:

    • 分诊在这个 head 上做了达档契约复核,结论 PASS(6502595750),没有 must-fix。
    • 两条 should-fix:
      • S1:核心 §7 已改为「没有 MSW 集成,对着真实后端调试」。但它指向的 guides/console-development.md 里仍保留「Rule Add metamodel interfaces for ObjectQL/ObjectUI contract #1: Official MSW Integration」,SKILL.md 目录行也还写着「MSW debugging」。同一套指令前后矛盾。
      • S3:ui/CLAUDE.md 写「single source of truth for working under ui/」,与 ui/AGENTS.md 开头「根 AGENTS.md 优先」相冲突。
    • 复核把核心大小作为一个点名事项交给你,没有判 FAIL。

    Governing text: 裁决 6485892110:「the dev measures the resulting core before editing and reports the number in the PR; a number far above the thread's ~20 KB estimate is re-presented, not acted on」,以及「every ⛔ / never line stays whole and verbatim」。另有根 AGENTS.md #14:ui/AGENTS.md、ui/CLAUDE.md、ui/.claude/** 属 Tier H。

    协议: 不涉及 spec 或元数据协议。Clause-②: no。

    前提(带复核命令):

    1. ~20 KB 在这条裁决下做不到。§5「Coding Standards」15,644 B 和 §9「Operational Rules」8,217 B 承载了几乎全部 ⛔/never 行,两节合计 23.9 KB,本身就超过 20 KB。复核:git show ccc751c5f6:ui/AGENTS.md 后按 ^## 分节,量字节数。
    2. 不含 ⛔/never 的节只有 §3(1.5 KB)、§4(0.9 KB)、§6(1.0 KB)、§8(0.6 KB),合计约 4 KB。全部搬到专题页后,核心约 28.6 KB。复核:同上。

    选项 × 真实代价 × 工作量:

    选项 做什么 客户/团队可感知后果 工作量
    A 接受 32.6 KB 核心;在本 PR 修 S1 和 S3(约 3 行) agent 读到的这套指令不再自相矛盾;你只需批一次 devx · 同 PR 加一个小提交 · 由同一复核者做 delta 复核
    B 接受 32.6 KB,按现 head 合入;S1、S3 另开 PR 合入后 MSW 的矛盾说法继续存在,直到第二个 Tier H PR 落地;你要批两次 0,另加一张后续卡
    C 本 PR 再把 §3/§4/§6/§8 原样搬到专题页,同时修 S1、S3 核心约 28.6 KB,仍远超 20 KB;agent 首读少了包结构、协议、实现模式这些上下文,要多点一层 devx · 同 PR 搬约 4 KB · delta 复核

    业务含义:

    • A:说明书瘦身做完,把前后矛盾的那页一起改掉,一次验收。
    • B:先上线一本自相矛盾的说明书,以后再出勘误。
    • C:为了一个达不到的数字,把常用章节挪到附录。

    四轴:

    • 长远合理性(权重最高): A 让核心和专题页说法一致,符合「一套指令、一处维护」。B 留着已知矛盾。C 对长期维护没有额外好处,20 KB 的目标在「⛔ 行必须留在核心」下本就到不了。
    • 业务拉动: 这张卡的拉动是阅读成本:核心从 36.1 KB 降到 32.6 KB,⛔ 行一条不少。再降 4 KB,换来的是 agent 首读缺上下文,拉动不足。
    • 防 AI 犯错: A 消除「核心说没有 MSW,专题页教你用 MSW 插件」这种 AI 最容易照着做错的矛盾。B 把这个坑留着。C 与 A 同效,但多一层跳转。
    • 创业阶段不扩散: A 只改 3 行。B 多一张卡、多一个 PR、多一次人批。C 多搬 4 KB 内容。

    os-decision-facets
    ① 长远:A 一套指令无矛盾;B 留已知矛盾;C 追不可达目标
    ② 拉动:已减 3.5 KB 且 ⛔ 行全保;再减 4 KB 换首读缺上下文,拉动不足
    ③ 防错:A/C 消除 MSW 自相矛盾;B 留坑
    ④ 不扩散:A 三行同 PR;B 多一个 Tier H PR;C 多搬 4 KB
    Prior rulings read: 6407900763 items 1–3, 6435359095, 6485892110, reading 6455483141 (all on this card); ADR none; thread: 6502595750

    推荐:A。 只看①选 A;②③④ 是否翻转:否。置信缺口:节的大小是按 ^## 切分量的,节内有引用块,搬迁后的实际字节数可能有几百字节出入,不影响结论。

    裁后执行: 选 A,本席让 #25919 的 dev 会话在同一 PR 推 S1、S3 的修正,请分诊复核者 session_01L6bhgV4fMGJHSdSdx3u9mK 做 delta 复核。PASS 后写席位记录,请 os-zhuang / hotlong 批准。选 B,本席按现 head 写席位记录、请审批人,并立 S1、S3 后续卡。选 C,本席照 C 重派。


    Generated by Claude Code

  10. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Ruled: 6502668243 · letter A · 2026-10-29T16:55Z

    The maintainer ruled in devx seat 2's session (session_01QSeKYmTYfaPbLQD4BJfomW), through the seat's question on analysis 6502668243. The chosen option is quoted verbatim: 「A 收 32.6KB+本PR修 (Recommended)」. The option text read: 「接受 32.6 KB 核心;在同一 PR 修 S1、S3(约 3 行),由分诊复核者做 delta 复核,你只需批一次。」

    Recorded as:

    • The 32,591 B core is accepted against ruling 6485892110's size clause. This re-presentation is complete; under the verbatim ⛔/never rule the ~20 KB estimate is unreachable (§5 + §9 = 23.9 KB).
    • S1 and S3 from contract review 6502595750 are fixed in PR docs(ui): ui/AGENTS.md becomes a normative core; local-dev and flaky-test narrative move to the contributor guides #27576 itself:
      • S1: retitle guides/console-development.md's «Rule Add metamodel interfaces for ObjectQL/ObjectUI contract #1: Official MSW Integration» to say there is no MSW plugin, and point it at the 「Local dev and per-agent stacks」 section. Drop "MSW debugging" from the SKILL.md topic row.
      • S3: the ui/CLAUDE.md sentence says ui/AGENTS.md governs what differs under ui/, under the root AGENTS.md. No rule is restated.
    • The new head gets a delta review by the same reviewer, session_01L6bhgV4fMGJHSdSdx3u9mK. After a same-head PASS, the seat writes the seat record and requests os-zhuang and hotlong.

    The card returns from needs-user-decision to pm:dispatched in this act. Dev session session_01QSeKYoC3JrEqdXJwZ69A8m continues on branch claude/issue-25919-ui-agents-core.


    Generated by Claude Code

  11. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYoC3JrEqdXJwZ69A8m
    os-dev-report

    {
      "issue": 25919,
      "status": "done",
      "branch": "claude/issue-25919-ui-agents-core",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27576",
      "session": "session_01QSeKYoC3JrEqdXJwZ69A8m",
      "premise_still_valid": true,
      "summary": "Addendum 2 to report 6498180390: the S1 and S3 fixes from contract review 6502595750, under ruling 6503029051. New head 261449bcab (commit 261449bc on merge 9e875b51 of origin/main 4278c3b5; no rebase, no force). The core ui/AGENTS.md is 32,591 B before and after, byte-untouched this round, still 27 ⛔/never lines. No ⛔/never line was touched anywhere, and nothing was moved. S1, in guides/console-development.md § 'Debugging & Browser Simulation Strategy', fixed exactly three false statements. (1) The intro 'simulated browser environment (e.g., `apps/console` in mock mode)' is now 'the Console in a browser'. Measured: no source reads VITE_USE_MOCK_SERVER, which is set to false in .env.*, so the Console has no mock mode. (2) 'Rule #1: Official MSW Integration' is now 'Rule #1: No MSW plugin — debug against a real backend'. Its Startup bullet now says there is no @objectstack/plugin-msw package and no tracked package.json declares msw, and points to the 「Local dev and per-agent stacks」 section below. The sentence 'Do NOT write custom fetch interceptors or manual mock servers unless absolutely necessary.' is kept verbatim. Removed: the Configuration bullet (MSWPlugin baseUrl). (3) The Rule #2 Alignment bullet said 'matches the mock server's configuration'. It now says 'matches the backend the Console's `/api` proxy targets (`DEV_PROXY_TARGET`, `http://localhost:3000` by default)', per the vite.config.ts proxy. Rule #2 'Data Access' and all of Rule #3 are true and unchanged. SKILL.md topic row: 'MSW debugging' → 'debugging against a real backend'. S3: ui/CLAUDE.md now reads, verbatim from the reviewer's suggestion inside the link sentence: '**[AGENTS.md](./AGENTS.md) is the source of truth for what differs under `ui/` — it and the topic pages it links to are one instruction set, maintained in one place, under the root `AGENTS.md`; read it before your first edit.**'.",
      "tests": "head 261449bc. pnpm --dir ui exec vitest run --maxWorkers=2 scripts/__tests__/check-skills-paths.test.ts scripts/__tests__/check-shell-escape-residue.test.ts scripts/__tests__/check-doc-links.test.ts → Test Files 3 passed (3), Tests 196 passed (196); the lock printed VERDICT command-exit 0. ui: node scripts/check-skills-paths.mjs exit 0 ('85/86 stated path(s) resolve ... 1 baselined'). ui: node scripts/check-doc-links.mjs exit 0.",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack on 261449bc: 5 paths, the same 13 commands as before. Each exit was written to disk before any pipe, and all are 0: check-closing-keyword-parity, its --self-test, check-comment-mask-corpus, check:agent-test-spelling, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:pm-governed-merges, check:published-files, check:refd-timer-probe, check:tier-file-adoption, check:undeclared-dep-imports, check:watch-hint-literal. --ran: '13 derived famil(ies) accounted for — 13 run, 0 NOT-MEASURED (a DERIVED zero ...)'. Outside the derivation, run because the seat named them: pnpm check:pm-governed-prose exit 0; ui check:skills-paths exit 0. CI on 261449bc is in_progress at report time.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2 this round — git push ccc751c5..261449bc (git, not REST); this addendum via scripts/pm/post-stamped.mjs (relay)",
      "pr_body_changes_for_the_seat": [
        "In 'Stale claims fixed', add a 6th item: 'Contract-review S1 (6502595750, ruling 6503029051): console-development.md § Debugging & Browser Simulation Strategy no longer claims a mock mode or an MSW plugin. Rule #1 is retitled «No MSW plugin — debug against a real backend» and points to «Local dev and per-agent stacks». The MSWPlugin Configuration bullet is removed. Rule #2 Alignment now names the /api proxy target instead of a mock server. The SKILL.md row says «debugging against a real backend».'",
        "Replace the ui/CLAUDE.md wording given in the previous addendum with the S3 text: 'AGENTS.md is the source of truth for what differs under ui/ — it and the topic pages it links to are one instruction set, maintained in one place, under the root AGENTS.md'.",
        "In Acceptance notes, drop the console-development.md MSW part from the 'stale claims outside this card's list' bullet; the published skills/objectui/guides/data-integration.md part stays, and the seat files it.",
        "Census table, after row: the head becomes 261449bc (ui/AGENTS.md byte-identical, 32,591 B)."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none — noted, not filed: ui/apps/console/.env.* and vercel.json still set VITE_USE_MOCK_SERVER, which no source reads, and ui/apps/console/docs/deployment.md lists a 'vendor-msw' chunk. Both are dead remnants of the MSW era, outside this PR's surface"
      ]
    }

    Generated by Claude Code

  12. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    ACCEPT → PR #27576 comment 6504249950 · 2026-10-29T17:52Z · Tier H, awaiting approval from GOVERNED_APPROVERS (os-zhuang, hotlong requested). Contract review is PASS on the same head: delta 6504218316 of record 6502595750, under ruling 6503029051.


    Generated by Claude Code

  13. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Landed: PR 2, the ui/AGENTS.md restructure, via PR #27576, merged as 2feee8371a · 2026-10-29T20:27Z. The maintainer queued it (os-zhuang).

    The merged diff matches the reviewed head 261449bcab: the sorted +/− lines are hash-identical. ACCEPT → PR #27576 comment 6504249950. The contract reviews are 6502595750 and delta 6504218316, under ruling 6503029051.

    The ruled workload is complete, so this card closes as completed in this act:

    Cloud session session_01QSeKYoC3JrEqdXJwZ69A8m is archived in this act. pm:dispatched comes off; domain:* and area:* stay.

    Follow-ups filed from this card's PRs, all open: #27668 (ui/.claude/launch.json hard-coded path) and #27678 (the published skill still teaches @objectstack/plugin-msw).


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:devxpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions