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 }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Triage first-touch grade (concentrated batch; triage seat, session session_01NYoiJGd1MxXdcvM4EGAMrS): promoted to pm:queue, type Task, scoped to disposition 2 — the tombstone header comment ("not in fieldWidgetMap; unreachable from any form path; master_detail deliberately renders LookupField — auditors skip this file"), so every future widgets/** sweep (#3291 / #3318 / #4788 class) stops paying the false-denominator tax. S-size, comment-only.
Disposition 1 (delete the widget + its public export) is a breaking change to a published surface and is not ruled here: if anyone wants it, it goes to the maintainer with the liveness evidence this card already contains — the tombstone does not prejudice that and makes the eventual removal PR trivial to scope. Size/model suggestion: S, sonnet.
Session: session_01RV6yuVCxymHYE16PL9vQkE
Branch: claude/issue-4811-master-detail-field-tombstone
Worktree: objectui-issue-4811
Domain: repo:objectui
File surface: packages/fields/src/** — the MasterDetailField source file's header comment only (stop on breach; explain in the report)
Container & model: S, mode:subagent, model: sonnet (taking the triage seat's suggestion)
Clause-②: no — comment-only. Nothing is added to or removed from any accepted set or published surface.
Serial constraints cleared: packages/fields is free. In-flight: #4889 (packages/components), #4896 (packages/types), PR #5314 (packages/core + packages/plugin-grid) — all disjoint.
Scope — disposition 2 only, and the boundary is the whole point
Add the tombstone header comment recording that MasterDetailField:
is not in fieldWidgetMap;
is unreachable from any form path;
master_detail deliberately renders LookupField;
auditors skip this file.
The purpose is that every future widgets/** sweep (the #3291 / #3318 / #4788 class) stops paying the false-denominator tax — an exported-but-unreachable component that every audit re-discovers and re-investigates.
⛔ Disposition 1 — deleting the widget and its public export — is NOT ruled and is explicitly out of scope. It is a breaking change to a published surface and belongs to the maintainer, with the liveness evidence this card already carries. Do not delete the component, do not remove the export, do not deprecate it in package.json or the barrel. The tombstone deliberately does not prejudice that decision; it just makes an eventual removal PR trivial to scope.
If while writing the comment you conclude the card's liveness claims are wrong (e.g. you find a real form path that reaches it), stop and report — that inverts the card rather than resizing it.
Verification
Re-derive each of the four claims on current origin/main before writing them down. A tombstone is a load-bearing assertion: every future sweep will trust it and skip the file. A tombstone that is wrong is worse than no tombstone, because it converts a discoverable問題 into an invisible one. Specifically confirm: absent from fieldWidgetMap; no form path reaches it; master_detail → LookupField; and that its only in-repo consumer is its own test.
Counter-probe every zero with a known-present neighbouring term — e.g. if you search fieldWidgetMap for master_detail and get nothing, search it for a key you know is there, or the zero is not a reading.
Reverse verification does not meaningfully apply to a comment-only change. Say that plainly rather than inventing a ceremonial leg — an honest "not applicable" is worth more than a test that proves nothing.
Changeset: judge with node scripts/check-changeset-presence.mjs (a comment-only change to a released package's src/ may still owe one). ⛔ NEVER declare major — objectui's major is pinned to @objectstack's major.
⛔ Do not edit content/docs/releases/, docs/adr/**, .claude/**, skills/**, AGENTS.md, CLAUDE.md.
{
"issue": 4811,
"status": "done",
"branch": "claude/issue-4811-master-detail-field-tombstone",
"pr": "https://github.com/objectstack-ai/objectui/pull/5316",
"premise_still_valid": true,
"summary": "Added a tombstone header comment to packages/fields/src/widgets/MasterDetailField.tsx (disposition 2 only, per the triage comment): records that the component is absent from fieldWidgetMap, unreachable from any form path, that the master_detail key deliberately renders LookupField instead, and that its only in-repo consumer is its own test. No export, behavior, or registration changed; disposition 1 (deletion) was left untouched as out of scope. Added an empty-frontmatter changeset since this touches a released package's src/.",
"tests": "Re-derived all four tombstone claims on current origin/main before writing them (with a counter-probe of the fieldWidgetMap grep against known-present keys 'text'/'number'/'select' to rule out a broken search): (1) grep of packages/fields/src/index.tsx confirms no fieldWidgetMap entry resolves to MasterDetailField; (2) registerField()/registerAllFields() trace shows both only walk fieldWidgetMap's keys, and a full-repo grep (all extensions) for MasterDetailField turns up only its own definition, its own test, the barrel export + explanatory comment, an unrelated MasterDetailFieldMetadata type, and one changelog line -- no form path reaches it; (3) the master_detail map entry at index.tsx:2717 resolves to LookupField; (4) complex-widgets.test.tsx is the sole render call in-repo. All four held, so the tombstone was safe to write. Reverse verification does not meaningfully apply to a comment-only change -- stated plainly rather than staging a ceremonial leg. node scripts/check-changeset-presence.mjs: pass (declares .changeset/master-detail-field-tombstone-4811.md, empty frontmatter). node scripts/check-changeset-no-major.mjs: pass. Manual control-char scan (grep -naP over both changed files, this repo has no scripts/check-nul-bytes.mjs): clean. Dependency-closure build `pnpm --filter '@object-ui/fields^...' build`: exit 0. `pnpm exec vitest run packages/fields/ --maxWorkers=2` (from repo root, per the repo's own vitest-invocation guard which rejected a `--`-style filter first): 107 test files / 1802 tests passed. `pnpm --filter '@object-ui/fields' type-check`: exit 0. `pnpm --filter '@object-ui/fields' lint`: exit 0, 0 errors (839 pre-existing warnings in the package; the one warning on the changed file predates this change and sits outside the added comment block). All run from the repository root under the shared /tmp/os-heavy-verify.lock; head commit 47c77c03b, matches the PR.",
"open_questions": [],
"out_of_scope_findings": []
}
Activity
os-support-ai commentedon Aug 18, 2026
Triage first-touch grade (concentrated batch; triage seat, session
session_01NYoiJGd1MxXdcvM4EGAMrS): promoted topm:queue, type Task, scoped to disposition 2 — the tombstone header comment ("not infieldWidgetMap; unreachable from any form path;master_detaildeliberately rendersLookupField— auditors skip this file"), so every futurewidgets/**sweep (#3291 / #3318 / #4788 class) stops paying the false-denominator tax. S-size, comment-only.Disposition 1 (delete the widget + its public export) is a breaking change to a published surface and is not ruled here: if anyone wants it, it goes to the maintainer with the liveness evidence this card already contains — the tombstone does not prejudice that and makes the eventual removal PR trivial to scope. Size/model suggestion: S, sonnet.
Generated by Claude Code
os-support-ai commentedon Aug 19, 2026
Claim: PM loop round 15
Session:
session_01RV6yuVCxymHYE16PL9vQkEBranch:
claude/issue-4811-master-detail-field-tombstoneWorktree:
objectui-issue-4811Domain:
repo:objectuiFile surface:
packages/fields/src/**— theMasterDetailFieldsource file's header comment only (stop on breach; explain in the report)Container & model: S,
mode:subagent,model: sonnet(taking the triage seat's suggestion)Clause-②: no — comment-only. Nothing is added to or removed from any accepted set or published surface.
Serial constraints cleared:
packages/fieldsis free. In-flight: #4889 (packages/components), #4896 (packages/types), PR #5314 (packages/core+packages/plugin-grid) — all disjoint.Scope — disposition 2 only, and the boundary is the whole point
Add the tombstone header comment recording that
MasterDetailField:fieldWidgetMap;master_detaildeliberately rendersLookupField;The purpose is that every future
widgets/**sweep (the #3291 / #3318 / #4788 class) stops paying the false-denominator tax — an exported-but-unreachable component that every audit re-discovers and re-investigates.⛔ Disposition 1 — deleting the widget and its public export — is NOT ruled and is explicitly out of scope. It is a breaking change to a published surface and belongs to the maintainer, with the liveness evidence this card already carries. Do not delete the component, do not remove the export, do not deprecate it in
package.jsonor the barrel. The tombstone deliberately does not prejudice that decision; it just makes an eventual removal PR trivial to scope.If while writing the comment you conclude the card's liveness claims are wrong (e.g. you find a real form path that reaches it), stop and report — that inverts the card rather than resizing it.
Verification
origin/mainbefore writing them down. A tombstone is a load-bearing assertion: every future sweep will trust it and skip the file. A tombstone that is wrong is worse than no tombstone, because it converts a discoverable問題 into an invisible one. Specifically confirm: absent fromfieldWidgetMap; no form path reaches it;master_detail→LookupField; and that its only in-repo consumer is its own test.fieldWidgetMapformaster_detailand get nothing, search it for a key you know is there, or the zero is not a reading.Changeset: judge with
node scripts/check-changeset-presence.mjs(a comment-only change to a released package'ssrc/may still owe one). ⛔ NEVER declaremajor— objectui's major is pinned to@objectstack's major.⛔ Do not edit
content/docs/releases/,docs/adr/**,.claude/**,skills/**,AGENTS.md,CLAUDE.md.Generated by Claude Code
docs(fields): tombstone MasterDetailField as a form-unreachable orphan
os-support-ai commentedon Aug 19, 2026
{ "issue": 4811, "status": "done", "branch": "claude/issue-4811-master-detail-field-tombstone", "pr": "https://github.com/objectstack-ai/objectui/pull/5316", "premise_still_valid": true, "summary": "Added a tombstone header comment to packages/fields/src/widgets/MasterDetailField.tsx (disposition 2 only, per the triage comment): records that the component is absent from fieldWidgetMap, unreachable from any form path, that the master_detail key deliberately renders LookupField instead, and that its only in-repo consumer is its own test. No export, behavior, or registration changed; disposition 1 (deletion) was left untouched as out of scope. Added an empty-frontmatter changeset since this touches a released package's src/.", "tests": "Re-derived all four tombstone claims on current origin/main before writing them (with a counter-probe of the fieldWidgetMap grep against known-present keys 'text'/'number'/'select' to rule out a broken search): (1) grep of packages/fields/src/index.tsx confirms no fieldWidgetMap entry resolves to MasterDetailField; (2) registerField()/registerAllFields() trace shows both only walk fieldWidgetMap's keys, and a full-repo grep (all extensions) for MasterDetailField turns up only its own definition, its own test, the barrel export + explanatory comment, an unrelated MasterDetailFieldMetadata type, and one changelog line -- no form path reaches it; (3) the master_detail map entry at index.tsx:2717 resolves to LookupField; (4) complex-widgets.test.tsx is the sole render call in-repo. All four held, so the tombstone was safe to write. Reverse verification does not meaningfully apply to a comment-only change -- stated plainly rather than staging a ceremonial leg. node scripts/check-changeset-presence.mjs: pass (declares .changeset/master-detail-field-tombstone-4811.md, empty frontmatter). node scripts/check-changeset-no-major.mjs: pass. Manual control-char scan (grep -naP over both changed files, this repo has no scripts/check-nul-bytes.mjs): clean. Dependency-closure build `pnpm --filter '@object-ui/fields^...' build`: exit 0. `pnpm exec vitest run packages/fields/ --maxWorkers=2` (from repo root, per the repo's own vitest-invocation guard which rejected a `--`-style filter first): 107 test files / 1802 tests passed. `pnpm --filter '@object-ui/fields' type-check`: exit 0. `pnpm --filter '@object-ui/fields' lint`: exit 0, 0 errors (839 pre-existing warnings in the package; the one warning on the changed file predates this change and sits outside the added comment block). All run from the repository root under the shared /tmp/os-heavy-verify.lock; head commit 47c77c03b, matches the PR.", "open_questions": [], "out_of_scope_findings": [] }Generated by Claude Code
docs(fields): tombstone MasterDetailField as a form-unreachable orphan (