Skip to content

investigate(contracts): measure capability vocabulary consolidation under ADR0028 #4056

Closed

Description

@thymikee

Parent: #4045

Purpose

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.

Activity

  1. thymikee commented on Oct 29, 2026

    @thymikee
    MemberAuthor

    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.

  2. thymikee commented on Oct 29, 2026

    @thymikee
    MemberAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions