Branch: development
Final HEAD: 301a67c
Resume from: 7db32f2 (PH-07 finale)
Four deferred items from already-shipped phases, all closed in order. Working tree clean, every commit pushed, no test leaks.
| Sub-slice | Phase | Commit | Net |
|---|---|---|---|
| TASK file | — | c07b45f |
+198 lines |
| 1. Routing wire-up | PH-08 | 03d8346 + 4c4113f (test-isolation hot-fix) |
+303 / +14 lines, +7 tests |
| 2. Mic-capture | PH-07 | 9633fdd |
+416 lines, +10 tests |
| 3. TTS phase-transition hook | PH-07 | 8dcbaf2 |
+358 lines, +11 tests |
| 4. Graph auto-population | PH-05 | 301a67c |
+540 lines, +15 tests |
Test delta: 1042 → 1085 (+43 net across the four sub-slices). Coverage: 76% (unchanged — additions trended with their tests). Lint / type: clean throughout.
mythic-vibe ai run --provider X --packet Y now routes through
run_with_fallback by default. A primary failure (raised exception
or unconfigured provider) falls forward onto copy-paste rather
than crashing or returning USER_INPUT_ERROR. The JSON payload
exposes used_provider, primary_provider, fell_back, and a
per-attempt list. New --no-fallback flag preserves the legacy
direct-provider.run path (and its strict USER_INPUT_ERROR for
unconfigured providers).
Cost-guard estimation still runs against the operator's chosen provider — the spend they consented to. If fallback fires to copy-paste, the actual call is free; the projected spend is still honoured against the daily cap.
Test-isolation hot-fix: the existing
test_ai_providers_test_run_and_ingest_response invoked
app.main(["ai", "run", ...]) without --path, so the new
routing-attempt log leaked into the repo's cwd. Threaded the
test's tempdir into the invocation; untracked the leaked file.
mythic-vibe voice transcribe --mic [--duration N] records N
seconds (default 5.0) from the system microphone, writes a temp
WAV via stdlib wave, pipes the path through the existing
Transcriber pipeline, and cleans up the temp file in a finally
block. Cross-platform via sounddevice + PortAudio.
--file is no longer argparse-required; the handler enforces
"exactly one of --file or --mic" with a clean USER_INPUT_ERROR
otherwise. Missing sounddevice → OPERATIONAL_FAILURE with a
pip install sounddevice numpy hint.
New mythic_vibe_cli/voice/notify.py module. Single
notify_phase(phase, status, *, message=None) helper that speaks a
short status line on operator success events. Wired into three
sites:
_write_phase_record(intent / constraints / architecture / plan / build captures) →notify_phase(phase, "captured")cmd_verify→notify_phase("verify", result)where result ispass/fail/blocked_create_handoff→notify_phase("handoff", "written")
Default-disabled via the slice 7.3 MYTHIC_VOICE_TTS_ENABLED env
gate. Engine exceptions are contained — they surface via
TTSResult.error and never crash the parent command.
New mythic_vibe_cli/context/autopopulate.py module with two
helpers that side-effect into mythic/graph.sqlite3:
populate_from_scan(root, index)— walksProjectIndex.docs / tests / important_files(Python files only) and upsertskind="doc"/kind="test"/kind="module"entities tagged per the slice 5.3 retriever convention.populate_from_checkin(root, *, phase, update_text, timestamp, status_path, devlog_path)— onekind="checkin"entity per successfulworkflow.check_in, taggedphase:<phase>+kind:checkin.
Wired into cmd_checkin (after workflow.check_in) and cmd_scan
(after indexer.build, inside the dispatcher's with block).
Dry-run paths still skip — the graph DB is only created on real
runs. Best-effort throughout: any sqlite / I/O failure surfaces in
AutoPopulateResult.errors but never raises.
All four "deferred" entries on the master tracker for already-
shipped phases now close. The status file's "Targets for tomorrow"
section under project_mythic_engineering_cli_status.md had four
small follow-ups at the top — all four landed in this batch.
Phases now fully closed (no deferred items remaining): PH-01, PH-02, PH-03, PH-04, PH-05 (was missing graph auto-pop), PH-06 (5/6 still — slice 6.4 streaming refactor lives with PH-18), PH-07 (was missing mic + TTS hook), PH-08 (was missing routing wire-up), PH-13, PH-15.
Remaining phases: PH-09 (Island Integrations), PH-10 (Plugin Ecosystem), PH-11 (Security/Sandbox), PH-12 (CI/CD), PH-14 (Policy Engine — PH-11 still blocking), PH-16 (MCP/ACP/OpenTelemetry), PH-17 (Multi-Surface Access), PH-18 (Robustness Sweeps), PH-19 (Distribution), PH-20 (v1.0.0 Sovereign OS Launch).
Recommended next move: PH-09 (Island Integrations) — all deps closed, naturally next on the roadmap. PH-11 (Security/Sandbox) is the strategic alternative if Volmarr wants to anchor security before extending integrations.
- All four shipped under the ME laws: stdlib-first, optional deps
via try-import +
MissingExtraError, default-off feature gates, cross-platform. - Memory updated incrementally after each sub-slice (per the durable rule about not batching).
- The TASK file (
TASK_followup_subslices.md) was the resume contract — written + pushed before any code touched. - One real bug found en route: pre-existing test leaked
mythic/ai/provider_calls.jsonlinto the repo cwd. Hot-fixed in commit4c4113f; the routing wire-up is correct and the test now threads--path tempdirproperly.