Repository navigation
docs(skills): the platform skill names every type a pair's override is served for, and that removing the pair's item serves the base's again - #30439
Conversation
…s served for, and that removing the pair's item serves the base's again The ADR-0146 paragraph of skills/objectstack-platform/SKILL.md named six types a `.custom` pair's declared override is served for; the reads serve twelve (SEALED_ROW_SERVED_OVERRIDE_TYPES joined the five overlay types and flow), and a removal naming the pair serves the base's document again, which the paragraph did not say. Two evals: a dataset-and-page override, and the removal. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012MmDsR4AZoJZyzKQcBEESh
|
domain:skills#2 · os-lizheng · session_012MmDsR4AZoJZyzKQcBEESh Contract reviewServed-tier: Cited code read on ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
No must-fix. Implemented-by: VERDICT: PASS |
`only for views` sat in case 13's must_not_contain and in its prompt, so a correct answer opening "No, not only for views" graded as a failure. The `dataset` and `page` must_contain tokens already catch a views-only answer. Contract review should-fix on PR #30439. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012MmDsR4AZoJZyzKQcBEESh
|
domain:skills#2 · os-lizheng · session_012MmDsR4AZoJZyzKQcBEESh Contract reviewServed-tier: Delta review of record 6657115315 (PASS on ① Derived judgmentsCarry over unchanged from 6657115315. The delta moves no served-type list, no route and no rule a customer agent loads; the only published change is one fewer ② Semver levelCarry over unchanged: ③ Boundary flags
④ Design judgment
No must-fix; the should-fix of 6657115315 is closed. Implemented-by: VERDICT: PASS |
|
domain:skills#2 · os-lizheng · session_012MmDsR4AZoJZyzKQcBEESh 席位核对 — ACCEPT ·
|
Fixes #30229
Clause-②: no
Metadata-protocol: none
维护者速读
skills/objectstack-platform/SKILL.md的 ADR-0146 段落。定制包(hotcrm.custom)覆盖项的生效类型从原文的 6 种改为平台今天实际服务的 12 种(view、dashboard、report、email_template、translation、flow、page、app、dataset、doc、book、mapping),并补一句:删除定制包里的覆盖项(DELETE …?package=hotcrm.custom)即重新服务基础包原件。该技能的 evals 新增两例:dataset/page 覆盖、撤销覆盖。.custom包。旧文案少列 6 种类型且只字不提撤销,它要么拒绝一个本可做的 page/dataset 定制,要么告诉客户定制无法撤销。skills/objectstack-platform/SKILL.md第 128 行(三处改动都在这一行:类型清单、撤销一句、两处删减);其次skills/objectstack-platform/evals/config-plugins-ops.json新增 id 13、14。node scripts/check-skills-token-ratchet.mjs,预期一行skills/objectstack-platform/SKILL.md is 6009 tokens (ceiling 6011; headroom 2)且 exit 0;git grep -n "today only for a view" skills/预期零命中。skills/**为 Tier H,需人工批准后合并;审阅通过即合并本 PR。What changes
One paragraph of
skills/objectstack-platform/SKILL.md("Customizing an installed package (ADR-0146)", line 128), read againstorigin/mainfdd06415:flowbydeclinesStoredRow's first branch (packages/metadata-protocol/src/protocol-lock-state.ts, ADR-0146 D9 item 1);page,app,dataset,doc,bookandmappingbySEALED_ROW_SERVED_OVERRIDE_TYPES(packages/metadata-protocol/src/protocol-package-bindings.ts,mappingthe sixth since PR fix(metadata-protocol,app-shell): serve a pair's mapping override, let a pair remove any override it holds, name a working remedy for an excluded type (#30062) #30226).DELETE …?package=hotcrm.custom) serves the base's again" —isPairRowRemovalinpackages/metadata-protocol/src/protocol-packaged-base-refusal.tsadmits a removal naming the pair for every open override type, and the base's document is served once the row is gone (pinned byprotocol.named-base-overlay-write.test.ts, "once the pair's row is deleted, the read serves the base row again").os validateandos buildrefuseoverridesfrom any other package"), and ", never by a base-named or package-less read" (the same sentence already says "served only under its own?package=").skills/objectstack-platform/evals/config-plugins-ops.json): id 13, a dataset-and-page override declared fromhotcrm.custom; id 14, undoing an override by removing the pair's item. Both cases'must_containtokens are taught bySKILL.md(checked by hand:hotcrm.custom,overrides:,dataset,page,DELETE,?package=hotcrm.custom). Case 13'smust_not_containis the twoPUTroutes alone (patch round)..changeset/30229-adr0146-override-types.md:'@objectstack/skills': patch, carrying both machine lines.Why the list and not the rule. The card prefers a rule that does not age. The code's rule is "every open override type" —
isOpenOverrideType: dispositionoverridableinOVERRIDE_TYPE_CLASSIFICATIONAND its ADR-0146 D9 conditions delivered (CONDITIONS_DELIVERED=flowalone). The spec's exported listOVERRIDABLE_METADATA_TYPES(13 names) includesaction, whose override the write door still refuses asdeclared_type_not_yet_available; naming that symbol would promise one type the platform refuses, and "overridable" has no shorter customer-facing phrasing than the twelve names (the excluded types — permission set, position, capability, object — are already named in the next paragraph). So the paragraph names the current list; whenaction's door is cut it gains one word.skills/**readings (the two the lane owes):fdd06415)e3c97f55)skills/objectstack-platform/SKILL.mdlinesskills/objectstack-platform/SKILL.mdtokens (check-skills-token-ratchet)skills/*/SKILL.md(11 files) linesSKILL.md; +522 in the eval fixture, measured but not ratcheted)Tests
node scripts/check-skills-token-ratchet.mjsate3c97f55:skills/objectstack-platform/SKILL.md is 6009 tokens (ceiling 6011; headroom 2)— exit 0.pnpm --filter @objectstack/spec run check:skill-docs— exit 0;pnpm --filter @objectstack/spec run check:skill-refs— exit 0;pnpm check:doc-authoring— exit 0;pnpm check:skill-top-level-keys— exit 0.@objectstack/skillsis the one package this diff ships through (itsbuildissync-catalog.mjs, a byte copy ofskills/**): built under the shared verify lock (VERDICT command-exit 0), thennode packages/skills/scripts/sync-catalog.mjs --check—97 file(s) under dist/skills are byte-identical to skills/**, exit 0;packages/skills/dist/skills/objectstack-platform/SKILL.mdcarries the new sentence and no longer carries "today only for a view"; the dist eval file carries id 14. The package declares notestortypecheckscript, so ② is empty for it.Acceptance notes
Lint & Repo Gates:pnpm check:dts-closure,pnpm check:dual-build-cjs-loads,pnpm check:lean-entry-closure,pnpm check:sourcemap-no-sources-content— each exited 3 (PREREQUISITE NOT MET: they read every package's builtdist/, a full workspace build this doc-only diff cannot move). A declared narrowing, not a skipped family.pnpm check:dev-prereqs(local-only family, owed because the lock run builtpackages/spec): exit 1, "the workspace is not built — 103 of 107 packages declare an entry under dist/ that is not on disk" — the fresh worktree's state, not a finding about this diff;pnpm check:skill-frame-freshness: exit 0.must_containtoken oracleui/scripts/check-skill-eval-tokens.mjsscansui/skillsonly (SCAN_ROOTS = ['skills'], read underui/), so the rootskills/*/evals/*.jsonhave no mechanical "is this token taught" check; the two new cases were checked by hand againstSKILL.md.OVERRIDABLE_METADATA_TYPESin@objectstack/specnamesactionwhile the write door refuses anactionoverride as not yet available (ADR-0146 D9, by design, with a message that says so). The skill text follows the door, not the spec list.Verification
Derived with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackon the actual diff (45 families;--tier: the MANDATORY tier, clause ①,skills/**, no one-line exit). Heade3c97f55(patch round: contract review 6657115315's should-fix — eval 13'smust_not_containno longer carriesonly for views, a substring of its own prompt; nothing else changed). The 45-family run below was taken at75b0062c; re-run ate3c97f55for the changed path: evals JSON parses (14 cases),node scripts/check-skills-token-ratchet.mjsexit 0 (SKILL.md 6009 / 6011; eval fixture 3251 tokens),pnpm --filter @objectstack/spec run check:skill-refsexit 0,pnpm check:doc-authoringexit 0. Every command run in the worktree, exit code captured before any pipe;--ranreconciliation:45 derived famil(ies) accounted for — 41 run, 4 NOT-MEASURED (4 DERIVED from a recorded exit 3).Exit codes, one per derived command (plus check:skill-refs beyond the union)
Ratchet line and shipped-catalog proof at 75b0062
Generated by Claude Code