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 # 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, **Status:** In Progress — 2026-07-14. Phases A + B.1-B.3 + F.3 + D.1 + D.2
e2e-validated, committed (`337d577`), pushed to `main`, and deployed to shipped, e2e-validated, committed (`337d577` + `3de359b`), pushed to
`oikos-nomos-1` (v0.5.0). Phases C, D, E, and F.1-F.2 remain; **D.1 is the `main`, and deployed to `oikos-nomos-1` (v0.5.1). The knowledge loop is now
next blocker** (refuse `complete_task` without writeback — the knowledge structurally closed. Phases C, E, F.1-F.2, and B.4-B.6 remain (all
loop is still drifting). friction/cosmetic, **no blockers left**).
**2026-07-14 (PM) — OIDC token-refresh fix (unplanned, root-cause for the **2026-07-14 (PM) — OIDC token-refresh fix (unplanned, root-cause for the
empty graph symptom):** the overview background graph and the Knowledge Base 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 deployed (pending operator verification). Not part of any numbered phase
above — filed here because it was the highest-impact surface symptom. 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 | | 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.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.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) | | **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`) Tests: `TestProposePlan_RefuseInFlight` (rewrote `TestProposePlan_
in `cmd/nomos/store_test.go` asserts the refusal + generation wiring. 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. - **F.1** Consolidate SOUL.md's three overlapping task-flow sections to one (the operator's "be more crisp" feedback). Effort: S.
- **D.2** Auto-append a writeback step to plans that lack one. - **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. - **C.1** `completeTask` reject re-completion of a terminal session. Effort: S.
- **C.2** SOUL.md: don't re-execute on UI-clarification complaints. - **C.2** SOUL.md: don't re-execute on UI-clarification complaints. Effort: S.
- **F.1** Consolidate SOUL.md's three overlapping task-flow sections to one (the operator's "be more crisp" feedback). - **B.4** Surface the real model error text (errText) in the error event + resume-failed note. 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). - **B.5** Back off between resume retries (4s, 8s). Effort: S.
- **B.4** Surface the real model error text (errText) in the error event + resume-failed note. - **B.6** Don't persist the empty placeholder as a visible bubble. Effort: M.
- **B.5** Back off between resume retries (4s, 8s). - **E.1** SOUL.md: prefer knowledge over re-execution for fleet-wide facts. Effort: S.
- **B.6** Don't persist the empty placeholder as a visible bubble. - **E.2** `list_lxcs` last-audited hint in the result. Effort: M.
- **E.1** SOUL.md: prefer knowledge over re-execution for fleet-wide facts.
- **E.2** `list_lxcs` last-audited hint in the result.
## Commit-history context (the 20-commit iteration) ## 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 | [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 | [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 | [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 ## Done