Skip to content

composite-system: devices + QICK, amico-run verbs, substrate memory, composite skeletons, chat/model UX - #135

Closed
Rchari1 wants to merge 57 commits into
mainfrom
local/composite-system
Closed

composite-system: devices + QICK, amico-run verbs, substrate memory, composite skeletons, chat/model UX#135
Rchari1 wants to merge 57 commits into
mainfrom
local/composite-system

Conversation

@Rchari1

@Rchari1 Rchari1 commented Jul 14, 2026

Copy link
Copy Markdown
Member

Aaron's integration branch, opened as a PR so CI finally runs over the whole stack (62 commits, 80 files, +10,930/−625 — none of it has ever been through CI). Fast-forwards over pre-#127 main; merges conflict-free over #127.

What's in it (five streams, consolidated)

  1. Device management — device registry, device-inspector webview, status, calibration graph, and a QICK client + job server for hardware execution. The largest new subsystem.
  2. amico-run expansion (23 files) — the amico verb launcher + bookkeeping verbs, device mounts.
  3. Substrate: mount-stack + typed memory (spec-20260707 C1–C4) — per-mount grants, memory-store writes + MEMORY.md index, session-prep splicing.
  4. Composite systems — composite-system solve skeletons (cz-2transmon.jl, cz-rydberg-global.jl) + SolveSpec formulation migration.
  5. Chat/model UX + docsamicode.defaultModel setting + in-chat set-default-model bridge, bidirectional clipboard bridge (copy-back + image paste), user-facing docs/open-core README rewrite.

⛔ Gates before merge

  • Fork-side senders don't exist on any pushed opencode branch. The extension side here listens for clipboard-write, clipboard-image-request/clipboard-image, and set-default-model from the framed app — nothing in the fork emits them yet (only the older clipboard-request paste bridge, kate PR 0.1c — Ship the amico-validate CLI and gate the schema set in the CI fast tier #17). Until a fork PR lands and a new binary is vendored, those three features are dead listeners. @aarontrowbridge — do you have this on your machine unpushed? If not, say so and we'll write it extension-repo-side.
    (Everything else in the branch — devices, QICK, substrate, amico-run, skeletons — has no fork dependency and works as-is.)
  • f482031 deletes preferredModel() entirely (fixes "set to qwen but defaults to deepseek" — the pin stomping user choice). Real bug, right instinct — but full deletion also removes (a) the sane fresh-install default (the hanging-preview-model bug this function originally fixed) and (b) the planned auto-switch to anthropic/claude-sonnet-5 once Anthropic creds land. Proposal to discuss: restore as fallback-only (pin only when the user's global config has no model), which fixes the report and keeps both behaviors.
  • CI green on the merge ref — semantic check that the preferredModel deletion coexists with solver: issimo entitlement switch — watcher, config re-prep, server restart, AGENTS solver-mode #127's solverModeSection additions in the same file (textual merge is clean; typecheck/tests are the proof).
  • Post-merge follow-up (not blocking): fork PR merged → cut fork release → bump vendored binary in the extension so the bridges light up in shipped builds.

Review pointers

  • 10 new test suites ride along (formulation, qick_client, qick_job_server, device_*, substrate mount/vault/user-splice, composite_skeletons) — first CI exercise happens on this PR.
  • The docs/README rewrite (4b4af0e) changes the repo's public-facing posture — worth a deliberate read, not a skim.

🤖 Generated with Claude Code

aarontrowbridge and others added 30 commits July 9, 2026 03:32
Introduce the `amico` verb-router surface over the existing amico-run
launch path, non-destructively. No package rename, no removed behavior.

- Extract the launch body of cli.ts verbatim into src/launch.ts
  (`main` → `launch`); cli.ts becomes a thin `amico-run` bin wrapper. This
  lets BOTH the `amico-run` bin and the new `amico run` verb call the SAME
  launch path with no behavior fork.
- Add src/amico.ts — the verb router. `run`/`resolve`/`sandbox` delegate
  verbatim to launch (`amico <verb> <args>` ≡ `amico-run <equiv-args>`).
  `--help` lists the full verb surface; unknown verb → exit 64.
- Add src/verbs.ts — spine bookkeeping verbs (catalog/vault/device/note) as
  B1 STUBS: print intent + the module/slice each will generalize, exit 0.
  Real bodies are B2/B3/B5.
- Add src/mcp_serve.ts — the optional MCP facade over the same verbs. STUB
  seam only: `--list` renders the verb↔tool mapping; the transport carries
  ZERO MCP SDK dependency so it stays within the S31 no-MCP guard (landing
  the real transport needs an explicit S31 amendment, as spec C did).
- esbuild builds both dist/amico-run.js and dist/amico.js; package.json adds
  the `amico` bin; launcher/amico mirrors launcher/amico-run.
- test/amico.test.ts covers router dispatch: --help surface, unknown-verb
  →64, verbatim run/resolve/sandbox delegation, stub verbs, mcp-serve facade.

All existing amico-run tests stay green (106 → 120 with the 14 new router
tests). Spec-20260708-112732 §7.3; plan-20260708-214610 slice B1.

Closes #108

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Component/Coupling/CompositeSystem types + closed enums (Role/CouplingKind/
Topology/DriveArch); validateCompositeSystem (open platform, per-component
levels>=2, unique ids, coupling id-refs, mode-mediated exactly-one-mode) +
soft compositeSystemWarnings. Alongside the flat SystemEntity (untouched) so
each commit compiles. +10 vitest (47/47). Spec §2.1/§2.3/§7.1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
platformDefaultRole/Arch (spec §2.1 table); normalizeSystem read-shim
(idempotent on composite, notes carried); updateCompositeSystem normalizes a
flat existing first (F1 — flat on-disk + composite patch merges cleanly);
compositeSystemToml (AoT + inline params, smol-toml round-trip verified);
canonicalJson unchanged (drops notes). +6 vitest (53/53). Spec §6/§2.3.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
expandTopology (single-pair->1 edge, linear-chain->N-1, custom->[], deferred
presets throw §9); replicateHomogeneous (q1..qN, deep-copied params). Pure.
+7 vitest (60/60). Spec §2.3/§4.2/§7.3/§7.4.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
pick_system seeds an N=1 composite (platform-default role/arch, known-platform
levels=3 on components[0]); set_model accepts components/couplings/topology/
drive_arch (+ levels/drive_max/params back-compat onto the first component).
F1: normalizes a flat on-disk existing before merge, and recordEntity
normalizes the system before-snapshot -> no spurious flat->composite diff.
F2: a non-custom topology preset expands to edges via expandTopology
(coupling_kind-stamped). Array args use nested-optional-safe schemas
(item required omits levels; never type:[..,null] inside items). Verified:
60/60 entities vitest + bun parse/resolve (plugin not tsc-covered by design).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… interview

AGENTS.md + SCORE.md MODEL stage rewritten for the composite System: ask
STRUCTURE first (count / homogeneous? / topology / drive-arch, singly), then
batch the mechanical per-component params in one question form (homogeneous ->
ask once, replicate to N); record via ONE composite amicode_set_model call
(components upserted q1..qN; topology preset + coupling_kind expands to edges;
drive_arch). Single-qubit stays the N=1 flow. Adds the frontier-batching
policy (batch mechanical, keep semantic singular; value/relevance guardrails)
and the stage-gate note (STRUCTURE/COMPONENT-PARAMS/COUPLINGS are model
sub-steps, gate sequence unchanged). SCORE version NOT bumped (guidance prose,
not a stage-contract change). Prose; verified by Task 9 fixtures + Task 10 live.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…xtures

AGENTS.md gains the Composite authoring map (components/couplings/drive ->
Piccolo constructor: TransmonSystem / MultiTransmonSystem / {Global,LocalDetune,
Zoned}RydbergSystem / bosonic / mode-mediated; free_phase=N; EmbeddedOperator on
the subspace) with the free-tier honesty caveat (authoring-aware, NOT tier-
wired). Three golden reference skeletons (2-transmon CZ, Rydberg CZ global,
cavity+qubit) + a snapshot presence-check vitest (3/3) — structural only, NOT a
mapping function (F3; §9 non-goal). Spec §5/§7.7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ewrite

Restore the exact **MODEL** stage marker (was **MODEL (structure-first…)** →
broke the stage-chain assertion) and un-wrap "scalar gate time" onto one line
(the T-vs-N guardrail regex needs it contiguous). Behavior/content unchanged;
agents_md.test.ts 19/19 green again.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the B1 `catalog` stub with a working spine bookkeeping verb backed by
the pulse repertoire (~/.amico/vaults/armonissima/catalog/pulses/<id>/metadata.toml,
the amico-catalog skill's Phase-0 schema). Two subcommands, both deterministic
filesystem work callable via bash by either runtime, the harness, or cron/CI:

  amico catalog query  --platform <p> --kind <g>
      → the incumbent pulse metadata for (platform, gate) + the ranked candidate
        list (fidelity desc; ties broken by shorter duration). This is the
        warm-start lookup the interview does before authoring a solve.

  amico catalog ingest --platform <p> --kind <g> [--from-run <dir>]
                       [--artifact <file.jld2>] [--fidelity <f>] [--agree …] …
      → the PROMOTION path, GATED on verification.agree (matching the existing
        semantics — a run is promotable only when the independent re-rollout
        agreed: verification.toml `agree = true`; --from-run reads it, or pass
        --agree explicitly). When gated open it promotes iff the candidate beats
        the incumbent (amico-catalog Version rule), writing a new
        {platform}-{kind}-v{N+1} entry (metadata.toml + copied pulse.jld2) with
        `warm_start` lineage back to the incumbent. agree≠true → blocked (64);
        no beat → no-op (0); promoted → 0.

Design notes:
- Pure core in repertoire.ts (loaders never throw; a corrupt/missing catalog
  degrades to empty, like src/catalog.ts's template/exemplar loaders); the verb
  body (arg parsing + writes) in catalog_verb.ts. verbs.ts wires catalog.run to
  it and marks it non-stub; vault/device/note stay B1 stubs. One impl backs both
  the CLI (amico.ts) and the mcp-serve facade (unchanged).
- $AMICO_CATALOG_DIR overrides the pulses dir (tests point it at a temp catalog).
- FLAG NAMES honor the S31 guard (test/s31.test.ts bans the physics-knob
  double-dash flags gate/pulse/system in src/): the gate discriminator is `--kind`
  (issue #111's surface, maps to the `gate` field) and the pulse-artifact PATH is
  `--artifact` (a file path, not a physics knob — same category as spec/from-run).

Tests: repertoire pure logic + query/ingest through the dist/amico.js bundle
(mirrors amico.test.ts / subcommands.test.ts); amico.test.ts's stub loop drops
catalog (now real) and asserts it routes to query/ingest. amico-run 141 green,
extension fast suite 435 green. Stacks on #118 (B1).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bring in Kate's Run Inspector redesign (PRs #116, #117): overlay pulse
plot, metrics rail, fidelity≠objective fix, gated auto-open. No overlap
with the composite-system files (entities.ts, amicode_tools.ts, AGENTS.md,
SCORE.md, tests) — clean merge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… verbs

Replaces the three remaining B1 stub verbs with real bodies, following the B2
pattern (pure core + `*_verb.ts` body + tests, wired into verbs.ts/amico.ts):

- `amico vault query` — read-only knowledge-graph retrieval. Ranks
  insights/experiments by relevance (title > tags > body) to a `--q` query,
  with `--type/--platform/--kind/--limit` filters. Pure core: vault_query.ts.

- `amico device status|next|lock` — the dispatcher successor (§3.1 / W-2). Pure
  evaluate()/nextActions() over an acyclic calibration graph (ported from the
  device-management branch, stripped of vscode/server coupling):
  * status  — DeviceStatus projection; honesty rule (uncharacterized/stale by
    TTL, suspect on a moved dependency) — never a fabricated number.
  * next    — ranked actions, roots-first; qilc nodes surface the Intonatissimo
    premium funnel (product + capability, never the method acronym) + standard
    fallback.
  * lock    — benchmark-exclusivity: a device under a benchmark allocation
    accepts no concurrent submission and suspends leaf fan-out; a concurrent
    acquire by another owner is refused, same-owner re-acquire is idempotent.
  `--now <iso>` pins the evaluation clock for deterministic replay. Pure core:
  device_graph.ts.

- `amico note write|bump-best` — the librarian's deterministic bookkeeping half
  (§3.1 / W-3): write a fully-templated experiment note; bump a system-context
  note's best_gates only on strictly-higher fidelity (surgical frontmatter edit,
  rest of the note untouched). Pure core: note.ts.

The dispatcher agent is retired: its lookup becomes the pure `device` verb.
All four spine verbs now have real bodies; only mcp-serve remains a seam.

S31: flag names sidestep the banned physics-knob double-dash flags
(gate/pulse/system) — the gate discriminator is `--kind` as in B2; test/s31.test.ts
stays green. Env overrides ($AMICO_VAULT_DIR, $AMICO_DEVICE_DIR) mirror B2's
$AMICO_CATALOG_DIR for testability.

Tests: +50 (vault_verb/device_verb/note_verb), amico.test.ts stub-block replaced
with real-routing assertions. Full amico-run suite 191 passed (was 141).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the hardcoded platform-skill name list with `surface: product`
frontmatter discovery (spec-20260708-112732 §4.5/§7.1). `resolveLibrarySkills`
now scans each library root and stages ONLY skills tagged `surface: product`;
`internal` and untagged skills — the ~44 process skills in the same library —
are dropped. The tag is now the least-privilege leak guard the hardcoded list
used to be. Staging still copies only the selected set to the per-session stage
dir; `skills.paths` never points at the library root.

- readFrontmatter parses optional `surface` string
- resolveLibrarySkills(roots, isEntitled?) — surface-tag discovery, first-root-
  wins, malformed/missing skipped, entitlement seam wired
- GATED_PRODUCT_SKILLS + isProductSkillEntitled: §7.1 entitlement hook, empty
  today (all 10 product skills public) so a no-op, gated by a one-row edit later
- call site wires isProductSkillEntitled; drops platformSkills option + the
  amicode.platformSkills setting; DEFAULT_PLATFORM_SKILLS kept as the golden
  reference set (now the 10 product skills)
- tests: 10 product skills discovered from the real amico-plugin root; internal
  (pr/debugging/dream) explicitly excluded; untagged excluded; entitlement seam

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… Task 7)

Legacy FormulationEntity → LegacyFormulationEntity; new structured
FormulationEntity (trajectory_type/time_mode/parameterization/robustness/
free_phase/leakage facets + typed objectives[]/constraints[]) + closed-enum
consts. Types-only scaffolding; validate/toml/tool bodies rewritten in
Tasks 9/10/11 (tree intentionally inconsistent until then).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ation corpus

spec §3.1.3,§8,§10 / plan Task 8. Legacy free-form → structured facets
(idempotent, never throws); pure updateFormulation (normalize-then-upsert).
Canonical corpus at test/fixtures/formulation-migration.json (fork mirrors it
in Task 12). 14 tests green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (spec §3.2 / Task 9)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… tests

spec §8 / plan Task 10. formulationToml emits the typed facets (inline
robustness/time_params/leakage_params tables + [[objectives]]/[[constraints]]
array-of-tables). Migrated the legacy FORM fixture + its TOML/validate/solve
assertions in amicode_tools.test.ts to the structured shape. 79 tests green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ites + warnings

spec §3.3 / plan Task 11. amicode_formulate takes typed facets (no legacy
string args; legacyJsonSchema-safe item schemas), routes the merge through the
pure updateFormulation, and surfaces formulationWarnings(merged, N) on the
response (N from the sibling System). recordEntity now normalizes a formulation
`before` snapshot too; amicode_solve normalizes its formulation read before
re-serializing (spec §3.1.3 all-read-sites-normalize). Tool execute() is not
vitest-importable (module side-effects) — behavior verified at Task 17 live;
pure merge/warnings/normalize already covered. Parse-clean; suite 483 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…g map (spec §7 / Task 16)

AGENTS.md + SCORE.md formulate stages rewritten around the typed facets
(trajectory/time/parameterization/robustness + free-phase/leakage flags;
derived primary objective; typed constraints). New "Formulation authoring
map" section (facet → Piccolo template/kwargs). SCORE version NOT bumped
(guidance prose). agents_md.test.ts +1 marker; stage-chain + T-vs-N guardrails
preserved. Full amicode suite green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ec A §2)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…e() (Spec A §4)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ory.jsonl (Spec A §4.2; C6/C7)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… + entitlement seam (Spec A §3,§5)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ent predicate (Spec A §2.3,§5.2)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…; Spec A §3)

Host WebviewViewProvider + browser view + esbuild target, mirroring
run_inspector.ts: device-keyed postMessage protocol, replay-on-reopen buffer,
CSP+nonce shell, theme via VS Code CSS vars. Unit-tested under happy-dom (C4/C5).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…oop (Spec A §3,§5.1)

Wires registerDeviceInspector alongside the Run Inspector; contributes the
amicode.deviceInspector webview + openDeviceInspector/device.refresh commands +
device.name/graph/card/endpoint settings. A guarded 2.5s poll reads the graph +
state.json + (optional) job-server queue/health, builds the projection +
ranked actions, and posts them. Dormant until a device is configured.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…rd fixture)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…dead grey-out

Aaron 2026-07-07: advertise the Intonatissimo product name + 'closed-loop
calibration' capability at the point of need (lead-gen), while the private
method stays gated. NextAction gains a premium{package,capability,invite} funnel;
user-facing copy names Intonatissimo, never the method acronym. +1 test.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… (logo atom)

Kate's inspector-redesign (#117) replaced atoms/icon's mark() with
atoms/logo's logo({variant}). Mirror the same substitution the Run
Inspector made so the Device Inspector view typechecks on current main.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…es + lock bump

AGENTS.md: Voice "Atomic" bullet scoped to interview questions;
"## Style: Terse" -> "## Style & formatting" (rich GFM, lead with
outcome, readable-beats-brief, LaTeX for all math). Companion to fork
patch #18 (anthropic.txt) — custom-prompt agents like pulse-designer
bypass the provider prompt and only see these instructions.
opencode.lock.json: ref -> b81fb756f2 (the patched fork commit).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tput port)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
aarontrowbridge and others added 27 commits July 10, 2026 18:06
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t prompt append)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…gn to #117 idiom)

Mirror the Run Inspector's reveal gate on the Device Inspector so the panel is
strictly button-press-only and VS Code never restores/auto-opens it:

- package.json: add "when": "amicode.deviceInspectorRevealed" to the view.
- device_inspector.ts: add DEVICE_INSPECTOR_CONTEXT_KEY + revealDeviceInspector()
  (setContext true → focus), structurally identical to INSPECTOR_CONTEXT_KEY /
  revealInspector; reveal() now funnels through it instead of a bare focus.
- extension.ts: amicode.openDeviceInspector calls revealDeviceInspector().
- test: assert the reveal order (setContext true → focus) and the package.json
  gate. No webview-internal (overlay/metrics-rail) changes — that lane is Kate's.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ecedence (vault-cli spec canonical order)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…recedence (spec-20260707-002846 C1)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…a stack

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…60707-002846 C3/C4 read side)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…_intent fallback

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… prep (spec-20260707-002846 C1–C4 read side; C2's compaction knobs deliberately deferred)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…260707-002846 C4)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rebase onto the redesigned inspector idiom made device_inspector_webview
import the logo atom (media/*.svg); the loader line existed only on the other
two webview bundles.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…erbs

Layer 0 of spec-20260711-132200 (skill/verb/harness integration):
- esbuild staging ships launcher/amico + dist/amico.js beside amico-run, so
  the existing PATH prepend resolves the spine verbs (catalog/vault/device/
  note) — previously implemented but absent from the .vsix and never on PATH.
- AGENTS.md gains a Bookkeeping-verbs section (catalog query + vault query
  before authoring; note write + catalog ingest after FINISHED; vault
  status/resolve) and the vault layout convention line (kills the invented
  flat-path read-error class — 16 occurrences in session mining).
- Onset router: deprecated amicode_ask -> native question tool (matches
  AGENTS.md L176 and pulse-designer SCORE.md).

Evidence: 6-session probe study + 194-session mining, 2026-07-11.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…vault context

'What can Amico do?' previously rendered a fixed template. Now the section
instructs composition from the splices already in context (recent problems,
pulse bank, mount stack, skill index): open with the user's own results by
the numbers, personalize the menu and the closing next-moves, sell the
flywheel to fresh users. Probe sessions showed the agent already cites
spliced fidelities accurately — the template was the only thing keeping the
answer generic.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The agents_md test pins 'How I work (author-first)' — correctly: it is the
product's posture statement. The composed answer must always include it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n stack)

Fold the other sessions' amicode work (local/night-preview-20260711) into
composite-system so a single rebuild carries everything. Clean auto-merge —
the two tracks touched largely disjoint files.

Brings in:
  · Device Inspector (Spec A) — webview, QICK HTTP client, calibration graph
    loader, device-status projection, registry, entitlement seam, poll loop;
    gated to open-on-button-press per the #117 inspector idiom
  · amico verb router (#108) + catalog (#111) + vault/device/note bookkeeping
    verbs (#113)
  · Armonia mount-stack resolver + per-mount grants + memory-index/user splice
    at session prep; distiller typed memory store + MEMORY.md index
  · pitch: capability answer composed live from spliced vault context
  · library skills staged by surface:product tag

Already present on composite-system (unchanged): composite System + typed
Formulation entities, the pulse-designer SCORE/AGENTS authoring map.

NOT included (separate call): aaron/scores-runtime (20 commits, not in
night-preview). backup/* and b4/b5 prototypes intentionally excluded.

Verify: packages/extension tsc --noEmit exit 0; vitest 568 pass / 57 files
(incl. device_inspector_view, substrate/*, scores/*).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…model knob

The default model was resolvable only in code (resolveModelPin: global
~/.config/opencode/opencode.json model, else a creds-based fallback) — no
Settings entry, so users couldn't find where to set it.

Add `amicode.defaultModel` ("provider/model-id", e.g. anthropic/claude-sonnet-5)
to contributes.configuration. When non-empty it wins as the injected config
model pin; empty preserves today's behavior (resolveModelPin). The in-chat
picker still overrides per session.

Precedence: amicode.defaultModel > global opencode.json model > creds fallback.

Verify: tsc --noEmit exit 0; package.json valid; opencode_config + packaging
tests 21 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…odel

Handle the iframe→parent {source:"amicode", kind:"set-default-model", model}
message from the dashboard model control: update amicode.defaultModel (Global).
Added to the renderHtml relay allowlist. Validated "provider/model-id" only,
≤200 chars — the payload is untrusted. Pairs with the fork-side dashboard
control that also sets the live opencode model store.

Verify: packages/extension tsc --noEmit exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…choice

Report: "set to qwen but defaults to deepseek-v4-flash-free". Root cause:
the extension injected a hardcoded fallback into config.model, and opencode
resolves the session model as configuredModel() ?? recentModel() ?? default —
so config.model (the forced fallback) OUTRANKED the user's recent pick,
permanently overriding it.

resolveModelPin() now returns undefined — no forced pin. The only pin is an
explicit amicode.defaultModel (caller passes it first). Empty → opencode uses
the user's recent selection, else the provider default. Removed preferredModel
(the deepseek/claude fallback). A user wanting a fixed default sets
amicode.defaultModel (or a model in their global opencode.json).

Verify: tsc --noEmit exit 0; opencode_config tests 18 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add docs/ (getting-started, features, hardware) and rewrite the README
from a docs-authority pointer into a product-facing overview: conversational
solves, platform skills, Armonia mounts, Run Inspector, Pulse Catalog, and the
QICK/RFSoC hardware path via IntonatoQICK.jl. Open-core framing throughout;
closed-loop hardware calibration named as an entitled capability only (method
scrubbed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The framed opencode app can't reach the OS clipboard directly. Add two paths
mirroring the existing paste bridge:

- clipboard-write: in-chat copy posts text to the host, written via
  vscode.env.clipboard so the paste bridge reads fresh content (visibility
  gated; payload bounded to 5 MB since it is LLM-rendered/untrusted).
- clipboard-image-request: answered client-side in the outer webview, where
  navigator.clipboard.read is granted (the sandboxed iframe and text-only
  vscode.env.clipboard can't). Reads the first image/* item, replies as a data
  URL; on any failure replies dataUrl:null so the app falls back to text paste.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Rchari1
Rchari1 requested a review from aarontrowbridge July 14, 2026 20:09
@Rchari1

Rchari1 commented Jul 14, 2026

Copy link
Copy Markdown
Member Author

Superseded by #136 — same content (all of local/composite-system) plus the merge-conflict resolution against post-#127 main (opencode_config.ts + the solver-watcher call site), locally verified with tsc + 568 green tests. Closing so CI and mergeability live on #136.

@Rchari1 Rchari1 closed this Jul 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants