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
investigate(contracts): measure capability vocabulary consolidation under ADR0028 #4056
Recent hardware-button, orientation and gesture additions touched7-12 packages. Some of that is necessary exhaustive per-owner capability classification; repeated cell vocabulary may be avoidable.
Owner and scope
Existing contracts cell vocabulary and ADR0028; disposable bounded prototype and entry eager-closure measurements.
Required behavior
Separate necessary backend behavior from duplicate keys. Measure one representative capability addition using ADR0028's proposed single-source input type/cell key inversion. Preserve exhaustive owner facts and lifecycle authority; no inherited default denial or generator. Compare touched files, concepts and eager closure against a named baseline. Reconcile ADR0028 with ADR0027 before any permanent table change.
API or evidence example
One runtime row owns a cell key and derives its type; it must never derive a platform owner's availability answer.
Observable completion
Evidence reports comparable file/package touch counts and eager-closure changes for the same family before/after.
Decision explicitly accepts a bounded implementation or rejects it with rationale; no permission inferred from Proposed ADR status.
If the table fails loading constraints or does not lower coordination cost, retain the compile-checked duplication.
Dependencies and sequencing
Blocked by: none.
Schedule after D1b to avoid source or measurement conflicts. This ordering is not a semantic prerequisite.
Validation
Disposable experiment, unchanged-base comparison and closure checks; accepted ADR/code follow-up gets separate reviewed scope. No gate suppression.
Base audit SHA: 144bd59890277fd4717995588ad817597c9d6552. Re-read the issue and all Decision: comments before work. Read applicable AGENTS.md routes. Keep one owner boundary per PR. Independent review and serialized exact-head validation are coordinated by the umbrella orchestrator.
Decision: measured cell vocabulary: Retain the compile-checked input properties and cell-key table. Reject the bounded inversion as a solution to cross-owner fan-out. No prototype remains in a branch. A separate docs-only child will reconcile ADR 0028 with this outcome.
The named source baseline is be22676ace3f6a11d23af23a45c588a474e514be. The unavailable-facts module is byte-identical there, at the investigator's earlier 184ab81e67, and at audit 144bd59890277fd4717995588ad817597c9d6552. The audited window is the last 200 overall commits at that audit SHA (October 17–29), rather than 200 commits matching one path.
Bounded comparison
Existing declarations
Inverted prototype
Observed result
Reintroduce the same systemButton cell vocabulary
Two declarations; one file, one package
One row; one file, one package
One declaration saved; zero file/package saving
Adoption itself
Explicit input contract and compile-exhaustive key table
Required/optional value table and two key-remapped mapped types
49 added, 77 deleted lines; net −28 in one file
All discovered eager entries
427 entry ids
Same 427 entry ids
Identical membership, counts and weights; zero named-base findings
Existing unavailable-facts smoke tests
Two passed
Two passed
Smoke evidence only; no backend behavior claim
Input contract check
Copied original type
Two-direction assignability compiled
This does not establish optional-key membership
Patch inspection independently confirms all 34 keys, their order and modifiers match: 26 required and eight optional. Mutual assignability can reject modifier flips and required-key additions/removals, but cannot establish optional-key membership. The compile probe was not mutation-tested; no detection proof is claimed.
The runtime projection, owner answers, lifecycle code and existing optional-cell network fallback are unchanged by diff inspection. The two passing tests exercise only a few facts. The table values are not read at runtime. The prototype also drops the settings contract comment without relocation and replaces an explicit owner-facing shape with an intersection of mapped types. These adoption costs matter despite the net line reduction.
The before/after closure data are byte-identical: 427 unique entries, total module-scope weight 124,989, no membership/count/weight changes and no growth findings. Only the unavailable facade (28 modules, weight 460) and root platform runtime (41 modules, weight 648) contain this helper. The result is expected for a type/table substitution with no import, module or statement-count change; it does not demonstrate an ergonomic benefit. Layering passed; the eager-closure and growth suites passed 872 tests. The runner's actual merge base and the explicit named-baseline comparison are recorded separately. No approval rows or baselines changed. Build and declaration emission were not rerun after the prototype; lint, format, Fallow and affected validation were not run on it.
History changes the fan-out premise. This helper changed once in the audited window, in f6fc99fbc9, for an unlock projection; there were zero new cell keys. In-window hardware-button c41dc3a changed 65 files across ten packages and made no unavailable-cell edit, because it uses the existing systemButton family. Historical Action Button fc596209 changed 76 files across 12 packages, outside this window and before that consolidation. The nearest real cell additions, telephony 62a1ff1235 (64 files, 13 packages) and fold e8da1e10d6 (84 files, 11 packages), are also outside the window. Each added two vocabulary lines in one file; its separate fact projection remains necessary after inversion. Exhaustive owner facts and the other operation declarations also remain necessary under ADR 0019.
This is a bounded cell-level surrogate, not ADR 0028's literal next-capability-family experiment or a replay of an entire feature. The common pre-addition fixtures are intentionally incomplete measurement inputs, never release baselines. No whole-feature after-state or eight-package saving was measured. No runtime backend behavior or coordination/quality gain is established. Existing family-level cells already avoid some vocabulary changes. Any future implementation needs a representative case that saves an actual file or owner edit.
ADR 0028 is Proposed and grants no shipping permission. Its closing rule says to reject the proposal and retain both authored lists if fan-out does not visibly decrease. Recommend a separate reviewed docs-only amendment to record that rejected outcome, qualify this surrogate and preserve ADR 0019/lifecycle constraints and existing optional fallback behavior. This does not reject every future vocabulary design.
Artifacts retained locally: e1-experiment/{state.json,prototype.patch,before-closures.json,after-closures.json,original-cell-addition.patch,inverted-cell-addition.patch} and e1-experiment.py, under /tmp/agent-device-issue-plan/. These paths are supplemental local artifacts, not remotely accessible proof. This comment records the reproducible comparison and its limits. All disposable checkouts were removed; reviewed heads and clean status were preserved.
Current state: The corrected Claude-reviewed bounded retain decision is recorded above. No runtime prototype was adopted. Its systemButton surrogate saved one declaration but zero files or packages; the literal next-family experiment and whole-feature replay were not performed. This bounded decision task is complete. The separate docs-only child #4072 records the ADR rejection rule, with cross-provider review and documentation checks still required.
Activity
thymikee commentedon Oct 29, 2026
Decision: measured cell vocabulary: Retain the compile-checked input properties and cell-key table. Reject the bounded inversion as a solution to cross-owner fan-out. No prototype remains in a branch. A separate docs-only child will reconcile ADR 0028 with this outcome.
The named source baseline is
be22676ace3f6a11d23af23a45c588a474e514be. The unavailable-facts module is byte-identical there, at the investigator's earlier184ab81e67, and at audit144bd59890277fd4717995588ad817597c9d6552. The audited window is the last 200 overall commits at that audit SHA (October 17–29), rather than 200 commits matching one path.systemButtoncell vocabularyPatch inspection independently confirms all 34 keys, their order and modifiers match: 26 required and eight optional. Mutual assignability can reject modifier flips and required-key additions/removals, but cannot establish optional-key membership. The compile probe was not mutation-tested; no detection proof is claimed.
The runtime projection, owner answers, lifecycle code and existing optional-cell
networkfallback are unchanged by diff inspection. The two passing tests exercise only a few facts. The table values are not read at runtime. The prototype also drops thesettingscontract comment without relocation and replaces an explicit owner-facing shape with an intersection of mapped types. These adoption costs matter despite the net line reduction.The before/after closure data are byte-identical: 427 unique entries, total module-scope weight 124,989, no membership/count/weight changes and no growth findings. Only the unavailable facade (28 modules, weight 460) and root platform runtime (41 modules, weight 648) contain this helper. The result is expected for a type/table substitution with no import, module or statement-count change; it does not demonstrate an ergonomic benefit. Layering passed; the eager-closure and growth suites passed 872 tests. The runner's actual merge base and the explicit named-baseline comparison are recorded separately. No approval rows or baselines changed. Build and declaration emission were not rerun after the prototype; lint, format, Fallow and affected validation were not run on it.
History changes the fan-out premise. This helper changed once in the audited window, in
f6fc99fbc9, for anunlockprojection; there were zero new cell keys. In-window hardware-buttonc41dc3achanged 65 files across ten packages and made no unavailable-cell edit, because it uses the existingsystemButtonfamily. Historical Action Buttonfc596209changed 76 files across 12 packages, outside this window and before that consolidation. The nearest real cell additions, telephony62a1ff1235(64 files, 13 packages) and folde8da1e10d6(84 files, 11 packages), are also outside the window. Each added two vocabulary lines in one file; its separate fact projection remains necessary after inversion. Exhaustive owner facts and the other operation declarations also remain necessary under ADR 0019.This is a bounded cell-level surrogate, not ADR 0028's literal next-capability-family experiment or a replay of an entire feature. The common pre-addition fixtures are intentionally incomplete measurement inputs, never release baselines. No whole-feature after-state or eight-package saving was measured. No runtime backend behavior or coordination/quality gain is established. Existing family-level cells already avoid some vocabulary changes. Any future implementation needs a representative case that saves an actual file or owner edit.
ADR 0028 is Proposed and grants no shipping permission. Its closing rule says to reject the proposal and retain both authored lists if fan-out does not visibly decrease. Recommend a separate reviewed docs-only amendment to record that rejected outcome, qualify this surrogate and preserve ADR 0019/lifecycle constraints and existing optional fallback behavior. This does not reject every future vocabulary design.
Artifacts retained locally:
e1-experiment/{state.json,prototype.patch,before-closures.json,after-closures.json,original-cell-addition.patch,inverted-cell-addition.patch}ande1-experiment.py, under/tmp/agent-device-issue-plan/. These paths are supplemental local artifacts, not remotely accessible proof. This comment records the reproducible comparison and its limits. All disposable checkouts were removed; reviewed heads and clean status were preserved.thymikee commentedon Oct 29, 2026
Current state: The corrected Claude-reviewed bounded retain decision is recorded above. No runtime prototype was adopted. Its
systemButtonsurrogate saved one declaration but zero files or packages; the literal next-family experiment and whole-feature replay were not performed. This bounded decision task is complete. The separate docs-only child #4072 records the ADR rejection rule, with cross-provider review and documentation checks still required.