docs(plans): mark D.1+D.2 shipped in post-fix remainders (knowledge loop closed)
Some checks failed
ci / build-test (push) Has been cancelled
ci / docker-build (push) Has been cancelled
Desktop App / Build Linux (amd64) (push) Has been cancelled
Desktop App / Attach to Release (push) Has been cancelled

D.1 (complete_task refused without writeback) and D.2 (propose_plan
auto-appends writeback step) shipped in 3de359b (v0.5.1), e2e-validated
against the live agent. The knowledge loop is now structurally closed —
no blockers remain. Remaining items (F.1, F.2, C.1, C.2, B.4-B.6, E.1,
E.2) are all friction/cosmetic.
This commit is contained in:
2026-07-14 20:47:35 +02:00
parent 3b98097f58
commit 0b5b213b2a
2 changed files with 23 additions and 21 deletions

View File

@@ -1,10 +1,10 @@
# 2026-07-14 — Post-fix session audit: empty responses & plan drift remainders
**Status:** In Progress — 2026-07-14. Phases A + B.1-B.3 + F.3 shipped,
e2e-validated, committed (`337d577`), pushed to `main`, and deployed to
`oikos-nomos-1` (v0.5.0). Phases C, D, E, and F.1-F.2 remain; **D.1 is the
next blocker** (refuse `complete_task` without writeback — the knowledge
loop is still drifting).
**Status:** In Progress — 2026-07-14. Phases A + B.1-B.3 + F.3 + D.1 + D.2
shipped, e2e-validated, committed (`337d577` + `3de359b`), pushed to
`main`, and deployed to `oikos-nomos-1` (v0.5.1). The knowledge loop is now
structurally closed. Phases C, E, F.1-F.2, and B.4-B.6 remain (all
friction/cosmetic, **no blockers left**).
**2026-07-14 (PM) — OIDC token-refresh fix (unplanned, root-cause for the
empty graph symptom):** the overview background graph and the Knowledge Base
@@ -22,7 +22,7 @@ the static token fallback takes over. Build passes. Not yet committed or
deployed (pending operator verification). Not part of any numbered phase
above — filed here because it was the highest-impact surface symptom.
## Shipped (2026-07-14, v0.5.0 — commit 337d577, deployed)
## Shipped (2026-07-14, v0.5.0v0.5.1 — commits 337d577 + 3de359b, deployed)
| Fix | File(s) | Validation |
|---|---|---|
@@ -33,23 +33,25 @@ above — filed here because it was the highest-impact surface symptom.
| **B.1** `chatWith` emits `done` after `error` on every terminal path | `cmd/nomos/agent.go` | e2e: nomos logs show zero reconnect/resume entries for the plan-proposing test sessions (was the amplifier in the three-bug chain) |
| **B.2** Reconnect/resume note carries last user msg + plan-in-flight directive | `cmd/nomos/store.go`, `cmd/nomos/main.go`, `cmd/nomos/continue.go` | wired into all 4 resume entry points (reconnect, /resume, idle-sweep, question-answer) |
| **B.3** `resumeSession` escalates the recovery note across 3 attempts | `cmd/nomos/continue.go` | e2e: a manually-triggered reconnect produced a real response on the escalated retry (was 3 identical empties → give up) |
| **D.1** `complete_task` refused when discovery ran without writeback | `cmd/nomos/store.go`, `cmd/nomos/tasks.go` | e2e: agent ran `run` on lxc:gitea, called `complete_task` → REFUSED → agent called `update_entity_attributes` → retried `complete_task` → succeeded. Knowledge loop closed end-to-end. |
| **D.2** `propose_plan` auto-appends a writeback step if missing | `cmd/nomos/tasks.go` | e2e: agent proposed 3 steps (no writeback); D.2 appended step 4 'Write back: update_entity_attributes + ...'. Combined with D.1 + seq-order (5.6), the agent must write back to complete. |
Test: `TestProposePlan_RefuseInFlight` (rewrote `TestProposePlan_AppendVsReplace`)
in `cmd/nomos/store_test.go` asserts the refusal + generation wiring.
Tests: `TestProposePlan_RefuseInFlight` (rewrote `TestProposePlan_
AppendVsReplace`) + `TestHadDiscoveryAndWriteback` in
`cmd/nomos/store_test.go` assert the refusal + generation + discovery/writeback
gating.
## Remaining (not yet shipped)
## Remaining (not yet shipped) — no blockers, all friction/cosmetic
- **D.1** Refuse `complete_task` without writeback when discovery ran — **next blocker**. The knowledge loop is still drifting: conv3 did write back (`update_entity_attributes`) but only because the agent chose to, not because it was forced to. The warning string in `completeTask` (5.5 from the prior plan) still fires but is still ignorable.
- **D.2** Auto-append a writeback step to plans that lack one.
- **C.1** `completeTask` reject re-completion of a terminal session.
- **C.2** SOUL.md: don't re-execute on UI-clarification complaints.
- **F.1** Consolidate SOUL.md's three overlapping task-flow sections to one (the operator's "be more crisp" feedback).
- **F.2** Tighten tool-result strings from advisory to imperatives (partially done in F.3's propose_plan result; remaining: set_goal, update_plan_step, complete_task).
- **B.4** Surface the real model error text (errText) in the error event + resume-failed note.
- **B.5** Back off between resume retries (4s, 8s).
- **B.6** Don't persist the empty placeholder as a visible bubble.
- **E.1** SOUL.md: prefer knowledge over re-execution for fleet-wide facts.
- **E.2** `list_lxcs` last-audited hint in the result.
- **F.1** Consolidate SOUL.md's three overlapping task-flow sections to one (the operator's "be more crisp" feedback). Effort: S.
- **F.2** Tighten tool-result strings from advisory to imperatives (partially done in F.3's propose_plan result; remaining: set_goal, update_plan_step, complete_task). Effort: S.
- **C.1** `completeTask` reject re-completion of a terminal session. Effort: S.
- **C.2** SOUL.md: don't re-execute on UI-clarification complaints. Effort: S.
- **B.4** Surface the real model error text (errText) in the error event + resume-failed note. Effort: S.
- **B.5** Back off between resume retries (4s, 8s). Effort: S.
- **B.6** Don't persist the empty placeholder as a visible bubble. Effort: M.
- **E.1** SOUL.md: prefer knowledge over re-execution for fleet-wide facts. Effort: S.
- **E.2** `list_lxcs` last-audited hint in the result. Effort: M.
## Commit-history context (the 20-commit iteration)

View File

@@ -17,7 +17,7 @@ went sideways, open an investigation.
| 2026-07-14 | [Session reliability & UX audit](2026-07-14-session-reliability-and-ux-audit.md) | Done — all 21 fixes deployed |
| 2026-07-14 | [Tool timeline in sidebar](2026-07-14-tool-timeline-sidebar.md) | Done — deployed v0.3.2 |
| 2026-07-14 | [Unified agent activity indicator](2026-07-14-unified-agent-indicator.md) | Done — deployed v0.3.3 |
| 2026-07-14 | [Post-fix session remainders: empty responses & plan drift](2026-07-14-post-fix-session-remainders.md) | In Progress — Phases A + B.1-B.3 + F.3 shipped, e2e-validated, committed (337d577), deployed v0.5.0; Phases C, D, E, F.1-F.2 remain (D.1 next blocker). **PM:** OIDC token-refresh fix (root-cause for empty graphs) implemented, not yet committed/deployed |
| 2026-07-14 | [Post-fix session remainders: empty responses & plan drift](2026-07-14-post-fix-session-remainders.md) | In Progress — Phases A + B.1-B.3 + F.3 + D.1 + D.2 shipped, e2e-validated, committed (337d577 + 3de359b), deployed v0.5.1. Knowledge loop structurally closed. Phases C, E, F.1-F.2, B.4-B.6 remain (no blockers). **PM:** OIDC token-refresh fix (root-cause for empty graphs) implemented, not yet committed/deployed |
## Done