Commit Graph
17 Commits
Author SHA1 Message Date
haelyra 4ce5ae0119 fix: preserve search scope and installed cache discovery 2026-10-11 10:25:44 -04:00
haelyra a73e04cc6d fix: recover failed ledger batches and preserve project state 2026-10-11 09:42:05 -04:00
haelyra 8a404dbbdc fix: preserve story projections and blank provider defaults 2026-10-11 08:56:29 -04:00
haelyra 5da9a1f4a7 fix: preflight ledger storage and normalize saved model padding 2026-10-11 05:33:44 -04:00
haelyra 15b51b6ca4 fix(windows): make fault probes portable and bound sharing-denial retries 2026-10-11 04:56:18 -04:00
haelyra 8f80de5975 fix(ledger): retain lock descriptors across ownership checks and release 2026-10-11 04:19:35 -04:00
haelyra 644269657c fix: harden ledger publication and mixed Ollama histories 2026-10-11 03:53:41 -04:00
haelyra 1bbebf61d9 fix(story-lifecycle): reject unsafe numeric allocation IDs
A real CLI fixture reproduced an infinite allocation loop from an existing unsafe numeric ID. Reject unsafe IDs and overflow without writing markers; 26 workflow fixtures, changed-code coverage and validators pass.
2026-10-11 02:17:50 -04:00
haelyra 54925308d7 feat(skills): integrate collision-safe story lifecycle from PR 2311
Preserve full contributor history and current catalog. Actual process workflows cover concurrency, recovery, sprint planning and read-only status. Bound registry symlinks, counts and lock waits; preserve manually curated trigger provenance.
2026-10-11 01:59:36 -04:00
t0kubetsu bf5cd6c95e fix(story-lifecycle): reject Points outside 1, 2, 3, 5, 8
A non-numeric, negative, or exponent Points value was persisted and
silently skewed the derived sprint total (bogus -> 0, -3, 1e3 -> 1000)
with no drift reported. parseStory now enforces the documented values,
so apply rejects the batch and status reports the invalid story.
2026-10-07 12:05:53 +02:00
t0kubetsu 7f797d65c4 fix(story-lifecycle): confine ledger I/O, race-free stale locks, enforce transitions
Resolve the Greptile findings on 74262955:
- Refuse symlinked .stories/, epics/, sprints/, .txn/, .ids/ and
  symlinked ledger files, so no read or write leaves .stories/.
- Recovery accepts only regular backup-<n> files in .txn/, validates the
  whole journal before restoring, and never writes through a planted
  restore.tmp.
- Remove a stale lock only under .lock.break after a re-read, so a live
  lock is never deleted; a leftover .lock.break times out (exit 3)
  instead of spinning.
- apply enforces one-step-forward status transitions, new stories start
  as todo, and Sprint must be unassigned or an existing sprint file.
- Refuse a batch that names the same file twice (e.g. a\b vs a/b).

Symlink tests skip on Windows when symlink creation returns EPERM.
2026-10-07 11:45:30 +02:00
t0kubetsu 7426295579 feat(story-lifecycle): collision-safe, all-or-nothing ledger writes
Route every .stories/ write through skills/story-lifecycle/scripts/ledger.js:
- exclusive per-ledger lock; a second writer waits, then exits 3 without writing
- story IDs reserved with exclusive-create markers in the git common dir, so
  concurrent agents and worktrees of one clone never share an ID
- journaled batches: stage, journal, rename; derived epic/sprint tables are
  regenerated inside the batch; an interrupted batch is rolled back by the
  next write command or `recover`; `status` reports it only when no live
  writer holds the lock

Bound the ledger to an opt-in planning projection that is never canonical
ECC Task/Evidence/Completion/Integration state, and state that .stories/
follows the checkout.

tests/docs/story-lifecycle-ledger.test.js exercises create, concurrent
create, concurrent cross-worktree allocation, lock contention, overwrite
refusal, interrupted-batch recovery, sprint planning, status drift and
reconcile, and path confinement. Also refresh the skill-triggers manifest
digest for 294 skills.
2026-10-02 11:39:04 +02:00
haelyra 700911ef70 Merge main and harden story lifecycle reconciliation 2026-08-10 17:22:09 -04:00
t0kubetsu e19dfd6947 fix(skills): replace U+25B6 marker with ASCII-safe » in status legend
check-unicode-safety.js classifies U+25B6 as emoji; the review-state
marker in the status output legend now uses » instead.
2026-08-03 15:08:58 +02:00
t0kubetsu e9242b625a feat(skills): address review — canonical state model, hardening, contract test
Address maintainer review on #2311:
- story file is the single authoritative status record; epic/sprint
  tables are derived and reconciled; todo → in-progress → review → done
  with done gated on confirmed merge to main
- implement lane: tdd-workflow first, language reviewer +
  verification-loop before a story reaches review
- naming/path contract (slug, story-id, sprint validation), resolved-path
  confinement under .stories/, untrusted-content handling, no silent
  overwrites, harness-native file operations (no POSIX-only shell)
- documented boundary and handoff to issue-backed epic-* coordination
- replaced references that do not resolve on main; added
  tests/docs/story-lifecycle-skill.test.js contract test
2026-08-03 14:49:34 +02:00
t0kubetsuandgreptile-apps[bot] 05740105dd fix(skills/story-lifecycle): only update sprint file when Sprint is assigned
Carries forward a Greptile-suggested fix already applied on origin
(commit 1104f4be) that predates this session's rebase: marking a story
done should only touch .stories/sprints/sprint-<n>.md's table when the
story actually has a Sprint assigned, not unconditionally.

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-07-28 16:12:01 +02:00
t0kubetsu 2491620709 feat(skills): add story-lifecycle skill — file-based epic→story→sprint loop
Adds skills/story-lifecycle/SKILL.md, a community skill inspired by
the BMAD Method's epic/story/sprint workflow: a self-contained,
file-based delivery loop (Epic → Stories → Sprint → Implement → Done)
with all state under .stories/, no external PM tool required.

Rebuilt on current upstream/main as a skill-only diff, per affaan-m's
review (same blockers as #2309): the shared format-code.ts Windows fix
and github-coordination branch-coverage tests that were bundled here
now live in #2459. Skill count recomputed as 277->278 against current
main (the old bump was stale, which was the actual conflict source).

Also repoints the Related Skills entry from the closed project-context
skill (#2310) to dev-team, which now owns reading/generating
PROJECT-CONTEXT.md.
2026-07-28 16:12:01 +02:00