Skip to content
Install

docs/halfdone-audit.md

Unfinished-work audit — 2026-10-04

Source, commands, settings, tests and docs checked for work left half done.

Scope: repository source, slash/CLI dispatch, protocol settings and tiers, tests, documentation, and the October 3–4 handoff entries. Base: 631d5ab. Graft's existing graph was queried without refresh before removals; declarations, callers and dynamic accesses were then checked directly in this checkout. Historical handoff statuses were not edited. This is a source sweep plus directed local verification, not a full-suite or live-provider certification.

Changes

ItemFinished or removedTest / evidence
Native cross-session threads read/search/waitDone: target-specific @thread consent or individual approval in ask/smart/edits/full/plan; session answers narrowed to onceengine-native/test/thread-consent.test.ts: all modes, repeated calls, allow rules, saved grants, target isolation and denial
Permission-hook target rewriteDone: recompute the gate for rewritten arguments; mentioned A cannot authorize Bthread-consent.test.ts: redirect refused without a second target's consent
Approval racesDone: cancellation, changed deny rules and disabled thread tools prevent executionthread-consent.test.ts; daemon/test/thread-mcp.test.ts
External-engine thread MCP readsDone: same individual gate for read/search/wait; full mode and session caching cannot bypass itdaemon/test/thread-mcp.test.ts: repeated calls in full/edits/plan, mentions and denial
Unmentioned merge-backDone: individual consent as it imports another transcript; existing write/plan ceiling retainedthread-consent.test.ts; daemon/test/threads.test.ts
Official-package tier switches with no loaderDone: official_packages, autoresearch, web_routing now gate installed resources live, independently of stored disable preferencesdaemon/test/package-tier.test.ts: tier/override matrix, real local install, command removal/restoration, unchanged preferences
Offline storage_compact switchDone: persisted opt-out refuses preview and writes before database mutationdaemon/test/storage-compact.test.ts: exact original bytes, roundtrip and backup checks
Unused USAGE_LIMIT_OPEN_STATESDone: shared state type and store validation use it; closed states cannot overwrite an open pausestore/test/usage-pauses.test.ts: invalid state preserves the existing pause
Notice-only Hono generationRemoved: no backend, help entry, completion or runtime notice branch; legacy flag is exit 64 before startupcli/test/b18-support.test.ts: help/completions, subprocess with explicit temporary --dir, no database
Corrupt --entry--keep-config completionDone: restored separate options in all completion formatsb18-support.test.ts
mDNS flags/config that never publishRemoved: CLI flags rejected, enabling config rejected before launch/write; false/domain wire fields retained for compatibilitycli/test/http-cli.test.ts, daemon/test/http.test.ts, daemon/test/server-rest.test.ts
Synthetic project spending state and budget defaultsRemoved: init no longer writes them; actual daemon budget controls retaineddaemon/test/project-control.test.ts: absence on fresh init and exact legacy preservation
Unread project memory/focus settings and generated focus filesRemoved: init contains consumed metadata only; focus descriptions report actual native prompt inputs rather than fictitious reasoning/tool/worktree policiesproject-control.test.ts: selector persists, models unchanged, legacy files preserved byte-for-byte
Blocked AI-config cascade/critic alternativesRemoved: recipes offer executable single-model bindings; inspector links actual /compound and /compaction contractsdaemon/test/ai-config.test.ts, cli/test/ai-config.test.ts: save/validate, no provider calls, alternative switching, bounded frames
ACP auxiliary-role gap documented as future workDone: acp: choices refused outside main and skipped by auxiliary fallback; native reviewer validates its role toodaemon/test/models.test.ts: every non-main role, native fallback, main still allowed
Placeholder upgrade destinationRemoved: empty/off default; explicit release repository required before network; legacy sentinel refusedupgrade/test/upgrade.test.ts: configuration, fake releases, verification, rollback
Windows persistent-service promise / incorrect socket errorRemoved: help labels activation macOS/Linux only; unsupported manager fails with manual `daemon startrun` alternative and no mutation
Ten unused exports/helpersRemoved: COLORS, LIVE_MAX_ROWS, defaultActivityMascotConfig, spreadRow, compactionBlock, firstSentence, referenceOf, DEEPINFRA_BASE_URL, PRESET_KEY_ENVS, isAbortGraft callers plus direct references; TypeScript and CLI footprint checks
Stale behavior descriptionsDone: sessions, permissions, MCP, tiers, packages, storage, automation, HTTP config, upgrades, ACP and AI config describe the current contractsDirect source comparison; corresponding checks above

Handoff reconciliation and conservative boundaries

ItemFinished or removed / current limitTest / evidence
October 3 local gaps: semantic memory, workflow gates/retry/history, session pause/stop, workspaces, interpreter syntax/stdlibDone in base: concrete handlers/services are present; no duplicate implementation addedCurrent source inspected (memory-consolidator.ts, workflows, session control, workspace adapters, interpreter); their existing suites not rerun here
October 4 ACP bridge/child lineage, fork transcript sharing, token estimates, pi isolation, pending REST MCP approvals and pre-limit checkpointsDone in base: later handoff entries supersede the earlier open listCurrent bridge/policy, store transcript prefix, shared estimateTokens, pi policy and checkpoint sources; bridge tests run here, other unchanged suites not rerun
Simulated OpenCode/Cursor enginesRemoved in base: retired selections are rejected; saved unrelated settings remainCurrent optional-engine boundary and docs; unchanged retired-engine tests not rerun
Zstd dictionarySkipped as production compression: Bun's installed API has no dictionary input and no new dependency is authorized. Ordinary zstd, content sharing and prefix experiments remain real and documentedExisting held-out dictionary experiment is explicitly experimental, with a binary-availability skip; not run here
Automatic 90% model compaction and M7 memory watcherDecided (2026-10-25): the default compaction point is now 90% of the window or the window less the reply reserve, whichever comes first (Codex caps at 90%, pi keeps 16k free, opencode 20k or the output limit); an explicit threshold/token_limit is unchanged. No memory watcher: none of Codex, pi or opencode v2 runs a background model call over the session to write memories, so the bounded checkpoint/manual memory and Dream (scheduled, opt-in) stay the pathsengine-native/test/compaction.test.ts, daemon/test/context-limits.test.ts; compaction.md
Public releases, OAuth/accounts, cloud sharing, Telegram, microphone/editor integrations, provider and attestation canariesPartial: existing opt-in/local boundaries retained, no external activation or account use; updater off until an explicit accessible repository is configuredRelevant configured/fake ports inspected; upgrade local fakes run; other account-dependent canaries not run
Ownership-sensitive uninstall, remote source downloads and cross-daemon syncPartial: exact owned targets/local operations only; unsupported destinations, URLs or remote synchronization remain explicit refusalsExisting bounded local adapters and documented policies; unchanged suites not rerun
Conditional test skipsDone audit: every matched skip has a host/binary prerequisite, opt-in canary or fixture-generation reason. None removed or weakenedDirect inspection of Codex/browser/compiled/PTY/sandbox/rg/zstd/PowerShell/frame/fixture/performance guards
Legitimate placeholder/TODO matchesRetained: prompt hints, template substitutions, redaction markers, user todo lists and opt-in learning exercises are implemented behaviorDirect consumers checked; no executable TODO/FIXME/coming-soon stub found in the scanned runtime paths
TUI fields that appear unreferenced literallyRetained: role icons/labels/leads are read dynamically by transcript rendering; showFooterContext is a legacy wire key normalized to false and absent from customizationDirect calculated-key consumer and profile normalization; footprint/TUI automation pass
Public exports and kernel receiptsRetained: schemas/SDK exports are public boundaries; orchestration receipts are implemented kernel behavior, not an optional switchGraft/source review; no public API removed merely for lacking an internal call

Decisions: preserve additive wire compatibility, withdraw nonfunctional options, keep existing user files, and retain explicit manual/opt-in behavior for unresolved platform/service policies. Official package permissions without a saved tier preserve explicit existing installations; tiers do not install or execute packages. No new dependency was added.

Security: no change to READ_ONLY_COMMANDS, no new process/network capability, and no raw secret output. Thread history remains bounded, redacted, same-project and unavailable to remote/peer clients. Native and MCP history approvals cannot be converted into broad grants or settled by automatic reviewers. Tests use temporary directories and local fakes; no provider, external account or real user runtime directory was used.

Verification

Only new/changed tests plus the two requested CLI guards were run. Results by invocation (some files repeat after relevant source changes):

Files (paths relative to their package test directory)Result
Engine-native thread-consent; daemon threads, thread-mcpFinal 44 pass, 0 fail
CLI b18-support, http-cli, footprint, tui-automation; daemon http, server-rest, project-control; upgrade upgrade96 pass, 0 fail
Daemon package-tier, storage-compact; store usage-pauses8 pass, 0 fail
Daemon ai-config, user-service; CLI ai-config, footprint, tui-automation35 pass, 0 fail
Daemon project-control after removing the remaining inert metadataFinal 7 pass, 0 fail
Daemon models9 pass, 0 fail
CLI footprint, tui-automation; daemon ai-config after the model fixFinal 18 pass, 0 fail
CLI b18-support after adding its help assertionPass, 0 fail

These invocations cover 183 distinct tests in 18 files, with no failures or skips. Required root typecheck: ./node_modules/.bin/tsc -p tsconfig.base.json --noEmit → exit 0. git diff --check → exit 0. Full suites, standalone builds, scripts/perf.test.ts, disk-budget tests and live terminal/OS managers were not run under the requested validation boundary; no fresh performance, disk-budget or physical-host acceptance is claimed.