You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Devflow embeds GitHub Issues as its ticket system across commands, agents and skills. This work makes the tracker pluggable — GitHub, Jira and Linear — without losing any of today's compliance-gated traceability behaviour.
The provider is chosen once at devflow init (default github) and stored in manifest.features.tracker.provider. Per-project conventions are inferred once, silently, in the background by a new Tracker agent into ~/.devflow/tracker.md; no question is ever asked of the user. Provider mechanics move out of the 938-line Git agent into generated per-op skill references that are loaded one file per spawn, so the learned instructions never sit permanently in session context.
GitHub users see no change at all — no prompt, no new file, no altered byte — and that guarantee is enforced by a frozen github-status-lines.txt fixture captured in Phase 0 and compared at every phase boundary.
Four phases, executed strictly in order, each branched from main after the previous phase's squash-merge.
Test-inventory table present with a red proof per guard — guard name · file:line it lands in · the known-bad sample it must fail on · the commit in which it was proven red. A guard with no recorded red proof is not a deliverable.
CHANGELOG enumerates the user-visible changes with before/after.
Prefix-shippability command sequence run and pasted — npm run build && npm test && npm run test:integration && npm pack --dry-run, git status --porcelain empty, and the frozen-fixture cmp clean.
Release-blocker items named in the release-readiness section (Phase 2: the shadow-overlay AC is a release blocker, not merely an AC).
These four are process ACs. There is no mechanical test behind them and none should be faked — a test that asserts a document's shape rather than the system's behaviour is a vacuous guard.
Execution notes
Branch from main after each squash-merge. No phase PR is ever opened against another phase's branch; no stacking. If a branch is nonetheless cut early, retarget to main and rebase (--force-with-lease), then re-run full CI against the new base.
Run /implement once per phase, against that phase's design artifact. Every phase is SEQUENTIAL_CODE_AGENTS; parallel Code agents are rejected feature-wide (shared dist/ under rm -rf, no worktree isolation, overlapping read closures).
Pre-authorised splits: Phase 0's A3a/A3b, Phase 2's per-op T2 commits, and Phase 3's 3a-4 → 3b/implement re-invocation (same branch, CREATE_PR: false on the first run's terminal agent). Never split inside 3a. A P0a/P0bPR split requires explicit approval — it changes the issue count.
The two goldens have different lifecycles.git-agent.md is regenerated deliberately in Phase 2 and once in Phase 3, each in its own commit reviewed as a text diff. github-status-lines.txt is never regenerated through Phase 3.
The design artifacts live under .devflow/docs/design/, which is gitignored — every normative rule is inlined into each phase issue and artifact, never linked. Artifacts exceeding the 60k comment cap are posted as a truncated stub; each artifact is self-contained regardless.
Out of scope
git.md's second size cut (git.md: second size cut — move the 8 PR/review op bodies to references (SG-7) #326, SG-7) — moving the 8 PR/review op bodies to references. Filed separately because the post-review-summary / post-resolution-summary mechanics are D10 and D11 sinks and may move only in a PR that moves their guards, never as a size optimisation. Depends on Phase 2 being merged.
The Linear capability probe issue — filed during Phase 3c alongside the ## Known Unknowns section, so the unknown has a named owner. Linear ships at rank 4 (visible first-line marker, no author filter, post-with-warning).
Decisions fixed for this issue set (D-I)
Each phase issue body is the D3 template carrying that phase's problem statement, execution strategy, subtask table and AC list; the full design artifact is posted as a collapsed comment.
Label feature on all four phase issues — the conventional-commit kind (fix/refactor/feat) is carried by the PR title, not the label. Phase issue titles use the artifact title: frontmatter values ("Tracker Phase N — …"); PR titles use the conventional-commit strings.
All four phase issues and this tracking issue are created up front, in order P0 → P1 → P2 → P3 → tracking.
Depends on: #N appears as prose in each phase issue body — not as the ticket-template dependency grammar, which belongs to the wave scheduler.
This tracking issue is created by the Git agent as a plain issue with a custom body, not through the D3 template.
Artifacts over the 60k comment cap are posted as a truncated stub per the existing operation behaviour.
Summary
Devflow embeds GitHub Issues as its ticket system across commands, agents and skills. This work makes the tracker pluggable — GitHub, Jira and Linear — without losing any of today's compliance-gated traceability behaviour.
The provider is chosen once at
devflow init(defaultgithub) and stored inmanifest.features.tracker.provider. Per-project conventions are inferred once, silently, in the background by a new Tracker agent into~/.devflow/tracker.md; no question is ever asked of the user. Provider mechanics move out of the 938-line Git agent into generated per-op skill references that are loaded one file per spawn, so the learned instructions never sit permanently in session context.GitHub users see no change at all — no prompt, no new file, no altered byte — and that guarantee is enforced by a frozen
github-status-lines.txtfixture captured in Phase 0 and compared at every phase boundary.Four phases, executed strictly in order, each branched from
mainafter the previous phase's squash-merge.Phases
PR checklist (applies to every phase PR)
npm run build && npm test && npm run test:integration && npm pack --dry-run,git status --porcelainempty, and the frozen-fixturecmpclean.These four are process ACs. There is no mechanical test behind them and none should be faked — a test that asserts a document's shape rather than the system's behaviour is a vacuous guard.
Execution notes
mainafter each squash-merge. No phase PR is ever opened against another phase's branch; no stacking. If a branch is nonetheless cut early, retarget tomainand rebase (--force-with-lease), then re-run full CI against the new base./implementonce per phase, against that phase's design artifact. Every phase isSEQUENTIAL_CODE_AGENTS; parallel Code agents are rejected feature-wide (shareddist/underrm -rf, no worktree isolation, overlapping read closures).3a-4 → 3b/implementre-invocation (same branch,CREATE_PR: falseon the first run's terminal agent). Never split inside 3a. AP0a/P0bPR split requires explicit approval — it changes the issue count.git-agent.mdis regenerated deliberately in Phase 2 and once in Phase 3, each in its own commit reviewed as a text diff.github-status-lines.txtis never regenerated through Phase 3..devflow/docs/design/, which is gitignored — every normative rule is inlined into each phase issue and artifact, never linked. Artifacts exceeding the 60k comment cap are posted as a truncated stub; each artifact is self-contained regardless.Out of scope
git.md's second size cut (git.md: second size cut — move the 8 PR/review op bodies to references (SG-7) #326, SG-7) — moving the 8 PR/review op bodies to references. Filed separately because thepost-review-summary/post-resolution-summarymechanics are D10 and D11 sinks and may move only in a PR that moves their guards, never as a size optimisation. Depends on Phase 2 being merged.## Known Unknownssection, so the unknown has a named owner. Linear ships at rank 4 (visible first-line marker, no author filter, post-with-warning).Decisions fixed for this issue set (D-I)
featureon all four phase issues — the conventional-commit kind (fix/refactor/feat) is carried by the PR title, not the label. Phase issue titles use the artifacttitle:frontmatter values ("Tracker Phase N — …"); PR titles use the conventional-commit strings.Depends on: #Nappears as prose in each phase issue body — not as the ticket-template dependency grammar, which belongs to the wave scheduler.