Closing out CLI ergonomics and documentation onboarding for
dont
Log
Session 15:55 (incitaciones)
Explored .pi/agent/sessions/ to evaluate token
consumption from tool loading.
Found that Claude CLI already uses progressive disclosure: ~10 core
tools loaded eagerly, ~40+ MCP/platform tools deferred (names only,
schemas fetched on demand via ToolSearch).
Identified actual token waste: Google suite (Gmail, Drive, Calendar)
and Playwright MCP servers load globally for every project session even
when irrelevant.
Recommended moving those MCP configs from
~/.claude/plugins/ to per-project
.claude/settings.json scope.
Identified skill index bloat: ~80 skills listed per turn, with
incitaciones:* namespace duplicating many global
skills.
Next: Audit MCP server placement and deduplicate
incitaciones vs. global skills to shrink per-turn system-reminder
size.
Session 16:58 (general)
Extended the custom-provider-claude-cli pi extension to
display Claude rate limit info in the pi statusline.
Discovered the stream-json CLI format uses a separate
rate_limit_event (not embedded in result); it
carries status ("allowed"/"rejected") and
resetsAt but no used_percentage.
Debugged via event logging — synchronous
readFileSync/writeFileSync on every event
froze the pi UI; removed debug code.
Final state: statusline shows quota: 5h: resets Xh Ym
using resetsAt timestamp from
rate_limit_event.
Implemented atril-6v4: replaced navDepth
integer with history.state-backed
NavState { depth, view, previousView }; contextual back
labels via VIEW_BACK_LABELS; reload-safe (routeTo on
reload, not navigate); shared-link first-visit safety (falls back to
navigate(overview) instead of ejecting user).
Ro5 review found 3 real issues: EDGE-001 (eject on shared link),
CORR-001 (navDepth redundant parallel state), CORR-002 (unsafe cast).
All three fixed.
Playwright MCP validation confirmed: back nav, contextual labels,
reload-then-back all working.
Fixed pre-existing CI failure in
navigation-renderers.ts (TS2488 on
double-destructure).
atril-6v4 closed; commit pushed.
Next:atril-r2n (breadcrumb) or
atril-xgv (persistent nav) — both unblocked; state shape
{ depth, view, previousView } ready to consume.
Sessions 17:50 (dont — 6
sessions)
Layout validation (dont-8os):
Project::open() now validates .dont/ subdirs
with LayoutInvalid error, exit code 3, and
dont init remediation; Ro5 review + 3 fixes; pushed.
Config parser (dont-2tl, dont-h8c): new
src/config.rs with structs for [import],
[verify_evidence], [define.shape],
[trust.hedges], [rules]; wired into
dont import, verify-evidence,
validate_label, dont trust,
dont ignore, dont define; pushed.
Rule engine (dont-8cs): RuleEngine in
src/rules/mod.rs with evaluate(),
severity(), warn/strict dispatch, mode escalation;
Store::run_rule_query() wired; 9 tests.
Rules CLI (dont-y8v, dont-iny):
dont rules list/show/add/test with 18 integration tests;
SHIPPED_RULES registry; severity display.
/rule-of-5-universal review → 10 findings fixed:
shipped-name shadow guard (cannot-shadow-shipped-rule),
compile-error remediation hint corrected, rows_to_matches
now propagates type errors, --force required to overwrite
existing rules, TOCTOU removed from Test handler,
severity_label → &'static str,
load_config() hoisted, strict-over-warn comment; 3 new
tests (21 rules tests total).
just install succeeded; binary updated.
Arc: Full rule engine pipeline shipped end-to-end:
engine → 7 rules → CLI subcommands → quality hardened by two Ro5
passes.
Next:dont-9fv
(dont explain command, P2), dont-8h2 (shell
completions, P2), or dont-fl6 (transaction ID sequencing
bug, P2).
Sessions 21:10 (dont — 3
sessions)
Enforcement gate (18:20 session): investigated how
dont enforces claims without a bypass path — enforcement is
in-binary (Rust match + exit 1). Added dont prime as a
pre-commit gate in prek.toml; wrote
docs/enforcement.md covering all 6 gates and git/Claude
Code/CI integration; applied 5 Ro5 corrections.
rule-claim-structure lint rule (20:17 session):
implemented full Phase 2 of add-rule-claim-schema OpenSpec
— Rust rule, config, registration, translation doc, howto; 13 Ro5 issues
found and fixed (doubted claims skipped, 2 new tests, docs for edge
cases and troubleshooting); OpenSpec archived as
2026-05-08-add-rule-claim-schema; pushed at
78f60f4.
dont-fl6 (tx ID sequencing bug): replaced
next_tx()max(tx) query with a
tx.seq counter file read/written under the existing
with_write_lock(); migration seeds from
max(tx) on first use; added two tests (8 concurrent
Store threads, 8 parallel dont conclude
subprocesses); closed and pushed.
dont-dmk (drifted evidence count): added
drifted_evidence key to dont prime --jsonassessment_counts; counts claims and terms with at least
one repo-file evidence entry where fingerprint has drifted;
TDD (test first); closed and pushed.
Arc: Bug hardening and observability — tx
sequencing is now a structural guarantee (not SQLite emergent), and
prime surfaces drift counts for CI/gate use.
Next:dont-9fv
(dont explain command, P2) or dont-8h2 (shell
completions, P2) — both unblocked.
Sessions 21:11 (atril — 2
sessions)
Implemented atril-94t: overview redesigned as 2×2
category cards (Specs, Docs, Issues, History); inactive cards grayed;
active cards navigate with correct "← Overview" back labels;
Playwright-validated
Closed atril-94t; atril-r2n (breadcrumb)
and atril-xgv (persistent nav) remain unblocked
Arc: Navigation foundation complete —
history.state back stack (atril-6v4) + category-card entry
point (atril-94t) now in place
Next:atril-r2n (cross-screen
breadcrumb) or atril-xgv (persistent category nav bar)
Session 20:52 (general)
Analyzed ~/.pi/agent/sessions/ (340 sessions, 103 MB)
and ~/.claude/sessions/ to identify token
anti-patterns.
Key findings: 45.6% of sessions hit compaction; sequential
read-modify-test loops without truncation; API retry noise (Gemini 429
retried 5× in-context); cached spec files consuming most of the context
window; multi-hour monolithic sessions.
Added Context discipline section to
~/.claude/CLAUDE.md and ~/AGENTS.md via
chezmoi; pushed dotfiles.
Fixed custom-provider-claude-cli extension: corrected
contextWindow from 1,000,000 → 200,000 for Sonnet/Opus 4.6;
added truncateContent() (4000-char cap per message) and
20-message sliding window to format-context.ts.
Tracked both pi extensions (custom-provider-claude-cli,
custom-provider-gemini-cli) in chezmoi under
dot_pi/agent/extensions/; pushed dotfiles.
Next: Audit MCP server placement (move
Google/Playwright to per-project scope) and deduplicate incitaciones vs.
global skills to shrink per-turn system-reminder size.