summaryrefslogtreecommitdiffhomepage
path: root/tasks.md
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-06 22:23:23 +0900
committerAdam Malczewski <[email protected]>2026-06-06 22:23:23 +0900
commit219cf053fad4e48b22590d3178438bf5d67d04e3 (patch)
tree5d04a3105efc793de8ad3b3cf1c584f8b176dc27 /tasks.md
parent2c5bc242a8a99e3b863c247f70b26f5883333677 (diff)
downloaddispatch-219cf053fad4e48b22590d3178438bf5d67d04e3.tar.gz
dispatch-219cf053fad4e48b22590d3178438bf5d67d04e3.zip
docs(harness): author extension-logging rule (close the pending logging gap)
The .dispatch/rules/extension-logging.md rule was '(pending)' in ORCHESTRATOR §3 for the entire life of the observability substrate, so every extension summon was built without logging/self-redaction guidance — leaving most extensions silent (a coverage audit found conversation-store, transport-http, credential-store, tool-read-file, storage-sqlite, auth-apikey, surface-* all with zero logger refs). - Author .dispatch/rules/extension-logging.md (tribal-knowledge only, P6/P7): self-redact your own secrets in your own code (no shared helper; §6 tiers), use injected host.logger/ctx.log, flat scalar attrs, no token-delta logging, one-way logs, edge verbatim capture. - Wire it into ORCHESTRATOR §3 as 'every extension' — include on EVERY extension summon; remove the (pending) note. - Record the coverage audit + remaining instrumentation debt (#1 reconcile.repair span in conversation-store, #2 transport-edge logging) in tasks.md. Future extensions now get logging by construction.
Diffstat (limited to 'tasks.md')
-rw-r--r--tasks.md21
1 files changed, 21 insertions, 0 deletions
diff --git a/tasks.md b/tasks.md
index a3b9faa..5e10126 100644
--- a/tasks.md
+++ b/tasks.md
@@ -283,6 +283,27 @@ independent of the SQLite trace-store; the lib is redaction-free (caller self-re
Summons: prompts/phase-a-{kernel-logging,journal-sink}.md;
reports/phase-a-{kernel-logging,journal-sink}.md.
+### Logging-coverage audit (post FE-Slice-2 backend work)
+The core turn round-trip is well-instrumented (kernel turn/step/tool-call/prompt spans +
+provider-openai-compat `provider.request` D5 capture + session-orchestrator per-turn childing).
+But a survey found per-extension/edge coverage thin, and a HARNESS gap as the root cause:
+- [x] **#3 ROOT CAUSE FIXED — `.dispatch/rules/extension-logging.md` authored** (was "(pending)"
+ in ORCHESTRATOR §3 for the whole substrate's life, so EVERY extension summon — incl. this
+ session's conversation-store/transport-http/transport-ws/credential-store — was built blind to
+ it). Rule now exists (self-redaction in own code, no shared helper, §6 tiers; use injected
+ `host.logger`/`ctx.log`; flat scalar attrs; no token-delta logging; one-way; edge verbatim
+ capture). ORCHESTRATOR §3 row updated to "Every extension — include on EVERY extension summon."
+ Future extensions now get logging guidance by construction.
+- [ ] **#1 INSTRUMENTATION DEBT — `reconcile.repair` span (conversation-store).** It has ZERO
+ logger refs and `createConversationStore(storage)` receives no logger, so a load-time history
+ repair (the §3.4 / bug-catalog "API rejected corrupted history" class) leaves NO trace. Inject a
+ logger + emit a `reconcile.repair` span. Address when conversation-store is next touched (or as
+ a dedicated pass).
+- [ ] **#2 INSTRUMENTATION DEBT — transport edges.** transport-http has 0 logger refs (a `/chat`
+ 500 / malformed request / the new `GET /conversations` read is invisible); transport-ws logs
+ minimally. Add request/error logging at the edges.
+- D8 `prompt.assembly` segments remain deferred-by-design (await the context-filter chain).
+
---
## ROADMAP — what's next (user-decided, §5.2)