Repository navigation
Reconcile feature/free-tier-fleet with main (v3) - #1763
Merged
jeonghun-jj-lee merged 63 commits intoOct 11, 2026
Merged
Conversation
…ub home (#1558) (#1559) A linux hub home embedded literally into the remote census command is unreachable-by-construction on every macOS client (ssh relays sqlite3's exit 1, the client reads as unreachable, the watch silently never censuses the one machine with a real fork history). Re-express the remote db path as "$HOME/<suffix>" when it lives under the hub home — the remote shell expands its own home; exotic layouts keep the quoted literal.
…ection refresh (#1560) (#1561) The Fleet (live) block's two artifacts had no cadence on the canonical server: fleet-status.json was last collected by hand and the projection cache was a one-shot. Versioned systemd pair (5-min, launchd parity) runs fleet-status.sh then 'amico fleet status --projection' — exit 75 (the honest unenrolled-host bootstrap exception) is SuccessExitStatus, never a failed cadence. PATH rides in the unit (#1558's lesson: systemd's default PATH resolves /usr/bin/node v12 on erlich, which SyntaxErrors the dist). README + install.sh rows.
…1528) * feat(session): thin Jev client — confirmed wire contract, key posture, decision-record receipts (#1311) * feat(session): jev curation call sites — residual choice + calibrated admission gate + thread-noul map (#1311) * feat(session): jev calibration battery — recorded sweep numbers gradable + live on-demand harness (#1311) * feat(session): jev classifier residual in autoarchive — p≥0.95 + fixed 48h admission, fail-open, hermetic harness (#1311) * feat(session): onset thread-noul — jev-ranked promotion in the digest + the derived-map pass verb (#1311) * fix(session): carry choice probabilities through residual verdicts so the battery Briers live reads (#1311)
…nds (#1526) The D6 transition's consumer half (spec-20260905-103000): a pure, deterministic renderer of the composition — the portfolio folds from campaign session-ledgers ONLY (one line per campaign: objective, state, last loop boundary, blockers), render order = the direction tiers joined through the campaign→direction map, unmapped after; health stamps inline from the merge receipt (SHA + merged date + age; anomalies; coverage) — staleness is IN the render. Degradation renders NAMED UNKNOWNS, never a silent drop. The render date is an explicit input (--as-of), never a hidden clock. One renderer, two paths: the weekly synthesis calls it; the rewritten amico-strategy skill is the on-demand loader — and it now exposes NO intent-write verb (the dead P-list doctrine is gone from its body). The amico-strategy SKILL.md rewrite kills the single most misleading surviving consumer of the old model ('P1 is always top priority', 'planning agents update this file'). The amico-run strategy-brief verb rides the existing trySubcommand dispatch. Full package suite green (97 files, 1637 tests) after the bundle build; the renderer's 7 tests pin determinism, the tier join, anomaly naming, health stamps, receipt degradation, and the honest empty portfolio. Part of amicode #1310 (plan-20260920-general-research-engine step 6).
… the calendar (#1655) The fixture seeds ses_a1 with updatedDaysAgo: 2 — relative to now — but the assertion compared the index's month section against the CURRENT month. In the first days of each month the two disagree (Oct 1: the seed landed in September) and the test reddened clean main. The expectation now derives from the same 2-days-ago timestamp the seed uses — month-boundary-safe by construction.
…lidated gate-unitary leg Closes #1656 — the Pasqal-campaign's filed connector findings: - S-20/S-19: pulse_contract warns (never rejects) when the pulse does not return to idle (Ω=Δ=0) at its endpoints — the missing return-to-idle check; H17 measured the clamp costs nothing and pays on both legs. - S-14: translate_and_simulate's verdict vocabulary distinguishes 'not a single-atom π pulse' from 'bad pulse' — a validated entangler now prints PASS with an out-of-scope note (exit 0) instead of FAIL; the one real FAIL is emulator-vs-solve disagreement (an integration problem). - S-5/S-10/S-13: the gate-unitary verification leg ports from the campaign's validated emulate_gate_unitary.py — order=0 ZOH-faithful integration (qutip 5's cubic-spline default trap), the trailing-zero restore, free-phase scoring in the emulator's r-first basis, and the modulated physics leg with ops-failure discipline. Reproduces the campaign's cz_b numbers bit-exact (F_emu_free 0.9990173718245104, theta* 1.348266847165619). - S-4: pin the emulation leg deps (pulser 1.8.0, pulser-simulation 1.8.0, qutip 5.3.1) and record the durable venv's freeze. - S-2 demo half: solve_x_gate.jl emits :constant-rollout fidelity, pins endpoints to idle, and stamps provenance keys. Tests: 72 pass (was 55) — new idle-endpoint, verdict-vocabulary, and campaign-regression suites.
…y the idle-endpoint doctrine Regression finding from the #108 end-to-end chain re-run: zeroing the seed's edges (a feasible-x₀ nicety) landed the X-gate solve in a slower Ipopt basin (F=0.9995 @ 300 iters vs the recorded 0.99999999 chain). The Jul-8 demo already pinned idle endpoints through ZeroOrderPulse's default zero boundaries — the S-19 bug (pinning to the seed's nonzero edges) lived in the campaign scripts, not here. Keep the explicit zeros(2) pins for doctrine visibility, keep the seed: the chain reproduces the recorded quality (re-sim 0.999998, agreement 7.15e-5 within the suite's 1e-4 physics tolerance; the emitted :constant fidelity 0.99993 is the honest staircase number the old smooth emitter overstated — the S-2 fix working as intended).
…am's documented contract (#1654) The notturno weekly-synthesis engine invokes 'bun …/src/amico.ts strategy-brief …' — the renderer was wired only into launch's subcommand table (trySubcommand), so the top-level head fell to the router's default and the seam died as 'amico: unknown verb "strategy-brief"' (dry-run 36836288143). Mirrors the resolve/sandbox/estimate pattern: case 'strategy-brief' → launch(['strategy-brief', …rest]).
…— 0.23.0's deps conflict with pulser 1.8.0 (ResolutionImpossible, caught by the provisioning gate)
…nnector fix(pasqal-connector): idle-endpoint warn, verdict vocabulary, the validated gate-unitary leg (#1656)
…Integrator is open-core (S-18 tag-vs-git-tree split stated); re-ground the tier value on performance flags + specializations (#1663)
…l-fix fix(piccolissimo skill): correct the stale no-spline-backend claim (#1663)
…md source (#1665) The staged server AGENTS.md (the hand-maintained hub prompt served to every session on erlich, a Linux host) shipped with four mac-rendered /Users/aaron paths — scrubbed and captured byte-identical at ops/server/hub-AGENTS.md by #856. But the #856 guard scan walks only extension-package surfaces, so the ops/ capture itself was unguarded and could regress to mac-rendered paths undetected (the exact #850 audit lens 0b finding). Pin the invariant hermetically — the fixture is the file itself: the hub staging is Linux-targeted, so a /Users/ path (or a machine-absolute /home/<user>/ or platform-suffixed vendor dir) in the source fails the check. Bites verified by planting both regressions (RED), then green on the restored capture.
…the PATH-shim-to-moving-checkout hazard (#1666) All five bin launchers (amico, amico-run, gh, amico-pasqal, amico-git-credential) now resolve a PINNED dist root (${AMICO_CLI_PIN_ROOT:-~/.amico/server/cli}/<bin>.js) first; AMICO_CLI_FROM_CHECKOUT=1 is the explicit dev override back to the checkout dist, which stays the pre-pin fallback. Observed hazard (2026-09-25): the live shim served a stale side-checkout on an old branch for weeks. Hermetic resolution-order table (pin present/absent × override on/off, default root, five-shim sweep, incomplete-pin degradation) via a stub node on PATH.
…undle convention (#1666) ops/install-cli-pin.sh copies the built dist bundles to the pinned root (~/.amico/server/cli, AMICO_CLI_PIN_ROOT-honoring) and writes a shasum-format sha256 sidecar per bundle — the papers-digest convention applied to the CLI itself; wired into ops/install.sh's deploy list and documented in ops/README.md's pinned-CLI-root section. amico doctor gains the pinned_cli record (same checks-table pattern): root + bundle count + amico.js sha + sidecar freshness — a mismatched or missing sidecar is an integrity error, an absent pin the pre-pin warning. Pure core (probes injected); hermetic installer + record suites.
…+ doctor record
…umers (#1667) The launcher dir now holds exactly {amico, amico-pasqal, amico-git-credential, gh} (asserted by a new launcher-set test); the cli.ts shim entry and its esbuild + bin-map entries are gone. Every test that spawned dist/amico-run.js spawns the amico router instead (amico run / amico resolve / amico estimate — the documented byte-for-byte delegation), and the CI producer lane (packages/schema/scripts/producer_roundtrip.sh) launches through `amico run`. No test deleted or weakened; assertions unchanged, spawn targets re-pointed.
…1667) The launcher-dir probe (opencode_paths / terminal) keys on the amico verb router — a leftover amico-run shim no longer satisfies resolution (asserted). The boot availability warning names the amico CLI. The agent-facing strings (solve instructions, routing/HP guidance, tool descriptions, the run stub's launched_via) teach `amico run` / `amico estimate` — the documented equivalence. healthcheck + the packaged-CLI gate probe the amico bin; the gate's orphan amico-run probe entry is removed (fail-closed now keyed on the bin map's four remaining bins). A retirement test pins the grep rule: every amico-run occurrence in extension src/ + opencode-plugin/ must name the package (@amicode/amico-run or a packages/amico-run path), never the bin. No test deleted or weakened — assertions migrated with the surface.
…awn, CI lane, test consumers
…cabulary (#1668) The bin is deleted (#1667); the core doc/test set still taught it as a command. Sweep ~30 files — repo AGENTS.md/CONTRIBUTING/README, docs/ledger-bridge-contract, ops/README, the staged hub-AGENTS.md (active-command level only — the structural re-cut is #1670), the extension package docs, scores templates + SCORE.md, the shipped templates/exemplars/packs/skills — replacing active amico-run teaching with the five-verb surface (AUTHOR·EXECUTE·VERIFY·REMEMBER·METER) + `amico run`. Package specs, folder paths, ADRs, and session-receipt fixtures stay (the sanctioned/historical forms). Pins it with packages/extension/test/amico_run_doc_residue.test.ts: any new doc reference to amico-run as an ACTIVE command fails the check (package-spec / folder-path / historical framing exempt). The vetted template header change rides the pack corrector's sha256 manifest; golden compiled scores regenerated.
feat: the amico-run sunset begins — the A1′ campaign's first frontier (#852)
…, the deny-list gate (#1669) (#1675) The #852 step-6 A1′ leg: the scheduled-agentic-work vocabulary — register · warrant · run-a-pass · record — as public amico CLI surface, parity over rewrite. `amico notturno registry-check` parses the SAME notturno.toml the Python engine reads (smol-toml) and emits byte-equivalent coverage verdicts and parse errors; `list` renders the slate as typed rows (warrant tiers report/stage/gated as typed values with the Python enums' coverage); `pass` appends the exact scheduled-passes.md section bytes the Python bot writes (round-trip parity fixtures pin both directions). The instance deny-list (amicissimo #490's boundary artifact) is the load-bearing input: discovered beside the registry or passed via --deny-list, a deny row naming the registry fails LOUDLY (exit 64) with the named reason, pointing at the private instance's runner — before the org config even parses. The planted-violation test proves it bites; directory rows claim subtrees per the manifest's own rule. Fixtures: pinned snapshots of the live registry (12 jobs / 6 excludes), the committed manifest, and a Python-rendered scheduled-passes.md — ground truth captured by running the Python engine (amicissimo 12e1141) against them. Coexistence is the design: no Python deletion, no workflow edits. 43 new tests; suite 1829 pass / 2 skip; typecheck clean.
…ry (#1680) The nightly notturno job that distills the classified-substantive session backlog into candidate claim-notes with resolvable provenance: - `amico distill`: worklist = #1304's classifySession over the autoarchive feature fold (never a second classifier); junk is classified then never read for distillation (content pulls filter to eligible ids only) - ONE confidence-gated Jev Choice per eligible session types the candidate over the parent claim contract's closed set (insight|hypothesis|best- practice|hazard|method|none — jev_curation's third call site); statements + evidence are deterministic projections of the substrate rows - candidate claim-notes land in a dedicated candidate area with provenance frontmatter (session id, timestamps, source DB, evidence pointers); evidence is SALIENT (the fold's first/last-user + last-assistant rows) and resolves into the chat DB by construction; machinery never edits prose - state stamp (ops-dir distill-state.json, atomic write, fail-safe read) makes re-runs no-ops for already-distilled sessions - dry-run by default (report-only), --apply writes; the pass receipt files through the notturno_passes writer (job name, counts, duration), deny- list-gated + membership-checked + record-mode-respecting - the chat DB is opened READ-ONLY throughout — one substrate, no second capture path; jev disabled/unavailable is a named zero-delta no-op Tests: 23 hermetic (seeded fixture DBs, in-process jev injection, tiny fixture registries) + 1 live smoke (real DB, real Jev key, temp outputs), mirroring the #1311/notturno disciplines.
feat(amico-run): distill job on the chat DB — the brain flywheel artery (#1680)
The claim contract (brain flywheel slice 2, #1679): a JSON Schema fixture of record + the field-precise validateClaim seam + the closed vocabularies mirrored in TS + bucketConfidence (the ONE bridge from distill's numeric candidate confidence, defined here so slice 5 inherits it, never invents a parallel convention). Exactly the 10 contract keys, additionalProperties false — the frontmatter IS the claim object; provenance rides evidence pointers + append-only history, never extra keys. The spec sketch's 'hypthesis' is the parent issue's known typo, corrected deliberately (slice 1 did the same in jev_curation CLAIM_TYPES).
…n-keyed idempotent stamps (#1683) Brain flywheel slice 4 (#1679): the feedback loop closes — knowledge USED reaches the claim. An accepted recommend-outcome or a solve-run citation increments the cited claim's applied counter + last_applied and appends ONE applied history entry (the pinned vocabulary, no new event class); statement and status are never touched (adoption is a counter + a date, never a judgment — lifecycle stays slice 5's). - stamp: the callable verb — dry-run default, --apply writes; the citation must resolve into the substrate first (the event exists in the problem's events.jsonl AND is accepted; the run dir exists); re-stamping the same citation is a stamped:false no-op (the citation is the idempotency key, carried in the applied note's fixed convention). - sweep: the nightly backfill — walks every problem workspace's events.jsonl (the ONE machine-readable adoption record that exists today: the recommendation events amicode_recommend appends), pairs accepted outcomes with their propose's provenance refs, resolves refs mechanically against the registry (trailing segment; projection names claims after their cards), stamps; overridden outcomes are named, never stamped; unmatched refs are named skips. Idempotent: re-sweep changes nothing (byte-tested). - pure core in claims.ts (stampAdoption / isStamped / appliedNote / renderStampedNote / resolveClaimRef / planAdoptionSweep); prose below the frontmatter survives a stamp verbatim (renderStampedNote). - fixtures: stamp-registry (2 claims) + sweep-problems (2 event streams, a no-events workspace); solve-run citations have no machine-readable stream yet and ride the stamp verb — the honest seam, documented in the verb.
…te/refute, decay queue (#1684) The brain-flywheel slice 5: a pure lifecycle core (src/lifecycle.ts) + the verb. The same-claim detector merges near-duplicates onto the OLDER claim (similarity = 0.8·statement + 0.2·tags Jaccard, ≥ 0.75, same type + scope): evidence, tags, and adoption accumulate, the duplicate's history trail rides the survivor with a merged stamp (append-only, pinned vocabulary), the duplicate note is archived — never deleted outright. Status transitions run through the history: corroborated at 3 distinct evidence pointers, refuted on a contradicted-by-run signal from --signals (zero-evidence refutes refused — the #1681 lint invariant can never be violated by machinery). Decay is a PROPOSAL: claims unapplied beyond the 90-day window (aged from last_applied, else newest history activity) land in the review queue next to the registry — the pass never deletes and never changes a status on decay. Dry-run by default; --apply rewrites survivor frontmatter only (prose untouched). Findings (unactable signals, unageable claims) exit 1 — never silent. Hermetic fixtures: true-dup, near-miss, distinct, per-transition.
…cross-runtime deterministic (gate fixup)
feat(amico-run): adoption stamping — the feedback loop closes (#1683)
…ecycle (#1684) co-exist, both suites green
feat(amico-run): dedupe + lifecycle — merge, corroborate, refute, decay (#1684)
…rain flywheel slice 7, #1686) The two dormant intakes, wired into the claim layer: - amico extract-meetings: given a pending-tag meeting note, propose its three tag tiers (the meeting vault's OWN registry is the canon — closed tier-1 vocabularies, tier-2 entities minted only from the note's own attendee canonicals + partnership phrases, tier-3 themes free-form), a context-links section with resolvable links (transcript sibling, series sessions, this pass's hopper proposals), and next-steps → hopper proposals carrying resolvable meeting-note provenance. Where the closed vocabulary has no fit the proposal names the gap — never invented. - amico triage-papers: a relevance-high paper yields a claim-shaped hypothesis-seed proposal (frontmatter EXACTLY the claim object, a paper/ evidence pointer) against the problem cards whose platform identity matches the paper's systems — exact, no fuzzy bridging; no match → no seed, named honestly. - both: dry-run by default, idempotent on re-run (deterministic naming + bytes), the notturno pass receipt on the distill chassis gates (deny-list, job membership, record-mode self-filter), and the meeting vault / papers intake are read-only substrates — proposals land in a --out the caller names. - claims lint: the paper/ + meeting-note/ evidence-pointer kinds resolve (POINTER_KINDS + the lint's substrates extend the #1681 vocabulary). TDD: fixture notes per intake + idempotency assertions + live smoke green against one real pending-tag meeting note and one real high-relevance paper; claims/distill/lifecycle suites unchanged-green.
…tion motions as notturno jobs (#1685) Brain flywheel slice 6: the three weekly curation jobs on the claim layer, retiring the manual /dream invocations (docs/brain-flywheel-jobs.md). - promote: scope-team live claims → ONE PR-body bundle per vault (PR-BODY.md + verbatim claim copies with provenance footers), 10-cap with overflow carry, promote-state stamp for idempotence. PROPOSES ONLY — no git, no gh, no network; the double gate (author scope tag + human PR merge) is the trust boundary, and an existing bundle is never clobbered. - prune: the claims lint reused verbatim as the schema-check — its findings are DRIFT a human owns (exit 1); only unambiguous frontmatter fixes apply (duplicate evidence pointers, padded/duplicate tags), prose byte-verbatim. - synthesize: cross-claim tag clusters (3+ data points, high at 5+, live claims only) → hopper proposals (the hopper schema, deterministic slugs, idempotent skips). Proposes to the hopper only — no code path touches strategy. Each job files pass receipts on the distill chassis: --jobs <registry> + --dashboards, instance-deny-list gate before any body work, membership check (unknown job id = 2), record-mode self-filter, honest no-receipt skip. Pure core curation.ts (injectable clock, deterministic renderers); verb bodies in curation_verb.ts routed from claims_verb; HOT_STATUSES exported from claims.ts (one live-set source of truth). Hermetic fixtures under test/fixtures/claims/curation-registry; 53 new tests.
feat(amico-run): promote, prune, and synthesize on cadence — the dream cycle, employed (#1685)
feat(amico-run): meeting + paper triage — the two dormant intakes (#1686)
…milies, brief render (brain flywheel slice 8, #1687)
…ea, idempotent per period, receipt on the notturno chassis (#1687)
…port row + the measures-never-acts boundary (#1687)
feat(amico-run): brain-health report — the brain measures itself (#1687)
…urface (#1676) DirectTrajOpt 0.11 flipped the no-kwarg solve! default to MadNLP (QualityFunctionUpdate barrier; the #155 restoration audit — 0.99999996 @ 60 iters on the previously-failing seed class), Piccolo 2.2 inherits it. The solve surface follows: - pulse-designer solve.jl: SOLVER = :default (MadNLP) first — solver- agnostic construction, no options struct; the 60-iter budget stays (audit-safe); AMICODE_ITER rides a raw MadNLP.AbstractUserCallback via intermediate_callback, UserCallbackRegular-filtered (restore/robust fire without advancing the counter); explicit RelaxBound (a raw user callback manages its own fixed-variable treatment); :ipopt arm kept verbatim (IpoptOptions + the raw callback channel — Ipopt-only kwarg); version probe bumped to Piccolo 2.2 / DTO 0.11 (the MadNLP default). - pasqal-mis solve.jl: same dual-channel MadNLP construction + the DirectTrajOpt.Callbacks fix (Piccolo.Callbacks was the pre-0.10 re- home — dead since 2.1) + the version probe. - Q74 amended in the contract docs: the AMICODE_ITER channel is backend-native (MadNLP raw user callback / Ipopt raw callback), the Inspector is solver-agnostic; mode-filter note everywhere the ipopt- only fact lived (hub-AGENTS.md, ledger-bridge, solve_template*.jl). - gate solver expectations: backend enum += madnlp (both vendored problemspec schemas, matching the Piccolo 2.2 reflection); omitted- backend hashing + ledger defaults flip ipopt→madnlp (parse.jl parity — the cross-language problem_hash diverged on exactly those specs); MadNLP joins the import-scan support set (authoring DEFAULT_SUPPORT + registry.toml) + the pack corrector integrity refresh.
…8f209a (v2.2.0) — the byte-verbatim source supersedes the hand-set enum; sidecar pinned to the v2.2.0 commit
…istry-418 @1c6514a (the 2.2.0 emission) + update the oss-variant guard to the 2.2.0 public-kind contract — the demotion made the native integrator tier public (Piccolo's drift.jl in lockstep), PRIVATE_ONLY gains adjoint_robustness, the offered-kind equality assertions replace the dead private-integrator-kinds concept
…face feat(extension): the vetted templates ride the MadNLP-default solve surface (#1676)
…tly (#1703) The three failing tests gave the verb a named paper with no --papers flag and {} env, silently leaning on the dev machine's real personal mount (~/.amico/vaults) for the intake fallback. CI has no vault, so the verb exited 64 there ('no papers intake resolved') while staying green on any machine that happens to have a vault — the tests were born red in CI (their introducing run 37110536362 failed). Pass --papers explicitly in the named-paper dry-run, below-relevance, and apply cases, with the hermeticity rule inline: ambient vault state is never a test fixture. The curl 404/429 lines in the CI log are hermetic fake-curl stderr from the sota transport tests, not live network — the suite's one live call is already env-gated (AMICO_SOTA_LIVE=1).
test(amico-run): triage-papers named-paper runs pass --papers explicitly — restore main's fast CI (#1703)
…e gate, the generated index (brain flywheel slice 9, #1688)
…wn credentials arJev ships a first-class onboarding surface (init checklist-file, ingest seeds, key-based ranking) and a full agent runbook in its repo docs — but nothing in the skill library routes to it. This card is the dispatch target for 'set up arJev for me': install, vault adoption/init, the feeds interview, seeding (the Google Scholar My Library → BibTeX export flow spelled out, plus Zotero/PDFs/Slack), credentials that are always the user's own (their console.typesafe.ai key, their Slack app — human steps, mode-600 files, env only), the daily timer, and a verification gate on every stage. Post-onboarding it offers backfill and the v0.4 content arms as opt-in, never auto-flipped. Closes #1737
feat(amico-run): the public tier — promote --tier public, the two-note gate, the generated index (#1688)
feat(skills): arjev-onboarding — guided arJev setup with the user's own credentials
…leet-main-v3 # Conflicts: # packages/schema/src/index.ts
Contributor
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reconciles
feature/free-tier-fleetwithorigin/main(brings in main's 60 commits: amico-run bin deletion + five-verb vocabulary, claims schema, brain-health flywheel, MadNLP-default solve surface, pasqal-connector fixes, arJev onboarding skill, pinned CLI installer, distill job, public-tier promotion).The merge
packages/schema/src/index.ts— both sides added export blocks after the fleet_projection re-exports: feature's fleet_roster/version_skew/fleet_config/lifecycle_authority exports and main's claim-object exports. Union-resolved: both blocks kept.Semantic fix: amico-run retirement compliance (#1667/#1668)
Main deleted the
amico-runbin and added two lint tests. Four feature-added lines referenced the deleted bin:opencode_config.ts:1072— taught command string:amico-run <script>→amico run <script>sidebar_view.ts:424, 584— comments:amico-run enroll producer→@amicode/amico-run enroll producer(package-spec form)docs/fleet/relocation-audit-1270.md:113—amico-run resolve→amico run resolveManifest regenerated
refresh_manifest.mjsrun post-merge (913 overlay files, drift gate PASS).No regressions — verified locally