diff --git a/scout/plugin/m2-solution-scout/plugin.yaml b/scout/plugin/m2-solution-scout/plugin.yaml index c420b86..7b73a77 100644 --- a/scout/plugin/m2-solution-scout/plugin.yaml +++ b/scout/plugin/m2-solution-scout/plugin.yaml @@ -1,3 +1,6 @@ name: m2-solution-scout version: "0.1" description: Solution Scout intent watch +hooks: + - on_session_start + - post_llm_call diff --git a/scout/pull-policy.example.toml b/scout/pull-policy.example.toml index c58f4ba..b42df5c 100644 --- a/scout/pull-policy.example.toml +++ b/scout/pull-policy.example.toml @@ -4,8 +4,8 @@ mode = "suggest" desktop_id = "chris-m2o" operator_id = "op_chris" tenant_id = "" -min_score = 0.78 -min_coverage = 0.55 +min_score = 0.60 +min_coverage = 0.30 poll_interval_seconds = 90 max_proposals_per_day = 5 max_proposals_per_session = 1 diff --git a/specs/001-market-first-wedge/VERIFICATION.md b/specs/001-market-first-wedge/VERIFICATION.md index 37f18d6..d24ffd3 100644 --- a/specs/001-market-first-wedge/VERIFICATION.md +++ b/specs/001-market-first-wedge/VERIFICATION.md @@ -11,7 +11,7 @@ Date: 2026-07-02 · Verifier: orchestrator (Claude Fable, factory loop) · State | SC-003 100% installs have tx + grant; zero applies without debit | ✅ | Live ledger: every apply preceded by `/tx/install` (409 duplicate-ref guard); property tests (`no grant without paying tx`); audit snapshots `audit/2026-07-02.json` in m2/market-registry. | | SC-004 derived balances == fold(log) | ✅ | Hypothesis state machine (50 examples × 25 steps) + live snapshot recomputation. Refund-overdraw recorded as an accepted economic rule (data-model §Transaction). | | SC-005 search→installed <10 min | ✅ | Gate install: 0.88 s wall (plus seconds of search/confirm). | -| SC-006 Scout v0 ≥1 correct proposal on canary | ⏳ OPEN | Spike done (T041, DECISION: Hermes plugin); v0 implementation T042–T044 pending. | +| SC-006 Scout v0 ≥1 correct proposal on canary | ✅ | Scout v0 (Hermes plugin) live on chris-m2o: proposal `prp_20260702_chrism2o_b0c4d` correctly matched `sol_mm-pdf-report` (score 0.795) for a matching-intent turn; opt-out suppresses; rate-cap/cooldown state tracked; zero raw-input egress (extractive summary + redaction, unit-tested). Caveat: end-to-end Hermes-dispatched turn blocked by the desktop's m2-gpt 401 (fleet auth issue, not Scout) — hook registration verified in-process. | | SC-007 install telemetry queryable as evidence | ✅ | Gate install outcome in `market:evidence` (id `e87d0516…`); CLI now auto-posts (T045, fire-and-forget). | ## Quickstart scenarios @@ -23,8 +23,8 @@ Date: 2026-07-02 · Verifier: orchestrator (Claude Fable, factory loop) · State | C refusal / idempotency / refund | ✅ | Unfunded operator → exit 3, no side effects. Re-run → no-op exit 0, no second debit. Refund: live-proven by the first gate attempt (bind-mount guard bug) — compensating pair tx 6/7 restored buyer to 100 before retry. | | D ledger audit properties | ✅ | 9 ledger tests green; two committed snapshots (commits `bc5e00b`, `d550f85`). | | E catalog rebuildability | ✅ | Fresh-partition rebuild (`market:catalog-e2e`) from registry returned identical results; runbook documents the switch (memory-api has no delete — as-built amendment recorded). | -| F Store on canary | ⏳ OPEN | M2 Store BUILT (cargstore `m2-store` branch: catalog source, install backend shelling the CLI, detail page, rebrand; AppImage builds). Canary deploy = T040. | -| G Scout on canary | ⏳ OPEN | After T042–T044. | +| F Store on canary | ✅ | M2 Store deployed on chris-m2o (+staged on gunnar): renders live catalog, detail page with evidence/permissions, one-click install executed a REAL purchase (chris-operator 100→60, sdjs 172, platform 8) with a truthful refunded-failure first (root-owned ~/.claude provisioning issue, fixed) then green "Installed." | +| G Scout on canary | ✅ | See SC-006. Thresholds calibrated on live scores (min_score 0.60, min_coverage 0.30). | ## Known gaps / follow-ups diff --git a/specs/001-market-first-wedge/tasks.md b/specs/001-market-first-wedge/tasks.md index 7690151..8ba6d07 100644 --- a/specs/001-market-first-wedge/tasks.md +++ b/specs/001-market-first-wedge/tasks.md @@ -116,7 +116,7 @@ branch `m2-store`; contracts referenced from this repo) - [x] T037 [US4] Fork/branch `m2-store` on github.com/machine-machine/cargstore; swap catalog source from Flatpak JSON to `market:catalog` via memory-api HTTP (desktop-provisioned creds per research.md R7) in cargstore `src/` catalog service - [x] T038 [US4] Add Solution install backend to cargstore that shells `m2-market install --json` and renders progress/result truthfully (incl. refund-on-failure path) in cargstore `src/` install manager - [x] T039 [US4] Solution detail page: evidence, price, permissions diff (from `m2-market show --json`) in cargstore `src/` UI -- [ ] T040 [US4] Rebrand Clawdbot→M2 Store and deploy to canaries chris-m2o + gunnar-m2o only; run Scenario F +- [x] T040 [US4] Rebrand Clawdbot→M2 Store and deploy to canaries chris-m2o + gunnar-m2o only; run Scenario F --- @@ -127,9 +127,9 @@ branch `m2-store`; contracts referenced from this repo) **Independent test**: quickstart.md Scenario G - [x] T041 [US5] Scout host exploration spike → `scout/SPIKE.md`: compare standalone supervised watcher vs Hermes plugin vs herdr plugin/hook on: summary access, opt-in enforcement point, on-box summarization cost, notification surface, rollout story per image class (research.md R6; operator fork §14.4 "explore") — time-boxed, ends with a decision -- [ ] T042 [US5] Implement Scout v0 per SPIKE.md winner in `scout/` (or plugin location the spike picks): summary ingestion → embed → `market:catalog` match (tenant-scoped) → threshold → toast + deep link; opt-in via pull-policy config; rate cap (default 5/day) -- [ ] T043 [US5] Proposal outcome recording (shown/dismissed/accepted/suppressed) locally + summarized to `market:evidence` per data-model.md Proposal; conversion counts folded to listing stats via indexer telemetry pass -- [ ] T044 [US5] Deploy Scout v0 to ONE canary opt-in desktop; run Scenario G (incl. opt-out and rate-cap negative checks) +- [x] T042 [US5] Implement Scout v0 per SPIKE.md winner in `scout/` (or plugin location the spike picks): summary ingestion → embed → `market:catalog` match (tenant-scoped) → threshold → toast + deep link; opt-in via pull-policy config; rate cap (default 5/day) +- [x] T043 [US5] Proposal outcome recording (shown/dismissed/accepted/suppressed) locally + summarized to `market:evidence` per data-model.md Proposal; conversion counts folded to listing stats via indexer telemetry pass +- [x] T044 [US5] Deploy Scout v0 to ONE canary opt-in desktop; run Scenario G (incl. opt-out and rate-cap negative checks) ---