Repository navigation
0.4.0 backlog integration: 26 PRs + What's-new (#2001) + hermetic night gates (#2009) - #2011
Merged
Merged
Conversation
- SETUP.md: end-to-end walkthrough for creating the Slack app, installing it, wiring the MCP server, and troubleshooting - slack-manifest.json: ready-to-paste Slack app manifest with user + bot scopes (search:read user-only) Covers the pitfalls we hit: bot_user required for OAuth install, search:read invalid as a bot scope, redirect URI registration for amico slack login, and MCP server config in opencode.json.
…P-list model The amicode tail of the D6 consumer sweep (amico-strategy was #1317's half; armonissa #105/PR #106 carries the vault half). The spec-reviewer's conflict criterion now checks the live direction surface (PI-owned INTENT + conventions); the analyze skill triggers on 'direction needs informing' with the D6 routing inline, and its Strategy Suggestions output becomes Direction Suggestions reading the strategy brief. Zero live P-list references remain in amicode skills.
…measurement and sensing/metrology 'Seeded' means something now (plan-20260920 step 10): - The pack schema gains the domain keys (additive, optional at the schema layer so the flagship stays valid): curricula, payload_schemas, verification (contract reference + claim-class bindings), instruments (with the coverage scope bound), benchmarks, first_task (with the shakedown/substrate level ladder). scores minItems relaxed deliberately: a seeded domain pack legitimately carries no composed scores yet — the quantum-era single-pack contract, not the general one (test updated to the new contract, reason inline). - The pack lint: schema validation PLUS reference resolution (dangling refs = named findings) PLUS the seeded-key check — the flagship reads FORMALIZED (missing first_task), exactly the grandfathered design, and its snapshot-layout skill paths surface as the known real finding the step-14 formalization must reconcile (baked into the test so the reconciliation cannot land silently). - The two seeded packs, each with a verification contract (tier assignments, claim-class bindings), the payloads doc, the first-task declaration (shakedown-marked, NOT yet run — exercised is a run state, never a manifest state), a curriculum skeleton authored to be filled from measured practice, and corrector integrity manifests (load-time shas, the #369 pattern — found by running the loader). Verified: pack_lint 4/4 (EE + sensing seeded; flagship formalized with the known finding); scores suite 323/323; schema 284/284; packaging + gate_packs 65 passed. Loader loads all three packs clean (errors: []). Part of amicode #1328 (plan-20260920-general-research-engine step 10).
…GY.md model The D6 sweep's enumeration counted the spec-reviewer prompt and the analyze skill as the last amicode-side dead-model refs, but amico-schema-check's escalation step still told agents to append to STRATEGY `## Agent Suggestions` (the line predates the sweep — it rode in with the library-absorb chore). Same D6 routing as the analyze rewrite: agents never edit the direction surface; the finding routes to the amicissimo proposals surface.
…editing Records the Paper Mode design (epic #1620): a new committed-editing surface with the live Draft as source of truth, agent edits proposed as reviewable Pending Hunks, snapshot-base 3-way merge, per-hunk accept/reject with explicit conflict resolution, manual gated compile, and ADR-0017 ledger provenance for accepted hunks. Adds Paper Mode / Draft / Pending Hunk glossary terms. Refs #1620
A user-invoked skill that shapes every response to lead with the answer/next action, cut preamble and closers, number multi-step work, cap visible lists, give concrete time estimates, and state errors matter-of-factly. Persists for the session; toggled off with "normal mode"/"stop concise". Never auto-triggers. Adapted (MIT) from ayghri/i-have-adhd, retuned for Amico's research-copilot context and gate/verification/persona invariants. Supersedes the response-presentation engine epic (#1330) for the 'toggle concise on/off' need.
A little icon-only toggle (the 'collapse' glyph) beside the report-bug button
that turns the concise skill on/off by sending its own toggle phrases
('concise mode' / 'normal mode'). ON state uses the accent selected-state
tokens (--accent-fill-soft + --accent-edge); aria-pressed + a state-dependent
label carry the meaning so color isn't the only signal. Both themes, focus
ring and tokens inherited from IconButtonV2.
Lightweight by design — drives the skill, not a persisted engine setting.
Part of the concise-mode feature (with the skill in this branch).
Replace the ambiguous collapse-icon button with a real switch (Concise). It no
longer sends its own message: flipping it sets a persistent per-session flag,
and while on, a concise directive is appended to the outgoing prose message at
submit time (normal turns only — shell/slash unaffected), so the response comes
back concise. User text and history stay unmodified.
- concise-mode-toggle.tsx: switch (checked/onChange) + label, replaces the icon button
- prompt-input-v2: controller exposes concise {on,set}; passed into createPromptSubmit
- submit.ts: PromptSubmitInput.concise; conciseDraftPrompt appends directive to the sent draft
App typecheck clean; materialize manifest refreshed.
…isible text The concise switch appended a bracketed directive to the sent message text, which showed in the user's bubble. Move it to the message's per-turn `system` instruction instead: it reaches the model for that turn but is not rendered as a visible part. Threads system through FollowupDraft, the send call, the optimistic message, and the server-compat prompt bridge (forwarded to promptAsync's system). User text stays clean. App typecheck clean.
The 'Concise' switch label needs no hover description; remove the TooltipV2 wrapper.
Preview tabs were lost on webview reload: the active file lived in the non-persisted ephemeral store and the full open-tab set only in SessionPreviewTab's component-local workspace signal. Move both into the persisted per-session SessionView store (previewActive + previewPaths), reusing the serverGlobal machinery that already survives reload. - layout.tsx: SessionView gains previewActive/previewPaths; previewFile getter/setter repointed from ephemeral -> persisted store; drop the ephemeral sessionPreviewFile. - session-preview-tab.tsx: restore the workspace from the persisted list on mount (before the previewFile re-focus; idempotent), mirror open/close back up (gated on restore to avoid clobbering pre-hydration). - session-side-panel.tsx: wire openPaths/onOpenedPathsChange at both sites. - session-preview-tree.test.ts: open-paths round-trip invariants. Split-pane layout stays out of scope (#981). Implements the #1398 wiring in the persisted store so it covers reload as well as remount.
The persisted layout store hydrates asynchronously. The first restore ran before hydration (openPaths() still empty), the previewFile effect opened the active file, restore then bailed on openedPaths().length>0, and the up-sync wrote the shrunk [active] list back — clobbering the persisted list down to one tab. Only the active file came back on reload. Gate reconciliation on the layout store's `ready` signal (threaded in as `hydrated`): hold both restore and up-sync until hydration completes, then MERGE the persisted list with anything already open (union, persisted order) and keep the active tab focused. Extract the merge into a pure `reconcilePreviewPaths` helper and test it — the [a,b,c] vs open [c] -> [a,b,c] case is the regression.
…dits Regenerate the overlay content hashes (refresh_manifest.mjs) for the four files touched by this branch so the CI drift gate passes. Mechanical: the committed manifest must match the overlay's hashes.
… tab-switch) Replace the fragile reactive open-on-previewFile effect (the reopen/shift engine, which re-fired on every #1288 re-instantiation) with a single signature-guarded reactive restore that opens the persisted set idempotently — once per distinct value — so it survives async hydration and late session-key resolution and never loops or re-opens on a tab switch. - Delete the on(previewFile) open effect; live opens arrive via the mount message listener; a first-open-that-mounts is folded into the restore target (previewPaths ∪ active) with one deduped post-merge write to persist it. - Close reassigns previewActive to a remaining tab or null, so a closed file is never the active pointer that gets re-opened. - Extract the restore/close decisions into pure, tested helpers (previewRestoreTarget / previewMissingPaths / previewActiveAfterClose) that the component uses — the '1-of-N', reopen, net-new and close-reassign regressions are now unit-tested (18 pass). - Strip all debug diagnostics; refresh app-bundle manifest. Design of record + breaking-point analysis: #1640. Supersedes #1398.
Remove the temporary [PVKEY]/[PVDBG] console probes used to trace the cross-session bleed. Behavior unchanged; refresh app-bundle manifest. Known limitation (tracked separately): opening a file in one session's Preview can bleed into another session's Preview, because the prewarmer keeps backgrounded session views alive and the preview-file bridge message is an un-targeted window broadcast — every live SessionPreviewTab handles it. Not catastrophic; needs a foreground-session gate / session-targeted message to fix properly.
The composer wrapper becomes a named query container (.amicode-composer-cq); the concise toggle is wrapped and hidden via @container (max-width: 26rem) so it disappears when the composer itself is narrow — window narrowed OR side panel/split shrinks it — keeping the control row from crowding Send. Default (wide) visible; container-query-keyed so it adapts to layout, not just viewport.
…ore (#1651) The switch was a createSignal in the composer controller (per-instance state), so the new-chat -> session handoff and the Changes-tab remount reset it to off. Hold it in a module-level in-memory store keyed per session; a new chat writes under its draft key, promoted to the session key at session creation beside the agent/model promotion. Closes #1651
…rged client shards (#1658) Shard merges are #1302's by-hand flow (shard-watch is detection-only, #1306), and the hand-run re-home of the 2026-10-01 macbook shard doubled path segments on two home prefixes — directories that exist nowhere, sessions invisible to every panel listing. The re-home is now tooling, not SQL by hand: one explicit prefix substitution (client home → hub home; doubling is structurally impossible — the candidate is exactly hubHome + from.slice(clientHome.length)), validated to exist on the hub before writing, falling back to the shard's original directory when it does not (invisible-but-truthful beats invisible-and-wrong). Dry-run by default; --apply performs per-id UPDATEs and re-reads the touched rows to verify. planRehome is a pure function of (rows, clientHome, hubHome, exists) with the real doubled paths as regression fixtures; the verb's impure edges (bridge, fs, env) are injectable, mirroring shard_watch.ts. Verified: 9/9 new tests; typecheck clean; full amico-run suite 1772 passed with one pre-existing month-boundary flake in sessions_verb (expected 2026-09 vs 2026-10, already under repair on the sessions-index-month-boundary branch, passes on main); dry-run + apply on a copy of the real canonical DB seeded with a fresh shard re-homed every row to a real existing hub path with verification true.
…lls-integrity findings (#1677) The REMEMBER-family verb the pasqal-campaign lesson demanded: user corrections observed in chat sessions used to evaporate; now they file. Deterministic marker pre-filter (recall) over READ-ONLY chat-DB gathers → the ONE jev client (precision: correction-noul + kind + severity, three questions one call, receipts, fail-open) → clusters file skill-finding/skill-proposal notes at status: open in the personal vault per the skills-integrity TEMPLATE shapes, cross-pass dedup by UPDATE appends; P0/P1 ping via the amico-slack contract; dry-run by default; watermark; a dashboards/user-corrections.md digest.
…#1677) Tuned against the live 30-day acceptance run (the issue's named tuning loop): - recall markers strengthened (interrogative 'why are we', prescriptive 'we should', 'wtf', 'are we not', 'way too', display-drift 'not showing/in line') — the first pass missed the pasqal campaign's corrections entirely - filing gate recalibrated 0.90 → 0.80: jev reads true corrections as behavior-gap with noul ≥ 0.94 but kind-confidence in the 0.80–0.90 band; the noul floor (≥ 0.5) is the corroboration that keeps 0.80 honest - --max-jev default 200 → 400 (cost guard; the wider recall needs headroom) - admitted_detail in the result JSON — the dry-run's tuning surface - sqlite bridge maxBuffer 1MB → 128MB: the fleet-scale windowed gather blew node's default with ENOBUFS Acceptance (live dry-run, 30d window): 1220 scanned → 151 candidates → 17 admitted in 9 clusters, the pasqal campaign corrections included as P1 behavior-gap; nothing filed (dry-run).
The pre-merge reviewer pass (never the implementer) found the vault-write layer too trusting; all findings fixed and pinned: IMPORTANT: - YAML scalar escaping for untrusted user text in evidence lines — a bare quote could end the scalar and inject frontmatter keys (file integrity + the dedup matcher both read it); backslash+quote escaped, whitespace collapsed - collision-safe finding filenames — the pass-scoped seq could regenerate a triaged closed finding's exact name and silently overwrite it; bump until free - atomic vault writes (tmp+rename, the house pattern) on every finding/UPDATE/ digest path — a crash mid-write must never truncate the original claim MINOR: - findExistingScanFinding scans the frontmatter BLOCK only (body quotes could cross-match a pasted finding-like message) - cluster severity = worst occurrence (a P2 cluster escalating to P1/P0 now files — and pings — at its true severity) - true unverified count in JSON + digest overflow line (was silently capped) - admission gated on a fully-ran pass (partial-failure verdicts no longer overstate the dry-run output) - jev circuit breaker: 5 consecutive transport failures degrade the pass (a hanging endpoint no longer costs --max-jev × 10s of serial waiting) - stale filingAdmits docstring (0.90 → 0.80), merged fs imports, dirname Test gaps pinned: chmod-444 read-only AC, hostile-text YAML escaping, closed-finding collision path, watermark-not-advanced on fail-open, escalation ping. Suite: 37 corrections tests, package 1866 passed.
…esentation + QILC/Piccolissimo display sets (#1705) The papers' classic forms (2305.03261, 2508.19075): continuous core, direct collocation, indirect/GRAPE contrast, free-time/min-time with the floor-margin lesson, robustness ensembles. Intonatissimo gains the QILC form (measurement model, matching NLP, ILC correction) and its required display set (measurement models, pulse+correction plots per iteration, convergence). Piccolissimo gains the spline-NLP form and its display set. Lint: three cards, zero findings (pre-existing main failures unrelated).
… constraints, solvers in classic form, full disclosure (#1705) Every name verified against package source (MagnusGL4/Adapt4/Chebyshev cores, Daleckii-Krein, split-operator Strang, Padé-13 internal step evaluation); forms follow the papers. The completeness rule: a stated problem lets the reader reconstruct the NLP — trajectory type, integrator core, every objective term with weight, every constraint with bound, solver.
…the package source is the truth about what runs (#1705)
…from formulation.toml, the papers' register, provenance rules, receipt meanings (#1705)
…m Highlight painting, focus routing + hijack guard
…pilation package (#1726) The card deferred the schema-v3 compiler stack fields twice ('not present yet… added when those phases land'). That phase landed 2026-10-04 with the compilation package's PRD #50 completion: system_hash (SHA-256 over the device composite, loud mismatch on load), VerificationRecord (complete or absent, trust ranking), hash/device-aware query with superseded-dropping rank, provenance-gated bundled library. The card now states the three-root truth: the fields' ground truth is the compilation package's pulse-library module + the legato-dev skill; this card's own vault-catalog + CLI surface remains Phase 0 (platform+gate retrieval) with the CLI adoption tracked at harmoniqs/amicissimo#497; the versioning/lineage conventions are unchanged. Sessions needing hash-exact or verification-aware lookup are pointed at the compilation package's query API until the CLI follow-up lands. Finding: personal-vault skills-integrity finding-20261007-amico-catalog-phase0. Lint: zero new findings against the main baseline.
…into amico/0.4-docs # Conflicts: # packages/extension/skills/research/SKILL.md
…so 'Re-read it' refers to CHECKOUTS.md (critic follow-up for #1893)
…code into amico/0.4-docs
…icode into amico/0.4-docs
…de into amico/0.4-docs
…rmoniqs/amicode into amico/0.4-docs
…rmoniqs/amicode into amico/0.4-docs
…, matching the arJev manifest (critic follow-up for #1859)
…rief` (critic follow-up for #1530)
…amico/0.4-docs # Conflicts: # packages/extension/skills/develop/SKILL.md
… into amico/0.4-docs
…` flow (app creds via AMICODE_SLACK_CLIENT_ID/SECRET or ~/.amico/slack-app.json, token to ~/.amico/slack.json, MCP auto-starts); manifest user scopes gain im:write + mpim:write to match slack_verb.ts USER_SCOPES (critic follow-up for #1225)
…to amico/0.4-docs
…to amico/0.4-docs # Conflicts: # packages/extension/skills/intonatissimo/SKILL.md
…ed ': ' breaks yaml@2.9.1) and drop the pi-report-findings scenario (the report lane is unmerged) (critic follow-up for #1706)
…integrate # Conflicts: # packages/app-bundle/manifest.json
…o amico/0.4-integrate
…ico/0.4-integrate # Conflicts: # packages/app-bundle/manifest.json # packages/extension/src/chat_panel.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
|
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.
This folds the reviewed backlog into lane/0.4.0. Every PR head was merged as-is, so those PRs are marked merged automatically once this lands. Critic follow-up fixes are separate commits on top.
Docs and skills: #1846, #1893, #1972, #1899, #2003, #1728, #1744, #1859, #1529, #1530, #1832, #1225, #1631 (ADR renumbered to 0038), #1706
Features: #1662, #1678, #1993, #1720, #1641, #1633, #1749, #1652 (plus fast-uri, zod, minimatch and dompurify pins; the engine MCP SDK stays on 1.29.0 for now → #2010)
Night PRs (fixed): #2005, #1973, #1974, #1976, #1977, #1978
New: #2001 What's-new page, #2007 hermetic sandbox gates (#2009). The version is now
0.4.0-lane.1.The only real conflict was
chat_panel.ts: both sides add message kinds to the allow-lists, so both were kept. Allmanifest.jsonconflicts were resolved by refresh_manifest.Director gates on the integrated tree:
Deferred: #1553, #1557, #1852, #1226, #1548, #1712, #1701/#1711/#1719.
Waiting on Aaron: #1861.