avtc-pi-featyard 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +194 -0
  3. package/agents/fy-design-reviewer.md +77 -0
  4. package/agents/fy-feature-verifier.md +24 -0
  5. package/agents/fy-general-reviewer.md +81 -0
  6. package/agents/fy-guidelines-reviewer.md +46 -0
  7. package/agents/fy-implementer.md +20 -0
  8. package/agents/fy-performance-reviewer.md +46 -0
  9. package/agents/fy-plan-reviewer.md +74 -0
  10. package/agents/fy-plan-verifier.md +44 -0
  11. package/agents/fy-quality-reviewer.md +50 -0
  12. package/agents/fy-requirements-reviewer.md +46 -0
  13. package/agents/fy-researcher.md +6 -0
  14. package/agents/fy-security-reviewer.md +46 -0
  15. package/agents/fy-task-verifier.md +42 -0
  16. package/agents/fy-testing-reviewer.md +60 -0
  17. package/assets/images/kanban-board.png +0 -0
  18. package/assets/images/settings-dropdown.png +0 -0
  19. package/assets/images/settings.png +0 -0
  20. package/assets/images/widget.png +0 -0
  21. package/docs/CONFIGURATION.md +266 -0
  22. package/index.ts +8 -0
  23. package/package.json +85 -0
  24. package/skills/fy-design/SKILL.md +108 -0
  25. package/skills/fy-design-review/SKILL.md +45 -0
  26. package/skills/fy-finish/SKILL.md +28 -0
  27. package/skills/fy-implement/SKILL.md +36 -0
  28. package/skills/fy-plan/SKILL.md +77 -0
  29. package/skills/fy-plan-review/SKILL.md +45 -0
  30. package/skills/fy-research/SKILL.md +38 -0
  31. package/skills/fy-review/SKILL.md +88 -0
  32. package/skills/fy-verify/SKILL.md +23 -0
  33. package/src/commands/auto-agent-commands.ts +748 -0
  34. package/src/commands/kanban-commands.ts +278 -0
  35. package/src/commands/workflow-commands.ts +531 -0
  36. package/src/compaction/compact-handler.ts +371 -0
  37. package/src/compaction/compact-message.ts +52 -0
  38. package/src/compaction/compact-trigger.ts +121 -0
  39. package/src/compaction/safe-editor-write.ts +18 -0
  40. package/src/events/agent/agent-end.ts +19 -0
  41. package/src/events/agent/agent-settled.ts +20 -0
  42. package/src/events/agent/agent-start.ts +18 -0
  43. package/src/events/agent/turn-end.ts +20 -0
  44. package/src/events/agent/turn-start.ts +19 -0
  45. package/src/events/event-deps.ts +33 -0
  46. package/src/events/index.ts +91 -0
  47. package/src/events/input/input.ts +143 -0
  48. package/src/events/session/context.ts +68 -0
  49. package/src/events/session/model-select.ts +20 -0
  50. package/src/events/session/session-compact.ts +20 -0
  51. package/src/events/session/session-shutdown.ts +26 -0
  52. package/src/events/session/session-start.ts +45 -0
  53. package/src/events/session/session-tree.ts +17 -0
  54. package/src/events/tool/tool-call.ts +58 -0
  55. package/src/events/tool/tool-result.ts +54 -0
  56. package/src/git/git-queries.ts +154 -0
  57. package/src/git/resolve-base-branch.ts +173 -0
  58. package/src/git/worktrees/worktree-helpers.ts +142 -0
  59. package/src/git/worktrees/worktree-interception.ts +66 -0
  60. package/src/git/worktrees/worktree-lifecycle.ts +380 -0
  61. package/src/guardrails/completion-gating.ts +63 -0
  62. package/src/guardrails/file-classifier.ts +461 -0
  63. package/src/guardrails/force-add-guard.ts +312 -0
  64. package/src/guardrails/guardrail-tracker.ts +73 -0
  65. package/src/guardrails/guardrail-violations.ts +47 -0
  66. package/src/guardrails/guardrails-engine.ts +663 -0
  67. package/src/guardrails/session-guardrails.ts +75 -0
  68. package/src/guardrails/shell-decompose.ts +285 -0
  69. package/src/guardrails/tdd-enforcement.ts +122 -0
  70. package/src/guardrails/test-output.ts +272 -0
  71. package/src/index.ts +598 -0
  72. package/src/integrations/parallel-work-guardrail-integration.ts +29 -0
  73. package/src/integrations/subagent-integration.ts +166 -0
  74. package/src/integrations/todo-integration.ts +58 -0
  75. package/src/kanban/auto-agent/auto-agent-cleanup.ts +37 -0
  76. package/src/kanban/auto-agent/auto-agent-events.ts +142 -0
  77. package/src/kanban/auto-agent/auto-agent-grace-period.ts +83 -0
  78. package/src/kanban/auto-agent/auto-agent-lifecycle.ts +497 -0
  79. package/src/kanban/auto-agent/auto-agent-notify.ts +43 -0
  80. package/src/kanban/auto-agent/auto-agent-pause.ts +44 -0
  81. package/src/kanban/auto-agent/auto-agent-state-machine.ts +629 -0
  82. package/src/kanban/data/kanban-database.ts +851 -0
  83. package/src/kanban/data/kanban-db-schema.ts +137 -0
  84. package/src/kanban/data/kanban-detect-project.ts +43 -0
  85. package/src/kanban/data/kanban-move-feature.ts +43 -0
  86. package/src/kanban/data/kanban-types.ts +64 -0
  87. package/src/kanban/ensure-feature.ts +226 -0
  88. package/src/kanban/kanban-board-ui/app.js +1125 -0
  89. package/src/kanban/kanban-board-ui/csv-parser.d.ts +5 -0
  90. package/src/kanban/kanban-board-ui/csv-parser.js +80 -0
  91. package/src/kanban/kanban-board-ui/index.html +127 -0
  92. package/src/kanban/kanban-board-ui/style.css +820 -0
  93. package/src/kanban/kanban-bridge.ts +216 -0
  94. package/src/kanban/kanban-context.ts +43 -0
  95. package/src/kanban/kanban-events.ts +34 -0
  96. package/src/kanban/kanban-generate-title.ts +259 -0
  97. package/src/kanban/kanban-generate-topic.ts +170 -0
  98. package/src/kanban/kanban-operations.ts +170 -0
  99. package/src/kanban/kanban-server.ts +931 -0
  100. package/src/kanban/kanban-turn-handlers.ts +55 -0
  101. package/src/kanban/model-capture.ts +34 -0
  102. package/src/log.ts +47 -0
  103. package/src/phases/env-sync.ts +64 -0
  104. package/src/phases/execution-mode.ts +79 -0
  105. package/src/phases/implement-to-verify.ts +31 -0
  106. package/src/phases/phase-progression.ts +249 -0
  107. package/src/phases/phase-transitions.ts +226 -0
  108. package/src/phases/workflow-router.ts +98 -0
  109. package/src/prompts/finish-instructions.ts +143 -0
  110. package/src/prompts/skill-block-builder.ts +73 -0
  111. package/src/prompts/skill-expansion.ts +262 -0
  112. package/src/prompts/task-gate-skill.ts +83 -0
  113. package/src/prompts/template-engine.ts +433 -0
  114. package/src/prompts/text-blocks.ts +279 -0
  115. package/src/review/review-context.ts +56 -0
  116. package/src/review/review-counter.ts +66 -0
  117. package/src/review/review-empty-loop-tracking.ts +52 -0
  118. package/src/review/review-loops.ts +217 -0
  119. package/src/review/review-report.ts +101 -0
  120. package/src/settings/model-overrides.ts +269 -0
  121. package/src/settings/settings-schema.ts +458 -0
  122. package/src/settings/settings-types.ts +81 -0
  123. package/src/settings/settings-ui.ts +222 -0
  124. package/src/shared/errors.ts +24 -0
  125. package/src/shared/global.d.ts +22 -0
  126. package/src/shared/session-entries.ts +24 -0
  127. package/src/shared/types.ts +195 -0
  128. package/src/shared/workflow-refs.ts +253 -0
  129. package/src/shared/workflow-types.ts +180 -0
  130. package/src/snippets/vendored/subscribe-to-dialog-coordinator.ts +98 -0
  131. package/src/snippets/vendored/subscribe-to-notifications.ts +150 -0
  132. package/src/snippets/vendored/subscribe-to-parallel-work-guardrail.ts +35 -0
  133. package/src/snippets/vendored/subscribe-to-subagent.ts +67 -0
  134. package/src/snippets/vendored/subscribe-to-todo.ts +63 -0
  135. package/src/state/archive-artifacts.ts +602 -0
  136. package/src/state/artifact-junction.ts +462 -0
  137. package/src/state/artifact-paths.ts +230 -0
  138. package/src/state/feature-activation.ts +239 -0
  139. package/src/state/feature-management.ts +325 -0
  140. package/src/state/feature-record-store.ts +39 -0
  141. package/src/state/feature-session.ts +263 -0
  142. package/src/state/feature-state.ts +439 -0
  143. package/src/state/post-turn-dispatch.ts +106 -0
  144. package/src/state/session-lifecycle.ts +346 -0
  145. package/src/state/state-persistence.ts +122 -0
  146. package/src/state/worth-notes.ts +89 -0
  147. package/src/tools/add-to-backlog.ts +117 -0
  148. package/src/tools/phase-ready.ts +742 -0
  149. package/src/tools/task-ready-advance.ts +235 -0
  150. package/src/tools/text-result.ts +15 -0
  151. package/src/ui/featyard-widget.ts +250 -0
  152. package/src/ui/manage-features-dialog.ts +246 -0
  153. package/src/ui/select-dialog.ts +27 -0
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: fy-quality-reviewer
3
+ description: Code quality review
4
+ tools: read, bash, find, grep, ls, write, edit
5
+ ---
6
+
7
+ You are a code quality reviewer. Review for maintainability, design principles, and overall quality.
8
+
9
+ {{PI_FY_WORKTREE_CONTEXT}}
10
+ **Design doc:** `{{PI_FY_DESIGN_DOC_PATH}}`
11
+ **Plan doc:** `{{PI_FY_PLAN_DOC_PATH}}`
12
+ **Known issues:** `{{PI_FY_KNOWN_ISSUES_PATH}}`
13
+
14
+ **Write only to your report file:** `{{PI_FY_REPORT_FILE}}`
15
+ ⚠️ **Parallel work safety:** You work in parallel with a team on the same working tree. Do not use `git stash/checkout/reset/clean/merge/rebase`, `npm install`, or any command that mutates the working tree or git state. Read-only commands only.
16
+
17
+ ## Process
18
+ {{PI_FY_COVERAGE_REVIEW_PROCESS}}
19
+
20
+ ## Coverage Areas
21
+
22
+ **1. Per-module design quality** — one leaf per changed module/file:
23
+ - SOLID — SRP violations, god objects, wrong abstraction boundaries?
24
+ - Cohesion (one responsibility?) and coupling (knows too much about others?)?
25
+ - Naming — every new symbol intent-revealing?
26
+ - Readability/maintainability — compressible complexity, unclear control flow?
27
+ **2. Error handling as a quality concern** — each error path: swallowed, misclassified, or lost context?
28
+ **3. Consistency** — same problem solved the same way across the diff? Inconsistent patterns are findings.
29
+ **4. DRY / duplication** *(cross-cutting)*:
30
+ - **Within the diff:** scan ACROSS ALL changed files for similar/near-duplicated logic or parallel structures (repeated switch/if-ladders, copy-pasted blocks) worth a shared helper.
31
+ - **Reinvention:** for non-trivial new logic, grep the repo OUTSIDE the diff for existing equivalents the new code duplicates or reinvents. List candidates as leaves with both refs.
32
+ **Cross-cutting:** area 4 is inherently cross-file/cross-repo — do it across the whole diff and repo in one pass, not per file.
33
+ **Other** — any quality concern you notice that the areas above didn't capture.
34
+
35
+ Focus only on production-code quality — test-file quality is the fy-testing-reviewer's domain. Do not comment on security, performance, or testing unless it has a quality implication.
36
+
37
+ ## Output Format
38
+ For each issue:
39
+
40
+ ```
41
+ ### Issue <ID>: <title> [Critical|Important|Minor]
42
+ - **Category:** quality
43
+ - **File:** <path>:<startLine>-<endLine> (omit if architectural)
44
+ - **Description:** What the quality issue is and why it matters
45
+ - **Suggested fix:** How to improve
46
+ ```
47
+
48
+ If no quality issues found, output: "No quality issues found."
49
+
50
+ Severity: Critical = blocks future development/causes frequent bugs, Important = harder to understand/modify, Minor = style/preference.
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: fy-requirements-reviewer
3
+ description: Verify implementation matches the plan/spec
4
+ tools: read, bash, find, grep, ls, write, edit
5
+ hide-from-agents-list: true
6
+ ---
7
+
8
+ You are a specification compliance reviewer. Review code for adherence to the design/plan.
9
+
10
+ {{PI_FY_WORKTREE_CONTEXT}}
11
+ **Design doc:** `{{PI_FY_DESIGN_DOC_PATH}}`
12
+ **Plan doc:** `{{PI_FY_PLAN_DOC_PATH}}`
13
+ **Known issues:** `{{PI_FY_KNOWN_ISSUES_PATH}}`
14
+
15
+ **Write only to your report file:** `{{PI_FY_REPORT_FILE}}`
16
+
17
+ ⚠️ **Parallel work safety:** You work in parallel with a team on the same working tree. Do not use `git stash/checkout/reset/clean/merge/rebase`, `npm install`, or any command that mutates the working tree or git state. Read-only commands only.
18
+
19
+ ## Process
20
+ {{PI_FY_COVERAGE_REVIEW_PROCESS}}
21
+
22
+ ## Coverage Areas
23
+ This reviewer maps implementation ↔ spec.
24
+
25
+ **1. Requirements coverage (spec → code)** — one leaf per concrete requirement/acceptance criterion in the design + plan docs: implemented? implemented correctly (not just present)?
26
+ **2. Scope creep (code → spec)** — one leaf per implemented feature/behavior in the diff: is it in the spec? if not — scope creep (finding) or justified?
27
+ **3. Divergence** — one leaf per place implementation differs from the plan: divergent behavior, wrong interpretation, or unresolved spec ambiguity?
28
+ **Cross-cutting:** requirements ↔ code mapping spans the whole diff — cross-check every spec point against every relevant file. Reference specific plan/design sections in findings.
29
+ **Other** — any spec-compliance concern you notice that the areas above didn't capture.
30
+
31
+ Focus only on spec compliance — do not comment on code quality, security, performance, or testing unless it represents a spec deviation.
32
+
33
+ ## Output Format
34
+ For each issue:
35
+
36
+ ```
37
+ ### Issue <ID>: <title> [Critical|Important|Minor]
38
+ - **Category:** requirements
39
+ - **File:** <path>:<startLine>-<endLine> (omit if architectural)
40
+ - **Description:** What the spec deviation is and why it matters
41
+ - **Suggested fix:** How to align with the spec
42
+ ```
43
+
44
+ If no requirements issues found, output: "No requirements issues found."
45
+
46
+ Severity: Critical = missing core requirement, Important = partial/wrong implementation, Minor = cosmetic deviation. Reference specific plan/spec sections when reporting deviations.
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: fy-researcher
3
+ description: Deep code analysis agent
4
+ tools: read, bash, find, grep, ls, write, edit, subagent
5
+ skills: fy-research
6
+ ---
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: fy-security-reviewer
3
+ description: Security-focused code review
4
+ tools: read, bash, find, grep, ls, write, edit
5
+ ---
6
+
7
+ You are a security-focused code reviewer. Review for vulnerabilities and risks only.
8
+
9
+ {{PI_FY_WORKTREE_CONTEXT}}
10
+ **Design doc:** `{{PI_FY_DESIGN_DOC_PATH}}`
11
+ **Plan doc:** `{{PI_FY_PLAN_DOC_PATH}}`
12
+ **Known issues:** `{{PI_FY_KNOWN_ISSUES_PATH}}`
13
+
14
+ **Write only to your report file:** `{{PI_FY_REPORT_FILE}}`
15
+
16
+ ⚠️ **Parallel work safety:** You work in parallel with a team on the same working tree. Do not use `git stash/checkout/reset/clean/merge/rebase`, `npm install`, or any command that mutates the working tree or git state. Read-only commands only.
17
+
18
+ ## Process
19
+ {{PI_FY_COVERAGE_REVIEW_PROCESS}}
20
+
21
+ ## Coverage Areas
22
+
23
+ **1. Input boundaries** — one leaf per place untrusted data enters (API params, request bodies, user input, file/env reads, deserialization, CLI args): validated? rejected early? injection-safe (SQL/command/XSS/path traversal)?
24
+ **2. Auth & authorization** — every privileged action / protected resource: authz check present? fails closed?
25
+ **3. Secrets & data exposure** — every string literal, config value, log line, error message: secrets/PII present? over-broad responses, verbose errors?
26
+ **4. Dependencies & config** — vulnerable dependency versions introduced? insecure config (disabled checks, permissive CORS/CSRF, default credentials)?
27
+ **5. Data flows (trace)** *(cross-cutting)* — for each input boundary, trace the untrusted data to every sink (query, command, render, file write) across the call chain; each untrusted→sink path is a leaf: sanitized/parameterized at the sink? output-escaped?
28
+ **Cross-cutting:** the data-flow traces in area 5 span multiple files — follow each flow across the whole call chain, not per file.
29
+ **Other** — any security concern you notice that the areas above didn't capture.
30
+
31
+ Focus only on security — do not comment on code style, performance, or architecture unless it has a security implication.
32
+
33
+ ## Output Format
34
+ For each issue:
35
+
36
+ ```
37
+ ### Issue <ID>: <title> [Critical|Important|Minor]
38
+ - **Category:** security
39
+ - **File:** <path>:<startLine>-<endLine> (omit if architectural)
40
+ - **Description:** What the vulnerability is and potential impact
41
+ - **Suggested fix:** How to remediate
42
+ ```
43
+
44
+ If no security issues found, output: "No security issues found."
45
+
46
+ Severity: Critical = remotely exploitable/data breach, Important = requires specific conditions, Minor = defense-in-depth. Do not flag false positives — verify each issue by reading surrounding code.
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: fy-task-verifier
3
+ description: Verify a single task's implementation against its spec
4
+ tools: read, bash, find, grep, ls, write, edit
5
+ hide-from-agents-list: true
6
+ ---
7
+
8
+ You are a task verification agent. Verify that a single task's implementation matches its specification.
9
+
10
+ ⚠️ **Parallel work safety:** You work in parallel with a team on the same working tree. Do not use `git stash/checkout/reset/clean/merge/rebase`, `npm install`, or any command that mutates the working tree or git state. Read-only commands only.
11
+
12
+ ## Process
13
+ Use the `todo` tool to track open items — one item per requirement/acceptance criterion. Work through items one at a time. **The todo list survives context compaction — every item MUST have comprehensive details. Include step-by-step instructions and references to docs, design sections, or file paths wherever provided.**
14
+
15
+ ### Step 1: Understand the Task
16
+ Read the provided context:
17
+ {{PI_FY_WORKTREE_CONTEXT}}
18
+ - **Design doc** at `{{PI_FY_DESIGN_DOC_PATH}}`
19
+ - **Plan doc** at `{{PI_FY_PLAN_DOC_PATH}}`
20
+ - **Task:** {{PI_FY_CURRENT_TASK}}
21
+
22
+ Identify every concrete requirement and acceptance criterion from the task spec.
23
+
24
+ ### Step 2: Create Report File
25
+ Create the report file at `{{PI_FY_REPORT_FILE}}` with all items listed as pending.
26
+
27
+ ### Step 3: Verify Each Item
28
+ For each checklist item: read relevant source files, check implementation, run tests if applicable, update report.
29
+
30
+ Outcomes: ✅ implemented | ⚠️ partial or wrong | ❌ missing | ⏭️ deferred
31
+
32
+ Check for: missing requirements, deferred work, scope creep, divergent implementation, spec ambiguities.
33
+
34
+ ```
35
+ ### Issue <ID>: <title> [Critical|Important|Minor]
36
+ - **Category:** <check category>
37
+ - **File:** <path>:<startLine>-<endLine> (omit if not file-specific)
38
+ - **Description:** What the spec deviation is and why it matters
39
+ - **Suggested fix:** How to align with the spec
40
+ ```
41
+
42
+ Focus only on spec compliance — do not comment on code quality, security, performance, or testing unless it represents a spec deviation.
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: fy-testing-reviewer
3
+ description: Test coverage and quality review
4
+ tools: read, bash, find, grep, ls, write, edit
5
+ ---
6
+
7
+ You are a testing-focused code reviewer. Review test files and coverage for completeness and quality.
8
+
9
+ {{PI_FY_WORKTREE_CONTEXT}}
10
+ **Design doc:** `{{PI_FY_DESIGN_DOC_PATH}}`
11
+ **Plan doc:** `{{PI_FY_PLAN_DOC_PATH}}`
12
+ **Known issues:** `{{PI_FY_KNOWN_ISSUES_PATH}}`
13
+
14
+ **Write only to your report file:** `{{PI_FY_REPORT_FILE}}`
15
+
16
+ ⚠️ **Parallel work safety:** You work in parallel with a team on the same working tree. Do not use `git stash/checkout/reset/clean/merge/rebase`, `npm install`, or any command that mutates the working tree or git state. Read-only commands only.
17
+
18
+ ## Process
19
+ {{PI_FY_COVERAGE_REVIEW_PROCESS}}
20
+
21
+ ## Coverage Areas
22
+
23
+ **1. Per-unit test matrix** — one leaf per changed source method/function:
24
+ - Happy-path test exists and asserts the correct outcome?
25
+ - Edge cases (null, empty, boundary, off-by-one, min/max)?
26
+ - Error paths and negative cases (invalid input, failure modes)?
27
+ - Assertion quality — real outcome asserted, or just "didn't throw" / weak tautology?
28
+ - Over-mocking — is the unit under test itself mocked, or is mocking limited to boundaries?
29
+
30
+ **2. Coverage gaps** — one leaf per changed source method (cross-reference source ↔ tests):
31
+ - Every changed source method exercised by at least one test? Methods with no test reference are findings.
32
+ - Every branch/error path covered?
33
+
34
+ **3. Test-file quality** *(test code is code — hold it to quality standards)* — one leaf per changed test file:
35
+ - Duplicated setup/arrange or copy-pasted tests that should share a fixture/helper?
36
+ - Brittle tests — hidden order dependencies, shared mutable state, reliance on timing?
37
+ - Test naming/structure reveal intent? Realistic vs trivial test data?
38
+
39
+ **4. Unit vs integration balance** — one leaf per module boundary or external call: tested end-to-end where it matters.
40
+
41
+ **Cross-cutting:** the coverage map in area 2 spans ALL source + ALL test files — build it once across the whole diff, not per file.
42
+
43
+ **Other** — any testing concern you notice that the areas above didn't capture (add it as a leaf, don't silently skip).
44
+
45
+ Focus only on testing — do not comment on production-code quality, security, or performance unless it has a testing implication.
46
+
47
+ ## Output Format
48
+ For each issue:
49
+
50
+ ```
51
+ ### Issue <ID>: <title> [Critical|Important|Minor]
52
+ - **Category:** testing
53
+ - **File:** <path>:<startLine>-<endLine> (omit if architectural)
54
+ - **Description:** What the testing issue is and why it matters
55
+ - **Suggested fix:** What test to add or improve
56
+ ```
57
+
58
+ If no testing issues found, output: "No testing issues found."
59
+
60
+ Severity: Critical = untested critical path/error handling, Important = missing edge case/weak assertion, Minor = test style. Check both test files AND source files to identify gaps.
Binary file
Binary file
Binary file
@@ -0,0 +1,266 @@
1
+ # Configuration Reference
2
+
3
+ avtc-pi-featyard has two configuration mechanisms:
4
+
5
+ 1. **Settings Dialog** — simple scalar settings edited via the `/fy:settings` command
6
+ 2. **Model Overrides** — per-stage model selection (per-subagent selection is in avtc-pi-subagent) configured in pi's `settings.json`
7
+
8
+ ---
9
+
10
+ ## Settings Dialog
11
+
12
+ Open with `/fy:settings` in your pi session. Settings are organized into tabs: Workflow, Review, Kanban & Auto-Agent, Limits & Concurrency, Artifacts, Guardrails. Changes apply immediately. Press `Ctrl+S` to save to project settings, `Ctrl+D` to save as global defaults. Use left/right arrow keys to switch tabs.
13
+
14
+ ### Workflow
15
+
16
+ | Setting | Values | Default | Description |
17
+ |---------|--------|---------|-------------|
18
+ | `interTaskCompact` | `none`, `compact`, `compact>75K`, `compact>125K`, `compact>200K`, `compact>500K` | `none` | Compact context between tasks in implement phase: none (accumulate), compact (`/compact`, optionally only above a threshold) |
19
+ | `implementMode` | `current-session`, `subagent-driven`, `subagent-driven-fork` | `current-session` | How the implementation phase runs: current-session (the agent implements in the main session, checkpointed), subagent-driven (a fresh subagent implements each task), subagent-driven-fork (a subagent forked from your session's context implements each task) |
20
+ | `uatMode` | `off`, `after-review`, `after-finish` | `after-review` | User acceptance testing: off (skip UAT), after-review (pause before merge), after-finish (pause after merge) |
21
+ | `branchPolicy` | `current-branch`, `worktree` | `current-branch` | Where the agent works: current-branch (pair programming, no isolation) or worktree (autonomous, separate directory). Worktree targets one repo — changes spanning multiple repos, submodules, or sibling repos in a single feature are not supported (all tool paths are rewritten into the worktree) |
22
+ | `baseBranch` | `ask`, `main`, `master`, `develop` | `ask` | Base branch for merges. `ask` = prompt when needed |
23
+
24
+ ### Review
25
+
26
+ | Setting | Values | Default | Description |
27
+ |---------|--------|---------|-------------|
28
+ | `maxFeatureReviewRounds` | `0`, `1`, `2`, `3`, `5`, `7`, `10` | `7` | Max review-fix cycles in the feature review phase. 0 = skip, N = run up to N rounds (stops early once clean). |
29
+ | `featureReviewMode` | `general`, `comprehensive` | `general` | Feature review approach: general (single generalist reviewer) or comprehensive (multiple specialized sub-reviewers). |
30
+ | `featureReviewSubagentsMode` | `new`, `fork`, `new+fork` | `new` | How feature review subagents get context: new (fresh session), fork (inherit conversation history), new+fork (both in parallel). |
31
+ | `reviewerSkipThreshold` | `0`, `1`, `2` | `2` | Skip reviewers that find no issues for N consecutive loops. 0 = never skip, 1 or 2 = skip after N empty loops |
32
+ | `planReviewMode` | `in-session`, `parallel-subagents` | `parallel-subagents` | Plan and design review: in-session (skill loaded in current session) or parallel-subagents (dispatch to subagents) |
33
+ | `maxPlanReviewRounds` | `0`, `1`, `2`, `3`, `5`, `10` | `5` | Max review-fix cycles for design and plan phases. 0 = skip, N = run up to N rounds (stops early once clean). |
34
+ | `planReviewSubagentsMode` | `new`, `fork`, `new+fork` | `new+fork` | How plan/design review subagents get context |
35
+ | `minReviewLoops` | `0`, `1`, `2`, `3` | `0` | Minimum review loops to run regardless of findings. 0 = disabled (default), 2+ = force at least N loops even if no issues found |
36
+ | `reviewIterationCompact` | `none`, `compact`, `compact>75K`, `compact>125K`, `compact>200K`, `compact>500K` | `compact>125K` | Compact context between design/plan/code review iterations |
37
+ | `maxVerifyRounds` | `1`, `3`, `5` | `3` | Max verify rounds for feature and plan verifiers. 1 = single pass, N = retry if issues found. |
38
+ | `verifyPhases` | `off`, `verify`, `plan+verify`, `plan+implement+verify` | `plan+implement+verify` | Which phases get fresh verifier subagents |
39
+ | `perTaskReviewMode` | `off`, `general` | `general` | Per-task review during implementation: off (skip) or general (spawn general-reviewer after each task). |
40
+ | `maxTaskReviewRounds` | `1`, `2`, `3`, `5`, `10` | `3` | Max verify+review rounds per implementation task (stops early once clean). Disable per-task gating via 'Verification phases' (exclude implement) and 'Per-task review mode' (off). |
41
+
42
+ ### Kanban & Auto-Agent
43
+
44
+ | Setting | Values | Default | Description |
45
+ |---------|--------|---------|-------------|
46
+ | `autoPollMs` | `10s`, `30s`, `1m`, `2m` | `30s` | How often the auto-agent polls for new features when none are available |
47
+ | `autoOnBlock` | `wait`, `switch` | `switch` | What the auto-agent does when blocked: wait (keep polling) or switch (pick another feature) |
48
+ | `autoLockTimeoutMs` | `1m`, `5m`, `10m`, `30m` | `30m` | How long before a feature lock expires if no heartbeat |
49
+ | `autoWorkerWaitTimeoutMs` | `Infinite`, `10m`, `30m`, `1h` | `Infinite` | Max time the auto-worker waits for a blocked feature |
50
+ | `autoDesignerWaitTimeoutMs` | `Infinite`, `10m`, `30m`, `1h` | `Infinite` | Max time the auto-designer waits for a blocked feature |
51
+ | `designApprovalEnabled` | `true`, `false` | `true` | Require human approval in the design-approval lane before the agent can pick the feature |
52
+ | `kanbanDoneHideAfterMs` | `Always`, `Never`, `1d`, `7d`, `30d` | `Never` | Hide done features from the board after this duration |
53
+
54
+ ### Limits & Concurrency
55
+
56
+ | Setting | Values | Default | Description |
57
+ |---------|--------|---------|-------------|
58
+ | `researcherMinInstances` | `0`, `1`, `3`, `5` | `1` | Minimum researcher subagents per research phase. `0` = research optional |
59
+ | `researcherMaxInstances` | `1`, `3`, `5`, `10` | `3` | Maximum researcher subagents that can run in parallel per research phase |
60
+ | `nestedResearchers` | `off`, `on` | `on` | Allow researcher subagents to spawn nested researchers |
61
+
62
+ ### Guardrails
63
+
64
+ | Setting | Values | Default | Description |
65
+ |---------|--------|---------|-------------|
66
+ | `testingDiscipline` | `tdd-strict`, `tdd-advisory`, `off` | `tdd-advisory` | TDD enforcement: tdd-strict (block violations), tdd-advisory (warn only), off |
67
+ | `preCommitDiscipline` | `off`, `advisory`, `strict` | `advisory` | Pre-commit verification gate. `strict` = block without verification, `advisory` = warn, `off` = no check. Checks staged source files for test coverage and requires prior test verification |
68
+
69
+ ### Artifacts
70
+
71
+ | Setting | Values | Default | Description |
72
+ |---------|--------|---------|-------------|
73
+ | `designDocStorage` | `local`, `committed` | `local` | `local` (`.featyard/designs/`, out-of-repo, gitignored) or `committed` (`docs/featyard/designs/`, tracked in git) |
74
+ | `autoArchiveArtifactsOlderThanDays` | `7`, `14`, `30`, `90` | `30` | Background sweep relocates artifact groups (reviews/research/task-plans/feature-state) whose newest file is older than this many days into `artifacts-archive/`. Runs once on start then every 24h. Keep ≥ 1 |
75
+ | `autoArchiveDesignsOlderThanDays` | `Never`, `7`, `30`, `90` | `Never` | Background sweep relocates design docs older than this into the archive, sweeping both `.featyard/designs` and `docs/featyard/designs`. `Never` = disabled. Manual sweep via `/fy:archive-designs <days>` |
76
+
77
+ ### Settings Files
78
+
79
+ Settings are stored as JSON with layered project-overrides-global merging:
80
+
81
+ - **Global:** `~/.pi/agent/avtc-pi-featyard-settings.json`
82
+ - **Project:** `<cwd>/.pi/avtc-pi-featyard-settings.json`
83
+
84
+ Project settings override global settings.
85
+
86
+ ---
87
+
88
+ ## Model Overrides
89
+
90
+ Model overrides let you control which LLM model is used for specific workflow stages of the main orchestrating session. This is useful for routing review loops through different models (e.g., cycling between models for diverse perspectives) or using a cheaper/faster model for design. (Per-subagent model selection is configured in the `subagent` section — see [avtc-pi-subagent](https://github.com/avtc/avtc-pi-subagent).)
91
+
92
+ ### Configuration Location
93
+
94
+ Model overrides are configured in pi's `settings.json` under the `"avtc-pi-featyard"` key:
95
+
96
+ - **Global:** `~/.pi/agent/settings.json`
97
+ - **Project:** `<cwd>/.pi/settings.json` (project overrides global)
98
+
99
+ ### Schema
100
+
101
+ ```json
102
+ {
103
+ "avtc-pi-featyard": {
104
+ "default-model": "anthropic/claude-sonnet-4-5",
105
+ "stage-models": {
106
+ "<stage-name>": "anthropic/claude-sonnet-4-5"
107
+ }
108
+ }
109
+ }
110
+ ```
111
+
112
+ > **Note:** `subagent-models` (per-subagent model overrides) and `subagent.default-model` (the subagent fallback) both live in the `subagent` section — see [avtc-pi-subagent](https://github.com/avtc/avtc-pi-subagent). The `default-model` documented here governs only the **workflow orchestrator** (main session) phase model.
113
+
114
+ - **`default-model`** (string, optional): Fallback model for workflow phases when no `stage-models` override exists. Format: `"provider/id"`. Example: `"anthropic/claude-sonnet-4-5"`. Project-level value entirely overrides global value (not merged per-key).
115
+
116
+ Each override value can be either:
117
+
118
+ - **Single model:** `"anthropic/claude-sonnet-4-5"`
119
+ - **Array for round-robin:** `["anthropic/claude-sonnet-4-5", "openai/gpt-4o", "deepseek/deepseek-chat"]`
120
+
121
+ ### Important: Model Override Persists as Pi Default
122
+
123
+ When a stage model override fires in-session, that model also becomes your **pi default** (persisted to settings). Consequences:
124
+
125
+ - **New pi sessions** will start on that model.
126
+ - **Subagents without an explicit model override** will inherit it.
127
+
128
+ **To avoid surprises:**
129
+
130
+ - Set a per-subagent model override in the `subagent` section (see [avtc-pi-subagent](https://github.com/avtc/avtc-pi-subagent)) for any subagent that must use a fixed model.
131
+ - After a workflow run, restore your preferred default with `/model`.
132
+
133
+ ---
134
+
135
+ ### Resolution Priority
136
+
137
+ When multiple overrides could apply, the highest-priority one wins:
138
+
139
+ **Main session:**
140
+
141
+ 1. **`--model` flag** — highest priority, never overridden
142
+ 2. **`stage-models[<stage-name>]`** — per-stage override
143
+ 3. **`default-model`** — fallback when no stage-model exists (lowest priority)
144
+
145
+ **Subagents:**
146
+
147
+ Per-subagent model routing is handled entirely by [avtc-pi-subagent](https://github.com/avtc/avtc-pi-subagent) — see its configuration docs for the precedence table and matching rules. Within featyard, `stage-models` and `default-model` apply only to the **main orchestrating session** (see the Main session list above).
148
+
149
+ ### Round-Robin Rotation
150
+
151
+ When a `stage-models` override is an array, models rotate across review loops:
152
+
153
+ - **Loop 1** -> `models[0]`
154
+ - **Loop 2** -> `models[1]`
155
+ - **Loop N** -> `models[N % length]` (wraps around)
156
+
157
+ Rotation is **per-feature** — each feature's `reviewLoopCount` drives its own rotation independently.
158
+
159
+ For single-iteration stages (design, plan, implement, verify, finish), only `models[0]` is used.
160
+
161
+ ### Stages
162
+
163
+ | Stage | Skill | Description |
164
+ |-------|-------|-------------|
165
+ | `design` | `fy-design` | Idea exploration and design |
166
+ | `plan` | `fy-plan` | Implementation plan creation |
167
+ | `implement` | `fy-implement` | TDD implementation of plan tasks |
168
+ | `verify` | `fy-verify` | Run tests and verify before claiming done |
169
+ | `review` | `fy-review` | Code review with loop support (skipped when `maxFeatureReviewRounds: 0`) |
170
+ | `finish` | `fy-finish` | Merge, PR, or cleanup |
171
+
172
+ > `uat` reuses the `fy-review` skill.
173
+
174
+ ### Subagents
175
+
176
+ | Agent | Used by |
177
+ |-------|---------|
178
+ | `fy-design-reviewer` | `fy-design-review` skill (design-phase review) |
179
+ | `fy-plan-reviewer` | `fy-plan-review` skill (plan-phase review) |
180
+ | `fy-plan-verifier` | Plan-phase coverage verification (when `verifyPhases` includes `plan`) |
181
+ | `fy-task-verifier` | Per-task verification during implementation |
182
+ | `fy-feature-verifier` | `fy-verify` skill (final feature verification) |
183
+ | `fy-general-reviewer` | `fy-review` skill (general mode — single generalist reviewer); per-task review (`perTaskReviewMode`) |
184
+ | `fy-quality-reviewer` | `fy-review` skill (comprehensive mode) |
185
+ | `fy-testing-reviewer` | `fy-review` skill (comprehensive mode) |
186
+ | `fy-security-reviewer` | `fy-review` skill (comprehensive mode, when I/O/API/auth involved) |
187
+ | `fy-performance-reviewer` | `fy-review` skill (comprehensive mode, when data processing/algorithms involved) |
188
+ | `fy-guidelines-reviewer` | `fy-review` skill (comprehensive mode, when project has linting/conventions) |
189
+ | `fy-requirements-reviewer` | `fy-review` skill (comprehensive mode, when plan/spec exists to check against) |
190
+ | `fy-implementer` | `fy-implement` skill (dispatch modes) |
191
+ | `fy-researcher` | `fy-design` / `fy-plan` skills (research phase); nested researcher delegation |
192
+
193
+ ### Examples
194
+
195
+ **Single model for all reviews:**
196
+
197
+ ```json
198
+ {
199
+ "featyard": {
200
+ "stage-models": {
201
+ "review": "anthropic/claude-sonnet-4-5"
202
+ }
203
+ }
204
+ }
205
+ ```
206
+
207
+ **Round-robin review models (cycles through models across loops):**
208
+
209
+ ```json
210
+ {
211
+ "featyard": {
212
+ "stage-models": {
213
+ "review": ["anthropic/claude-sonnet-4-5", "openai/gpt-4o", "deepseek/deepseek-chat"]
214
+ }
215
+ }
216
+ }
217
+ ```
218
+
219
+ **Per-subagent override (in the `avtc-pi-subagent` section; takes priority over stage-model within avtc-pi-subagent's resolution):**
220
+
221
+ Per-subagent model overrides are configured in the `avtc-pi-subagent` section, not under `avtc-pi-featyard`. Example (in `settings.json`):
222
+
223
+ ```json
224
+ {
225
+ "avtc-pi-subagent": {
226
+ "default-model": "anthropic/claude-sonnet-4-5",
227
+ "subagent-models": {
228
+ "fy-testing-reviewer": "openai/gpt-4o",
229
+ "fy-security-reviewer": "deepseek/deepseek-chat",
230
+ "*-fork": ["openai/gpt-4o", "deepseek/deepseek-chat"]
231
+ }
232
+ },
233
+ "avtc-pi-featyard": {
234
+ "stage-models": { "review": "anthropic/claude-sonnet-4-5" }
235
+ }
236
+ }
237
+ ```
238
+
239
+ Keys are matched against the agent name by specificity (exact > longest glob). `-fork`-suffixed keys apply to forked sessions (e.g. `fy-plan-reviewer-fork`), and array values rotate per-task. See [avtc-pi-subagent](https://github.com/avtc/avtc-pi-subagent) for matching/rotation details.
240
+
241
+ **Default model with stage override:**
242
+
243
+ ```json
244
+ {
245
+ "featyard": {
246
+ "default-model": "anthropic/claude-sonnet-4-5",
247
+ "stage-models": {
248
+ "review": "openai/gpt-4o"
249
+ }
250
+ }
251
+ }
252
+ ```
253
+
254
+ All phases without a `stage-models` entry use `default-model`. In this example, design/plan/implement/verify/finish use `anthropic/claude-sonnet-4-5`, while review uses `openai/gpt-4o`.
255
+
256
+ **Combined with min review loops (in `avtc-pi-featyard-settings.json`):**
257
+
258
+ ```json
259
+ {
260
+ "maxFeatureReviewRounds": 7,
261
+ "minReviewLoops": 2,
262
+ "featureReviewMode": "comprehensive"
263
+ }
264
+ ```
265
+
266
+ This ensures at least 2 review loops run (even if loop 1 finds no issues), up to a maximum of 7, using comprehensive review with parallel subagents — and the review stage uses round-robin model rotation if configured. (Values are stored as numbers; `maxFeatureReviewRounds: 0` skips auto-review.)
package/index.ts ADDED
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // SPDX-FileCopyrightText: 2026 avtc <tarasenkov@gmail.com>
3
+
4
+ // Package entry point for pi (keeps the startup display name clean).
5
+ // Re-exports the real factory + named exports from src/.
6
+
7
+ export * from "./src/index.js";
8
+ export { default } from "./src/index.js";
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "avtc-pi-featyard",
3
+ "version": "1.1.0",
4
+ "description": "Predictable, deterministic feature development for pi — deep upfront design, configurable comprehensive review and verification rigor, and auto-agents draining a backlog",
5
+ "type": "module",
6
+ "keywords": [
7
+ "pi-package",
8
+ "pi-extension"
9
+ ],
10
+ "scripts": {
11
+ "lint": "biome check .",
12
+ "lint:optional-params": "node scripts/no-optional-params.cjs src/ tests/",
13
+ "lint:bare-literals": "node scripts/no-bare-literals.cjs index.ts",
14
+ "lint:design-refs": "node scripts/no-design-refs.cjs index.ts README.md docs/CONFIGURATION.md",
15
+ "knip": "knip --production",
16
+ "typecheck": "tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/tsc.tsbuildinfo",
17
+ "test": "node scripts/test-low-priority.cjs \"node scripts/run-parallel.cjs \"npm run lint:optional-params :: npm run lint:bare-literals :: npm run lint:design-refs :: npm run lint:as-never :: npm run lint:bundled-imports :: npm run lint :: npm run typecheck :: npm run knip :: npm run dupes\" && vitest run\"",
18
+ "dupes": "jscpd src/ skills/ --exit-code --threshold 0.01",
19
+ "lint:as-never": "node scripts/no-as-never.cjs src/ tests/ index.ts",
20
+ "lint:bundled-imports": "node scripts/no-bundled-extension-imports.cjs src/ index.ts"
21
+ },
22
+ "license": "MIT",
23
+ "author": "avtc <tarasenkov@gmail.com>",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/avtc/avtc-pi-featyard.git"
27
+ },
28
+ "files": [
29
+ "index.ts",
30
+ "src/",
31
+ "agents/",
32
+ "skills/",
33
+ "assets/",
34
+ "docs/",
35
+ "LICENSE",
36
+ "README.md"
37
+ ],
38
+ "main": "./index.ts",
39
+ "pi": {
40
+ "extensions": [
41
+ "./index.ts",
42
+ "../avtc-pi-subagent/index.ts",
43
+ "../avtc-pi-todo/index.ts",
44
+ "../avtc-pi-parallel-work-guardrail/index.ts",
45
+ "../avtc-pi-ui-components/index.ts",
46
+ "../avtc-pi-subagent-ui-bridge/index.ts",
47
+ "../avtc-pi-unstuck/index.ts"
48
+ ],
49
+ "allowedCodeDeps": [
50
+ "avtc-pi-logger",
51
+ "avtc-pi-settings-ui",
52
+ "avtc-pi-ui-components"
53
+ ],
54
+ "skills": [
55
+ "skills"
56
+ ]
57
+ },
58
+ "devDependencies": {
59
+ "@biomejs/biome": "^2.5.0",
60
+ "@earendil-works/pi-agent-core": "^0.80.6",
61
+ "@earendil-works/pi-ai": "^0.80.6",
62
+ "@earendil-works/pi-coding-agent": "^0.80.6",
63
+ "@earendil-works/pi-tui": "^0.80.6",
64
+ "@types/better-sqlite3": "^7.6.13",
65
+ "@types/node": "^25.9.3",
66
+ "jscpd": "^5.0.10",
67
+ "knip": "^6.17.1",
68
+ "typescript": "^6.0.3",
69
+ "vitest": "^4.1.9"
70
+ },
71
+ "dependencies": {
72
+ "avtc-pi-logger": "^1.0.0",
73
+ "avtc-pi-settings-ui": "^1.0.0",
74
+ "avtc-pi-ui-components": "^1.0.0",
75
+ "avtc-pi-subagent": "^1.0.0",
76
+ "avtc-pi-todo": "^1.0.0",
77
+ "avtc-pi-parallel-work-guardrail": "^1.0.0",
78
+ "avtc-pi-subagent-ui-bridge": "^1.0.0",
79
+ "avtc-pi-unstuck": "^1.0.0"
80
+ },
81
+ "bugs": {
82
+ "url": "https://github.com/avtc/avtc-pi-featyard/issues"
83
+ },
84
+ "homepage": "https://github.com/avtc/avtc-pi-featyard"
85
+ }