You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
skills(objectstack-platform): the ADR-0146 paragraph lists six types a pair's override is served for; page, app, dataset, doc, book and mapping are served too, and the pair can remove its own override #30229
Filing gate ①: a shipped text that says something wrong (skills/** ships to customer agents through npx skills add). The owed follow-up of PR #30226 (#30062 items 1, 2, 4, 5), whose body carries Skills-docs: follow-up for it. No domain:* label is set: triage routes it.
Defect
skills/objectstack-platform/SKILL.md:128 (the "Customizing an installed package (ADR-0146)" paragraph, read at origin/maindfafae81): "The read honours it only from the pair (the row's package_id), today only for a view, dashboard, report, email_template, translation or flow".
A customer's AI agent reads this skill to write a .custom package. Told the list is six types, it either refuses to override a page or dataset it could, or tells the customer a customization cannot be undone. ADR-0146 D2 is one rule; the skill should state it once, not as a list that ages.
Acceptance
The paragraph states the rule from the platform's own list (every type the override classification admits as open), or names the full current list, and says that removing the pair's item restores the base's.
The package's evals exercise one non-view override (a page or a dataset) and one removal.
domain:skills lane after triage. Tier H (governed surface skills/**): human merge.
Dedup
Searched issues, open and closed: "objectstack-platform SKILL ADR-0146 override types" (12 hits) and "skills override page app dataset doc book" (29 hits). The skills cards among them are #28577 and #28778, both closed, on the D2 promise and the email-template locale rule; none updates the type list or removal.
Re-check
git grep -n "today only for a view, dashboard, report, email_template, translation or flow" origin/main -- skills/objectstack-platform/SKILL.md
Claim: PM loop round 1 · 2026-11-05T10:59Z
Session: session_012MmDsR4AZoJZyzKQcBEESh
Account: os-lizheng
Branch: claude/issue-30229-adr0146-override-types
Worktree: objectstack-issue-30229
Domain: domain:skills
Seat: domain:skills#2
File surface: skills/objectstack-platform/SKILL.md (the "Customizing an installed package (ADR-0146)" paragraph), the package's evals under skills/objectstack-platform/, .changeset/30229-*.md (stop on breach; explain in the report)
Container & model: M, mode:subagent, model: claude-fable-5-1 (--tier: MANDATORY, clause ① — skills/** ships verbatim, no one-line exit), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: the skill text (this lane) lists six override types | SEALED_ROW_SERVED_OVERRIDE_TYPES in packages/metadata-protocol serves more, and a pair-named removal reverts | every customer agent that loads objectstack-platform to write a .custom package; used today
Thread-read: 6648500859
Premise: holds — 2026-11-05T10:59Z on origin/main09720e2c: the card's re-check grep still hits skills/objectstack-platform/SKILL.md:128; PR #30226 (the card's serial predecessor) merged 2026-11-05.
Serial constraints cleared: PR #30226 merged; no open head:claude/ PR touches skills/objectstack-platform/**; #30092 (same file, odd slot) is unclaimed.
{
"issue": 30229,
"status": "done",
"branch": "claude/issue-30229-adr0146-override-types",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30439",
"session": "session_012MmDsR4AZoJZyzKQcBEESh",
"premise_still_valid": true,
"summary": "Premise re-checked on origin/main fdd06415 (main had moved past the pinned 09720e2c): the card's grep still hit SKILL.md:128, PR #30226 is on main, SEALED_ROW_SERVED_OVERRIDE_TYPES = page, app, dataset, doc, book, mapping, and isPairRowRemoval admits a pair-named removal for every open override type. The paragraph now names the twelve types the reads serve (view, dashboard, report, email_template, translation, flow, page, app, dataset, doc, book, mapping) and says removing the pair's item (DELETE …?package=hotcrm.custom) serves the base's again; two same-paragraph restatements were deleted to pay the token ratchet (6000 -> 6009, ceiling 6011). The list was chosen over a rule because the code's rule is 'open override type' = overridable AND D9 conditions delivered, and the spec's exported OVERRIDABLE_METADATA_TYPES still names action, which the door refuses as not yet available. Evals: id 13 (dataset-and-page override), id 14 (removal). Changeset '@objectstack/skills': patch. Draft PR opened via the relay; Tier H, human merge.",
"tests": "At 75b0062c: node scripts/check-skills-token-ratchet.mjs -> 'skills/objectstack-platform/SKILL.md is 6009 tokens (ceiling 6011; headroom 2)' exit 0; pnpm --filter @objectstack/spec run check:skill-docs exit 0; check:skill-refs exit 0; pnpm check:doc-authoring exit 0; pnpm check:skill-top-level-keys exit 0. ① for the one shipping package: os-verify-lock 'VERDICT command-exit 0 · held the lock 93s' over turbo build --filter=@objectstack/formula --filter=@objectstack/lint --filter=@objectstack/skills (Tasks: 5 successful, 5 total); then node packages/skills/scripts/sync-catalog.mjs --check -> '97 file(s) under dist/skills are byte-identical to skills/**' exit 0, and dist carries the new sentence and eval 14, zero hits for 'today only for a view'. ② @objectstack/skills declares no test/typecheck script (empty). Evals JSON parses (14 cases). No ablation: no tested runtime behaviour changed.",
"gates": "Local subset, exit codes captured before any pipe, from dispatch-gates --commands on the real diff (45 families): 41 exit 0; 4 exit 3 PREREQUISITE NOT MET -> NOT MEASURED locally: check:dts-closure, check:dual-build-cjs-loads, check:sourcemap-no-sources-content (full workspace build), check:lean-entry-closure (needs @objectstack/objectql built) — declared narrowing, CI owns them. check:doc-formula-expressions exit 3 on first run, exit 0 after the targeted formula+lint build. --ran reconciliation: '45 derived famil(ies) accounted for — 41 run, 4 NOT-MEASURED (4 DERIVED from a recorded exit 3)'. Local-only families: check:skill-frame-freshness exit 0; check:dev-prereqs exit 1 ('the workspace is not built — 103 of 107 packages', the fresh worktree, not the diff). --tier: MANDATORY tier derived from skills/** (clause ①, no one-line exit), honoured. PR check-runs at 75b0062c when read, not waited for: success — Governed Surface Queue Guard, Check PR Size, PR-body guards (claim · duplicate · Part-of · single-writer path), Lint · scoped · tooling self-tests, Auto Label, filter, Test UI (aggregate), Dogfood Regression Gate (aggregate); skipped — Type Check UI, Lint UI, Test UI shards, Build & E2E UI, UI Published Artifacts, Build UI Deps, Build Docs, Temporal Conformance, Dogfood shards, Dogfood Verify CLI, 18.x upgrade harness, Packed-tarball smoke, Schedule gate; in_progress — Lint · repo & tooling gates, Lint · CI release & engine gates, Lint · docs & code guards, Lint · ESLint, Lint · PM dispatch-gates, Lint · scoped · query-options erasure, Lint · scoped · slot lookup & corpus, Type Check · workspace, Type Check · source gates, Type Check · consumer gates, Type Check · debt ledger, Check Changeset; queued — Build Core, Plan Test Core shards, Live E2E UI.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "0 — no MCP GitHub tool used (reads: gh api single-card and single-PR GETs; writes: relay only)",
"api_writes": "2 — both repository_dispatch strokes through scripts/pm/fleet-write/dispatch.mjs: POST /repos/objectstack-ai/objectstack/dispatches (pr_create -> relay run 42019106946, PR #30439, 11351 bytes sent = stored) and POST /repos/objectstack-ai/objectstack/dispatches (this os-dev-report comment via post-stamped.mjs). Plus 2 git pushes (probe branch, then 75b0062c), not REST.",
"line_budget": "skills/objectstack-platform/SKILL.md 426 -> 426 lines (net 0; the paragraph is one line); tokens 6000 -> 6009 of ceiling 6011 (+9, inside the ratchet, paid by deleting two restatements in the same paragraph, no re-wrap); whole package 11 SKILL.md files 4534 -> 4534 lines; bundle total 225708 -> 226246 (+9 SKILL.md, +529 eval fixture, not ratcheted). The eval additions are the two cases acceptance 2 names.",
"files_changed": ["skills/objectstack-platform/SKILL.md", "skills/objectstack-platform/evals/config-plugins-ops.json", ".changeset/30229-adr0146-override-types.md"],
"deviations": ["Four derived built-output gates NOT MEASURED locally (exit 3, full workspace build) — declared, CI runs them.", "check:dev-prereqs exit 1 on the unbuilt fresh worktree; reading kept local as the rules say.", "Commit trailers are the model-free pair (Co-authored-by: Claude / Claude-Session), per AGENTS.md, not the harness reminder's model-named form.", "PR labels: none sent — the dispatch named none and skip-changeset does not apply (the diff ships through @objectstack/skills). size/s was added by another actor (labeler), left as is."],
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": ["observation (not a class a/b/c; zero pull) · ui/scripts/check-skill-eval-tokens.mjs scans ui/skills only, so root skills/*/evals must_contain tokens have no 'is it taught' oracle; the two new cases were hand-checked against SKILL.md · dedupe: skill-eval-tokens root skills evals oracle · carrier: none", "observation (boundary, not a trap) · @objectstack/spec OVERRIDABLE_METADATA_TYPES names action while the write door refuses an action override with declared_type_not_yet_available (ADR-0146 D9, by design); the skill follows the door · carrier: none"]
}
Contract review: PASS 6657115315 on 75b0062c, then a delta PASS 6657246575 on e3c97f55 after the patch round took its one should-fix. CI is green (30 success, 15 skipped). The PR is Tier H, so the approvers os-zhuang and hotlong were requested in this round, and the PR carries needs-user-decision while it waits.
Landed · PR #30439 merged 2026-11-05T12:30:38Z through the merge queue (enqueued by os-zhuang), merge commit 0e42aef259. #30229 was closed completed by the PR's Fixes.
State change: pm:dispatched removed from #30229, and needs-user-decision removed from PR #30439, both in this stroke. Nothing is left on this card.
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p3 ·
domain:skills·pm:queue· 2026-11-05T03:01Z⛔ Not a claim.
objectstack-platformSKILL.md:128says a pair's override is honoured only for view, dashboard and report.mainserves page, app, dataset, doc and book too, and 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 addsmapping. Stale teaching text, so p3. The changeset rule applies ('@objectstack/skills': patch).Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:skills#2 · os-lizheng · session_012MmDsR4AZoJZyzKQcBEESh
Claim: PM loop round 1 · 2026-11-05T10:59Z
Session:
session_012MmDsR4AZoJZyzKQcBEEShAccount:
os-lizhengBranch:
claude/issue-30229-adr0146-override-typesWorktree:
objectstack-issue-30229Domain:
domain:skillsSeat:
domain:skills#2File surface:
skills/objectstack-platform/SKILL.md(the "Customizing an installed package (ADR-0146)" paragraph), the package's evals underskills/objectstack-platform/,.changeset/30229-*.md(stop on breach; explain in the report)Container & model:
M,mode:subagent,model: claude-fable-5-1 (--tier: MANDATORY, clause ① — skills/** ships verbatim, no one-line exit),effort: highClause-②: no
Metadata-protocol: none
Responsibility:
the skill text (this lane) lists six override types|SEALED_ROW_SERVED_OVERRIDE_TYPES in packages/metadata-protocol serves more, and a pair-named removal reverts|every customer agent that loads objectstack-platform to write a .custom package; used todayThread-read: 6648500859
Premise: holds — 2026-11-05T10:59Z on
origin/main09720e2c: the card's re-check grep still hitsskills/objectstack-platform/SKILL.md:128; PR #30226 (the card's serial predecessor) merged 2026-11-05.Serial constraints cleared: PR #30226 merged; no open
head:claude/PR touchesskills/objectstack-platform/**; #30092 (same file, odd slot) is unclaimed.objectstack-fleet commentedon Nov 5, 2026
domain:skills#2 · os-lizheng · session_012MmDsR4AZoJZyzKQcBEESh
os-dev-report
Posted: 2026-11-05T11:29Z · PR #30439 (draft, head
75b0062c){ "issue": 30229, "status": "done", "branch": "claude/issue-30229-adr0146-override-types", "pr": "https://github.com/objectstack-ai/objectstack/pull/30439", "session": "session_012MmDsR4AZoJZyzKQcBEESh", "premise_still_valid": true, "summary": "Premise re-checked on origin/main fdd06415 (main had moved past the pinned 09720e2c): the card's grep still hit SKILL.md:128, PR #30226 is on main, SEALED_ROW_SERVED_OVERRIDE_TYPES = page, app, dataset, doc, book, mapping, and isPairRowRemoval admits a pair-named removal for every open override type. The paragraph now names the twelve types the reads serve (view, dashboard, report, email_template, translation, flow, page, app, dataset, doc, book, mapping) and says removing the pair's item (DELETE …?package=hotcrm.custom) serves the base's again; two same-paragraph restatements were deleted to pay the token ratchet (6000 -> 6009, ceiling 6011). The list was chosen over a rule because the code's rule is 'open override type' = overridable AND D9 conditions delivered, and the spec's exported OVERRIDABLE_METADATA_TYPES still names action, which the door refuses as not yet available. Evals: id 13 (dataset-and-page override), id 14 (removal). Changeset '@objectstack/skills': patch. Draft PR opened via the relay; Tier H, human merge.", "tests": "At 75b0062c: node scripts/check-skills-token-ratchet.mjs -> 'skills/objectstack-platform/SKILL.md is 6009 tokens (ceiling 6011; headroom 2)' exit 0; pnpm --filter @objectstack/spec run check:skill-docs exit 0; check:skill-refs exit 0; pnpm check:doc-authoring exit 0; pnpm check:skill-top-level-keys exit 0. ① for the one shipping package: os-verify-lock 'VERDICT command-exit 0 · held the lock 93s' over turbo build --filter=@objectstack/formula --filter=@objectstack/lint --filter=@objectstack/skills (Tasks: 5 successful, 5 total); then node packages/skills/scripts/sync-catalog.mjs --check -> '97 file(s) under dist/skills are byte-identical to skills/**' exit 0, and dist carries the new sentence and eval 14, zero hits for 'today only for a view'. ② @objectstack/skills declares no test/typecheck script (empty). Evals JSON parses (14 cases). No ablation: no tested runtime behaviour changed.", "gates": "Local subset, exit codes captured before any pipe, from dispatch-gates --commands on the real diff (45 families): 41 exit 0; 4 exit 3 PREREQUISITE NOT MET -> NOT MEASURED locally: check:dts-closure, check:dual-build-cjs-loads, check:sourcemap-no-sources-content (full workspace build), check:lean-entry-closure (needs @objectstack/objectql built) — declared narrowing, CI owns them. check:doc-formula-expressions exit 3 on first run, exit 0 after the targeted formula+lint build. --ran reconciliation: '45 derived famil(ies) accounted for — 41 run, 4 NOT-MEASURED (4 DERIVED from a recorded exit 3)'. Local-only families: check:skill-frame-freshness exit 0; check:dev-prereqs exit 1 ('the workspace is not built — 103 of 107 packages', the fresh worktree, not the diff). --tier: MANDATORY tier derived from skills/** (clause ①, no one-line exit), honoured. PR check-runs at 75b0062c when read, not waited for: success — Governed Surface Queue Guard, Check PR Size, PR-body guards (claim · duplicate · Part-of · single-writer path), Lint · scoped · tooling self-tests, Auto Label, filter, Test UI (aggregate), Dogfood Regression Gate (aggregate); skipped — Type Check UI, Lint UI, Test UI shards, Build & E2E UI, UI Published Artifacts, Build UI Deps, Build Docs, Temporal Conformance, Dogfood shards, Dogfood Verify CLI, 18.x upgrade harness, Packed-tarball smoke, Schedule gate; in_progress — Lint · repo & tooling gates, Lint · CI release & engine gates, Lint · docs & code guards, Lint · ESLint, Lint · PM dispatch-gates, Lint · scoped · query-options erasure, Lint · scoped · slot lookup & corpus, Type Check · workspace, Type Check · source gates, Type Check · consumer gates, Type Check · debt ledger, Check Changeset; queued — Build Core, Plan Test Core shards, Live E2E UI.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0 — no MCP GitHub tool used (reads: gh api single-card and single-PR GETs; writes: relay only)", "api_writes": "2 — both repository_dispatch strokes through scripts/pm/fleet-write/dispatch.mjs: POST /repos/objectstack-ai/objectstack/dispatches (pr_create -> relay run 42019106946, PR #30439, 11351 bytes sent = stored) and POST /repos/objectstack-ai/objectstack/dispatches (this os-dev-report comment via post-stamped.mjs). Plus 2 git pushes (probe branch, then 75b0062c), not REST.", "line_budget": "skills/objectstack-platform/SKILL.md 426 -> 426 lines (net 0; the paragraph is one line); tokens 6000 -> 6009 of ceiling 6011 (+9, inside the ratchet, paid by deleting two restatements in the same paragraph, no re-wrap); whole package 11 SKILL.md files 4534 -> 4534 lines; bundle total 225708 -> 226246 (+9 SKILL.md, +529 eval fixture, not ratcheted). The eval additions are the two cases acceptance 2 names.", "files_changed": ["skills/objectstack-platform/SKILL.md", "skills/objectstack-platform/evals/config-plugins-ops.json", ".changeset/30229-adr0146-override-types.md"], "deviations": ["Four derived built-output gates NOT MEASURED locally (exit 3, full workspace build) — declared, CI runs them.", "check:dev-prereqs exit 1 on the unbuilt fresh worktree; reading kept local as the rules say.", "Commit trailers are the model-free pair (Co-authored-by: Claude / Claude-Session), per AGENTS.md, not the harness reminder's model-named form.", "PR labels: none sent — the dispatch named none and skip-changeset does not apply (the diff ships through @objectstack/skills). size/s was added by another actor (labeler), left as is."], "open_questions": [], "security_findings": "none", "out_of_scope_findings": ["observation (not a class a/b/c; zero pull) · ui/scripts/check-skill-eval-tokens.mjs scans ui/skills only, so root skills/*/evals must_contain tokens have no 'is it taught' oracle; the two new cases were hand-checked against SKILL.md · dedupe: skill-eval-tokens root skills evals oracle · carrier: none", "observation (boundary, not a trap) · @objectstack/spec OVERRIDABLE_METADATA_TYPES names action while the write door refuses an action override with declared_type_not_yet_available (ADR-0146 D9, by design); the skill follows the door · carrier: none"] }objectstack-fleet commentedon Nov 5, 2026
domain:skills#2 · os-lizheng · session_012MmDsR4AZoJZyzKQcBEESh
ACCEPT → PR #30439 comment 6657528165 · head
e3c97f55· 2026-11-05T12:06ZContract review: PASS 6657115315 on
75b0062c, then a delta PASS 6657246575 one3c97f55after the patch round took its one should-fix. CI is green (30 success, 15 skipped). The PR is Tier H, so the approversos-zhuangandhotlongwere requested in this round, and the PR carriesneeds-user-decisionwhile it waits.objectstack-fleet commentedon Nov 5, 2026
domain:skills#2 · os-lizheng · session_012MmDsR4AZoJZyzKQcBEESh
Landed · PR #30439 merged 2026-11-05T12:30:38Z through the merge queue (enqueued by
os-zhuang), merge commit0e42aef259. #30229 was closedcompletedby the PR'sFixes.State change:
pm:dispatchedremoved from #30229, andneeds-user-decisionremoved from PR #30439, both in this stroke. Nothing is left on this card.