feature: Refinements as versioned specs (UI for backend#12) #8

Merged
Gilles merged 1 commit from feature/refinement-specs into main 2026-10-25 14:48:55 +00:00
Owner

Closes #7

Frontend half of thierryade/backend#12 — merge together with thierryade/backend#13 (the API changes shape on both sides).

Changes

  • api/specs.ts: Spec.refines / code_aliases, SpecVersion.is_absence / refines_versions / pending_decision / refinement_versions / missing_refinement_places, createSpec(place, title, {refines, isAbsence, content}), decideRefinement(). Refinement, listRefinements, setRefinement removed; loadProjectTree no longer needs one request per spec version.
  • "Par raffinage" (refinementTree.ts, SpecFrameNode.vue): real tree from Spec.refines (no more "voir plus haut" references), absences as dashed lines, child places nothing refines flagged in red, "décision en attente" chip.
  • SpecDetailPanel.vue: "Raffine " link, former -R- codes, decision box on a cascaded draft (Conserver la vN / Faire une nouvelle version / absence with reason), per child place: refining specs (with coverage hint), "Aucun raffinement pour cette version.", new refinement and documented absence inputs. Emits select / changed so both trees follow and reload.
  • PlaceSpecNode.vue: below the root, "+ Nouvelle spec" requires choosing the refined spec (draft specs of the parent place only).
  • Attachments: spec versions only (exists_in_refinements gone).
  • MSW mocks: new model, reopen cascade and decide.

Tests

vitest: 57 passed (new: nesting, missing place, refinement/absence creation, cascade + keep decision, refines picker). vue-tsc -b and vite build clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_014BSmBtGWeFBD9z4mYm9SjA

Closes #7 Frontend half of thierryade/backend#12 — **merge together with thierryade/backend#13** (the API changes shape on both sides). ## Changes - `api/specs.ts`: `Spec.refines` / `code_aliases`, `SpecVersion.is_absence` / `refines_versions` / `pending_decision` / `refinement_versions` / `missing_refinement_places`, `createSpec(place, title, {refines, isAbsence, content})`, `decideRefinement()`. `Refinement`, `listRefinements`, `setRefinement` removed; `loadProjectTree` no longer needs one request per spec version. - "Par raffinage" (`refinementTree.ts`, `SpecFrameNode.vue`): real tree from `Spec.refines` (no more "voir plus haut" references), absences as dashed lines, child places nothing refines flagged in red, "décision en attente" chip. - `SpecDetailPanel.vue`: "Raffine <code>" link, former `-R-` codes, decision box on a cascaded draft (Conserver la vN / Faire une nouvelle version / absence with reason), per child place: refining specs (with coverage hint), "Aucun raffinement pour cette version.", new refinement and documented absence inputs. Emits `select` / `changed` so both trees follow and reload. - `PlaceSpecNode.vue`: below the root, "+ Nouvelle spec" requires choosing the refined spec (draft specs of the parent place only). - Attachments: spec versions only (`exists_in_refinements` gone). - MSW mocks: new model, reopen cascade and `decide`. ## Tests `vitest`: 57 passed (new: nesting, missing place, refinement/absence creation, cascade + keep decision, refines picker). `vue-tsc -b` and `vite build` clean. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_014BSmBtGWeFBD9z4mYm9SjA
Refinements as versioned specs (UI for backend#12)
All checks were successful
ci / unit (pull_request) Successful in 54s
ci / publish (pull_request) Has been skipped
dacef89b96
- API client: Spec.refines/code_aliases, SpecVersion.is_absence/
  refines_versions/pending_decision/refinement_versions/
  missing_refinement_places, decideRefinement(); /refinements/ and
  refinement attachment targets dropped; the project tree needs no
  per-version request any more.
- "Par raffinage": each spec once under the spec it refines, absences
  as dashed lines, missing child places flagged, pending decisions
  tagged.
- Spec detail: "Raffine" link, former codes, decision box (keep the
  previous version / new version / absence) on a cascaded draft, new
  refinement or documented absence per child place; the tree reloads
  after structural changes.
- "Par emplacement": a spec below the root must pick the spec it
  refines.
- MSW mocks follow the new model, reopen cascade and decide included.

Closes #7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014BSmBtGWeFBD9z4mYm9SjA
Author
Owner
<!-- argus-link-bot:thierryade/frontend --> 📊 [Rapports Argus pour cette PR](https://reports.stationmyr.net/thierryade/frontend/pr/8)
Gilles self-assigned this 2026-10-25 14:48:22 +00:00
Gilles changed title from WIP: Refinements as versioned specs (UI for backend#12) to feature: Refinements as versioned specs (UI for backend#12) 2026-10-25 14:48:40 +00:00
Gilles merged commit e335cc8d5e into main 2026-10-25 14:48:55 +00:00
Gilles deleted branch feature/refinement-specs 2026-10-25 14:48:55 +00:00
Sign in to join this conversation.
No description provided.