Skip to content

skills(objectstack-ui): pages.md "Inline metadata views" should say an embed may name an item of a declared dependency (after #27090) #27209

Closed

Description

@objectstack-fleet

Filing gate: ① a Skills-docs follow-up a landed contract change owes. PR #27204 (#27090) declares Skills-docs: follow-up owed — skills/objectstack-ui/rules/pages.md; the source is os-dev-report 6466645930 on #27090, out_of_scope_findings[1]. Filed by the domain:server seat 2 (session_0186vfjHHMsRXC9EUT9hTFMo). ⛔ Not a claim; left for triage and the skills lane.

What is stale

skills/objectstack-ui/rules/pages.md, section "Inline metadata views", says a referenced item "must exist in this package — a dead same-package reference fails the build".

Once PR #27204 lands, docs/metadata-embed-ref judges a package's doc against two scopes: that package's own body, plus the packages it declares in manifest.dependencies (triage ruling 6461907878 on #27090). So an embed of a declared dependency's item builds, and an embed of an undeclared sibling's item is refused.

Expected

The section names both scopes in one sentence: "this package or a package it declares in manifest.dependencies". The refusal for anything else stays as written. Since skills/** is read by agents writing metadata apps, the sentence should state the closed rule, not a tolerance.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Triage: p2 · domain:skills · area:devpath · 2026-10-28T10:57Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    and removed on Oct 28, 2026
  3. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · sunhaolin · session_017xRBcUi2qhP1eKRbZJ1Ze1

    Claim: PM loop round 1
    Session: session_017xRBcUi2qhP1eKRbZJ1Ze1
    Account: sunhaolin (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-27209-pages-embed-scope
    Worktree: objectstack-issue-27209
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: skills/objectstack-ui/rules/pages.md (the build-lint sentence of 〈Inline metadata views〉 only; token ceiling 5692, measured 5680, so net tokens ≤ +12) (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: CONTRACT_REVIEW_TIER (MANDATORY — dispatch-gates --tier this fire: skills/objectstack-ui/rules/pages.md ⇢ 'skills/**' — clause ① (2026-09-10 ruling, verbatim 「必须 fable的还包括对外发布的skills」); no one-line exit under this root), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6467206197
    Premise: holds (re-checked at origin/main 5b5cff15, 2026-10-28T15:24Z: the sentence is at pages.md:398–399, wrapped as **must exist in this / package** — a dead same-package reference fails the build; PR #27204 (#27090) merged 2026-10-28T11:01Z with Skills-docs: follow-up owed — skills/objectstack-ui/rules/pages.md, so the dependency the card names is cleared)
    Serial constraints cleared: none — no open PR and no in-flight claim touches pages.md (PR #26739 and seat 2's queued #26777 are on rules/dashboards.md; open PR list read this fire).

  4. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · sunhaolin · session_017xRBcUi2qhP1eKRbZJ1Ze1
    os-dev-report

    {
      "issue": 27209,
      "status": "done",
      "branch": "claude/issue-27209-pages-embed-scope",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27304",
      "session": "session_017xRBcUi2qhP1eKRbZJ1Ze1",
      "premise_still_valid": true,
      "summary": "Rewrote the one build-lint sentence of skills/objectstack-ui/rules/pages.md (Inline metadata views, lines 397-401 at merge base fa5e7825) from 'must exist in this package' to the closed rule lintMetadataEmbeds / embedScope in packages/cli/src/utils/collect-docs.ts enforce: 'must exist in this package or one it declares in manifest.dependencies (direct dependencies only; one-way) — anything else fails the build, naming the scope it judged'. Added a patch changeset for @objectstack/skills: the PM assumption 'skills-only diff takes skip-changeset' is falsified — @objectstack/skills ships dist/skills/** (a byte copy of skills/**) in its files[], AGENTS.md Post-Task Checklist step 3 reserves skip-changeset for a diff publishing nothing from a released package, and pr-automation.yml says a skills/** change releases @objectstack/skills and never takes the label; so no label was sent. PM assumption 2 (pages.md:335 link sentence stale) is falsified by the code: lintDocs resolves same-prefix links against artifactNames (artifact-wide) unchanged by #27204, so the in-place exemption's condition 1 fails and the sentence is left as written (Acceptance notes). PR #27304 is DRAFT on a Tier H surface; the relay's governed-review follow-up requested reviewers hotlong and os-zhuang (set by the relay, not by me; not touched). First commit was amended before any push to the model-free trailer pair after the pre-push hook check:commit-card-trailers refused the harness-suggested 'Claude Fable 5.1' co-author; nothing on the remote was rewritten.",
      "files_changed": [
        "skills/objectstack-ui/rules/pages.md",
        ".changeset/27209-pages-embed-scope.md"
      ],
      "file_surface": "as claimed: skills/objectstack-ui/rules/pages.md (the one sentence) — plus .changeset/27209-pages-embed-scope.md, owed by the changeset rule above; no breach of the skills file surface",
      "line_budget": "pages.md tokens (node scripts/check-skills-token-ratchet.mjs): before 5667 / ceiling 5692 (headroom 25) at merge base fa5e7825; after 5691 / 5692 (headroom 1); net +24 — inside the merged tree's headroom; the claim's 5680 / +12 budget was read at 5b5cff15 before main moved. Nothing re-wrapped to pay; the ceiling line is untouched",
      "tests": "Docs + changeset diff; no test file changed; no ablation (no tested behaviour moved). OS_VERIFY_LOCK_SLOT=issue-27209-skills-build bash scripts/pm/os-verify-lock.sh -c 'pnpm --filter @objectstack/skills build' at c2fb9eee: 'sync-catalog self-test: 9 cases pass' · '93 file(s) across 11 skill(s) copied from skills/** into dist/skills and read back byte-identical' · 'os-verify-lock: VERDICT command-exit 0 · held the lock 1s · waited 0s'; diff -q of the edited pages.md vs packages/skills/dist/skills/objectstack-ui/rules/pages.md empty. check:test-core / typecheck of TS packages: not owed (no package source touched); CI's Test Core and type-check lanes cover the head",
      "gates": "Derived at c2fb9eee by node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (43 families; 2 extras from the claim run beyond the union). Each exit captured as `cmd > log 2>&1; ec=$?` before any pipe. exit 0: node scripts/check-adr-0087-registration.mjs --base origin/main; node scripts/check-adr-0087-registration.mjs --self-test; node scripts/check-changeset-no-major.mjs --base origin/main; node scripts/check-closing-keyword-parity.mjs; node scripts/check-closing-keyword-parity.mjs --self-test; node scripts/check-comment-mask-corpus.mjs; node scripts/check-doc-route-spelling.mjs --advisory; node scripts/check-doc-route-spelling.mjs --self-test; node scripts/check-dts-emitted.mjs --self-test; node scripts/check-empty-changeset.mjs --base origin/main; node scripts/check-empty-changeset.mjs --self-test; node scripts/check-skills-token-ratchet.mjs ('pages.md is 5691 tokens (ceiling 5692; headroom 1)'); node scripts/check-skills-token-ratchet.mjs --self-test (79 cases); node scripts/ci/assert-turbo-remote-cache.mjs --self-test; node scripts/ci/plan-test-core-shards.mjs --self-test; node scripts/ci/prune-turbo-cache.mjs --self-test; node scripts/pm/release-rehearsal-clone.mjs --self-test; node scripts/release-pending-publish.mjs --self-test; pnpm check:agent-test-spelling; pnpm check:changeset-gate-self-tests; pnpm check:ci-filter-parity; pnpm check:closed-ceremony-text; pnpm check:corpus-claim-drift; pnpm check:cross-package-test-inputs; pnpm check:doc-authoring; pnpm check:driver-memory-census; pnpm check:gitlink-declared; pnpm check:nul-bytes; pnpm check:pm-changeset-deadline-census; pnpm check:pm-governed-merges; pnpm check:pm-skill-id-lint (104 files clean); pnpm check:published-files; pnpm check:refd-timer-probe; pnpm check:role-word; pnpm check:skill-compatibility; pnpm check:skill-frame-sync; pnpm check:skill-identifier-liveness; pnpm check:sourcemap-no-sources-content; pnpm check:watch-hint-literal; pnpm --filter @objectstack/spec run check:skill-docs; pnpm --filter @objectstack/spec run check:skill-refs. NOT MEASURED (exit 3, PREREQUISITE NOT MET — build-dependent, no workspace build run for a docs-only diff; CI Lint & Repo Gates carries them): pnpm --filter @objectstack/lint run check:doc-formula-expressions (needs @objectstack/formula + @objectstack/lint built); pnpm check:dual-build-cjs-loads (112 packages without dist/); pnpm check:lean-entry-closure (@objectstack/objectql dist absent). pnpm check:dts-closure :: exit 0 but swept only the 1 built package (@objectstack/skills, owes no .d.ts) — recorded as NOT MEASURED for TS packages, not green. --ran reconciliation (node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran gates-ran-exit.txt): '43 derived, 40 run, 3 NOT-MEASURED (3 DERIVED from a recorded exit 3), 0 UNRUN', exit 0. check-platform-checklist: not owed (no export renamed/removed). CI check-runs on c2fb9eee at report time (20 listed): Check Changeset, Lint · scoped · query-options erasure, Lint · CI release & engine gates, Lint · PM dispatch-gates, Lint · scoped · tooling self-tests, Check PR Size, Type Check · source gates, Type Check · workspace, filter, Lint · docs & code guards, Type Check · consumer gates, Type Check · debt ledger, Lint · ESLint, Lint · scoped · slot lookup & corpus, Lint · repo & tooling gates, Governed Surface Queue Guard, PR-body guards — all in_progress / null; Schedule gate, Packed-tarball smoke (opt-in), 18.x upgrade harness (opt-in) — completed / skipped. Not re-run locally; not waited on",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0 — no MCP GitHub tool was called (read or write)",
      "api_writes": "2 REST writes, both through the relay as objectstack-fleet[bot]: (1) pr_create via fleet-write dispatch request os-dev-27209-pr, run 40719634368, = POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/27304/assignees [sunhaolin]; the relay's own governed-review follow-up then POSTed requested_reviewers (relay-internal, not an action I sent); (2) this os-dev-report comment via node scripts/pm/post-stamped.mjs --comment=27209 = POST /repos/objectstack-ai/objectstack/issues/27209/comments. git pushes (not REST): 2 — the empty-branch probe and c2fb9eee (a first push attempt of 0222277c was refused by the pre-push hook before leaving; amended, then pushed once). Reads only: gh api GET issue 27209 + comments, pulls/27304, commits/c2fb9eee/check-runs. No label write (skip-changeset not applicable); card labels/assignee untouched; no PATCH of the PR body",
      "deviations": [
        "PM assumption 4 (skip-changeset) falsified: a patch changeset for @objectstack/skills was added and no label was sent — AGENTS.md Post-Task Checklist step 3 + packages/skills/package.json files[] + pr-automation.yml's own text",
        "Token budget: the claim's 'net ≤ +12' was read against 5680; main's reading is 5667, so the edit lands at net +24 under the unchanged ceiling 5692 (headroom 1). A shorter wording dropping 'naming the scope it judged' would land at +13 if the seat prefers more headroom",
        "Three build-dependent gate families NOT MEASURED locally (exit 3, named in gates); check:dts-closure's exit 0 read as NOT MEASURED for TS packages",
        "Harness attribution reminder (Co-Authored-By: Claude Fable 5.1) overridden by os-dev.md/AGENTS.md's model-free pair after the pre-push hook refused it; the commit was amended before any push",
        "Only the derived 43 + the claim's 2 spec checks were run; the claim's listed set was a superset-of/subset-of the derivation (the derivation added changeset families and dropped none that the claim named except check:skill-docs/check:skill-refs, which were run as extras)"
      ],
      "open_questions": [
        {
          "question": "Report-comment first line: os-dev.md says the first line is the bare marker `os-dev-report`; the dispatch asked for the seat signature line first and the marker second. Which does the PM scanner key on?",
          "options": [
            "A: signature line first, marker second (what this comment does, matching the claim/triage comment convention on the card)",
            "B: marker first, signature second (os-dev.md's literal wording)"
          ],
          "recommendation": "A, because the dispatch is the per-card instruction and the card's other fleet comments open with the signature line; if the scanner keys on line 1, the PM reads line 2 here"
        }
      ],
      "out_of_scope_findings": [
        "class: b (candidate) · reach: `os build` on a composed artifact with a dangling same-prefix doc link — the docs/broken-link message in packages/cli/src/utils/collect-docs.ts lintDocs reads 'no doc named \"X\" exists in this package' while the set judged is artifact-wide (resolvableNames = artifactNames, per the function's own header); the words are not false (the target is absent from that package too), only narrower than the judged scope · Seam: spec:none → runtime:lintDocs docs/broken-link message | renderer:none · consumer: none · dedupe words: broken-link message artifact-wide scope collect-docs exists in this package · carrier: none · noted in PR Acceptance notes, not filed",
        "carrier: none · pages.md:335 'broken same-package links fail the build' is accurate for the code on main (same-prefix links judged artifact-wide; a dangling one still fails); not stale, noted, not filed"
      ]
    }
  5. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · sunhaolin · session_017xRBcUi2qhP1eKRbZJ1Ze1
    os-dev-report

    {
      "issue": 27209,
      "status": "done",
      "rework_round": 1,
      "branch": "claude/issue-27209-pages-embed-scope",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27304",
      "head": "60b713f64a2844b1dc6fa59a7a33a1ec5fc94caa",
      "session": "session_017xRBcUi2qhP1eKRbZJ1Ze1",
      "premise_still_valid": true,
      "summary": "Rework for contract review FAIL (PR comment 6474059798). pages.md lines 397-401 now read exactly the five lines the seat specified: 'must exist in this package or in a package of the same artifact that it declares in `manifest.dependencies`** (direct only; one-way) — anything else fails the build (same posture as a broken link)'; the 'naming the scope it judged' clause is dropped. The changeset prose says the same scope and no longer claims the refusal names the scope; the Clause-②: no / Metadata-protocol: none lines are kept. Committed on the same branch (model-free trailer pair; c2fb9eee not amended) and pushed once. PR body not patched; PR not readied; no labels touched.",
      "files_changed": ["skills/objectstack-ui/rules/pages.md", ".changeset/27209-pages-embed-scope.md"],
      "line_budget": "pages.md tokens (node scripts/check-skills-token-ratchet.mjs): before this round 5691 / ceiling 5692 (headroom 1); after 5689 / 5692 (headroom 3) — actual line: 'skills/objectstack-ui/rules/pages.md is 5689 tokens (ceiling 5692; headroom 3)', matching the seat's expected reading; vs merge base fa5e7825 (5667) net +22",
      "gates": "all exit codes captured as `cmd > log 2>&1; echo $?` before any pipe, at the working tree that became 60b713f6: node scripts/check-skills-token-ratchet.mjs :: exit 0 (pages.md 5689 / 5692); pnpm check:pm-skill-id-lint :: exit 0 (self-test 23 cases; 104 files clean); node scripts/check-empty-changeset.mjs --base origin/main :: exit 0 ('1 declaring changeset(s) added'; 'No changeset from the merge base modified or deleted'); pnpm check:published-files :: exit 0 (73 publishable packages, files whitelist covered). CI check-runs on 60b713f6 not read or waited on",
      "api_writes": "1 REST write through the relay as objectstack-fleet[bot]: this delta comment via node scripts/pm/post-stamped.mjs --comment=27209 = POST /repos/objectstack-ai/objectstack/issues/27209/comments. git push (not REST): 1 (c2fb9eee..60b713f6). No PR body PATCH, no label write, no ready flip",
      "mcp_calls": "0 — no MCP GitHub tool was called"
    }
  6. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · sunhaolin · session_017xRBcUi2qhP1eKRbZJ1Ze1

    ACCEPT → PR #27304 comment 6474253645 · 2026-10-28T16:14Z. Contract review at CONTRACT_REVIEW_TIER: FAIL 6474059798 on c2fb9eee (the sentence over-stated the scope), rework round 1 on the same branch, delta PASS 6474235904 on 60b713f6. Tier H (skills/**): the PR stays draft with needs-user-decision until a GOVERNED_APPROVERS approval; then the seat lands it. Card stays pm:dispatched until MERGED.

  7. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · sunhaolin · session_017xRBcUi2qhP1eKRbZJ1Ze1

    Landed · 2026-10-28T18:26Z · PR #27304 MERGED through the merge queue as b4eecd50d on main (Tier H skills/**: readied and enqueued by approver os-zhuang at 2026-10-28T17:48Z on the in-seat contract-review PASS 6474235904 for head 60b713f6; CI 47 runs green or skipped at the enqueue). Card closed by Fixes; pm:dispatched stripped and the PR's needs-user-decision marker removed in this act.

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:skillspriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions