Skip to content

Complete the .18 pin: re-extract the app-bundle overlay + re-record the service-contract fixtures (unblocks #622 and main) #636

Description

@aarontrowbridge

Important

Problemmain is red on two gates, both from the same root: the .18 pin moved but its dependent artifact families never followed. #634 pinned the vendored binary to v1.18.10-amicode.18 in opencode.lock.json only — the app-bundle overlay/manifest is still pinned at .16 (with #620's hand-edited titlebar files, unreachable-green by the drift gate's design), and the service-contract golden fixtures still record .17 (the failing assertion's own message names the remedy: "re-record on pin bumps").
Approach — Complete the pin sweep mechanically: re-run the overlay extractor at .18 (overlay + manifest cohere with the pin; this carries the fork's own merged work between .16.18, which is what re-pinning means), and re-record the contract fixtures against the .18 fork binary. This supersedes #623: the pin decision #623 held for an owner is now MADE (#634), so this is mechanical completion of an expressed decision, not a new choice.
Scope — in: extractor run at .18, fixture re-record, whatever the regenerated artifacts require · out: any code changes, any new pin decision, the TUI or deployment surfaces.
Assumptions — The .18 fork tree contains the titlebar change #620 hand-carried (verified: the .18 tag's titlebar-channel.test.ts carries the dev→DEV fix), so the extractor reproduces the hand-edits byte-identically and the drift resolves rather than reverting them.

Acceptance Criteria

  • The overlay + manifest are regenerated at v1.18.10-amicode.18 by the extractor (no hand-edits anywhere in the diff), and drift_gate.mjs exits 0 with a fork clone present (full re-derivation, not just the committed-state check).
  • The service-contract golden fixtures are re-recorded from the .18 fork binary and the self-tracking pin assertion passes (fixtures were recorded from the CURRENT fork pin).
  • The full extension vitest suite passes; main green on both app-bundle-gate and fast.
  • The parked ADR PR docs(adr): Harness Contract v1 — the fixture-pinned opencode API subset (A2, #621) #622 is then mergeable (rebased if needed) — this repair is its unblock.

Testing Decisions

The drift gate script itself (with --fork pointing at the local clone) is the overlay's test; the extension vitest contract suite is the fixtures' test; both must run green locally before the PR. No new test surface — this slice's output is regenerated artifacts.

Key Decisions

  1. Re-pin to .18 — not a choice, the completion of chore: pin opencode v1.18.10-amicode.18 #634's choice. The .16.18 fork delta (the fork's own merged PRs) rides in the overlay; that is the semantics of a pin bump.
  2. Fixtures re-record from the vendored .18 binary per record_amicode_fixtures.mjs's existing flow — no recorder changes.
  3. No code changes in this slice. If the extractor or recorder surfaces a real incompatibility, that's a follow-up issue, not a drive-by fix.

Constraints & Invariants

  • The overlay is extractor-written only — no hand-edits in the diff.
  • opencode.lock.json stays at chore: pin opencode v1.18.10-amicode.18 #634's .18 (already correct).
  • The kerr_*.md untracked scratch files in the shared checkout are untouched.

Prior Art

Source

Notes

  • The extension suite is otherwise healthy (1704 passed, 1 failed — the pin assertion), so the blast radius is the two artifact families, not the code.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions