Skip to content

Demo (backlog delivered, intent tightened): inline-edit undo end to end - #74

Open
rdryfoos wants to merge 1 commit into
mainfrom
demo/close-edit-undo
Open

rdryfoos wants to merge 1 commit into
mainfrom
demo/close-edit-undo

Conversation

@rdryfoos

@rdryfoos rdryfoos commented Oct 9, 2026

Copy link
Copy Markdown
Owner

A specimen. It stays open and is not for merging, like #1 to #5.

Its job is to carry a genuine 0.5.6 Thread Report: today's words, the three-state verdict line, and the <details> blocks. The Sites room needs two real images, and every Thread Report in this repository until now was posted in August, opening 🟢 **Golden Thread ..., which is the vocabulary #62 replaced.

The change, which is the example app's own Practice exercise 1

AC-EDIT-01 was anointed backlog: minted in PRD.md, carried only by the open T900 TODO, nothing built, nothing proving it. This picks it up end to end.

src/edit.py InlineEditor.undo(), with its # @covers AC-EDIT-01 mark; blur() now remembers the value it replaced
tests/test_edit.py test_AC_EDIT_01_undo_restores_prior_value, a second case named for the same criterion, and one unnamed edge case
specs/edit/spec.md names the criterion, which is what takes it out of the backlog altitude
specs/backlog/tasks.md T900 ticked, saying what became of it
tests/conftest.py the fixture the new tests share; names no requirement, so it reads as off thread

Seven tests pass in the app.

The restatement, which is the honest part

Undo restores the prior value within one step after an inline edit was vague in exactly the place building it forces a decision: what happens to a draft the user typed but did not commit. Leave it and undo puts the old value on screen while the next blur() commits the draft the user had just undone.

So the criterion now reads restores the last committed value in one call, and discards any uncommitted draft with it, and test_AC_EDIT_01_undo_discards_an_uncommitted_draft is the test that holds it. A reworded requirement is also what makes the verdict amber rather than green, which is the state that did not exist before 0.5.5.

What the report will say

Rendered locally from the same three inputs the workflow uses:

  • 🟡 **Needs a person** · **1** now has a test · **1** reworded · **1** changed file no requirement claims
  • a Reworded requirements section with was/now and three check: citations
  • What changed, one row: `AC-EDIT-01` | `backlog` → 🟢 **`proven`** · ✍️ reworded, with the unchanged rows footnoted rather than listed
  • Changed files no requirement claims: tests/conftest.py
  • the one-line footer defining Golden Thread, Off thread and Mint

One blemish the preview caught, which is not this specimen's fault

The rendered report carries this line where the authorship sentence should be:

No author counts: the v5 manifest was not found beside the head manifest.

.github/workflows/thread-report.yml copies only trace-manifest.json to /tmp/head.json and leaves trace-manifest.v5beta.json behind in the app directory, so the report cannot read the authorship field and says so instead. It is a one-line fix in the workflow, it belongs in a normal pull request to main rather than in a specimen that never merges, and I have not made it here. Flagging it before anyone photographs the comment: if the images should show the authorship sentence, that fix lands first and this comment re-renders in place on the next push.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Vzf6Sh5RVMKdFqaXKFF2FY


Generated by Claude Code

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

🧵 Thread Report

🟡 Needs a person · 1 now has a test · 1 reworded · 1 changed file no requirement claims

3 requirements came from the case, 7 from the project (design 5, retrospective 0, constitution 2).

Reworded requirements

⚠️ 1 requirement was reworded. Its code and tests were written against the old wording, so check that each still satisfies the new one.

What changed — 1 requirement in 1 area

EDIT

ID What changed Where
AC-EDIT-01 backlog → 🟢 proven · ✍️ reworded test_edit.py edit.py

+2 requirements in this area did not change, not listed: 2 🔵 backlog.

Changed files no requirement claims — 1 file

Changed, but nothing in it names a requirement this pull request moved. Not a defect: a refactor and unwanted scope look the same here. Worth a glance:


This comment reports; it never blocks. A changed file no requirement claims is a note, not a failure. Words used here: Golden Thread, the chain from a requirement to the code and test that answer for it. Off thread, a changed file no requirement claims. Mint, to write a new requirement into the registry. Set offthread_ack: record|required in the SpecAssay config to add a human tick.

…ding

The sixth specimen. It is the example app's own Practice exercise 1, done by
the book, so the Thread Report has something real to report under 0.5.6.

AC-EDIT-01 was anointed backlog: minted in PRD.md, carried only by the open
T900 TODO, with nothing built and nothing proving it. This change picks it up
end-to-end.

- src/edit.py: InlineEditor.undo(), with its @Covers AC-EDIT-01 mark. blur()
  now remembers the value it replaced.
- tests/test_edit.py: test_AC_EDIT_01_undo_restores_prior_value, plus a second
  case named for the same criterion covering the half the restatement is about,
  and one unnamed case for the nothing-committed-yet edge.
- specs/edit/spec.md: names the criterion, which is what takes it out of the
  backlog altitude, and the note says so rather than still claiming the
  absence is deliberate.
- specs/backlog/tasks.md: T900 ticked, and says what became of it.

And the restatement, which is the honest part. "Undo restores the prior value
within one step after an inline edit" was vague in exactly the place building it
forces a decision: what happens to a draft the user had typed but not
committed. Leave it and undo puts the old value on screen while the next blur
commits the undone draft. So the criterion now reads "restores the last
committed value in one call, and discards any uncommitted draft with it", and
the second test is the one that holds it.

tests/conftest.py gains the fixture the three new tests share. Nothing in it
names a requirement, so the report lists it as a changed file no requirement
claims, which is what that section is for.

Seven tests pass in the app. This specimen stays open and is not for merging.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vzf6Sh5RVMKdFqaXKFF2FY
@rdryfoos
rdryfoos force-pushed the demo/close-edit-undo branch from c800560 to 7be1205 Compare October 11, 2026 13:01
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