Living master artifact for the "Master Orchestration Prompt v1.1" engagement. Single tracked home for the 6-phase audit toward v1.23. Updated per batch. Engagement model: one PR per phase, stacked; CodeAnt re-reviews each push and all inline comments are cleared (0 unresolved) before a phase is declared done.
Owner: maintainer + Claude Code Β· Started: 2026-06-13 Β· Baseline version: 1.22.0
v1.23.0 shipped: 2026-06-16 Β· post-release documentation perfection pass: 2026-06-16 (corpus sync, metric/flag reconciliation, history archival, dependabot cooldown, GitHub release/package rebrand β see AUDIT.md Β§ v1.23.0 Post-Release Documentation Perfection Pass). Phases 2β6 below remain forward work in the v1.24 / v2.0 cycle.
An earlier prompt revision (v1.0) carried a stale gap list. Fresh inspection confirms the following are already shipped β do not re-plan them as gaps:
| Area | Status | Evidence |
|---|---|---|
| ROADMAP/TODO/AUDIT consistency | β reconciled | PR #118 (e8252b6, 6b3340d) |
| v1.22 Smoke-Test protocol | β exists | docs/V1.22-SMOKE-TEST.md (7 sections) |
| Error Boundaries | β all 19+ views | App.tsx + components/ui/ViewErrorBoundary.tsx |
| Plugin worker isolation | β delivered + tested | workers/plugin.worker.ts, services/pluginRegistry.ts, 5 test files |
| Dependency audit (high + moderate) | β 0 vulnerabilities | pnpm audit 2026-06-13; AUDIT.md overrides table |
| Phase | Theme | Status |
|---|---|---|
| 0 | v1.23 foundation: tracker sync, dependency hygiene, plugin sandbox validation | β
Merged (PR #118 β 8f94178) |
| 1 | Reliability/Observability + Local-AI/Voice low-end hardening | β Complete (1.1, FU-1, 1.2, CP-i18n, Writer-errors + correlation-IDs; action-buttons = optional future polish) |
| 2 | Coverage elevation (Lβ₯85 / Bβ₯75 / Fβ₯80) β multi-batch | π In progress (2.1 services/fs/ done; threshold ratchet pending CI floor) |
| 3 | Tauri desktop: signing / notarization / updater pipeline + UX | β¬ Planned |
| 4 | WCAG 2.2 AA manual audit + i18n sustainability (<2% placeholders) | β¬ Planned |
| 5 | Performance / bundle / state-model clarity / ProForge isolation | β¬ Planned |
| 6 | Docs, ADRs, release checklist, onboarding | β¬ Planned |
Each phase opens its own PR off main with an approved plan before execution.
ROADMAP/TODO/AUDIT brought into agreement; AUDIT Known Overrides table refreshed
(esbuild row added, placeholder CVE refs replaced with verified advisory IDs);
dependency audit re-verified 0 high/moderate. CHANGELOG [1.22.0] heading restored after
a CodeAnt-caught regression.
tests/unit/workers/plugin.worker.test.ts: +5 adversarial tests β WebAssembly denial, GeneratorFunction + AsyncGeneratorFunction constructor-escape blocked, andself.*guard restoration on both success and error paths.- Verified
tests/unit/pluginRegistry.test.tsalready covers storage-key validation (prefix / length /..traversal / path separators / empty suffix) and the 2 MiB value-size cap β no new registry tests needed.
- New
services/ai/aiErrorTaxonomy.tsβ pureclassifyAiError(err)β{category, retryable, messageKey}over transient/rateLimit/auth/network/offline/policy/ invalidRequest/canceled/permanent (reuses theaiPolicy.ts"blocked" markers + HTTP status;AbortErrorcancellations fail fast β CodeAnt-flagged). services/ai/aiRetry.tswithTransientRetrynow fails fast on non-retryable errors (auth/policy/invalid-request/offline) via ashouldRetrydefault, and emits a structuredcreateLogger('ai.retry')line per decision with a per-call correlation id. Backward compatible (unknown errors still retry). +33 tests (aiErrorTaxonomy.test.tstable-driven, fail-fast cases inaiRetry.test.ts).- i18n / UI mapping of
messageKeydeferred to Batch 1.2 (avoids 11-locale churn here). - FU-1 split out of this batch (fixed separately β see batch log).
- Root cause (confirmed by probe):
installRuntimeGuardsreassigns the globalself.Function = denied, sorestoreRuntimeGuards's freeFunction.prototype.constructorreference resolved todenied.prototype(the stub), patching the wrong object and leaving the realFunction.prototype.constructordenied.self.*restored fine because they use explicitself.X =assignments; the async/generator paths use module-captured consts, so only the bareFunctionidentifier was poisoned. - Fix: use the module-captured
GlobalFunction(native, never reassigned) for the threeFunction.prototype.constructortouch-points (snapshot capture, install, restore). One-file change inworkers/plugin.worker.ts; isolation unchanged (denied stays active during runs). - Tests: re-enabled the
Function.prototype.constructorround-trip assertions (success + error path) and added a cross-run isolation test inplugin.worker.test.ts(24 green).
- Realigned the taxonomy
messageKeyto the existing singularerror.ai.*convention and added 9error.ai.<category>keys to all 11 locales (common.json; translated de/en/es/fr/it, English fallback Beta/RTL) β 2599 keys,i18n:checkgreen. getAiErrorMessage(err, t)helper + wired intouseGlobalCopilotonErrorso the Copilot shows an actionable, localized message (e.g. "Invalid API key β open Settings β AIβ¦") instead of the genericcopilot.error. +helper test + 2 onError tests.- Out of scope (later): action buttons; Writer/other AI call sites (helper is ready).
- Root cause: palette infra is correct (
titleKey+t()), but ~20palette.*keys per core locale were untranslated English fallback (AI-mode/editor/appearance/accessibility commands + 5 category headers). Keys existed β parity passed β values were never translated. - Translated for de/es/fr/it (values-only, no key churn); bundles rebuilt;
i18n:checkgreen. - Guard:
tests/unit/i18n/paletteLocalization.test.tsfails if apalette.*key reverts to the English value in a core locale (allowlist for loanwords: Navigation/Editor). Beta/RTL unchanged.
useWriterView.handleFailurenow usesgetAiErrorMessage(err, t)(classified, localized) instead of a hardcoded English string + localizes the[Cancelled]tag (writer.cancelledTag, 11 locales). Parity to the Copilot (Batch 1.2).- Correlation IDs:
newCorrelationId()(services/logger.ts);useWorldScriptAImints one per request, logs the lifecycle, and propagates it via the per-call body;worldScriptCompletionFetchreads it (schema) and logs it on failure (still never exposeserr.message);withTransientRetryaccepts a propagated id. No prompts/keys logged. - Phase 1 = β
complete. Optional future polish: error action-buttons; correlation IDs through
the legacy
aiProviderService/thunk path.
services/fs/(project/snapshot/asset/settings/codex stores +fsCore) was 0% tested (~1,000 lines). Now ~81% line / ~66% branch via 37 tests:fsCore.test.ts(pure utils) +fsStores.test.ts(an in-memory fakeTauriApisdriving real round-trips β compression, AES-GCM key encryption, JSON, import/export markdown/json). The whole store chain is exercised through oneFsProjectStore(linear inheritance).- Threshold ratchet deferred to a follow-up keyed to the new CI-measured global floor (can't measure the global gate locally on this hardware).
- Next: 2.2 ratchet + ProForge capability layer; 2.3+ storage/encryption stores, then branch-coverage deepening toward L85/B75/F80.
- FU-1 β β
RESOLVED (see Batch FU-1 above). The guard-restoration leak was a poisoned
global-binding bug, not a property-attribute issue; fixed by routing the three
Function.prototype.constructortouch-points through the capturedGlobalFunction.
- Engagement prompt: Master Orchestration Prompt v1.1 (corrected baseline).
ROADMAP.md(v1.23 section),TODO.md(P0 block),AUDIT.md(overrides + security),CHANGELOG.md([Unreleased]).- Plugin sandbox:
docs/PLUGINS-BETA.md,services/pluginRegistry.ts,workers/plugin.worker.ts.