feat(runtime): 0.17.0 thin evidence-carrying kernel - #25
Merged
Conversation
S00 records the 8e85add inventory, router/grill snapshots, and exact npm test / lint / smoke:package outputs. No runtime behavior change.
Keep the eight Core rule IDs and rewrite their canonical sentences for active contract, evidence kinds, cheapest uncertainty, and causal recovery. Add Task Contract v1 with a structural validator. Sync generated host copies and closed-set consumers. Hook injection surfaces are unchanged.
Establish the fixture-backed A/B harness (validate/judge/runner/report) and the nine Wave 0 seed scenarios. Live host/model backends stay unimplemented; ordinary tests cover validate, deterministic gates, and dry-run only.
Fixture dry-run of the nine seed scenarios under legacy. Live host/model runs are NOT_RUN; canned R03/R04/R06 honesty failures prove hard gates. This is not promotion evidence.
Define Identity, Interleaving, Commit, Amplification, and Copies & Recovery as an on-demand production-failure scan, with owner vs mechanism, four short examples, and an applicable-faces anti-checklist.
Replace Grill/Diverge/Plan/Slice modes with a five-step decide kernel: decision-changing unknown, cheapest resolver, dominant route or decision boundary, readiness, and a chat-default minimal contract. Lock stable anchors in tests and add D03–D06 behavior scenarios.
Compress do-it-code-quality to Trace/Locate/Change/Stress/Prove/Settle. Sink comments, worktree, merge, mock, and optimization detail into causal-change.md. Add B03–B08 behavior scenarios and lock the kernel anchors in tests/skill-contracts/build.test.mjs.
Compress the architecture hot path to five decision surfaces and the semantic/admission/projection/recovery quartet. Keep task routes. Move the original eight lenses into rationale and point Failure & Recovery at the stateful change scan.
Contract-aware Spec checks and Standards (authority, fallout, stateful failures, proof quality). Default inline review; at most one independent reviewer. No fixed multi-reviewer pipeline.
Closeout is an acceptance-to-evidence map on this worktree. Stale, other-worktree, irrelevant, mock-only, and partial evidence cannot be VERIFIED. Honest NOT_VERIFIED names the missing proof.
S03–S07 added scenarios. Keep the original nine as required seeds without asserting they are the only YAML files.
New handbook init creates CONTEXT, handbook, worklog, and plans only. Stop shipping empty brainstorm/grill gitkeeps; leave existing user content. Plans are Goal/Decisions/Boundary/Acceptance contracts, not progress logs. Runtime/adaptive/events stay local via .do-it/.gitignore.
Repo-local active-task pointer, JSONL evidence ledger, worktree fingerprint, and adaptive-profile resolve/hash/parse. Fail-open, schema-versioned, unwired from default hooks.
Fixed do-it-adaptive interpreter, delta-only profile schema, validator, and fail-open hash-once injection. Missing profile is silent; invalid entries are skipped with one diagnostic. Unwired from host manifests.
Normalize edit/shell/test/build tool results into canonical evidence events. Verification-gate v2 reads active-task and worktree freshness and stays advisory: no auto-proof, no VERIFIED, fail-open.
Lock child agents to a narrow slice with no further dispatch and no commit/merge/revert-peer/scope expansion. Expensive plan, product, architecture, cleaner, and tdd agents are not default. Replace English regex skill-boundary checks with HTML contract anchors; budgets warn only.
Record edit, shell/test/build, and completion facts on Claude, Codex, Cursor, OpenCode, Pi, and Kimi using the canonical evidence schema. Fail open if the observer is missing. Cursor postToolUse/afterFileEdit edits are deduped. Missing shell results are partial, never complete. Pi reminders use ledger freshness instead of process-local success flags. OpenCode no longer treats command names as proof.
Upgrade the default-off complaint recorder to a learning event ledger. Explicit user feedback and objective workflow observations (scope-creep, completion-after-edit, review-blocking) are stored as redacted metadata, never as active policy. Reports stay no-action on a single event and do not write adaptive profile or Core. Hosts keep invoking behavior-feedback.sh; the wrapper execs the new recorder. Session ids are hashed. Same-event rows are deduplicated.
Add Policy Candidate v1 JSONL checks: target failure, supporting evidence, rollback, and promotion gates. A single complaint stays candidate. Inferred rules need two independent tasks and a passing shadow eval; explicit preference may activate after exact wording. The report is read-only and never writes profile or Core.
Document the observation → candidate → shadow → active → revert ladder on Adaptive Policy v1 without changing the profile schema. Explicit preference and inferred lessons are separate paths. Counterexamples mark review-needed. Core promotion is a proposal only. Candidates stay shadow/NOT_EVALUATED when live eval cannot run.
Add DO_IT_ROUTER_MODE=legacy|shadow|thin (default legacy) so 0.16 classifier+grill injection stays the golden path. shadow/thin inject one compact kernel per session, plus active-task and adaptive on hash change. No-write reminders fire every turn and are never dropped by once-dedup. Grill is silent except an explicit compatibility diagnostic. The lexical classifier records diagnostics in shadow and is skipped in thin. Host adapters skip the old bootstrap text when not legacy. Kimi sessionStart points at kernel-context.sh, which is silent in legacy.
Register do-it-adaptive as extended-on-demand so runnable skills are 12 with 10 agents. Ship kernel-context, adaptive-context, and evidence-observer through hook-manifest, run-hook allowlists, and managed extras. Add skill-contract, skill-budget, and behavior-eval scripts without putting live model runs in npm test. Document the evidence-carrying product sentence, contract-shaped .do-it layout, runtime modes, and Unreleased 0.17 work. Version stays 0.16.0.
Regenerate index.json, Claude skill index, and Codex/Cursor/OpenCode/Pi plugin bundles so they include do-it-adaptive, kernel-context, and adaptive-context. No hand edits to generated files.
Fixture seed dry-runs and adapter tests only. Live model A/B is NOT_RUN. Keep DO_IT_ROUTER_MODE=legacy. Do not authorize S16 Phase A (thin default) or Phase B (hard delete). Do not tag, push, or publish.
Align skills, eval CLI, host docs, and runtime path safety with the open Important items from the upgrade card reviews. Keep Opportunity findings deferred. Rebuild generated host bundles from source.
Drop the leftover 0.14.2 view pin from the OpenCode plugin README.
Keep handbook/plan/runtime state local. Templates stay in skills/do-it/do-it-handbook/templates/. Also ignore .codegraph/.
Unset DO_IT_ROUTER_MODE now selects thin. Legacy stays an explicit rollback and the eval baseline. Add command-only live-network admission: Claude PreToolUse asks, other hosts remind. Land live Cursor/Pi eval adapters, fairer command_exit0 and honest_verified scoring, and 0.17 unreleased evidence. Suite JSON strips probe credentials.
Thin sessions have no classifier, so write-quality-lint scans added lines and derives extra-family risk from path. SessionStart still emits the kernel when collect is empty. Register network-admission in the install manifest. Archive the Pi live 28x4x2 S19 aggregate. Cursor full matrix is NOT_RUN. Deleting the lexical router (S16 Phase B) is not authorized.
Promote the evidence-carrying thin default to version 0.17.0 across package, manifest, and host plugin metadata. This is not a git tag or npm publish. Rollback remains DO_IT_ROUTER_MODE=legacy.
Git Bash can leave the temp dir locked after spawnHook. Retry rmdir on EBUSY/EPERM, and give the real subagent-stance hook 15s on Windows CI.
Canonical ubuntu Node 22 npm test runs test-pi and needs plugins/do-it-pi devDependencies. Shadow prompt-submit on Windows Git Bash exceeds the 15s default hook timeout.
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.
Your project
tdwhere123/do-it), dogfooded across Claude Code, Codex, Cursor, Grok Build, OpenCode, Pi, and Kimi.do-it-core,do-it-router,do-it-code-quality,do-it-verify, plus the rest of the 12-skill set when needed.The real problem that triggered this change
tier/dim_*that thin sessions never write.What this change does
Do-it kernel:per session; the lexical classifier is skipped.ask; other hosts remind). Write-quality scans added lines, not router dims.NOT_VERIFIED.DO_IT_ROUTER_MODE=legacy. S16 Phase B (delete router/grill) is not in this PR.0.17.0. This PR does not git-tag or npm-publish.Re-test:
npm testexit 0;npm run smoke:packageexit 0;node scripts/validate-release.mjs v0.17.0exit 0. Pi live 28×4×2 archived locally (Cursor full matrix NOT_RUN).Why this belongs in do-it
Linked Issue
Verification
npm test node scripts/validate-release.mjs v0.17.0