Repository navigation
docs(workflow): design and build a new PRD and task planning workflow - #370
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughReworks planning lifecycle into tools/dev-workflow-v2 (new planning commands, stages, docs), adds workflow PR creation (create-pr) with GH runner and event changes (pr-feedback-verification-failed), updates CLI routes/tests/fixtures, removes legacy .claude task/arch docs and scripts, and adjusts many docs/markers for new conventions. ChangesPlanning lifecycle & docs migration + PR creation
Sequence Diagram(s)sequenceDiagram
participant CLI as dev-workflow CLI
participant Workflow as Workflow (domain)
participant GHRunner as runGh (gh)
participant GitHub as GitHub
participant EventStore as Event store
CLI->>Workflow: create-pr <args>
Workflow->>Workflow: parse args -> build PR creation request
Workflow->>GHRunner: gh pr create --title --body --json url
GHRunner->>GitHub: create PR
GitHub-->>GHRunner: {"url": "https://..."}
GHRunner->>Workflow: readPullRequest(url) -> gh pr view --json number,url,isDraft
GHRunner->>GitHub: view PR
GitHub-->>GHRunner: {"number":42,"url":"...","isDraft":false}
GHRunner-->>Workflow: {prNumber, prUrl, isDraft}
alt isDraft == true
Workflow-->>CLI: fail (draft PR rejected)
else
Workflow->>EventStore: append pr-recorded event
Workflow-->>CLI: success (prNumber/prUrl)
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related issues
Possibly related PRs
Suggested labels
✨ Finishing Touches🧪 Generate unit tests (beta)
|
Deploying living-architecture with
|
| Latest commit: |
49df67f
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://2b5e54dd.living-architecture.pages.dev |
| Branch Preview URL: | https://issue-368-proposal-centraliz.living-architecture.pages.dev |
There was a problem hiding this comment.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
tools/dev-workflow-v2/src/features/workflow/infra/persistence/workflow-definition.spec.ts (1)
11-35: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick winMake
createPullRequestmock signature match the dependency contract.The mock returns the right
{ prNumber, prUrl, isDraft }shape, but it currently declarescreatePullRequest: () => ...and ignores the input args. Updating it to explicitly accept the args parameter makes the contract clearer and avoids relying on TS function-parameter-compatibility behavior.Suggested change
function makeWorkflowDeps(): WorkflowDeps { return { @@ - createPullRequest: () => ({ + createPullRequest: (_args: readonly string[]) => ({ prNumber: 1, prUrl: 'https://github.com/example/repo/pull/1', isDraft: false, }), listSessionReviews: () => [], sleepMs: () => undefined, now: () => '2026-01-01T00:00:00Z', } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@tools/dev-workflow-v2/src/features/workflow/infra/persistence/workflow-definition.spec.ts` around lines 11 - 35, The mock in makeWorkflowDeps defines createPullRequest as createPullRequest: () => {...} but it should accept the same args as the real dependency; change the mock signature to createPullRequest: (args) => ({ prNumber: 1, prUrl: 'https://github.com/example/repo/pull/1', isDraft: false }) (and add an explicit parameter type if needed) so the mock matches the dependency contract used by functions calling createPullRequest.tools/dev-workflow-v2/src/features/workflow/domain/states/submitting-pr.ts (1)
10-17:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winUpdate guard error text to include the new
create-prpath.After allowing
create-pron Line 10, the failure message on Line 16 is now misleading by only pointing torecord-pr.Suggested patch
- if (!ctx.state.prNumber) return fail('prNumber not set. Run record-pr first.') + if (!ctx.state.prNumber) return fail('prNumber not set. Run create-pr or record-pr first.')🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@tools/dev-workflow-v2/src/features/workflow/domain/states/submitting-pr.ts` around lines 10 - 17, The transitionGuard's failure message is stale: when allowedWorkflowOperations includes 'create-pr' the guard should reference both paths; update the failure text in transitionGuard (the check on ctx.state.prNumber that currently calls fail('prNumber not set. Run record-pr first.')) to mention the new create-pr flow (e.g., "Run record-pr or create-pr first.") so it accurately instructs users when ctx.state.prNumber is missing; keep the existing fail()/pass() logic unchanged.tools/dev-workflow-v2/commands/continue-planning.md (1)
15-23:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winDefine terminal behavior for
planning-completeexplicitly.Line 22 introduces
planning-complete, but the workflow doesn’t state whatcontinue-planningdoes when the marker is already at that stage. Add an explicit no-op/stop rule to avoid divergent implementations.Suggested doc patch
## Workflow 1. Find the active planning marker in `docs/project/planning/*.yml`. 2. Stop if there is no active marker. 3. Stop if there is more than one active marker and list all of them. 4. Read the current stage from the single active marker. +5. If the current stage is `planning-complete`, print that planning is complete and stop. -5. Check only the artifact for that stage. -6. Advance the marker only when the current artifact passes its checks. -7. Print blockers and keep the marker unchanged when the artifact fails its checks. +6. Check only the artifact for that stage. +7. Advance the marker only when the current artifact passes its checks. +8. Print blockers and keep the marker unchanged when the artifact fails its checks.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@tools/dev-workflow-v2/commands/continue-planning.md` around lines 15 - 23, The workflow lacks an explicit terminal rule for the `planning-complete` stage: update the `continue-planning` behavior to treat `planning-complete` as a terminal/no-op state by adding a clear rule that if the current stage equals `planning-complete` the command returns immediately (no transitions, no side-effects) and documents this in the Stage order section next to `planning-complete` so implementations follow the same stop behavior.tools/dev-workflow-v2/src/features/workflow/domain/workflow-events.ts (1)
5-19:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winKeep
KNOWN_WORKFLOW_EVENT_TYPESaligned with the schema.
WORKFLOW_EVENT_SCHEMAacceptsarchitecture-review-completed,code-review-completed, andbug-scanner-completed, butgetKnownWorkflowEventTypes()still omits them. Anything using this helper as the canonical discriminator list can misclassify valid persisted events as unknown.Suggested fix
const KNOWN_WORKFLOW_EVENT_TYPES = [ 'session-started', 'transitioned', 'issue-recorded', 'branch-recorded', + 'architecture-review-completed', + 'code-review-completed', + 'bug-scanner-completed', 'pr-recorded', 'ci-completed', 'feedback-checked', 'feedback-addressed', 'pr-feedback-verification-failed',🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@tools/dev-workflow-v2/src/features/workflow/domain/workflow-events.ts` around lines 5 - 19, KNOWN_WORKFLOW_EVENT_TYPES is missing event types that WORKFLOW_EVENT_SCHEMA accepts; update the KNOWN_WORKFLOW_EVENT_TYPES array to include 'architecture-review-completed', 'code-review-completed', and 'bug-scanner-completed' so getKnownWorkflowEventTypes() returns the full canonical discriminator list; locate the KNOWN_WORKFLOW_EVENT_TYPES constant in workflow-events.ts and add those three string literals (preserving the as const typing) so the helper aligns with WORKFLOW_EVENT_SCHEMA.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@tools/dev-workflow-v2/commands/planning-status.md`:
- Around line 10-18: Document explicit deterministic rules for deriving PRD and
architecture artifact paths from planningId (e.g., a formula or template such as
PRD path = `plans/{planningId}/prd.md` and architecture path =
`plans/{planningId}/architecture.md`) and add a clear stage→next-command mapping
table for the command output (list each stage name and the exact next CLI
command string to print). Update the planning-status command contract to
reference the planningId→path templates and the stage-to-next-command mapping so
implementations can deterministically compute and print planning topic, current
stage, PRD path, architecture path, tasks-created flag, next command, and
blockers; reference the planningId variable and the "next command" field in the
output spec when editing the doc.
In `@tools/dev-workflow-v2/commands/start-planning.md`:
- Around line 18-26: The current flow creates the PRD then the marker separately
which can leave an orphaned PRD if the marker write fails; change the
implementation that handles planningId/PRD/marker creation to either persist
both artifacts atomically (write to temp files and rename into place for both
docs/project/planning/<slug>.yml and the PRD path derived from planningId, then
atomically move) or, if atomic rename across those paths isn't possible, write
the marker first (initialized with planningId, stage: prd-drafting,
githubMilestone: null, githubIssuesCreated: false, githubIssueNumbers: []) and
only then write the PRD; additionally, add a failure handler so that if the
second write fails you delete the already-written artifact (cleanup the PRD if
marker failed or delete marker if PRD failed) and surface an error so retries
don't see inconsistent state.
In `@tools/dev-workflow-v2/src/features/workflow/domain/workflow.ts`:
- Around line 240-257: createPr currently only blocks --draft/-d but then calls
this.deps.createPullRequest(createArgs) which can launch an editor if
non-interactive required flags are missing; add a pre-check in createPr (after
parsing via CREATE_PR_ARGS_SCHEMA and before this.deps.createPullRequest) that
verifies the arg array contains either --fill OR (--title or -t) and at least
one of (--body or -b or --body-file) (treat --fill as satisfying both title and
body). If the check fails, return fail(...) with a clear message about required
non-interactive flags (e.g. "create-pr requires --fill or --title (-t) plus
--body/-b/--body-file for non-interactive use") so createPullRequest is only
invoked with deterministic, non-interactive arguments.
In
`@tools/dev-workflow-v2/src/features/workflow/entrypoint/fixtures/workflow-cli-test-fixtures.ts`:
- Around line 133-140: The code currently coerces any non-'FAIL' third tuple
entry to 'PASS', which masks malformed steps; update the validation around the
tuple in the block that references WorkflowStateError, reviewType and verdict
before calling runReviewCommand so that the third element (step[2]) must be
present and strictly equal to either 'PASS' or 'FAIL' — otherwise throw a
WorkflowStateError with a clear message about expected shape ['record-review',
<reviewType>, 'PASS'|'FAIL']; then pass the validated verdict to
runReviewCommand.
In `@tools/dev-workflow-v2/src/features/workflow/entrypoint/workflow-cli.spec.ts`:
- Around line 293-301: The test "blocks when draft flag is provided" should also
assert that no "pr-recorded" event was persisted: after calling runCommand(ctx,
['create-pr', '--draft']) and the existing exit/output assertions, add an
assertion against the test context (ctx) event store/published events (the same
test fixture used by setup()/progressToState()/runCommand()) to ensure there is
no event with type or name "pr-recorded" (e.g., expect the ctx's
persisted/published events not to include any item matching { type:
'pr-recorded' }); place this new assertion immediately after the existing expect
lines so the blocked path verifies no side-effect event was emitted.
In
`@tools/dev-workflow-v2/src/features/workflow/infra/external-clients/github/create-pull-request.ts`:
- Around line 56-69: The current readPullRequestReference function relies on
brittle whitespace parsing; change the gh pr create invocation to include the
machine-readable flag (--json url) and update readPullRequestReference to parse
the JSON output and return the url field (e.g., JSON.parse(createOutput).url),
throwing PullRequestCreationError if parsing fails or url is missing; optionally
keep a robust fallback that extracts the first HTTP(S) URL via regex if JSON
parsing fails to maintain resilience.
In `@tools/dev-workflow-v2/states/reviewing.md`:
- Line 19: Update the checklist item so the CLI invocation for
/dev-workflow-v2:workflow record-review clearly instructs callers to pass a
compacted/one-line JSON string and to wrap it in quotes to avoid shell
splitting; specifically mention the command name "/dev-workflow-v2:workflow
record-review" and the "<review-json>" placeholder and give an explicit example
format such as quoting the JSON (e.g., '\"{...}\"' or using single quotes) or
piping a compacted JSON string, so consumers know to remove newlines/whitespace
and quote the argument to prevent broken invocations.
---
Outside diff comments:
In `@tools/dev-workflow-v2/commands/continue-planning.md`:
- Around line 15-23: The workflow lacks an explicit terminal rule for the
`planning-complete` stage: update the `continue-planning` behavior to treat
`planning-complete` as a terminal/no-op state by adding a clear rule that if the
current stage equals `planning-complete` the command returns immediately (no
transitions, no side-effects) and documents this in the Stage order section next
to `planning-complete` so implementations follow the same stop behavior.
In `@tools/dev-workflow-v2/src/features/workflow/domain/states/submitting-pr.ts`:
- Around line 10-17: The transitionGuard's failure message is stale: when
allowedWorkflowOperations includes 'create-pr' the guard should reference both
paths; update the failure text in transitionGuard (the check on
ctx.state.prNumber that currently calls fail('prNumber not set. Run record-pr
first.')) to mention the new create-pr flow (e.g., "Run record-pr or create-pr
first.") so it accurately instructs users when ctx.state.prNumber is missing;
keep the existing fail()/pass() logic unchanged.
In `@tools/dev-workflow-v2/src/features/workflow/domain/workflow-events.ts`:
- Around line 5-19: KNOWN_WORKFLOW_EVENT_TYPES is missing event types that
WORKFLOW_EVENT_SCHEMA accepts; update the KNOWN_WORKFLOW_EVENT_TYPES array to
include 'architecture-review-completed', 'code-review-completed', and
'bug-scanner-completed' so getKnownWorkflowEventTypes() returns the full
canonical discriminator list; locate the KNOWN_WORKFLOW_EVENT_TYPES constant in
workflow-events.ts and add those three string literals (preserving the as const
typing) so the helper aligns with WORKFLOW_EVENT_SCHEMA.
In
`@tools/dev-workflow-v2/src/features/workflow/infra/persistence/workflow-definition.spec.ts`:
- Around line 11-35: The mock in makeWorkflowDeps defines createPullRequest as
createPullRequest: () => {...} but it should accept the same args as the real
dependency; change the mock signature to createPullRequest: (args) => ({
prNumber: 1, prUrl: 'https://github.com/example/repo/pull/1', isDraft: false })
(and add an explicit parameter type if needed) so the mock matches the
dependency contract used by functions calling createPullRequest.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: d0f18102-bdaa-4d6a-aa42-87ee34f2accb
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (36)
.claude/commands/arch-plan.md.claude/commands/create-tasks.mddocs/project/planning/.gitkeepdocs/workflow/task-workflow.mdtools/dev-workflow-v2/.claude-plugin/plugin.jsontools/dev-workflow-v2/PRD-platform-cli-layer.mdtools/dev-workflow-v2/README.mdtools/dev-workflow-v2/commands/continue-planning.mdtools/dev-workflow-v2/commands/planning-status.mdtools/dev-workflow-v2/commands/start-implementation.mdtools/dev-workflow-v2/commands/start-planning.mdtools/dev-workflow-v2/commands/workflow.mdtools/dev-workflow-v2/package.jsontools/dev-workflow-v2/src/features/workflow/domain/fixtures/workflow-test-fixtures.tstools/dev-workflow-v2/src/features/workflow/domain/fold.tstools/dev-workflow-v2/src/features/workflow/domain/states/awaiting-pr-feedback.tstools/dev-workflow-v2/src/features/workflow/domain/states/submitting-pr.tstools/dev-workflow-v2/src/features/workflow/domain/workflow-event-types.spec.tstools/dev-workflow-v2/src/features/workflow/domain/workflow-events.tstools/dev-workflow-v2/src/features/workflow/domain/workflow-feedback-reflecting.spec.tstools/dev-workflow-v2/src/features/workflow/domain/workflow-pr-feedback-verification-events.spec.tstools/dev-workflow-v2/src/features/workflow/domain/workflow-reviewing-submitting.spec.tstools/dev-workflow-v2/src/features/workflow/domain/workflow-types.tstools/dev-workflow-v2/src/features/workflow/domain/workflow.tstools/dev-workflow-v2/src/features/workflow/entrypoint/fixtures/workflow-cli-state-steps-test-fixtures.tstools/dev-workflow-v2/src/features/workflow/entrypoint/fixtures/workflow-cli-test-fixtures.tstools/dev-workflow-v2/src/features/workflow/entrypoint/workflow-cli.spec.tstools/dev-workflow-v2/src/features/workflow/entrypoint/workflow-cli.tstools/dev-workflow-v2/src/features/workflow/infra/external-clients/github/create-pull-request.spec.tstools/dev-workflow-v2/src/features/workflow/infra/external-clients/github/create-pull-request.tstools/dev-workflow-v2/src/features/workflow/infra/persistence/workflow-definition.spec.tstools/dev-workflow-v2/src/shell/cli.tstools/dev-workflow-v2/src/shell/opencode-plugin.tstools/dev-workflow-v2/states/awaiting_pr_feedback.mdtools/dev-workflow-v2/states/reviewing.mdtools/dev-workflow-v2/states/submitting_pr.md
💤 Files with no reviewable changes (2)
- .claude/commands/arch-plan.md
- .claude/commands/create-tasks.md
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
packages/riviere-role-enforcement/skills/plan-review.md (4)
99-109:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd a concrete forbiddenImports/dependency checking checklist.
Step 6 states you should flag forbidden-import and forbidden-dependency violations, but it doesn’t describe how to “check” them from the plan text. Given this is pre-implementation, the annexer needs a repeatable method to avoid subjective interpretations.
Suggested minimal checklist to reduce interpretation drift
## Step 6: Detect Structural Concerns Review the plan for plan-level signals of architectural problems: @@ - **Wrong-layer code.** The plan proposes code in `entrypoint/` that imports `infra/persistence/`, or code in `domain/` that imports an external library — would violate `forbiddenImports`. - **Consumer-owned mapping proposed as a domain abstraction.** The plan puts an adapter, presenter, formatter, write port, bridge, or translator in `domain/` even though its only job is to reshape domain results for a specific consumer such as CLI output, workflow updates, or builder writes. Flag it and show the simpler alternative where the use case performs its own mapping. - **Cross-role coupling.** The plan proposes a `command-use-case` that depends on another `command-use-case` — forbidden by the role's `forbiddenDependencies`. - **Repository calling another repository.** Same pattern — forbidden. - **`cli-entrypoint` importing `aggregate-repository` directly.** Per `role-selection-guide.md` Section 2, only `command-use-case` should depend on `aggregate-repository`. + +**When you flag forbiddenImports/forbiddenDependencies, record enough evidence to reproduce the check:** +- Which proposed import/dependency (source → target) is implied by the plan +- Which location/role is being evaluated +- Which `forbiddenImports` / `forbiddenDependencies` rule in the config is expected to reject it🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/riviere-role-enforcement/skills/plan-review.md` around lines 99 - 109, Add a concrete, repeatable checklist to Step 6 in plan-review.md that tells annexers exactly how to detect forbidden imports/dependencies in pre-implementation plans: enumerate checks for forbiddenImports (verify any proposed file/module paths against the role's forbiddenImports list, flag if plan text names or implies imports from those namespaces), forbiddenDependencies (check for explicit or implied use-case-to-use-case or repository-to-repository dependencies and flag), entrypoint/ vs domain/ vs infra/ violations (ensure proposed file responsibilities map to allowed layer imports per role-selection-guide.md), aggregate-repository access rules (ensure only command-use-case mentions aggregate-repository), and consumer-mapping placement (flag presenters/adapters placed in domain/); for each check require a one-line evidence string from the plan (quoted text or path) and a binary pass/fail decision so annexers follow a consistent, repeatable process.
184-193: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick winMake the “append annex to issue body” instructions newline-safe and explicit.
Step 9 describes fetching the current issue body, appending the annex, and calling
gh issue edit, but it doesn’t specify how the append occurs (e.g., ensuring exactly one blank line separator, avoiding truncation, and not clobbering the original). Since it’s automation-oriented documentation, small clarification reduces real-world friction.Suggested explicit append commands
1. **GitHub issue input:** fetch the current body with `gh issue view <n> --json body -q '.body' > /tmp/issue-body.md`, append the annex to the file, then `gh issue edit <n> --body-file /tmp/issue-body.md`. + - Ensure there is a single blank line separator before the annex: + - append as: `printf '\n%s\n' "$(<annex>)" >> /tmp/issue-body.md` (or equivalent) + - Do not overwrite the existing body (only append).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/riviere-role-enforcement/skills/plan-review.md` around lines 184 - 193, Step 9's "append annex to issue body" is ambiguous and needs a newline-safe, non-destructive procedure: update the instructions around the `gh issue view ... > /tmp/issue-body.md` and `gh issue edit ... --body-file /tmp/issue-body.md` flow to explicitly (1) fetch the current body into a temp file (keep original intact), (2) ensure exactly one blank line separator is inserted before the annex (describe using a guaranteed newline/blank-line append operation to the temp file), (3) append the annex content to the temp file (not overwrite), and (4) call `gh issue edit --body-file` with that temp file; reference the commands (`gh issue view`, `/tmp/issue-body.md`, `gh issue edit --body-file`) in the text so implementers know where to apply the safe append behavior.
80-91: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick winClarify what to do when the plan omits the “feature name” for location inference.
Step 5 says “use the feature name from the plan, not a guessed one.” If the plan omits it, the doc currently doesn’t spell out the expected behavior beyond LOWER confidence. Suggest adding an explicit rule: either (a) add a gap in Step 7, or (b) keep confidence low and record the missing prerequisite in Notes/Gaps so Step 9 doesn’t silently proceed with an invented location.
Suggested rule for missing feature name
5. **Propose a location** by matching against the `locations` in the config. Use sublocation paths like `src/features/<feature>/commands/` — but use the feature name from the plan, not a guessed one. 6. **Record confidence:** - **HIGH** — single clear match; target + flow + name all point to one role. - **MEDIUM** — two candidates, one stronger; or clear behavior but ambiguous location. - **LOW** — genuinely ambiguous; multiple roles could apply; plan lacks detail. + +If the plan does not contain the feature name needed to form the sublocation (or the feature is explicitly ambiguous), do not guess the path: +- Set `Confidence = LOW` +- Add the missing prerequisite to the row’s `Notes` and/or to Step 7’s `Gaps` with “Suggested Action” indicating the user must confirm the feature-to-sublocation mapping.
110-176:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winMake the “aggregate” blocker rule unambiguous in Step 7/8.
Step 8’s “New aggregate proposed” blocker relies on the annex having “Proposed Roles” rows with role exactly
aggregate, but Step 7 doesn’t explicitly state when/how an aggregate should appear in that table (or whether aggregates should be entered differently vs other roles). This can lead to inconsistent annexes and missed blocker classification.Suggested doc tweak (align Step 7 output semantics with Step 8)
### Proposed Roles and Locations | Proposed Element | Kind | Role | Sublocation | Confidence | Notes | |------------------|------|------|-------------|------------|-------| | `FooUseCase` | class | `command-use-case` | `src/features/foo/commands/` | HIGH | Single public method `apply(...)`; input `FooInput` → result `FooResult`. | | `buildX` | function | `domain-service` | `src/features/foo/domain/` | MEDIUM | Pure transformation; could also be inlined into the use case if only used once. | | ... | | | | | | + +**If the plan proposes an aggregate (holds state + enforces invariants via state-modifying methods), include an explicit row with Role = `aggregate`** (do not omit aggregates “because they look implied”). This ensures Step 8 can correctly detect “New aggregate proposed” blockers.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/riviere-role-enforcement/skills/plan-review.md` around lines 110 - 176, Step 7 is ambiguous about how aggregates should be represented in the "Proposed Roles" table, causing Step 8's "New aggregate proposed" blocker to be missed; update the Step 7 template so every aggregate must appear as a row in "Proposed Roles" with role exactly `aggregate` and an extra column or note indicating whether that aggregate is already approved (reference `approvedInstances` entries in `.riviere/roles.ts` and the `userHasApproved` flag); ensure the Step 7 text explicitly instructs implementers to list unapproved aggregates as "aggregate" and mark them for user approval so Step 8's blocker rule (the "New aggregate proposed" check) can unambiguously detect them.
♻️ Duplicate comments (2)
tools/dev-workflow-v2/commands/planning-status.md (1)
18-20:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winDefine how “tasks have been created” is computed.
The output list includes “whether tasks have been created”, but the doc doesn’t state the rule. Since the marker stores
githubIssuesCreatedandgithubIssueNumbers, specify which field drives the output (e.g.,githubIssuesCreated === true, orgithubIssueNumbers.length > 0).🛠️ Suggested doc clarification
6. Print: - planning topic - planningId - current stage - PRD path - architecture path - - whether tasks have been created + - whether tasks have been created (true iff marker `githubIssuesCreated` is `true`) - next command - blockers🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@tools/dev-workflow-v2/commands/planning-status.md` around lines 18 - 20, Clarify the rule that determines "whether tasks have been created" by updating the doc to state which marker field is authoritative (e.g., use githubIssuesCreated === true as the primary signal, or define that githubIssueNumbers.length > 0 indicates created tasks); explicitly pick one rule (or define precedence if both exist) and show the exact condition (for example: "Tasks are considered created when githubIssuesCreated === true; alternatively, if you use githubIssueNumbers, tasks are created when githubIssueNumbers.length > 0") so readers know which field drives the output (referencing the githubIssuesCreated and githubIssueNumbers marker fields).tools/dev-workflow-v2/src/features/workflow/infra/external-clients/github/create-pull-request.ts (1)
47-48:⚠️ Potential issue | 🟠 Major | ⚡ Quick winPreserve the created PR reference if the follow-up
pr viewcall fails.At Line 47 the workflow already has a validated PR URL from
gh pr create. If Line 48 fails, the caller gets a generic creation failure even though the PR may already exist, which makes duplicate PRs and manual recovery more likely. Please wrap the second call and surfacepullRequestUrlin the thrown error so the workflow can recover from this partial-success case.Suggested fix
const pullRequestUrl = readPullRequestUrl(createOutput) - return readPullRequest(runGh, pullRequestUrl) + try { + return readPullRequest(runGh, pullRequestUrl) + } catch (error) { + throw new PullRequestCreationOutputError( + `PR was created at ${pullRequestUrl}, but reading it back failed: ${String(error)}`, + ) + }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@tools/dev-workflow-v2/src/features/workflow/infra/external-clients/github/create-pull-request.ts` around lines 47 - 48, The code currently calls readPullRequest(runGh, pullRequestUrl) and if that call throws the function hides the validated pullRequestUrl; wrap the readPullRequest call in a try/catch, and on error throw or rethrow an Error that includes the original pullRequestUrl (either in the message or as an error property) so callers can detect the partially-created PR; update the block around readPullRequestUrl(createOutput) and readPullRequest(...) accordingly (referencing readPullRequestUrl and readPullRequest) to preserve and surface pullRequestUrl when the second call fails.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@tools/dev-workflow-v2/commands/start-planning.md`:
- Line 14: Update the sentence that currently reads "Stop if exactly one active
marker exists and tell the user to use `planning-status` or
`continue-planning`." to use a softer tone by replacing "tell the user" with
"ask the user" so it reads "Stop if exactly one active marker exists and ask the
user to use `planning-status` or `continue-planning`." This is the exact line to
change in the start-planning.md content.
In `@tools/dev-workflow-v2/README.md`:
- Around line 39-44: Combine and rephrase the three consecutive "If ..."
sentences into one or two concise sentences to avoid repetition: mention the
three cases (exactly one active marker — commands planning-status and
continue-planning use it; no active marker — those commands stop and
start-planning may create one; more than one active marker — commands stop and
report all) and reference the command names planning-status, continue-planning,
and start-planning so readers can quickly scan the behavior without repeated "If
..." clauses.
In
`@tools/dev-workflow-v2/src/features/workflow/domain/pull-request-description.spec.ts`:
- Around line 36-142: Add a regression test to pull-request-description.spec.ts
that verifies parsePullRequestDescriptionOptions correctly handles a value that
looks like a flag (e.g. pass ['--title', '--description', '--description',
'Actual description', ...other required options...]) so the parser does not
treat the value '--description' as a new option; call
parsePullRequestDescriptionOptions and assert the result is ok: true and that
input.title equals the literal value '--description' while the real
--description option is parsed into input.description (or use
VALID_PULL_REQUEST_DESCRIPTION_INPUT/VALID_CREATE_PR_OPTIONS as a template to
construct expected input). Ensure the new it() case names the intent (e.g.
"handles flag-like values in value positions") and includes all other required
options so parsing succeeds.
In
`@tools/dev-workflow-v2/src/features/workflow/domain/pull-request-description.ts`:
- Around line 184-197: The readRequiredOption function is vulnerable because
indexOf(optionName) can match a value token (e.g. a title equal to
"--description") and return a wrong index; change the lookup to scan tokens for
the option token only (match token === optionName among the argument tokens) and
then validate the next token exists and is not another option (e.g., does not
start with "--") before parsing; update the logic in readRequiredOption to use
this targeted find (or a simple loop over commandTokens) and return a clear
missing/invalid-value error when the next token is absent or looks like an
option.
---
Outside diff comments:
In `@packages/riviere-role-enforcement/skills/plan-review.md`:
- Around line 99-109: Add a concrete, repeatable checklist to Step 6 in
plan-review.md that tells annexers exactly how to detect forbidden
imports/dependencies in pre-implementation plans: enumerate checks for
forbiddenImports (verify any proposed file/module paths against the role's
forbiddenImports list, flag if plan text names or implies imports from those
namespaces), forbiddenDependencies (check for explicit or implied
use-case-to-use-case or repository-to-repository dependencies and flag),
entrypoint/ vs domain/ vs infra/ violations (ensure proposed file
responsibilities map to allowed layer imports per role-selection-guide.md),
aggregate-repository access rules (ensure only command-use-case mentions
aggregate-repository), and consumer-mapping placement (flag presenters/adapters
placed in domain/); for each check require a one-line evidence string from the
plan (quoted text or path) and a binary pass/fail decision so annexers follow a
consistent, repeatable process.
- Around line 184-193: Step 9's "append annex to issue body" is ambiguous and
needs a newline-safe, non-destructive procedure: update the instructions around
the `gh issue view ... > /tmp/issue-body.md` and `gh issue edit ... --body-file
/tmp/issue-body.md` flow to explicitly (1) fetch the current body into a temp
file (keep original intact), (2) ensure exactly one blank line separator is
inserted before the annex (describe using a guaranteed newline/blank-line append
operation to the temp file), (3) append the annex content to the temp file (not
overwrite), and (4) call `gh issue edit --body-file` with that temp file;
reference the commands (`gh issue view`, `/tmp/issue-body.md`, `gh issue edit
--body-file`) in the text so implementers know where to apply the safe append
behavior.
- Around line 110-176: Step 7 is ambiguous about how aggregates should be
represented in the "Proposed Roles" table, causing Step 8's "New aggregate
proposed" blocker to be missed; update the Step 7 template so every aggregate
must appear as a row in "Proposed Roles" with role exactly `aggregate` and an
extra column or note indicating whether that aggregate is already approved
(reference `approvedInstances` entries in `.riviere/roles.ts` and the
`userHasApproved` flag); ensure the Step 7 text explicitly instructs
implementers to list unapproved aggregates as "aggregate" and mark them for user
approval so Step 8's blocker rule (the "New aggregate proposed" check) can
unambiguously detect them.
---
Duplicate comments:
In `@tools/dev-workflow-v2/commands/planning-status.md`:
- Around line 18-20: Clarify the rule that determines "whether tasks have been
created" by updating the doc to state which marker field is authoritative (e.g.,
use githubIssuesCreated === true as the primary signal, or define that
githubIssueNumbers.length > 0 indicates created tasks); explicitly pick one rule
(or define precedence if both exist) and show the exact condition (for example:
"Tasks are considered created when githubIssuesCreated === true; alternatively,
if you use githubIssueNumbers, tasks are created when githubIssueNumbers.length
> 0") so readers know which field drives the output (referencing the
githubIssuesCreated and githubIssueNumbers marker fields).
In
`@tools/dev-workflow-v2/src/features/workflow/infra/external-clients/github/create-pull-request.ts`:
- Around line 47-48: The code currently calls readPullRequest(runGh,
pullRequestUrl) and if that call throws the function hides the validated
pullRequestUrl; wrap the readPullRequest call in a try/catch, and on error throw
or rethrow an Error that includes the original pullRequestUrl (either in the
message or as an error property) so callers can detect the partially-created PR;
update the block around readPullRequestUrl(createOutput) and
readPullRequest(...) accordingly (referencing readPullRequestUrl and
readPullRequest) to preserve and surface pullRequestUrl when the second call
fails.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: 1262f91c-2ded-4166-80a4-d84dda4d9a38
📒 Files selected for processing (16)
packages/riviere-role-enforcement/skills/plan-review.mdtools/dev-workflow-v2/.claude-plugin/plugin.jsontools/dev-workflow-v2/README.mdtools/dev-workflow-v2/commands/planning-status.mdtools/dev-workflow-v2/commands/start-planning.mdtools/dev-workflow-v2/src/features/workflow/domain/pull-request-description.spec.tstools/dev-workflow-v2/src/features/workflow/domain/pull-request-description.tstools/dev-workflow-v2/src/features/workflow/domain/workflow-reviewing-submitting.spec.tstools/dev-workflow-v2/src/features/workflow/domain/workflow.tstools/dev-workflow-v2/src/features/workflow/entrypoint/fixtures/workflow-cli-state-steps-test-fixtures.tstools/dev-workflow-v2/src/features/workflow/entrypoint/fixtures/workflow-cli-test-fixtures.tstools/dev-workflow-v2/src/features/workflow/entrypoint/workflow-cli.spec.tstools/dev-workflow-v2/src/features/workflow/infra/external-clients/github/create-pull-request.spec.tstools/dev-workflow-v2/src/features/workflow/infra/external-clients/github/create-pull-request.tstools/dev-workflow-v2/states/reviewing.mdtools/dev-workflow-v2/states/submitting_pr.md
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
scripts/archive-prd.sh (1)
37-46:⚠️ Potential issue | 🟠 Major | ⚡ Quick winMilestone lookup uses the PRD folder slug instead of
githubMilestonefrommarker.yml.The marker schema (
tools/dev-workflow-v2/README.mdlines 47–55) storesgithubMilestoneas an explicit, separate field fromplanningId. Using$PRD_NAME(the folder slug) as the milestone title assumesgithubMilestone == planningIdslug — which is not guaranteed. If the milestone was created with a display-style title (e.g.,"Phase 9 Launch"vs"phase-9-launch"), theselectreturns nothing,MILESTONE_NUMBERis empty, and the script prints "Warning: Milestone not found" and exits without closing the milestone. The archival commit still proceeds, leaving the milestone open with no hard error.🛠️ Read `githubMilestone` from the marker before querying GitHub
+# Read milestone title from marker.yml +GITHUB_MILESTONE=$(grep '^githubMilestone:' "$MARKER_FILE" | sed 's/^githubMilestone:[[:space:]]*//') + +if [[ -z "$GITHUB_MILESTONE" ]]; then + echo "Error: githubMilestone field not found in $MARKER_FILE" >&2 + exit 1 +fi + -MILESTONE_NUMBER=$(gh api "repos/${REPO}/milestones" --jq ".[] | select(.title == \"$PRD_NAME\") | .number") +MILESTONE_NUMBER=$(gh api "repos/${REPO}/milestones" --jq ".[] | select(.title == \"$GITHUB_MILESTONE\") | .number")🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@scripts/archive-prd.sh` around lines 37 - 46, The script currently looks up milestones by the PRD folder slug ($PRD_NAME); change it to read the githubMilestone field from the marker (set a new variable like GITHUB_MILESTONE by parsing marker.yml for githubMilestone) and use that when building the gh API jq selector (replace uses of $PRD_NAME in the select(.title == ...) with $GITHUB_MILESTONE); if githubMilestone is missing, fall back to $PRD_NAME, and adjust the echo warnings/messages to reference the milestone title variable used so failures are visible and the archival step can reliably close the correct milestone.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@scripts/archive-prd.sh`:
- Line 34: The sed invocation using sed -i '' is macOS/BSD-specific and breaks
on GNU sed; update both occurrences (the sed call that edits MARKER_FILE and the
similar call around line 49) to use a portable pattern: invoke sed with an
inline backup suffix (e.g., sed -i.bak 's/^stage: .*/stage: planning-complete/'
"$MARKER_FILE") and then remove the .bak file (rm -f "$MARKER_FILE.bak") so the
edit works on both GNU and BSD sed; locate the sed calls in
scripts/archive-prd.sh to apply this change to the commands that modify
MARKER_FILE.
In `@tools/dev-workflow-v2/README.md`:
- Around line 31-88: The Commands section is being closed early because "##
Planning marker" and "## Planning stages" are h2 headings; change those two
headings to h3 (e.g., "### Planning marker" and "### Planning stages") so the
`continue-planning`, `choose-next-task`, `start-implementation`, and `Workflow
(internal)` entries remain nested under `## Commands`; make the same h3 change
for any subheadings that should stay within Commands so AI agents can discover
`continue-planning`, `/dev-workflow-v2:choose-next-task`, and
`/dev-workflow-v2:start-implementation` as command entries.
---
Outside diff comments:
In `@scripts/archive-prd.sh`:
- Around line 37-46: The script currently looks up milestones by the PRD folder
slug ($PRD_NAME); change it to read the githubMilestone field from the marker
(set a new variable like GITHUB_MILESTONE by parsing marker.yml for
githubMilestone) and use that when building the gh API jq selector (replace uses
of $PRD_NAME in the select(.title == ...) with $GITHUB_MILESTONE); if
githubMilestone is missing, fall back to $PRD_NAME, and adjust the echo
warnings/messages to reference the milestone title variable used so failures are
visible and the archival step can reliably close the correct milestone.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: b6cd3a45-6ee5-4645-9a1c-c683e0d2d0f9
📒 Files selected for processing (10)
.claude/agents/task-check.mdCLAUDE.mddocs/conventions/prd-track-format.mdpackages/riviere-role-enforcement/skills/plan-review.mdscripts/activate-prd.shscripts/archive-prd.shtools/dev-workflow-v2/.claude-plugin/plugin.jsontools/dev-workflow-v2/README.mdtools/dev-workflow-v2/agents/task-check.mdtools/dev-workflow-v2/commands/choose-next-task.md
💤 Files with no reviewable changes (1)
- scripts/activate-prd.sh
There was a problem hiding this comment.
Actionable comments posted: 11
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/project/PRD/riviere-extraction-workflows-v1/solution-exploration.md (1)
84-99:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winKeep the preserved context aligned with the V1 scope.
Line 84 still says the workflow can run in CI, but Line 98 explicitly says CI support is not a V1 hard success goal. That reads broader than the rest of the draft and can confuse approval scope.
Suggested wording tweak
-After this PRD, users can define a workflow once for their project and run that workflow whenever they want to recreate the Rivière graph, including during local exploration, in CI, or whenever the code changes. +After this PRD, users can define a workflow once for their project and run that workflow whenever they want to recreate the Rivière graph during local exploration or whenever the code changes.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/project/PRD/riviere-extraction-workflows-v1/solution-exploration.md` around lines 84 - 99, The paragraph that currently claims workflows can run "including during local exploration, in CI, or whenever the code changes" conflicts with the later success signal that "V1 does not require a hard success goal that workflows run in CI"; to align scope, edit the sentence in the block starting "After this PRD, users can define a workflow..." (the sentence containing "including during local exploration, in CI, or whenever the code changes") to remove or qualify "in CI" (e.g., "including during local exploration or whenever the code changes" or "including local exploration and optionally in CI") so the wording matches the explicit V1 scope in the "Previously captured success signals" section.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@tools/dev-workflow-v2/commands/choose-next-task.md`:
- Line 13: The current instructions run separate GH CLI queries for
label:"idea", label:"bug", and label:"tech improvement" which can return the
same issue multiple times; update the aggregation step that collects outputs
from the commands like `gh issue list --search 'label:"idea" no:milestone
state:open' --json number,title,assignees,body,labels'` (and the analogous `bug`
and `tech improvement` queries) to deduplicate results by the issue `number`
before counting or recommending tasks (e.g., merge JSON outputs and filter
unique `number` values using jq or a small script) so each issue is only counted
once.
- Around line 7-10: The discovery logic currently anchored to
docs/project/PRD/*/marker.yml misses markers stored at the canonical location
docs/project/planning/<slug>.yml; update the task-listing instructions so the
command scans the canonical planning-marker path (docs/project/planning/*.yml)
and/or both locations (docs/project/planning/*.yml and
docs/project/PRD/*/marker.yml) before reading githubMilestone from each marker
and then reading docs/project/PRD/<planningId>/delivery.md for folders that have
one (ensure references to scanning, reading githubMilestone, and reading
delivery.md in the choose-next-task command/docs reflect the new path(s)).
- Line 21: Replace occurrences of the inline secret pattern
`GITHUB_TOKEN=<token>` (seen around the examples at lines 12–13, 21, and 109)
with command-substitution or exporting the token to avoid leaking secrets;
specifically, use `GITHUB_TOKEN="$(gh auth token)"` for single-command
invocation or `export GITHUB_TOKEN="$(gh auth token)"` for a session, and update
the examples/instructions that mention `gh auth token` to show these safer forms
instead of pasting raw tokens.
In `@tools/dev-workflow-v2/commands/continue-planning.md`:
- Around line 58-84: The command currently discovers markers under
docs/project/PRD/*/marker.yml but the project contract expects per-topic markers
at docs/project/planning/<slug>.yml; update the discovery logic and
documentation in continue-planning to look for markers in
docs/project/planning/*.yml (matching the slug), keep the same active-marker
check (stage != planning-complete), and when exactly one active marker is found
derive sibling paths from that planning file's slug (use planningId/slug to form
docs/project/PRD/<planningId>/problem-definition.md, /solution-exploration.md,
/PRD.md, /ARCH.md, /delivery.md) so the command aligns with the specified
contract and can locate topic-based markers.
In `@tools/dev-workflow-v2/commands/start-planning.md`:
- Around line 61-65: The template header "Problem Definition: <title>" is
ambiguous about how <title> is derived; update the document text near the
skeleton/template to explicitly state the derivation rule (e.g., "use the
original planning topic", "use a title-cased slug of the topic", or "use an
explicit user-provided title") and give the chosen rule as the canonical
instruction so all generated Problem Definition artifacts are consistent;
reference the template header string "Problem Definition: <title>" when adding
this one-line clarification and an example showing the expected resulting title
form.
In `@tools/dev-workflow-v2/planning-stages/architecture-drafting.md`:
- Around line 417-420: The doc currently references a "Component Archetypes"
section for role archetype names (and uses the `custom:` prefix rule), but that
target section is missing; to fix, add a new "Component Archetypes" subsection
that enumerates allowed archetype names and examples (including the `custom:`
prefix usage and example `custom:bulk-copy-script`), or alternatively update the
note to point to the correct existing section (e.g., "Component naming
guidelines") if one already exists; ensure the note mentioning "role archetypes"
and the `custom:` prefix is synchronized with the new or corrected section so
the rule is resolvable during architecture option authoring.
In `@tools/dev-workflow-v2/planning-stages/parallelization.md`:
- Around line 3-5: The file uses the British spelling "parallelisation" in the
body while the stage/filename is "parallelization"; update all occurrences of
"parallelisation" (lines referencing the legacy note and the second sentence) to
"parallelization" so the content consistently matches the stage name and
improves searchability—ensure you change both instances shown in the diff and
verify no other occurrences remain in the document.
In `@tools/dev-workflow-v2/planning-stages/success-criteria.md`:
- Line 5: The sentence in success-criteria.md implies the document itself
approves the product concept; change the wording to state approval is an outcome
recorded in PRD after stakeholders approve the concept from
solution-exploration.md. Update the line to something like: "Once a product
concept is approved following solution-exploration.md, its success criteria
should be recorded in PRD.md; delivery verification belongs in delivery.md," and
ensure the phrasing clarifies approval is an outcome by stakeholders, not an
action performed by the file.
In `@tools/dev-workflow-v2/planning-stages/task-creation.md`:
- Around line 218-237: The docs currently instruct inlining raw tokens
(GITHUB_TOKEN=<token> ...) which can leak credentials; update the examples to
remove any inline GITHUB_TOKEN usage and instead instruct users to authenticate
via gh (e.g. run gh auth login / gh auth status) and then call gh repo view, gh
api, gh label list and gh label create directly; replace the three example
command lines that start with "GITHUB_TOKEN=<token> gh ..." and the two that
start with "GITHUB_TOKEN=<token> gh label ..." with the same commands but
without the prefixed GITHUB_TOKEN, and add a short note to run gh auth login /
gh auth status beforehand.
- Around line 169-209: The current Step 4 annex (the "## Architectural Annex"
block) does not enforce the required "Relevant Architecture Decisions" payload;
update the task template to include a mandatory "## Relevant Architecture
Decisions" section immediately after the annex header that requires: Decision
Name, Chosen Design, Boundaries (scope), Forbidden Alternatives (what was
rejected), and Verification Checks (how to validate the decision). Modify the
"## Architectural Annex" template in the Step 4 content so the new "Relevant
Architecture Decisions" subsection is present and clearly labeled as required
(e.g., a table or bulleted fields) and ensure any instructions around consulting
`.riviere/*` remain, so implementers must fill these four fields when creating
the issue.
In `@tools/dev-workflow-v2/planning-stages/terminology.md`:
- Line 5: Update the guidance in terminology.md so it explicitly mandates using
the canonical glossary file for all term definitions referenced in
solution-exploration.md, PRD.md, ARCH.md, delivery.md and any generated tasks:
change the routing rule on line 5 to instruct authors to add or update terms
only in docs/architecture/domain-terminology/contextive/definitions.glossary.yml
(and not create standalone terminology stages), and include a short note in
terminology.md pointing to that file as the single source of truth for domain
terms to prevent divergence.
---
Outside diff comments:
In `@docs/project/PRD/riviere-extraction-workflows-v1/solution-exploration.md`:
- Around line 84-99: The paragraph that currently claims workflows can run
"including during local exploration, in CI, or whenever the code changes"
conflicts with the later success signal that "V1 does not require a hard success
goal that workflows run in CI"; to align scope, edit the sentence in the block
starting "After this PRD, users can define a workflow..." (the sentence
containing "including during local exploration, in CI, or whenever the code
changes") to remove or qualify "in CI" (e.g., "including during local
exploration or whenever the code changes" or "including local exploration and
optionally in CI") so the wording matches the explicit V1 scope in the
"Previously captured success signals" section.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: 253dc709-4b5e-4a88-8729-fd297c9cc0e2
📒 Files selected for processing (30)
docs/project/PRD/riviere-extraction-workflows-v1/PRD.mddocs/project/PRD/riviere-extraction-workflows-v1/marker.ymldocs/project/PRD/riviere-extraction-workflows-v1/problem-definition.mddocs/project/PRD/riviere-extraction-workflows-v1/solution-exploration.mdtools/dev-workflow-v2/.claude-plugin/plugin.jsontools/dev-workflow-v2/README.mdtools/dev-workflow-v2/commands/choose-next-task.mdtools/dev-workflow-v2/commands/continue-planning.mdtools/dev-workflow-v2/commands/planning-status.mdtools/dev-workflow-v2/commands/start-planning.mdtools/dev-workflow-v2/planning-stages/architecture-approval.mdtools/dev-workflow-v2/planning-stages/architecture-drafting.mdtools/dev-workflow-v2/planning-stages/architecture-handoff.mdtools/dev-workflow-v2/planning-stages/delivery-planning.mdtools/dev-workflow-v2/planning-stages/dependencies.mdtools/dev-workflow-v2/planning-stages/design-principles.mdtools/dev-workflow-v2/planning-stages/milestones.mdtools/dev-workflow-v2/planning-stages/open-questions.mdtools/dev-workflow-v2/planning-stages/parallelization.mdtools/dev-workflow-v2/planning-stages/prd-approval.mdtools/dev-workflow-v2/planning-stages/prd-drafting.mdtools/dev-workflow-v2/planning-stages/problem-definition.mdtools/dev-workflow-v2/planning-stages/problem-statement.mdtools/dev-workflow-v2/planning-stages/research-references.mdtools/dev-workflow-v2/planning-stages/solution-exploration.mdtools/dev-workflow-v2/planning-stages/success-criteria.mdtools/dev-workflow-v2/planning-stages/task-creation.mdtools/dev-workflow-v2/planning-stages/terminology.mdtools/dev-workflow-v2/planning-stages/what-we-are-building.mdtools/dev-workflow-v2/planning-stages/what-we-are-not-building.md
|



New planning process designed from problem defintion to task definition using
dev-workflow-v2:start-planningand `dev-workflow-v2:continue-planning