Repository navigation
skills(objectstack-ui): pages.md states the embed scope os build enforces — this package or a declared dependency - #27304
Conversation
…rces — this package or a declared dependency The 〈Inline metadata views〉 build-lint sentence said a metadata fence's referenced item "must exist in this package". docs/metadata-embed-ref judges an embed against the package that ships the doc plus the packages it declares in manifest.dependencies (direct only, one-way); the sentence now states that closed rule. Patch changeset for @objectstack/skills, which ships skills/**. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017xRBcUi2qhP1eKRbZJ1Ze1
|
domain:skills#1 · sunhaolin · session_017xRBcUi2qhP1eKRbZJ1Ze1 Contract reviewServed-tier: ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgmentCard scenarios hold: a declared sibling's state machine builds (test :772), an undeclared sibling's is refused (:765); closed form, no "may". But the sentence teaches a capability the build does not deliver: a dependency declared on a package installed separately (ADR-0141 D3's other arm) is never searched — a single-package stack reads no (22756 B → 5689/5692, headroom 3; longest line 76.) Implemented-by: VERDICT: FAIL Seat note: review run by an isolated at-tier reviewer agent, adopted by the seat ( |
…artifact it declares; drop the scope-naming clause Contract review must-fix: embedScope resolves declaredDependencyIds through the artifact's own packages (bodyById), and a stack with no packages[] never reads manifest.dependencies, so a separately installed dependency is never searched; the rule-name miss carries no scope text. The sentence and the changeset prose now say "a package of the same artifact that it declares in manifest.dependencies (direct only; one-way)" and no longer claim the refusal names the scope. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017xRBcUi2qhP1eKRbZJ1Ze1
|
domain:skills#1 · sunhaolin · session_017xRBcUi2qhP1eKRbZJ1Ze1 Contract reviewServed-tier: ① Derived judgmentsDelta since 6474059798 (one commit,
② Semver levelUnchanged: ③ Boundary flags
④ Design judgmentBoth card scenarios hold against the code (declared sibling of the same artifact builds, test :772; undeclared sibling refused, :765), and the sentence now also refuses what the build refuses: a dependency installed outside the artifact is excluded by the words, so no author writes an embed the build rejects or avoids one it accepts. Closed form — no "may", no tolerance. The lint-vs-render gap on outside dependencies (picklist-references.ts:45 reports, Implemented-by: VERDICT: PASS Seat note: delta review by the same isolated at-tier reviewer agent as 6474059798, adopted by the seat ( |
|
domain:skills#1 · sunhaolin · session_017xRBcUi2qhP1eKRbZJ1Ze1 维护者速读(席位终稿,钉 head
|
Fixes #27209
Clause-②: no
Metadata-protocol: none
维护者速读
skills/objectstack-ui/rules/pages.md〈Inline metadata views〉里os build的 lint 句,从「被引用项必须存在于本包」改为「必须存在于本包,或本包在manifest.dependencies里声明的包(仅直接依赖、单向)」,其余不合范围的引用照旧构建失败并点名所判范围;另加@objectstack/skills的 patch changeset(skills/**随该包发布)。docs/metadata-embed-ref的新范围判定嵌入(本包 + 声明的直接依赖),技能文档仍教更窄的规则,会让 AI 作者为了嵌入而重复声明元数据;技能面要陈述平台强制的闭合规则。skills/objectstack-ui/rules/pages.md第 397–401 行(唯一风险 hunk:措辞是否与packages/cli/src/utils/collect-docs.tslintMetadataEmbeds的范围一致);其次.changeset/27209-pages-embed-scope.md。node scripts/check-skills-token-ratchet.mjs应打印pages.md is 5691 tokens (ceiling 5692; headroom 1)且退出 0;pnpm --filter @objectstack/skills build应报 93 个文件 byte-identical 复制。skills/**为 Tier H 受管面,本 PR 保持 draft,由GOVERNED_APPROVERS账号 approve 后由席位落地。What changes
One sentence in
skills/objectstack-ui/rules/pages.md(〈Inline metadata views — themetadatafence (ADR-0051)〉), worded fromlintMetadataEmbeds/embedScopeinpackages/cli/src/utils/collect-docs.tsand itscollect-docs.package-docs.test.tscases:Before:
After:
The code this states: the lint's sources are the owner's body plus
declaredDependencyIds(body)resolved against the artifact's packages (direct declarations only; a declared package does not reach back — pinned by the testa declaration is one-way: the declared package does not reach back), and the refusal text namesthis packageorthis package or its declared dependencies (…). Links are a different rule and still resolve artifact-wide (lintDocsagainstartifactNames); that sentence (pages.mdline 335) is untouched..changeset/27209-pages-embed-scope.md—@objectstack/skills: patch. The PM's dispatch assumedskip-changeset; measured against AGENTS.md Post-Task Checklist step 3 (skip-changesetis for a diff that publishes nothing from any released package) andpackages/skills/package.json(@objectstack/skillsshipsdist/skills/**, a byte copy ofskills/**, in itsfiles), pluspr-automation.yml's own text (askills/**change releases@objectstack/skillsand never takes the label), a changeset is owed and the label is not applied.Token ratchet (
node scripts/check-skills-token-ratchet.mjs),pages.md: before 5667 / ceiling 5692 (headroom 25) at merge basefa5e7825; after 5691 / 5692 (headroom 1). Net +24 tokens, inside the headroom the merged tree had (the claim's 5680 / +12 figure was read at5b5cff15; main had moved).Tests
Pure docs + changeset diff; no test file changed, no ablation (nothing a test pins moved).
OS_VERIFY_LOCK_SLOT=issue-27209-skills-build bash scripts/pm/os-verify-lock.sh -c 'pnpm --filter @objectstack/skills build'atc2fb9eee—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;VERDICT command-exit 0;diff -qof the editedpages.mdagainstpackages/skills/dist/skills/objectstack-ui/rules/pages.mdis empty.Acceptance notes
pages.md:335"broken same-package links fail the build" is NOT made stale by the embed-scope change:lintDocsresolves a same-prefix link against every name the artifact carries (resolvableNames=artifactNames, the cli: read package docs from each package directory under an ADR-0130 layout — the widening half of #18170, blocked on two contract questions #18431 C2 shape), a cross-prefix link is deferred to publish, and a dangling same-prefix link is stilldocs/broken-link. The in-place fix exemption's first condition (same defect class, made stale by the same merged change) fails, so the sentence is left as written. Noted, not filed: that link refusal's message still readsno doc named "…" exists in this packagewhile the set it judged is artifact-wide — class b candidate against the lint header's own text, reach:os buildon a composed artifact with a dangling same-prefix link; the dangling target also does not exist in that package, so the words are not false, only narrower than the scope judged; carrier: none.skip-changeset" assumption was falsified by measurement (above); apatchchangeset for@objectstack/skillsis in this PR and no label is applied.Skills-docs:line: the kind isnoneand there is no(narrowing)arm.Co-authored-by: Claude+Claude-Session:), as the pre-push hookcheck:commit-card-trailersrequires; no history on the remote was rewritten.Verification
Local gate subset derived at
c2fb9eeebynode scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(43 families) plus the claim's two spec checks; every exit code captured before any pipe;--ranreconciliation: 43 derived, 43 run, 0 UNRUN.Green (exit 0, 40 of the 43 + 2 extras):
check-adr-0087-registration(--base origin/main,--self-test),check-changeset-no-major,check-closing-keyword-parity(+ self-test),check-comment-mask-corpus,check-doc-route-spelling(--advisory,--self-test),check-dts-emitted --self-test,check-empty-changeset(--base,--self-test),check-skills-token-ratchet(gate:pages.md is 5691 tokens (ceiling 5692; headroom 1); self-test: 79 cases),ci/assert-turbo-remote-cache,ci/plan-test-core-shards,ci/prune-turbo-cache,pm/release-rehearsal-clone,release-pending-publish(self-tests),check:agent-test-spelling,check:changeset-gate-self-tests,check:ci-filter-parity,check:closed-ceremony-text,check:corpus-claim-drift,check:cross-package-test-inputs,check:doc-authoring,check:driver-memory-census,check:gitlink-declared,check:nul-bytes,check:pm-changeset-deadline-census,check:pm-governed-merges,check:pm-skill-id-lint(104 files clean),check:published-files,check:refd-timer-probe,check:role-word,check:skill-compatibility,check:skill-frame-sync,check:skill-identifier-liveness,check:sourcemap-no-sources-content,check:watch-hint-literal,@objectstack/spec check:skill-docs,@objectstack/spec check:skill-refs.NOT MEASURED locally (build-dependent; exit 3
PREREQUISITE NOT MET, no workspace build was run for a docs-only diff — CI'sLint & Repo Gatescarries them):pnpm --filter @objectstack/lint run check:doc-formula-expressions(needs@objectstack/formula+@objectstack/lintbuilt),pnpm check:dual-build-cjs-loads(112 packages withoutdist/),pnpm check:lean-entry-closure(@objectstack/objectqldist absent).pnpm check:dts-closureexited 0 but swept only the 1 built package (@objectstack/skills, which owes no declaration entry) — read as NOT MEASURED for the TypeScript packages, not as green.Dogfood battery: n/a — no
!in the title and no(narrowing)arm.Generated by Claude Code