Skip to content

fix(save-session): never let compression drop a blocked/pending status - #323

Merged
fdaviddpt merged 1 commit into
Digital-Process-Tools:mainfrom
turbomotioncat:fix/save-session-preserve-blocked-status
Aug 10, 2026
Merged

fix(save-session): never let compression drop a blocked/pending status#323
fdaviddpt merged 1 commit into
Digital-Process-Tools:mainfrom
turbomotioncat:fix/save-session-preserve-blocked-status

Conversation

@turbomotioncat

Copy link
Copy Markdown
Contributor

Problem

prompts/save-session.prompt.txt compresses each save into exactly one sentence, but has no rule protecting "blocked / pending / not-yet-live" status from being treated as droppable filler alongside things like "successfully" or "in order to".

Real-world hit: a session deployed app code but was explicitly blocked on a manual step (a human running a data upload with credentials the assistant doesn't have access to). The assistant told the user clearly, twice, in chat. The saved .remember/now.md entry kept "...deployed" and silently dropped the entire "blocked on you" caveat. The user read the memory entry later, believed the feature was fully live, and only found out otherwise by checking the app directly.

Fix

Two small, coordinated edits to prompts/save-session.prompt.txt, in its existing style:

  • The format bracket now explicitly calls out appending blocked/incomplete/waiting-on-a-manual-step status as a short clause in the same sentence.
  • A new rule bullet (next to the existing non-destructive-compression rule) states this plainly: blocking/pending/not-yet-live status is a fact, not filler, and must survive compression even if the sentence gets longer.

No changes to the ## {{TIME}} | {{BRANCH}} header contract, the four {{PLACEHOLDER}}s, or the SKIP logic.

Testing

  • tests/test_prompts.py — all 10 tests pass unmodified (python3 -m pytest tests/test_prompts.py -v --no-cov), including test_build_save_prompt_with_real_templates, which loads this exact file.
  • scripts/run-tests.sh section 6 ("Prompt templates") passes — file exists, {{TIME}} placeholder intact.
  • Manually built a synthetic prompt via pipeline.prompts.build_save_prompt() against a "deployed but blocked on a manual step" transcript and confirmed the new rule text assembles correctly into the final prompt sent to the summarizer.

The one-sentence compression rule had no protection for "blocked on a
manual step" language, so it got treated as droppable filler the same
as any other wording. In practice: a session deployed app code but was
explicitly blocked on a human running a manual data upload (missing
credentials the assistant had no access to). The saved memory entry
kept "deployed" and silently dropped the blocking caveat entirely,
leaving a false impression the feature was fully live.

Add an explicit rule (and reinforce it in the format bracket) that
blocking/pending/not-yet-live status is a fact to preserve, not filler
to compress away, even if it makes the one sentence a bit longer.

No changes to the header contract, placeholders, or SKIP logic.
@fdaviddpt
fdaviddpt merged commit 47458b7 into Digital-Process-Tools:main Aug 10, 2026
12 checks passed
@fdaviddpt

Copy link
Copy Markdown
Contributor

Merged — thank you.

What made this easy to accept was the framing: you didn't report "the summary was bad", you named the exact class of fact that compression was allowed to eat. "Blocking status is a fact, not filler" is the right line, and it sits properly next to the non-destructive-compression rule rather than fighting it. The failure you described — reading ...deployed later and believing it was live — is the worst outcome this plugin can produce, because a memory entry that is wrong is worse than no memory entry at all.

Two things I checked before merging, in case they're useful to you: test_build_save_prompt_with_real_templates does load this exact file, so the 10 green tests are real coverage of the assembly path, and the header contract and the four placeholders are untouched. Shipping in the next release.

If you use Claude Code enough to have hit this, you may also get some mileage out of our other one — claude-supertool. Same idea applied to tool calls instead of memory: batch reads/greps/edits into a single call, with post-edit validation and rollback. It's stdlib-only Python and source-available like this one. No obligation, just adjacent.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants