Skip to content

14 internal issue-id references survive in generated skills/** artifacts — their source is packages/spec TSDoc, so the ruled strip could not reach them #11930

Description

@os-zhuang

Measured while implementing #11052 (the ruled strip of internal issue ids from the published catalog). Filed unassigned — out of that card's scope, which was the hand-authored corpus.

Sub-issue of #11052: same ruling, same citation kind, one source-layer over. The 2026-08-23 ruling was «strip the internal issue-id references from the published skill corpus»; these 14 sites are in that corpus but are not authored there.

What

After the strip, skills/** still carries 14 #NNNN references, all in generator-owned files:

3  skills/objectstack-data/references/_index.md          #4410 ×2, #6345
3  skills/objectstack-platform/references/_index.md      #4410 ×2, #6345
3  skills/objectstack-ui/contracts/react-blocks.contract.json   #11284 ×2, #4413
3  skills/objectstack-ui/references/react-blocks.md      #11284 ×2, #4413
1  skills/objectstack-automation/references/_index.md    #4661
1  skills/objectstack-i18n/references/_index.md          #4001

Every one of these files says so in its own header — > **Auto-generated** — do not edit for _index.md, {/* GENERATED by packages/spec/scripts/build-react-blocks-contract.ts — do not edit. */} for the react-blocks pair.

Why the cleanup PR did not fix them

The ids are not written in skills/. They are projected from .describe() / TSDoc text in packages/spec/src/** by gen:skill-refs and gen:react-blocks. So the fix is a spec-source edit plus a regeneration, and that has a materially wider blast radius than the card it would have ridden on:

Doing it inside the cleanup PR would have been an unmeasured widening riding on a measured card, so it was deliberately left and exempted by path in the new gate, with the reason recorded in scripts/check-doc-authoring.mjs next to the exemption rather than left implicit. The exemption is exact: 9 _index.md + 1 react-blocks.md, each verified to carry a generated marker, leaving 38 of the 48 .md files in scope.

What a card here would do

  1. Strip the ids from the source .describe() / TSDoc in packages/spec/src/** (keeping the teaching, per the 2026-08-12 ruling: 「处理 issue 时犯的错应该总结成经验,保留 issue id没有意义」), then regenerate.
  2. Decide whether the doc-authoring gate's GENERATED_SKILL_ARTIFACTS exemption can then be narrowed or removed — once the source is clean the generated files are clean, and keeping a permanent exemption over a surface that no longer needs one is how the next id gets in unseen.
  3. Consider whether the ban belongs on the spec-source side too, where the text is actually authored — that is the only place a regeneration cannot reintroduce it from.

⚠️ skills/** and the generated artifacts under it are a governed surface, so whatever lands here is draft + human merge.

Activity

  1. added theissue type on Aug 25, 2026
  2. claude commented on Aug 25, 2026

    @claude
    Contributor

    Triage: lands in packages/spec/src/** .describe()/TSDoc text plus regeneration (gen:skill-refs, gen:react-blocks); domain:spec (spec prose face). → pm:queue, Task — inherits the 2026-08-23 strip ruling through #11052 (same ruling, one source layer over; sub-issue linkage already in the body). Clause-②: no (prose-only describe edits, accept/reject unchanged) — but the same strings feed customer docs via build-docs.ts, so the PR must carry the full regen set and the gate families the card names. Hard serial: #11052 is in flight (pm:dispatched) on the same generated artifacts — this card dispatches only after its PR lands.


    Generated by Claude Code

  3. self-assigned this
    on Aug 25, 2026
  4. os-litant commented on Aug 25, 2026

    @os-litant
    Contributor

    Claim: PM loop round R6
    Session: session_01NDGG54XF5gbTLdQzCtnaVV
    Branch: claude/issue-11930-strip-issue-ids-tsdoc
    Worktree: objectstack-issue-11930
    Domain: domain:spec
    File surface: TSDoc/describe lines in packages/spec/src/{conversions,data,ui,automation,ai,api} + regenerated skills/** artifacts (gen:skill-refs, gen:react-blocks) + scripts/check-doc-authoring.mjs exemption tightening + changeset (stop on breach; explain in the report)
    Container & model: M, mode:subagent, model: opus — dispatch-gates 2026-08-25 @0b04839: "no path-derived mandate … The tier stays the PM's per-card judgment call (floor sonnet · default opus · ceiling fable)"; multi-file editorial rewrite + gate-exemption reassessment ⇒ default opus
    Clause-②: no
    Serial constraints cleared: sources disjoint from batch siblings (action.zod.ts / component.zod.ts / error-code-ledger.zod.ts / contracts/email-service.ts / migrations untouched); skills/** regen sole in batch; scripts/check-doc-authoring.mjs sole writer (in-flight PR #11908 edits a different detector). Net-line budget: skills/** ≤ +0, spec TSDoc ≤ +30, scripts ≤ +10. Governed surface (skills/**) ⇒ PR stays draft for human merge. No pin assertions on sibling behavior.


    Generated by Claude Code

  5. os-litant commented on Aug 25, 2026

    @os-litant
    Contributor

    Serial-constraint addendum to the R6 claim above (session session_01NDGG54XF5gbTLdQzCtnaVV): the triage comment's hard serial — "#11052 is in flight on the same generated artifacts" — is verified CLEARED before dispatch: #11052 CLOSED (completed) 2026-08-25T03:28Z via PR #11931 MERGED ("Strip internal issue-id references from the published skill catalog, and gate their return"). Consequence folded into the dispatch order: the source-strip here must regenerate against post-#11931 main and align the exemption tightening with the gate that PR added — no second gate.


    Generated by Claude Code

  6. os-litant commented on Aug 25, 2026

    @os-litant
    Contributor

    File-surface addendum to the R6 claim above (session session_01NDGG54XF5gbTLdQzCtnaVV), filed as the claim is extended rather than after the fact.

    The dispatched surface named packages/spec/src/{conversions,data,ui,automation,ai,api}. That directory list was derived from the filing's source attribution, and reverse-looking-up each of the 14 generated sites to its real source line disproves part of it. Two of the six real sources sit outside the named directories:

    • packages/spec/src/shared/retry-policy.zod.ts — the #4661 in objectstack-automation/references/_index.md
    • packages/spec/src/system/translation.zod.ts — the #4001 in objectstack-i18n/references/_index.md

    (The other four are in-surface: data/driver/common.zod.ts, data/driver/config-registry.zod.ts, data/driver/turso.zod.ts, ui/react-blocks.ts.)

    Both are taken in place, and the claimed file surface is amended to include them. Same defect class as the card, mechanical rewrite whose correct form is pinned by the 2026-08-23 ruling, same gate families, no new verification surface, and no other in-flight claim holds either file — checked against the open-PR list. Stopping on the two would have delivered a card that closes 12 of its own 14 sites because a guess named the wrong directory.

    Also now in the diff, from the same source edit reaching the docs site via build-docs.ts: content/docs/references/data/driver-common.mdx and driver-turso.mdx. The full regen set was called for at dispatch; naming the two files it actually moved.

    Not touched, and flagged for routing rather than taken: scripts/check-ratchet-remedy-authority.mjs carries a why string for check-doc-authoring.mjs that names GENERATED_SKILL_ARTIFACTS, the constant this PR removes. The gate itself stays green (its verdict rests on the other declarations, and it was run), but the prose now names a symbol that no longer exists. PR #12061 is in flight on exactly that file and is itself marked blocked on a recorded verdict, so the one-clause repair should ride whichever of the two lands second rather than be raced here.


    Generated by Claude Code

  7. os-litant commented on Aug 25, 2026

    @os-litant
    Contributor
    {
      "issue": 11930,
      "status": "done",
      "branch": "claude/issue-11930-strip-issue-ids-tsdoc",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/12097",
      "premise_still_valid": true,
      "premise_notes": "Core premise HELD, measured on origin/main f7b25c5 before any edit: exactly 14 `#NNNN` refs under skills/**, matching the filing's per-file counts (data/_index 3, platform/_index 3, ui contracts 3, ui references 3, automation/_index 1, i18n/_index 1). PM mechanical assumption 2 (source attribution) FALSIFIED in 3 of 6: #4410/#6345 are in data/driver/{common,config-registry,turso}.zod.ts, NOT conversions/registry.ts or data/datasource*; #4661 is in shared/retry-policy.zod.ts, NOT automation/control-flow.zod.ts or flow.zod.ts; #4001 is in system/translation.zod.ts, NOT ai/agent.zod.ts, ai/skill.zod.ts or api/endpoint.zod.ts. Only #11284/#4413 -> ui/react-blocks.ts was correct. Acceptance set used was the 14 artifact sites, per dispatch.",
      "summary": "Stripped all 14 internal issue-id references projected into skills/** from packages/spec TSDoc, and removed the doc-authoring gate's by-path exemption that had covered them. Six source sites rewritten to keep the teaching without the citation (2026-08-12 ruling), then gen:skill-refs, gen:react-blocks and gen:docs regenerated; skills/** now measures 0 refs. The GENERATED_SKILL_ARTIFACTS exemption in scripts/check-doc-authoring.mjs is deleted rather than narrowed - it existed only because those files still carried projected ids - and its 'wrong repo layer' objection is answered in the failure text, which now directs a red on a generated file to the spec source plus a regen. Aligned with the gate PR 11931 landed; no second gate added, and the filing's step-3 spec-source-side ban is deliberately NOT implemented (it would be the second gate the dispatch forbids).",
      "gates": {
        "derivation": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (script reads its own merge-base diff; --repo assertion held against origin)",
        "families_derived": 44,
        "families_named_at_dispatch": 14,
        "green_at_sha": "d1a56ba",
        "all_derived_families_green": true,
        "also_green": ["spec check:skill-refs", "spec check:react-blocks", "spec check:docs", "spec check:generated", "spec check:skill-docs", "spec check:authorable-surface", "spec check:api-surface", "check-doc-authoring --self-test", "check-ratchet-remedy-authority", "check-skills-token-ratchet", "check:nul-bytes", "spec typecheck"],
        "not_run_or_not_applicable": {
          "check:react-declaration-parity": "refuses with 'MANIFEST is not set - this gate did NOT run'; needs an objectui manifest dump plus a browser, exits before reading the diff, and is not in the derived family list for this card",
          "check-dev-prereqs.mjs": "reports 66 of 67 workspace packages unbuilt - measures the container's build state, not the diff; this change adds no package, edits no package.json and produces no build output, so it cannot move that verdict either way",
          "pnpm lint (repo-wide)": "not run - CI owns the farm run"
        },
        "prerequisite_refusals_then_green": "check:doc-formula-expressions and check:doc-security-posture first exited 1 with 'PREREQUISITE NOT MET - the workspace package is not built' (their own text: 'Nothing was measured'). Both green after pnpm --filter '@objectstack/lint...' build."
      },
      "line_budget": {
        "skills_net_lines": 0,
        "skills_budget": "<= +0",
        "skills_net_tokens": -29,
        "spec_src_net_lines": 1,
        "spec_src_budget": "<= +30",
        "scripts_net_lines": 10,
        "scripts_budget": "<= +10",
        "scripts_note": "first draft came to +16 and was compressed to fit; budget was NOT raised",
        "per_changed_skill_file_lines_before_after": {
          "objectstack-automation/references/_index.md": "44 -> 44",
          "objectstack-data/references/_index.md": "65 -> 65",
          "objectstack-i18n/references/_index.md": "35 -> 35",
          "objectstack-platform/references/_index.md": "62 -> 62",
          "objectstack-ui/contracts/react-blocks.contract.json": "559 -> 559",
          "objectstack-ui/references/react-blocks.md": "117 -> 117"
        },
        "whole_package_SKILL_md": "10505 -> 10505 lines (net 0), 117716 -> 117716 tokens (net 0); no SKILL.md touched",
        "whole_skills_tree": "17849 -> 17849 lines (net 0), 187951 -> 187922 tokens (net -29)"
      },
      "deviations": [
        "FILE SURFACE (declared, addendum comment posted before the PR): two of the six real sources sit outside the dispatched packages/spec/src/{conversions,data,ui,automation,ai,api} - shared/retry-policy.zod.ts and system/translation.zod.ts. Taken in place under the bounded in-place exemption: same defect class, mechanical rewrite pinned by the 2026-08-23 ruling, same gate families, no new verification surface, and no other in-flight claim holds either file (checked against the open-PR list). Stopping would have closed 12 of the card's own 14 sites because a guess named the wrong directory.",
        "REGEN SET: content/docs/references/data/driver-common.mdx and driver-turso.mdx also change - the same source edit reaching the docs site via build-docs.ts. Anticipated by the dispatch's full-regen instruction; naming the two files it actually moved.",
        "NOT TOUCHED (condition 3 fails): scripts/check-ratchet-remedy-authority.mjs has a `why` string naming GENERATED_SKILL_ARTIFACTS, the constant this PR removes. Gate stays green (run, verdict rests on the other declarations) but the prose goes stale. PR 12061 is in flight on that exact file and is itself marked blocked on a recorded verdict, so it was left rather than raced. Filed as 12095 with the ordering note.",
        "CHANNEL: the prescribed REST list-endpoint channel is NOT reachable from this seat - curl to api.github.com returns 'GitHub access is not enabled for this session' and GITHUB_TOKEN is a 14-char placeholder. Dedupe search and the PR-list check therefore went through the MCP tools; the first search_issues call failed with 'API rate limit already exceeded', succeeded on retry. Flagging because the dispatch protocol assumes REST is available here."
      ],
      "files_changed": {
        "count": 16,
        "additions": 94,
        "deletions": 51,
        "spec_src": ["packages/spec/src/data/driver/common.zod.ts", "packages/spec/src/data/driver/config-registry.zod.ts", "packages/spec/src/data/driver/turso.zod.ts", "packages/spec/src/shared/retry-policy.zod.ts", "packages/spec/src/system/translation.zod.ts", "packages/spec/src/ui/react-blocks.ts"],
        "generated_skills": ["skills/objectstack-automation/references/_index.md", "skills/objectstack-data/references/_index.md", "skills/objectstack-i18n/references/_index.md", "skills/objectstack-platform/references/_index.md", "skills/objectstack-ui/contracts/react-blocks.contract.json", "skills/objectstack-ui/references/react-blocks.md"],
        "generated_docs": ["content/docs/references/data/driver-common.mdx", "content/docs/references/data/driver-turso.mdx"],
        "scripts": ["scripts/check-doc-authoring.mjs"],
        "changeset": [".changeset/skill-catalog-projected-issue-ids.md"]
      },
      "tests": "Verdicts read from each gate's own printed line with exit codes captured before any pipe (cmd > log 2>&1; EXIT=$?), never from a piped $?. (1) Premise: grep -rnoE '#[0-9]{3,5}([^0-9a-zA-Z]|$)' skills/ = 14 before, 0 after; a naive '#[0-9]{3,5}' scan gives 17 both times, the extra 3 being the hex colours #6366f1 / #4169E1 / #3498db. (2) On-disk proof of every edit before regenerating: per-pattern grep -c of both the removed text (7 patterns -> 0 files) and the injected text (8 patterns -> >=1 each), plus git diff --stat; one counter pattern ('this file (#4001)') was too loose and matched a sibling 'Shared history for this file (#4001).' family in 11 other spec files - re-checked directly and the target line in system/translation.zod.ts is confirmed stripped, the 11 siblings project nowhere under skills/** and were left. (3) Build then regen under the shared lock: pnpm --filter @objectstack/spec build EXIT=0, then gen:skill-refs ('Generated 9 files'), gen:react-blocks ('Generated 2 files'), gen:docs ('Generated 229 files'). (4) Freshness --check variants all EXIT=0: check:skill-refs, check:react-blocks, check:docs, check:generated, check:skill-docs, check:authorable-surface, check:api-surface. (5) 44/44 derived gate families EXIT=0. (6) node scripts/check-doc-authoring.mjs --self-test EXIT=0, including the two rewritten pins ('the generated references/_index.md is IN scope (no exemption)') and the new plant case, which writes '#4410' into a generated _index.md and asserts the scan reds with red.length 1 naming that file - the reverse proof that dropping the exemption changed behaviour rather than only the file list. (7) pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 -> 'Test Files  425 passed (425)' / 'Tests  11321 passed (11321)'. (8) spec typecheck EXIT=0. (9) check:nul-bytes EXIT=0 plus a direct grep -naP over all edited files for raw control bytes (no hits). No ablation was performed: nothing here changes a runtime code path, so there is no guard whose removal would be meaningful to measure - the plant case in (6) is the equivalent reverse proof for the one behaviour change.",
      "open_questions": [],
      "out_of_scope_findings": [
        "filed as #12094: build-skill-references.ts still selects the FIRST JSDoc block anywhere in a file as its published description - the ordering defect build-docs.ts already fixed by moving to findModuleDocBlock() in lib/file-description.ts. Live victim is system/translation.zod.ts, whose skill-reference entry publishes the docblock of a private TRANSLATION_HISTORY constant ('Shared history sentence for every shape in this file.') instead of a Translation-protocol description; the docs site does not have this for the same file, which is the cleanest proof the two generators disagree. check:skill-refs cannot see it - it compares the artifact against what the generator produces, so it reproduces the wrong block faithfully.",
        "filed as #12095: check-ratchet-remedy-authority.mjs's `why` for check-doc-authoring.mjs names GENERATED_SKILL_ARTIFACTS, removed by this PR. Not a red; prose only. Carries a Blocked-by note - should ride whichever lands second of this PR and #12061."
      ]
    }

    Draft PR #12097 is open against main and stays draft: skills/** is a governed surface, so it is human-merge by rule. Gate status at report time is whatever CI has reached — this report is filed at draft-PR time per the 2026-08-10 ruling, and CI convergence is the PM's read, not this seat's.


    Generated by Claude Code

  8. os-litant commented on Aug 25, 2026

    @os-litant
    Contributor

    os-dev-report

    Supersedes the previous comment, which carried the same JSON: its leading HTML-comment marker did not survive the body sanitizer (verified by reading the stored comment back — it begins at the code fence), so the PM's scan could not have seen it. Re-filed with the literal-text marker. This is the authoritative copy; the payload is byte-identical apart from this note.

    {
      "issue": 11930,
      "status": "done",
      "branch": "claude/issue-11930-strip-issue-ids-tsdoc",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/12097",
      "premise_still_valid": true,
      "premise_notes": "Core premise HELD, measured on origin/main f7b25c5 before any edit: exactly 14 issue-id refs under skills/**, matching the filing's per-file counts (data/_index 3, platform/_index 3, ui contracts 3, ui references 3, automation/_index 1, i18n/_index 1). PM mechanical assumption 2 (source attribution) FALSIFIED in 3 of 6: 4410/6345 are in data/driver/{common,config-registry,turso}.zod.ts, NOT conversions/registry.ts or data/datasource*; 4661 is in shared/retry-policy.zod.ts, NOT automation/control-flow.zod.ts or flow.zod.ts; 4001 is in system/translation.zod.ts, NOT ai/agent.zod.ts, ai/skill.zod.ts or api/endpoint.zod.ts. Only 11284/4413 to ui/react-blocks.ts was correct. Acceptance set used was the 14 artifact sites, per dispatch.",
      "summary": "Stripped all 14 internal issue-id references projected into skills/** from packages/spec TSDoc, and removed the doc-authoring gate's by-path exemption that had covered them. Six source sites rewritten to keep the teaching without the citation (2026-08-12 ruling), then gen:skill-refs, gen:react-blocks and gen:docs regenerated; skills/** now measures 0 refs. The GENERATED_SKILL_ARTIFACTS exemption in scripts/check-doc-authoring.mjs is deleted rather than narrowed - it existed only because those files still carried projected ids - and its 'wrong repo layer' objection is answered in the failure text, which now directs a red on a generated file to the spec source plus a regen. Aligned with the gate PR 11931 landed; no second gate added, and the filing's step-3 spec-source-side ban is deliberately NOT implemented (it would be the second gate the dispatch forbids).",
      "gates": {
        "derivation": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (script reads its own merge-base diff; --repo assertion held against origin)",
        "families_derived": 44,
        "families_named_at_dispatch": 14,
        "green_at_sha": "d1a56ba",
        "all_derived_families_green": true,
        "also_green": ["spec check:skill-refs", "spec check:react-blocks", "spec check:docs", "spec check:generated", "spec check:skill-docs", "spec check:authorable-surface", "spec check:api-surface", "check-doc-authoring --self-test", "check-ratchet-remedy-authority", "check-skills-token-ratchet", "check:nul-bytes", "spec typecheck"],
        "not_run_or_not_applicable": {
          "check:react-declaration-parity": "refuses with 'MANIFEST is not set - this gate did NOT run'; needs an objectui manifest dump plus a browser, exits before reading the diff, and is not in the derived family list for this card",
          "check-dev-prereqs.mjs": "reports 66 of 67 workspace packages unbuilt - measures the container's build state, not the diff; this change adds no package, edits no package.json and produces no build output, so it cannot move that verdict either way",
          "pnpm lint (repo-wide)": "not run - CI owns the farm run"
        },
        "prerequisite_refusals_then_green": "check:doc-formula-expressions and check:doc-security-posture first exited 1 with 'PREREQUISITE NOT MET - the workspace package is not built' (their own text: 'Nothing was measured'). Both green after pnpm --filter '@objectstack/lint...' build."
      },
      "line_budget": {
        "skills_net_lines": 0,
        "skills_budget": "at most +0",
        "skills_net_tokens": -29,
        "spec_src_net_lines": 1,
        "spec_src_budget": "at most +30",
        "scripts_net_lines": 10,
        "scripts_budget": "at most +10",
        "scripts_note": "first draft came to +16 and was compressed to fit; budget was NOT raised",
        "per_changed_skill_file_lines_before_after": {
          "objectstack-automation/references/_index.md": "44 then 44",
          "objectstack-data/references/_index.md": "65 then 65",
          "objectstack-i18n/references/_index.md": "35 then 35",
          "objectstack-platform/references/_index.md": "62 then 62",
          "objectstack-ui/contracts/react-blocks.contract.json": "559 then 559",
          "objectstack-ui/references/react-blocks.md": "117 then 117"
        },
        "whole_package_SKILL_md": "10505 then 10505 lines (net 0), 117716 then 117716 tokens (net 0); no SKILL.md touched",
        "whole_skills_tree": "17849 then 17849 lines (net 0), 187951 then 187922 tokens (net -29)"
      },
      "deviations": [
        "FILE SURFACE (declared, addendum comment posted before the PR): two of the six real sources sit outside the dispatched packages/spec/src/{conversions,data,ui,automation,ai,api} - shared/retry-policy.zod.ts and system/translation.zod.ts. Taken in place under the bounded in-place exemption: same defect class, mechanical rewrite pinned by the 2026-08-23 ruling, same gate families, no new verification surface, and no other in-flight claim holds either file (checked against the open-PR list). Stopping would have closed 12 of the card's own 14 sites because a guess named the wrong directory.",
        "REGEN SET: content/docs/references/data/driver-common.mdx and driver-turso.mdx also change - the same source edit reaching the docs site via build-docs.ts. Anticipated by the dispatch's full-regen instruction; naming the two files it actually moved.",
        "NOT TOUCHED (bounded-fix condition 3 fails): scripts/check-ratchet-remedy-authority.mjs has a why string naming GENERATED_SKILL_ARTIFACTS, the constant this PR removes. Gate stays green (run; verdict rests on the other declarations) but the prose goes stale. PR 12061 is in flight on that exact file and is itself marked blocked on a recorded verdict, so it was left rather than raced. Filed as 12095 with the ordering note.",
        "CHANNEL: the prescribed REST list-endpoint channel is NOT reachable from this seat - curl to api.github.com returns 'GitHub access is not enabled for this session' and GITHUB_TOKEN is a 14-char placeholder. Dedupe search and the PR-list check therefore went through the MCP tools; the first search_issues call failed with 'API rate limit already exceeded', succeeded on retry. Flagging because the dispatch protocol assumes REST is available here.",
        "REPORT MARKER: the HTML-comment marker was stripped by the body sanitizer on the first report comment; re-filed with the literal-text marker after reading the stored comment back."
      ],
      "files_changed": {
        "count": 16,
        "additions": 94,
        "deletions": 51,
        "spec_src": ["packages/spec/src/data/driver/common.zod.ts", "packages/spec/src/data/driver/config-registry.zod.ts", "packages/spec/src/data/driver/turso.zod.ts", "packages/spec/src/shared/retry-policy.zod.ts", "packages/spec/src/system/translation.zod.ts", "packages/spec/src/ui/react-blocks.ts"],
        "generated_skills": ["skills/objectstack-automation/references/_index.md", "skills/objectstack-data/references/_index.md", "skills/objectstack-i18n/references/_index.md", "skills/objectstack-platform/references/_index.md", "skills/objectstack-ui/contracts/react-blocks.contract.json", "skills/objectstack-ui/references/react-blocks.md"],
        "generated_docs": ["content/docs/references/data/driver-common.mdx", "content/docs/references/data/driver-turso.mdx"],
        "scripts": ["scripts/check-doc-authoring.mjs"],
        "changeset": [".changeset/skill-catalog-projected-issue-ids.md"]
      },
      "tests": "Verdicts read from each gate's own printed line, with exit codes captured before any pipe (cmd redirected to a log, then EXIT=$?), never from a piped $?. (1) Premise: the strict issue-id grep over skills/ returns 14 before and 0 after; a naive scan returns 17 both times, the extra 3 being the hex colours 6366f1 / 4169E1 / 3498db. (2) On-disk proof of every edit before regenerating: per-pattern grep -c of both the removed text (7 patterns, 0 files each) and the injected text (8 patterns, at least 1 each), plus git diff --stat; one counter pattern was too loose and matched a sibling 'Shared history for this file' family in 11 other spec files - re-checked directly, the target line in system/translation.zod.ts is confirmed stripped, and those 11 siblings project nowhere under skills/** and were left. (3) Build then regen under the shared lock: spec build EXIT=0, then gen:skill-refs ('Generated 9 files'), gen:react-blocks ('Generated 2 files'), gen:docs ('Generated 229 files'). (4) Freshness check variants all EXIT=0: check:skill-refs, check:react-blocks, check:docs, check:generated, check:skill-docs, check:authorable-surface, check:api-surface. (5) 44 of 44 derived gate families EXIT=0. (6) check-doc-authoring --self-test EXIT=0, including the two rewritten pins ('the generated references/_index.md is IN scope (no exemption)') and a new plant case that writes an id into a generated _index.md and asserts the scan reds with one violation naming that file - the reverse proof that dropping the exemption changed behaviour rather than only the file list. (7) spec vitest: 'Test Files  425 passed (425)' / 'Tests  11321 passed (11321)'. (8) spec typecheck EXIT=0. (9) check:nul-bytes EXIT=0 plus a direct control-byte grep over every edited file (no hits). No ablation was performed: nothing here changes a runtime code path, so there is no guard whose removal would be meaningful to measure; the plant case in (6) is the equivalent reverse proof for the one behaviour change.",
      "open_questions": [],
      "out_of_scope_findings": [
        "filed as #12094: build-skill-references.ts still selects the FIRST JSDoc block anywhere in a file as its published description - the ordering defect build-docs.ts already fixed by moving to findModuleDocBlock() in lib/file-description.ts. Live victim is system/translation.zod.ts, whose skill-reference entry publishes the docblock of a private TRANSLATION_HISTORY constant instead of a Translation-protocol description; the docs site does not have this for the same file, which is the cleanest proof the two generators disagree. check:skill-refs cannot see it - it compares the artifact against what the generator produces, so it reproduces the wrong block faithfully.",
        "filed as #12095: check-ratchet-remedy-authority.mjs's why entry for check-doc-authoring.mjs names GENERATED_SKILL_ARTIFACTS, removed by this PR. Not a red; prose only. Carries a Blocked-by note - should ride whichever lands second of this PR and #12061."
      ]
    }

    Draft PR #12097 is open against main and stays draft: skills/** is a governed surface, so it is human-merge by rule. This report is filed at draft-PR time per the 2026-08-10 ruling; CI convergence is the PM's read, not this seat's.


    Generated by Claude Code

  9. os-litant commented on Aug 25, 2026

    @os-litant
    Contributor

    ACCEPT — PR #12097 (R6, reviewer of record: spec seat, session session_01NDGG54XF5gbTLdQzCtnaVV).

    Checklist conclusion (verified against GitHub + a local git diff of the branch, not the report): draft ✓ · base main ✓ · Fixes #11930 first line ✓ · 16 files +94/−51 = the reported set ✓. Spot readings: the six spec-src diffs touch only comment lines and description:/summary: string literals (independent local-diff filter — zero schema/shape/validation tokens moved); all 14 artifact sites now id-free with the hex-color false-positive family correctly excluded; GENERATED_SKILL_ARTIFACTS exemption deleted with a plant-case self-test proving the scan now REDS an id in a generated _index.md (behavior change proven, not just file-list change). Whole-package value density: net −29 tokens across the published tree, zero SKILL.md lines moved — the corpus got strictly cheaper for every customer session. Budgets: skills ≤+0 met (0), spec src +1/≤30, scripts +10/≤10 (compressed to fit, budget not raised ✓).

    PM attribution correction, owned publicly: dispatch assumption 2 guessed source directories from grep hits and was wrong in 3 of 6 attributions (real sources: data/driver/{common,config-registry,turso}.zod.ts, shared/retry-policy.zod.ts, system/translation.zod.ts). The dev's declared in-place deviation for the two files outside the dispatched directory set is accepted — the acceptance set was always the 14 artifact sites, the addendum was posted before the PR, and no in-flight claim held either file. Out-of-scope findings #12094 / #12095 verified filed, unassigned, with #12095 carrying the correct land-second ordering against #12061.

    Contract review (clause-② gate, path leg: packages/spec/src/**): fuse reading get_session.external_metadata.last_served_model = claude-fable-5 = CONTRACT_REVIEW_TIER (this seat, self-dispatched-card path). Verdict: PASS — prose-only in contract sources; the legal-metadata set and accept/reject behaviour are unchanged; the only behaviour change is a GATE getting stricter (exemption removal), which is not a contract-surface change. Clearing needs:contract-review both carriers in this write batch.

    Path fork: the diff touches skills/** — a governed surface. Terminal four-piece applies: this PR stays draft and is never enqueued by this seat; review requested from os-zhuang; it goes on the round report's "awaiting a human merge" list. Human merge is the review record.


    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

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions