[codex] keep Create settings visible#316
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📜 Recent review details⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
🧰 Additional context used📓 Path-based instructions (8)**/*.{ts,tsx}📄 CodeRabbit inference engine (CLAUDE.md)
Files:
**/*.test.{ts,tsx}📄 CodeRabbit inference engine (CLAUDE.md)
Files:
**/*.{ts,tsx,js,jsx}📄 CodeRabbit inference engine (AGENTS.md)
Files:
**/*.{test,spec}.{ts,tsx}📄 CodeRabbit inference engine (AGENTS.md)
Files:
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}📄 CodeRabbit inference engine (Custom checks)
Files:
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}📄 CodeRabbit inference engine (Custom checks)
Files:
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}📄 CodeRabbit inference engine (Custom checks)
Files:
**/*⚙️ CodeRabbit configuration file
Files:
🔇 Additional comments (2)
📝 WalkthroughSummary by CodeRabbit
WalkthroughРеорганизация Create Flow: разделение view на create/display, preview-рендер меток из buffer, применение buffer к values, вертикальная/горизонтальная навигация в Settings, клавиатурная логика TUI/Web, обновлённые input-примитивы и обширное тестовое покрытие. ChangesSettings Navigation & UI Feature
🎯 4 (Complex) | ⏱️ ~60 minutes ✨ Finishing Touches🧪 Generate unit tests (beta)
|
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/app/src/docker-git/menu-create-shared.ts`:
- Around line 46-50: Add formal TSDoc comments for the exported navigation API:
CreateSettingsNavigationDirection, createSettingsHint, and
moveCreateSettingsStep; the docs must state invariants (valid values for
CreateSettingsNavigationDirection and that moveCreateSettingsStep never moves
outside [firstCreateSettingsStepIndex, lastStep]), preconditions (e.g., valid
current index and non-empty steps), postconditions (resulting index and side
effects), mark pure or impure with `@pure/`@effect as appropriate, and include
`@complexity` (Big-O) and any `@invariant` mathematical relations. Reference the
symbols CreateSettingsNavigationDirection, createSettingsHint,
moveCreateSettingsStep (and firstCreateSettingsStepIndex where relevant) in the
TSDoc so callers and automated checks can validate behavior.
In `@packages/app/tests/docker-git/create-flow-render.test.ts`:
- Around line 63-86: Add a fast-check property test that asserts the invariant:
renderCreatePanel(view) contains createSettingsHint if and only if view.step > 0
for all valid CreateFlowView instances; implement this using fast-check (import
fc) and fc.assert(fc.property(...)) with a generator that produces valid
CreateFlowView objects (or derive from existing helpers like
createInitialFlowView/createSettingsView for seeds), then call
renderCreatePanel(view) and assert (html.includes(createSettingsHint)) ===
(view.step > 0); include the test alongside the existing tests in this file and
reference CreateFlowView, renderCreatePanel, createSettingsHint,
createInitialFlowView/createSettingsView when locating code to modify.
In `@packages/app/tests/docker-git/menu-create-shared.test.ts`:
- Around line 142-199: Add property-based tests (using fast-check) around
moveCreateSettingsStep/advanceCreateFlow/createInitialFlowView to validate three
invariants at scale: 1) wraparound navigation (moving "up" from step 1 wraps to
last settings step and "down" from last wraps to 1), 2) navigation is forbidden
when step === 0 (calls return null), and 3) buffer is cleared only when the
returned view's step differs from the input view's step (i.e., buffer becomes ""
iff step changed). Generate random valid flow views (use
createInitialFlowView/advanceCreateFlow to reach settings region and vary
buffer/step) and assert these properties for both "up" and "down" moves; also
use resolveCreateFlowSteps to verify the set of unresolved steps remains
consistent after navigation where appropriate.
In `@packages/app/tests/docker-git/menu-create.test.ts`:
- Around line 39-61: Add property-based tests using fast-check to verify
invariants for handleCreateInput: test wraparound behavior when
incrementing/decrementing step, ensure arrows are ignored when view.step === 0,
and assert buffer is cleared whenever step changes; replace example-only tests
in menu-create.test.ts by parameterized fast-check properties (referencing
handleCreateInput, createContext, createSettingsView) and implement unit checks
using the repository's Effect test utilities (not async/await) so assertions
call the Effect-based test runner and mocks like
context.setViewMock/context.setMessageMock are asserted via those utilities.
🪄 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 Plus
Run ID: c0a13a13-19a6-4bdc-81aa-c82284a48ce3
📒 Files selected for processing (11)
packages/app/src/docker-git/menu-create-shared.tspackages/app/src/docker-git/menu-create.tspackages/app/src/docker-git/menu-render.tspackages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/app-ready-url.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
- GitHub Check: E2E (Login context)
- GitHub Check: Test
- GitHub Check: E2E (Browser command)
- GitHub Check: E2E (OpenCode)
- GitHub Check: E2E (Clone auto-open SSH)
- GitHub Check: E2E (Runtime volumes + SSH)
- GitHub Check: Lint
- GitHub Check: E2E (Clone cache)
- GitHub Check: Final build (windows-latest)
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-render.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-create.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-render.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-create.ts
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-render.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-create.ts
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-render.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-create.ts
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-render.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-create.ts
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-render.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-create.ts
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants. Example:fc.property(fc.array(messageArbitrary), (messages) => isChronologicallySorted(sortMessagesByTimestamp(messages))).
Mock external dependencies in unit tests using Effect's testing utilities. Run tests without Effect runtime for speed. Example:Effect.provide(MockService), Effect.runPromise.
Files:
packages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.ts
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Property-based tests (fast-check) must verify mathematical invariants; unit tests must use Effect test utilities without async/await.
Files:
packages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.ts
🔇 Additional comments (7)
packages/app/src/web/actions-projects.ts (1)
451-451: LGTM!packages/app/src/web/app-ready-url.ts (1)
91-91: LGTM!packages/app/src/web/app-ready-create.ts (1)
9-10: LGTM!Also applies to: 113-122
packages/app/src/web/panel-create-select.tsx (1)
6-6: LGTM!Also applies to: 110-120, 166-167
packages/app/tests/docker-git/app-ready-create.test.ts (1)
14-14: LGTM!Also applies to: 120-130, 162-209
packages/app/src/docker-git/menu-create.ts (1)
14-14: LGTM!Also applies to: 182-183, 196-203
packages/app/src/docker-git/menu-render.ts (1)
4-4: LGTM!Also applies to: 123-123, 133-144
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/app/tests/docker-git/app-ready-create.test.ts`:
- Around line 179-209: Add a new test case that mirrors the existing "moves
between settings with arrows and clears the uncommitted buffer" but uses
createKeyEvent("ArrowUp") to exercise the other branch of handleCreateKey;
instantiate the same CreateFlowView (with step: 1 and buffer: "30%"), call
handleCreateKey with the same context/controllerCwd/projectsRoot/setCreateView
spy, and assert the returned handled is true, event.preventDefault was called
once, setCreateView was called with the view having step adjusted (to the
expected value for ArrowUp) and buffer cleared (""), and context.setMessage was
called with null; reference handleCreateKey, createKeyEvent, CreateFlowView,
setCreateViewSpy and requireCreateViewValue when adding the test.
In `@packages/app/tests/docker-git/create-flow-render.test.ts`:
- Around line 39-40: The property-based test currently hardcodes the step range
(0..6); change it to derive the upper bound from the actual flow definition by
calling resolveCreateFlowSteps(...) and using its length minus one as the max
step, then generate create views via createViewForStep(step) (which uses
createInitialFlowView and createSettingsView) so the invariant adapts when
create-flow steps change; update the fast-check Arbitrary or integer bounds to
use that computed max instead of 6.
In `@packages/app/tests/docker-git/menu-create-shared.test.ts`:
- Around line 44-49: The property-based test uses hardcoded step bounds (1..6)
in expectedSettingsStep; replace those literals by deriving min/max from the
actual createSteps length so the wrap-around logic adapts to changes. Update the
expectedSettingsStep implementation to compute the lastIndex (e.g.,
createSteps.length or the variable that defines number of settings) and use that
instead of 6 and 1, and make the alternative branch use 0..lastIndex-1 or
1..lastIndex consistently; apply the same change to the other occurrence
referenced around lines 54-56 so both instances reference the dynamic
createSteps length rather than fixed bounds.
- Line 55: Remove the `as const` type assertion from the
`settingsDirectionArbitrary` declaration and replace it with a generic type
parameter on `fc.constantFrom` to preserve literal types without using `as`;
locate the `settingsDirectionArbitrary` constant and change the call to
`fc.constantFrom` to explicitly provide the union literal generic (e.g., `<"up"
| "down">`) so the arbitrary remains type-safe without `as const`.
🪄 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 Plus
Run ID: b5681e85-2c73-4ef4-a8db-3f1faef64b02
📒 Files selected for processing (11)
packages/app/src/docker-git/menu-create-shared.tspackages/app/src/docker-git/menu-create.tspackages/app/src/docker-git/menu-render.tspackages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/app-ready-url.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (13)
- GitHub Check: E2E (Login context)
- GitHub Check: E2E (Clone cache)
- GitHub Check: E2E (Local package CLI)
- GitHub Check: Types
- GitHub Check: Lint Effect-TS
- GitHub Check: Test
- GitHub Check: E2E (Runtime volumes + SSH)
- GitHub Check: E2E (Clone auto-open SSH)
- GitHub Check: Lint
- GitHub Check: E2E (OpenCode)
- GitHub Check: E2E (Browser command)
- GitHub Check: Snapshot
- GitHub Check: Final build (windows-latest)
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/src/docker-git/menu-create.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-render.tspackages/app/src/web/panel-create-select.tsx
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/src/docker-git/menu-create.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-render.tspackages/app/src/web/panel-create-select.tsx
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/src/docker-git/menu-create.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-render.tspackages/app/src/web/panel-create-select.tsx
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/src/docker-git/menu-create.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-render.tspackages/app/src/web/panel-create-select.tsx
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/src/docker-git/menu-create.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-render.tspackages/app/src/web/panel-create-select.tsx
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/src/docker-git/menu-create-shared.tspackages/app/src/docker-git/menu-create.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/docker-git/menu-render.tspackages/app/src/web/panel-create-select.tsx
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants. Example:fc.property(fc.array(messageArbitrary), (messages) => isChronologicallySorted(sortMessagesByTimestamp(messages))).
Mock external dependencies in unit tests using Effect's testing utilities. Run tests without Effect runtime for speed. Example:Effect.provide(MockService), Effect.runPromise.
Files:
packages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/create-flow-render.test.ts
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Property-based tests (fast-check) must verify mathematical invariants; unit tests must use Effect test utilities without async/await.
Files:
packages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/create-flow-render.test.ts
🔇 Additional comments (10)
packages/app/src/docker-git/menu-create.ts (1)
14-16: LGTM!Also applies to: 182-203
packages/app/tests/docker-git/menu-create.test.ts (1)
53-100: LGTM!packages/app/src/web/app-ready-create.ts (1)
9-10: LGTM!Also applies to: 113-122
packages/app/tests/docker-git/app-ready-create.test.ts (1)
14-15: LGTM!Also applies to: 120-130, 162-177
packages/app/src/web/app-ready-url.ts (1)
91-91: LGTM!packages/app/src/web/actions-projects.ts (1)
451-451: LGTM!packages/app/src/docker-git/menu-create-shared.ts (1)
46-70: LGTM!Also applies to: 491-549, 587-588
packages/app/tests/docker-git/menu-create-shared.test.ts (1)
152-237: LGTM!packages/app/src/docker-git/menu-render.ts (1)
4-4: LGTM!Also applies to: 123-124, 133-144
packages/app/src/web/panel-create-select.tsx (1)
6-6: LGTM!Also applies to: 110-120, 166-167
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/app/tests/docker-git/app-ready-create.test.ts`:
- Around line 179-209: Add a test for the "null" arrow-branch in the web
handler: create a CreateFlowView with step: 0 (settings mode starting state),
fire the same createKeyEvent("ArrowDown") and call handleCreateKey with the same
context/controllerCwd/projectsRoot and a spy for setCreateView (like
setCreateViewSpy), then assert that handled is false and that
event.preventDefault and setCreateView were not called (and context.setMessage
was not changed); this mirrors the existing ArrowDown test but verifies the
step:0 path returns false and does not mutate state.
🪄 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 Plus
Run ID: 376a6349-ddf1-4d6f-af3c-9a2025c2364e
📒 Files selected for processing (11)
packages/app/src/docker-git/menu-create-shared.tspackages/app/src/docker-git/menu-create.tspackages/app/src/docker-git/menu-render.tspackages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/app-ready-url.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create.test.ts
📜 Review details
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/src/web/actions-projects.tspackages/app/src/docker-git/menu-render.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/create-flow-render.test.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/src/web/actions-projects.tspackages/app/src/docker-git/menu-render.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/create-flow-render.test.ts
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/src/web/actions-projects.tspackages/app/src/docker-git/menu-render.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/create-flow-render.test.ts
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/src/web/actions-projects.tspackages/app/src/docker-git/menu-render.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/create-flow-render.test.ts
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/src/web/actions-projects.tspackages/app/src/docker-git/menu-render.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/create-flow-render.test.ts
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/src/web/actions-projects.tspackages/app/src/docker-git/menu-render.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-url.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/panel-create-select.tsxpackages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/create-flow-render.test.ts
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants. Example:fc.property(fc.array(messageArbitrary), (messages) => isChronologicallySorted(sortMessagesByTimestamp(messages))).
Mock external dependencies in unit tests using Effect's testing utilities. Run tests without Effect runtime for speed. Example:Effect.provide(MockService), Effect.runPromise.
Files:
packages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/create-flow-render.test.ts
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Property-based tests (fast-check) must verify mathematical invariants; unit tests must use Effect test utilities without async/await.
Files:
packages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/create-flow-render.test.ts
🔇 Additional comments (10)
packages/app/tests/docker-git/create-flow-render.test.ts (1)
93-93: Дубликат: уберите хардкод верхней границы шага в property-тесте.На Line 93 значение
max: 6остаётся хрупким — при добавлении/удалении шагов инвариант начнёт проверяться неполно.As per coding guidelines
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants.packages/app/src/docker-git/menu-render.ts (1)
4-4: LGTM!Also applies to: 123-124, 133-144
packages/app/src/web/panel-create-select.tsx (1)
6-6: LGTM!Also applies to: 110-120, 166-167
packages/app/src/docker-git/menu-create.ts (1)
14-16: LGTM!Also applies to: 180-203
packages/app/tests/docker-git/menu-create.test.ts (1)
1-100: LGTM!packages/app/src/web/actions-projects.ts (1)
451-451: LGTM!packages/app/src/web/app-ready-url.ts (1)
91-91: LGTM!packages/app/tests/docker-git/menu-create-shared.test.ts (2)
44-49: Жёстко прошитые границы (1..6) делают тесты хрупкими.Проблема остаётся с прошлого ревью:
expectedSettingsStepиsettingsStepIndexArbitraryсодержат магические числа 1 и 6, привязанные к текущему количеству settings-шагов. При добавлении/удалении шагов вcreateStepsтесты сломаются.Рекомендуемое исправление
+const computeLastSettingsStep = (): number => { + const view = expectContinueResult( + advanceCreateFlow(process.cwd(), createInitialFlowView("https://github.com/org/repo")) + ) + return resolveCreateFlowSteps(view.values).length - 1 +} + -const expectedSettingsStep = (step: number, direction: "up" | "down"): number => { +const expectedSettingsStep = (step: number, lastStep: number, direction: "up" | "down"): number => { if (direction === "up") { - return step === 1 ? 6 : step - 1 + return step === 1 ? lastStep : step - 1 } - return step === 6 ? 1 : step + 1 + return step === lastStep ? 1 : step + 1 } describe("menu-create-shared", () => { const cwd = process.cwd() const defaultRoot = `${process.env["HOME"] ?? cwd}/.docker-git/org/repo` - const settingsStepIndexArbitrary = fc.integer({ min: 1, max: 6 }) + const lastSettingsStep = computeLastSettingsStep() + const settingsStepIndexArbitrary = fc.integer({ min: 1, max: lastSettingsStep })Also applies to: 54-54
152-236: LGTM!packages/app/src/docker-git/menu-create-shared.ts (1)
46-70: LGTM!Also applies to: 491-548, 587-588
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/app/tests/docker-git/menu-create-shared.test.ts (1)
80-124: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick winДобавьте тест на комбинацию
quickCreateи inline-флагов.Сейчас эти ветки проверяются по отдельности, но не их пересечение. Это как раз тот путь, где
advanceCreateFlowсначала парсит repo-step флаги, а потом может сделать раннийComplete, поэтому регрессия здесь тихо сломает сохранение--force/--no-up/--mcp-playwright.Пример минимального теста
+ it("quick-creates from repo URL while preserving inline flags", () => { + const inputs = expectCompleteResult(advanceCreateFlow( + cwd, + createInitialFlowView( + "https://github.com/org/repo/tree/feature-x --force --mcp-playwright --no-up" + ), + { quickCreate: true } + )) + + expectFeatureRepoDefaults(inputs, defaultRoot) + expect(inputs.force).toBe(true) + expect(inputs.enableMcpPlaywright).toBe(true) + expect(inputs.runUp).toBe(false) + })As per coding guidelines "Флагай любой уход от спеки, недокументированное изменение поведения, отсутствие тестов для заявленного поведения".
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/app/tests/docker-git/menu-create-shared.test.ts` around lines 80 - 124, Add a new test that covers the intersection of quickCreate and inline CLI flags: call advanceCreateFlow with createInitialFlowView containing the repo URL plus inline flags (e.g. "--force --mcp-playwright --no-up") and pass { quickCreate: true } to simulate the quick-create path, then assert that advanceCreateFlow returns a completed result (use expectCompleteResult), that expectFeatureRepoDefaults(inputs, defaultRoot) still holds, and that inputs.force === true, inputs.enableMcpPlaywright === true and inputs.runUp === false; reference advanceCreateFlow, createInitialFlowView, expectCompleteResult and expectFeatureRepoDefaults when locating where to add the new test.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@packages/app/tests/docker-git/menu-create-shared.test.ts`:
- Around line 80-124: Add a new test that covers the intersection of quickCreate
and inline CLI flags: call advanceCreateFlow with createInitialFlowView
containing the repo URL plus inline flags (e.g. "--force --mcp-playwright
--no-up") and pass { quickCreate: true } to simulate the quick-create path, then
assert that advanceCreateFlow returns a completed result (use
expectCompleteResult), that expectFeatureRepoDefaults(inputs, defaultRoot) still
holds, and that inputs.force === true, inputs.enableMcpPlaywright === true and
inputs.runUp === false; reference advanceCreateFlow, createInitialFlowView,
expectCompleteResult and expectFeatureRepoDefaults when locating where to add
the new test.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 18a942e5-e2b7-459c-9608-714e1be7c48f
📒 Files selected for processing (11)
packages/app/src/docker-git/menu-create-shared.tspackages/app/src/docker-git/menu-create.tspackages/app/src/docker-git/menu-render.tspackages/app/src/web/actions-projects.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/app-ready-url.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
- GitHub Check: E2E (Browser command)
- GitHub Check: E2E (Clone cache)
- GitHub Check: E2E (Login context)
- GitHub Check: E2E (Clone auto-open SSH)
- GitHub Check: E2E (Runtime volumes + SSH)
- GitHub Check: Lint
- GitHub Check: E2E (OpenCode)
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/src/docker-git/menu-render.tspackages/app/src/web/app-ready-url.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/actions-projects.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/src/docker-git/menu-render.tspackages/app/src/web/app-ready-url.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/actions-projects.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/src/docker-git/menu-render.tspackages/app/src/web/app-ready-url.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/actions-projects.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/src/docker-git/menu-render.tspackages/app/src/web/app-ready-url.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/actions-projects.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/src/docker-git/menu-render.tspackages/app/src/web/app-ready-url.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/actions-projects.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.ts
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/src/docker-git/menu-render.tspackages/app/src/web/app-ready-url.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/menu-create.tspackages/app/src/web/actions-projects.tspackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants. Example:fc.property(fc.array(messageArbitrary), (messages) => isChronologicallySorted(sortMessagesByTimestamp(messages))).
Mock external dependencies in unit tests using Effect's testing utilities. Run tests without Effect runtime for speed. Example:Effect.provide(MockService), Effect.runPromise.
Files:
packages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.ts
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Property-based tests (fast-check) must verify mathematical invariants; unit tests must use Effect test utilities without async/await.
Files:
packages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-shared.test.ts
🔇 Additional comments (12)
packages/app/tests/docker-git/create-flow-render.test.ts (1)
1-108: LGTM!packages/app/src/docker-git/menu-create.ts (1)
14-16: LGTM!Also applies to: 182-203
packages/app/src/docker-git/menu-render.ts (1)
4-5: LGTM!Also applies to: 123-124, 133-144
packages/app/tests/docker-git/menu-create.test.ts (1)
1-106: LGTM!packages/app/src/docker-git/menu-create-shared.ts (1)
46-68: LGTM!Also applies to: 491-588
packages/app/tests/docker-git/menu-create-shared.test.ts (1)
44-59: LGTM!Also applies to: 155-241
packages/app/tests/docker-git/app-ready-create.test.ts (2)
216-222: Добавьте тест для null-ветки стрелок на repo step (step=0).Сейчас покрыт только успешный переход в settings-mode; нужен отдельный кейс, где на Line 216+ при
step = 0обработчик возвращаетfalseи не вызываетpreventDefault/setCreateView.
14-15: LGTM!Also applies to: 120-167, 199-214
packages/app/src/web/app-ready-create.ts (1)
9-10: LGTM!Also applies to: 113-122
packages/app/src/web/panel-create-select.tsx (1)
6-6: LGTM!Also applies to: 115-120, 166-167
packages/app/src/web/app-ready-url.ts (1)
91-91: LGTM!packages/app/src/web/actions-projects.ts (1)
451-451: LGTM!
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/app/src/docker-git/program-auth.ts`:
- Around line 50-52: The generic type parameter E on withControllerReady is
redundant; change its signature to remove E and accept Effect.Effect<void,
CliError, R> (i.e. withControllerReady<R>(effect: Effect.Effect<void, CliError,
R>): Effect.Effect<void, CliError, ControllerRuntime | R>), keep the documented
return union ControllerRuntime | R, and ensure usage sites passing effects typed
with CliError still compile; update the declaration of withControllerReady and
any type annotations that referenced the removed generic while keeping the call
to ensureControllerReady() and the Effect.zipRight composition.
- Around line 112-121: Add comprehensive TSDoc to the new
attachGrokAuthTerminalSession function: document that it lives in the SHELL
layer and performs effects, mark `@pure` false, list required services under
`@effect` (e.g., any Env/clients used by attachTerminalSession or logging),
include `@complexity` (time/space), `@param` for session, `@returns` describing
Effect.Effect<void, CliError>, and `@throws` Never (errors are encoded in the
Effect); also add `@precondition/`@postcondition/@invariant as appropriate and
mention the failure branch that calls Effect.fail with
missingAuthTerminalSessionError and the success branch that delegates to
attachTerminalSession so reviewers can quickly find the behavior.
In `@packages/app/tests/docker-git/app-ready-create-fixture.ts`:
- Around line 39-42: The current githubSegmentArbitrary uses .filter(...) which
can hurt fast-check performance; change it to directly generate valid strings by
producing a tuple of (firstCharWithoutDash, middleChars, lastCharWithoutDash)
using githubNameCharArbitrary for middle chars and a generator that picks from
githubNameChars excluding '-' for first and last, then map the tuple into the
final string (joining middle and concatenating first+middle+last, handling the
single-char case). Update the generator referenced as githubSegmentArbitrary and
reuse githubNameCharArbitrary and githubNameChars to create the constant-from
style generators for the first/last positions so no post-generation filter is
needed.
- Around line 29-259: Add comprehensive TSDoc blocks to every exported constant
and function in this file (e.g. validGithubStatus,
repositoryCreateInputArbitrary, createSetCreateViewSpy, requireCreateViewValue,
submitCreateBuffer, requireSubmittedCreateInputs, expectQuickCreateInputs,
expectCreateViewReset, createSubmitCreateBuffer, expectedOutDirForRepoUrl,
createKeyEvent, createSettingsFlowView, createSettingsFlowViewAtStep,
expectCreateArrowHandling, expectCreateSideArrowBufferHandling,
expectEmptyRepoInlineError and any others exported) describing purpose,
parameters and return values; include required metadata tags from the coding
guidelines: `@pure` (use false for test helpers with side effects), `@effect`
(services used), `@invariant`, `@precondition`, `@postcondition`, `@complexity` (time
and space), and `@throws` Never, and for each function add `@param` entries for each
parameter and `@returns` description — place each TSDoc immediately above the
corresponding export.
In `@packages/app/tests/docker-git/menu-create-display-settings.test.ts`:
- Around line 16-45: В тестах дублируются helpers expectContinueResult,
expectCompleteResult и viewForStep — вынеси их из menu-create-shared.test.ts и
menu-create-display-settings.test.ts в общий экспорт в
app-ready-create-fixture.ts и импортируй в оба теста; оставь реализацию функций
такой же (они используют advanceCreateFlow, resolveCreateDisplaySteps и тип
CreateStep), убедись что экспорты/импорты корректно названы и обновь импорты в
файлах menu-create-shared.test.ts и menu-create-display-settings.test.ts.
🪄 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 Plus
Run ID: c2385943-50e5-49ef-a4d5-b327c38032b5
📒 Files selected for processing (8)
packages/app/src/docker-git/program-auth.tspackages/app/src/web/app-ready-terminal-screen.tsxpackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
- GitHub Check: E2E (OpenCode)
- GitHub Check: E2E (Clone cache)
- GitHub Check: E2E (Clone auto-open SSH)
- GitHub Check: E2E (Login context)
- GitHub Check: E2E (Browser command)
- GitHub Check: E2E (Runtime volumes + SSH)
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/src/web/app-ready-terminal-screen.tsxpackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/src/web/app-ready-terminal-screen.tsxpackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/src/web/app-ready-terminal-screen.tsxpackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/src/web/app-ready-terminal-screen.tsxpackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/src/web/app-ready-terminal-screen.tsxpackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/src/web/app-ready-terminal-screen.tsxpackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants. Example:fc.property(fc.array(messageArbitrary), (messages) => isChronologicallySorted(sortMessagesByTimestamp(messages))).
Mock external dependencies in unit tests using Effect's testing utilities. Run tests without Effect runtime for speed. Example:Effect.provide(MockService), Effect.runPromise.
Files:
packages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.ts
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Property-based tests (fast-check) must verify mathematical invariants; unit tests must use Effect test utilities without async/await.
Files:
packages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.ts
🔇 Additional comments (24)
packages/app/tests/docker-git/create-flow-render.test.ts (1)
1-257: LGTM!packages/app/src/docker-git/program-auth.ts (1)
28-28: LGTM!Also applies to: 160-160
packages/app/src/web/app-ready-terminal-screen.tsx (1)
12-12: LGTM!Also applies to: 524-524
packages/app/tests/docker-git/app-ready-create.test.ts (5)
23-32: LGTM!
64-79: LGTM!
81-117: LGTM!
119-155: LGTM!
171-171: LGTM!Also applies to: 186-186
packages/app/tests/docker-git/app-ready-create-settings.test.ts (11)
1-32: LGTM!
39-45: LGTM!
47-67: LGTM!
69-101: LGTM!
103-133: LGTM!
135-164: LGTM!
166-185: LGTM!
187-203: LGTM!
205-221: LGTM!
223-240: LGTM!
242-270: LGTM!packages/app/tests/docker-git/menu-create-shared.test.ts (3)
194-211: LGTM!
217-224: LGTM!
226-240: LGTM!packages/app/tests/docker-git/menu-create-display-settings.test.ts (2)
50-69: LGTM!Also applies to: 71-83, 85-101
130-158: LGTM!
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/app/tests/docker-git/menu-create-display-settings.test.ts`:
- Around line 19-116: Add property-based tests (using fast-check) that assert
core invariants for display-settings: use arbitrary sequences of step moves and
buffer inputs to verify (1) in-place apply via applyCreateDisplaySettingsStep +
createFlowViewAtStep keeps the current step stable, (2)
moveCreateDisplaySettingsStep wraparound behavior is predictable (down from last
wraps to first and up from first wraps to last) by comparing against
resolveCreateDisplaySteps ordering, and (3) preview actions (calls to
renderCreateStepLabelWithBufferPreview and resolveCreateSettingsChoiceBuffer)
never mutate the committed values returned by resolveCreateInputs or the
view.values object (check structural equality before/after). Integrate these as
fast-check properties in the existing test file, using the project’s Effect test
utilities (not async/await) and helper functions like expectCreateContinueView /
expectCreateCompleteInputs to validate outcomes.
🪄 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 Plus
Run ID: b6f7465c-a870-4e12-90ad-1bf5ea964f36
📒 Files selected for processing (7)
packages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
- GitHub Check: Final build (windows-latest)
- GitHub Check: E2E (Browser command)
- GitHub Check: E2E (Clone auto-open SSH)
- GitHub Check: E2E (Runtime volumes + SSH)
- GitHub Check: E2E (Login context)
- GitHub Check: E2E (OpenCode)
- GitHub Check: E2E (Clone cache)
- GitHub Check: Lint
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/tests/docker-git/app-ready-create-settings.test.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/tests/docker-git/app-ready-create-settings.test.ts
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/tests/docker-git/app-ready-create-settings.test.ts
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/tests/docker-git/app-ready-create-settings.test.ts
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/tests/docker-git/app-ready-create-settings.test.ts
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/tests/docker-git/app-ready-create-settings.test.ts
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants. Example:fc.property(fc.array(messageArbitrary), (messages) => isChronologicallySorted(sortMessagesByTimestamp(messages))).
Mock external dependencies in unit tests using Effect's testing utilities. Run tests without Effect runtime for speed. Example:Effect.provide(MockService), Effect.runPromise.
Files:
packages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.ts
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Property-based tests (fast-check) must verify mathematical invariants; unit tests must use Effect test utilities without async/await.
Files:
packages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.ts
🔇 Additional comments (6)
packages/app/tests/docker-git/app-ready-create.test.ts (1)
4-21: LGTM!Also applies to: 28-29, 60-122, 137-137, 152-152
packages/app/tests/docker-git/app-ready-create-settings.test.ts (1)
1-175: LGTM!packages/app/tests/docker-git/create-flow-render.test.ts (1)
1-245: LGTM!packages/app/tests/docker-git/app-ready-create-fixture.ts (1)
1-290: LGTM!packages/app/tests/docker-git/menu-create-shared.test.ts (1)
1-249: LGTM!packages/app/tests/docker-git/create-flow-test-helpers.ts (1)
1-83: LGTM!
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/app/src/docker-git/menu-create-shared.ts`:
- Around line 703-723: Add regression tests that assert the new Settings-mode
invariants in the Create flow: write tests that exercise
moveCreateDisplaySettingsStep, applyCreateDisplaySettingsStep and
completeCreateDisplaySettingsFlow (and use
moveCreateSettingsWithin/resolveCreateDisplaySteps helpers to construct
scenarios) to ensure (1) applied rows remain present after navigation, (2)
moving the selected row clears the preview buffer, and (3) pressing Done applies
a valid preview and returns an Error when the preview is invalid; each test
should use CreateFlowView snapshots and check that values are unchanged except
the intended effects and that step/index invariants hold.
- Around line 25-30: CreateFlowView currently uses a single numeric step that
conflates two different step-scales (resolveCreateFlowSteps(view.values) vs
resolveCreateDisplaySteps()), which allows accidental mixing; change
CreateFlowView into a tagged union (e.g., { mode: "create", step:
CreateStepIndex, buffer, inputError, values } | { mode: "display", step:
DisplayStepIndex, buffer, inputError, values }) or add a discriminant field
"mode" and distinct step types so the compiler enforces narrowing; update all
usages that call resolveCreateFlowSteps, resolveCreateDisplaySteps or inspect
step to narrow by mode (use the new types or guards) and adjust function
signatures that accept CreateFlowView accordingly (reference CreateFlowView,
resolveCreateFlowSteps, resolveCreateDisplaySteps, and CreateInputs).
🪄 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 Plus
Run ID: 5fb6c285-23da-4900-a01f-cc9738884ba4
📒 Files selected for processing (1)
packages/app/src/docker-git/menu-create-shared.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
- GitHub Check: E2E (Clone auto-open SSH)
- GitHub Check: E2E (Browser command)
- GitHub Check: E2E (Runtime volumes + SSH)
- GitHub Check: E2E (Clone cache)
- GitHub Check: E2E (Login context)
- GitHub Check: E2E (OpenCode)
🧰 Additional context used
📓 Path-based instructions (6)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/src/docker-git/menu-create-shared.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/src/docker-git/menu-create-shared.ts
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/src/docker-git/menu-create-shared.ts
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/src/docker-git/menu-create-shared.ts
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/src/docker-git/menu-create-shared.ts
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/src/docker-git/menu-create-shared.ts
🔇 Additional comments (1)
packages/app/src/docker-git/menu-create-shared.ts (1)
47-81: LGTM!Also applies to: 164-208, 489-689
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/app/src/docker-git/menu-create-shared.ts`:
- Around line 180-255: The preview renders booleans with
renderExplicitBooleanChoice ("Y"/"N") but the committed labels for runUp,
mcpPlaywright and force use a different casing, causing a visual flip after
Enter; make the two renderings consistent by updating renderCreateStepLabel to
use renderExplicitBooleanChoice for the boolean fields (runUp, mcpPlaywright,
force) or otherwise normalize both renderCreateStepLabel and
renderCreateStepLabelWithBufferPreview to call the same formatter
(renderExplicitBooleanChoice / parseExplicitBooleanChoice) so the bracketed
boolean glyphs match in preview and confirmed state.
🪄 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 Plus
Run ID: 5b7a7cac-40c7-443a-bf8f-404690a90d05
📒 Files selected for processing (18)
packages/app/src/docker-git/menu-create-shared.tspackages/app/src/docker-git/menu-create.tspackages/app/src/docker-git/menu-types.tspackages/app/src/docker-git/program-auth.tspackages/app/src/web/app-ready-controller.tspackages/app/src/web/app-ready-create.tspackages/app/src/web/app-ready-layout.tsxpackages/app/src/web/app-ready.tsxpackages/app/src/web/panel-content.tsxpackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create.test.ts
📜 Review details
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/src/docker-git/menu-types.tspackages/app/src/web/panel-content.tsxpackages/app/src/web/app-ready-layout.tsxpackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/app-ready.tsxpackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/src/web/app-ready-controller.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/src/docker-git/menu-types.tspackages/app/src/web/panel-content.tsxpackages/app/src/web/app-ready-layout.tsxpackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/app-ready.tsxpackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/src/web/app-ready-controller.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/src/docker-git/menu-types.tspackages/app/src/web/panel-content.tsxpackages/app/src/web/app-ready-layout.tsxpackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/app-ready.tsxpackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/src/web/app-ready-controller.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/src/docker-git/menu-types.tspackages/app/src/web/panel-content.tsxpackages/app/src/web/app-ready-layout.tsxpackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/app-ready.tsxpackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/src/web/app-ready-controller.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/src/docker-git/menu-types.tspackages/app/src/web/panel-content.tsxpackages/app/src/web/app-ready-layout.tsxpackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/app-ready.tsxpackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/src/web/app-ready-controller.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/src/docker-git/menu-create-shared.ts
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/src/docker-git/menu-types.tspackages/app/src/web/panel-content.tsxpackages/app/src/web/app-ready-layout.tsxpackages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/src/web/app-ready.tsxpackages/app/src/docker-git/menu-create.tspackages/app/src/web/app-ready-create.tspackages/app/src/docker-git/program-auth.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/src/web/app-ready-controller.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/src/web/panel-create-select.tsxpackages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants. Example:fc.property(fc.array(messageArbitrary), (messages) => isChronologicallySorted(sortMessagesByTimestamp(messages))).
Mock external dependencies in unit tests using Effect's testing utilities. Run tests without Effect runtime for speed. Example:Effect.provide(MockService), Effect.runPromise.
Files:
packages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.ts
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Property-based tests (fast-check) must verify mathematical invariants; unit tests must use Effect test utilities without async/await.
Files:
packages/app/tests/docker-git/menu-create.test.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/app/tests/docker-git/app-ready-create-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.ts
🔇 Additional comments (16)
packages/app/src/docker-git/menu-types.ts (1)
145-152: LGTM!packages/app/src/web/panel-content.tsx (1)
7-7: LGTM!Also applies to: 36-36
packages/app/src/web/app-ready-layout.tsx (1)
23-23: LGTM!Also applies to: 67-67
packages/app/tests/docker-git/menu-create.test.ts (1)
1-113: LGTM!packages/app/tests/docker-git/app-ready-create.test.ts (1)
4-20: LGTM!Also applies to: 28-29, 42-42, 61-123, 134-154
packages/app/tests/docker-git/menu-create-display-settings.test.ts (1)
1-236: LGTM!packages/app/tests/docker-git/create-flow-test-helpers.ts (1)
1-107: LGTM!packages/app/tests/docker-git/create-flow-render.test.ts (1)
1-246: LGTM!packages/app/src/web/app-ready.tsx (1)
5-5: LGTM!Also applies to: 33-33
packages/app/src/docker-git/menu-create.ts (1)
14-15: LGTM!Also applies to: 160-162, 184-205
packages/app/src/web/app-ready-create.ts (1)
29-41: LGTM!Also applies to: 71-83, 95-98, 132-237
packages/app/src/docker-git/program-auth.ts (1)
28-29: LGTM!Also applies to: 50-53, 112-133, 171-171
packages/app/tests/docker-git/app-ready-create-settings.test.ts (1)
1-175: LGTM!packages/app/src/web/app-ready-controller.ts (1)
22-28: LGTM!Also applies to: 207-214
packages/app/tests/docker-git/menu-create-shared.test.ts (1)
1-1: LGTM!Also applies to: 48-49, 145-248
packages/app/src/web/panel-create-select.tsx (1)
6-15: LGTM!Also applies to: 19-19, 23-23, 30-34, 42-78, 97-97, 101-180, 188-210, 228-230
# Conflicts: # packages/app/src/docker-git/program-auth.ts # packages/app/tests/docker-git/core-templates.test.ts # packages/lib/src/usecases/auth-grok-oauth.ts # packages/lib/tests/core/templates.test.ts
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/app/src/docker-git/menu-create-shared.ts`:
- Around line 647-653: createDisplayFlowView currently copies the raw flow-step
index (view.step) into the display-mode step, but flow and display use different
step scales; instead translate the flow index to the corresponding display index
by resolving the step identity: compute flowSteps =
resolveCreateFlowSteps(view.values), get the stepId/name at
flowSteps[view.step], then find the index of that same stepId/name in
resolveCreateDisplaySteps() and use that index (clamped) for the returned
DisplayModeFlowView.step; keep buffer/inputError/values unchanged and handle
out-of-range by falling back to clampCreateSettingsStep on the computed display
index.
In `@packages/app/tests/docker-git/create-flow-render.test.ts`:
- Around line 73-84: renderTerminalCreate is using resolveCreateFlowSteps with a
display-mode view (createSettingsView), causing terminal tests to validate
impossible/display-only states; switch tests that call renderTerminalCreate to
construct a CreateModeFlowView instead of createSettingsView so the step index
maps to resolveCreateFlowSteps correctly, and for display/browser invariants use
resolveCreateDisplaySteps when computing allowed step ranges (also update the
property-test that picks the upper bound around line 221 to use the
display-steps range). Update references to renderCreate, renderCreateStepLabel,
resolveCreateInputs accordingly so the defaults/labels are generated from the
correct view type.
In `@packages/lib/tests/core/templates.test.ts`:
- Line 766: The test assertion in packages/lib/tests/core/templates.test.ts that
checks runtime?.contents does not contain the escaped string
'\${MCP_PLAYWRIGHT_ENABLE:-0}' is a behavioral change to the Playwright runtime
template that is not documented in this PR; update the PR to either (a) state
explicitly that this change is part of the "Create Settings" feature and
reference the related spec/issue, mentioning the specific test/assertion
(expect(runtime?.contents).not.toContain('\\${MCP_PLAYWRIGHT_ENABLE:-0}')), or
(b) if it is an independent improvement, split the commit/test into a separate
PR with its own description and changelog entry so the Create Settings PR only
contains UI-related changes—do one of these and update the PR description and
commit message accordingly.
🪄 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 Plus
Run ID: 4550f9ea-8b9a-4510-aeb0-f3f2a57e2af3
📒 Files selected for processing (4)
packages/app/src/docker-git/menu-create-shared.tspackages/app/tests/docker-git/create-flow-render.test.tspackages/lib/src/usecases/auth-grok-oauth.tspackages/lib/tests/core/templates.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
- GitHub Check: E2E (Login context)
- GitHub Check: E2E (Clone auto-open SSH)
- GitHub Check: E2E (Runtime volumes + SSH)
- GitHub Check: E2E (Clone cache)
- GitHub Check: E2E (Browser command)
- GitHub Check: E2E (OpenCode)
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/tests/docker-git/create-flow-render.test.tspackages/lib/tests/core/templates.test.tspackages/lib/src/usecases/auth-grok-oauth.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants. Example:fc.property(fc.array(messageArbitrary), (messages) => isChronologicallySorted(sortMessagesByTimestamp(messages))).
Mock external dependencies in unit tests using Effect's testing utilities. Run tests without Effect runtime for speed. Example:Effect.provide(MockService), Effect.runPromise.
Files:
packages/app/tests/docker-git/create-flow-render.test.tspackages/lib/tests/core/templates.test.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/tests/docker-git/create-flow-render.test.tspackages/lib/tests/core/templates.test.tspackages/lib/src/usecases/auth-grok-oauth.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Property-based tests (fast-check) must verify mathematical invariants; unit tests must use Effect test utilities without async/await.
Files:
packages/app/tests/docker-git/create-flow-render.test.tspackages/lib/tests/core/templates.test.ts
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/tests/docker-git/create-flow-render.test.tspackages/lib/tests/core/templates.test.tspackages/lib/src/usecases/auth-grok-oauth.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/tests/docker-git/create-flow-render.test.tspackages/lib/tests/core/templates.test.tspackages/lib/src/usecases/auth-grok-oauth.tspackages/app/src/docker-git/menu-create-shared.ts
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/tests/docker-git/create-flow-render.test.tspackages/lib/tests/core/templates.test.tspackages/lib/src/usecases/auth-grok-oauth.tspackages/app/src/docker-git/menu-create-shared.ts
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/tests/docker-git/create-flow-render.test.tspackages/lib/tests/core/templates.test.tspackages/lib/src/usecases/auth-grok-oauth.tspackages/app/src/docker-git/menu-create-shared.ts
🔇 Additional comments (1)
packages/lib/src/usecases/auth-grok-oauth.ts (1)
9-9: LGTM!
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/app/tests/docker-git/create-flow-test-helpers.ts`:
- Around line 64-70: The helper resolveRequiredCreateStepIndex currently
computes the index from resolveCreateDisplaySteps(), which is wrong for
CreateMode; change it to compute the index from resolveCreateFlowSteps(...) that
reflects the current view values by adding a parameter (e.g., view or values) to
resolveRequiredCreateStepIndex and calling resolveCreateFlowSteps(view.values)
instead of resolveCreateDisplaySteps(); update all similar helpers (the second
occurrence around lines 108-127) and their call sites to pass the view/values so
the index is derived from resolveCreateFlowSteps(view.values).
- Around line 41-42: The helper expectedOutDirForRepoUrl currently hardcodes
"/home/dev/.docker-git"; change it to accept a root/projectsRoot parameter (or
read the shared test config) instead of the literal string so tests work in
different environments—update the function signature
expectedOutDirForRepoUrl(repoUrl: string, projectsRoot: string) (or pull from
the existing test config) and build the path using projectsRoot +
deriveRepoPathParts(resolveRepoInput(repoUrl).repoUrl).pathParts.join("/") to
replace the hardcoded prefix; adjust callers in tests to pass the appropriate
projectsRoot or the shared config.
🪄 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 Plus
Run ID: 6b282d80-0228-40e1-937c-cb5e703e9fec
📒 Files selected for processing (3)
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-display-settings.test.tspackages/app/tests/docker-git/menu-create-shared.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
- GitHub Check: E2E (Clone cache)
- GitHub Check: E2E (Login context)
- GitHub Check: E2E (OpenCode)
- GitHub Check: E2E (Clone auto-open SSH)
- GitHub Check: E2E (Runtime volumes + SSH)
- GitHub Check: E2E (Browser command)
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.ts
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.ts
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.ts
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.ts
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.ts
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants. Example:fc.property(fc.array(messageArbitrary), (messages) => isChronologicallySorted(sortMessagesByTimestamp(messages))).
Mock external dependencies in unit tests using Effect's testing utilities. Run tests without Effect runtime for speed. Example:Effect.provide(MockService), Effect.runPromise.
Files:
packages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.ts
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Property-based tests (fast-check) must verify mathematical invariants; unit tests must use Effect test utilities without async/await.
Files:
packages/app/tests/docker-git/menu-create-shared.test.tspackages/app/tests/docker-git/menu-create-display-settings.test.ts
🔇 Additional comments (2)
packages/app/tests/docker-git/menu-create-shared.test.ts (1)
39-40: LGTM!Also applies to: 42-236
packages/app/tests/docker-git/menu-create-display-settings.test.ts (1)
1-228: LGTM!
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/app/tests/docker-git/app-ready-create-fixture.ts`:
- Around line 166-173: The function createSettingsFlowViewAtStep currently types
its return as CreateFlowView but always returns a display-mode view; change its
return type to DisplayModeFlowView and update any related references;
specifically adjust the signature of createSettingsFlowViewAtStep to return
DisplayModeFlowView and ensure the object spread from createSettingsFlowView(),
the buffer field, and the computed step (from
resolveRequiredCreateStepIndex(stepName, resolveCreateDisplaySteps())) are
compatible with DisplayModeFlowView type constraints.
In `@packages/app/tests/docker-git/app-ready-create.test.ts`:
- Around line 69-76: The assertion on the create view is missing an explicit
check for the mode, so update the expectation that uses
requireCreateViewValue(setCreateViewSpy.mock.calls[0]?.[0]) to include mode:
"display" in the object passed to toMatchObject (alongside step and values) so
the test validates the mode as well.
🪄 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 Plus
Run ID: bb40e3de-9ce4-4e5c-8585-dc1aa746a36e
📒 Files selected for processing (3)
packages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-test-helpers.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
- GitHub Check: E2E (Browser command)
- GitHub Check: E2E (Clone cache)
- GitHub Check: E2E (Runtime volumes + SSH)
- GitHub Check: E2E (Login context)
- GitHub Check: E2E (OpenCode)
- GitHub Check: E2E (Clone auto-open SSH)
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants. Example:fc.property(fc.array(messageArbitrary), (messages) => isChronologicallySorted(sortMessagesByTimestamp(messages))).
Mock external dependencies in unit tests using Effect's testing utilities. Run tests without Effect runtime for speed. Example:Effect.provide(MockService), Effect.runPromise.
Files:
packages/app/tests/docker-git/app-ready-create.test.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Property-based tests (fast-check) must verify mathematical invariants; unit tests must use Effect test utilities without async/await.
Files:
packages/app/tests/docker-git/app-ready-create.test.ts
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/create-flow-test-helpers.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
🔇 Additional comments (3)
packages/app/tests/docker-git/app-ready-create.test.ts (1)
4-68: LGTM!Also applies to: 77-165
packages/app/tests/docker-git/create-flow-test-helpers.ts (1)
1-135: LGTM!packages/app/tests/docker-git/app-ready-create-fixture.ts (1)
1-165: LGTM!Also applies to: 175-315
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (1)
packages/app/tests/docker-git/app-ready-create-fixture.ts (1)
48-65: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick winДокументируйте throw-условие в TSDoc.
Функция
requireCreateViewValueбросаетErrorприundefinedили function-типе, но TSDoc этого не отражает. Добавьте@throws Error when value is undefined or a function updaterдля полноты документации.Аналогично для
requireSubmittedCreateInputs(строки 102-111).Пример обновлённой TSDoc
-/** `@pure` true `@effect` none `@invariant` function updates are rejected `@precondition` value is a captured setState argument `@postcondition` returns a concrete CreateFlowView `@complexity` O(1) */ +/** `@pure` true `@effect` none `@invariant` function updates are rejected `@precondition` value is a captured setState argument `@postcondition` returns a concrete CreateFlowView `@complexity` O(1) `@throws` Error when value is undefined or a function updater */ export const requireCreateViewValue = ( value: SetStateAction<CreateFlowView> | undefined ): CreateFlowView => {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/app/tests/docker-git/app-ready-create-fixture.ts` around lines 48 - 65, The TSDoc for requireCreateViewValue (and likewise for requireSubmittedCreateInputs) is missing a throws clause: update the JSDoc block above each function to include "`@throws` Error when value is undefined or a function updater" so the documentation explicitly documents that the function will throw an Error if passed undefined or a function-type setState updater; keep the rest of the tags intact and ensure the wording matches existing tags (e.g., "`@precondition`"/"`@postcondition`") used in the file.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/app/tests/docker-git/app-ready-create-fixture.ts`:
- Around line 287-316: Add a shared constant EMPTY_REPO_URL_ERROR = "Insert URL
first" and replace the three duplicated literal occurrences with that constant;
update the tests that assert the inline error (referencing
expectEmptyRepoInlineError and expectEmptyRepoKeyboardInlineError) and the other
place where the same string is used (the earlier test around the
initial-flow/assertions) to use EMPTY_REPO_URL_ERROR instead of the hard-coded
string so all checks read the same constant.
In `@packages/app/tests/docker-git/app-ready-create.test.ts`:
- Around line 92-96: The test currently loops over shiftKey inside a single it()
making failures ambiguous; replace the loop with isolated test cases by using
either jest's it.each([false, true]) or two separate it() blocks calling
expectEmptyRepoKeyboardInlineError(handleCreateKey, submitCreateInputsMock,
shiftKey) so each shiftKey case (false and true) is reported independently;
update the test that contains handleCreateKey, submitCreateInputsMock and
expectEmptyRepoKeyboardInlineError accordingly.
---
Duplicate comments:
In `@packages/app/tests/docker-git/app-ready-create-fixture.ts`:
- Around line 48-65: The TSDoc for requireCreateViewValue (and likewise for
requireSubmittedCreateInputs) is missing a throws clause: update the JSDoc block
above each function to include "`@throws` Error when value is undefined or a
function updater" so the documentation explicitly documents that the function
will throw an Error if passed undefined or a function-type setState updater;
keep the rest of the tags intact and ensure the wording matches existing tags
(e.g., "`@precondition`"/"`@postcondition`") used in the file.
🪄 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 Plus
Run ID: 3cd7c139-aaff-4dca-936f-c37a1b29a787
📒 Files selected for processing (2)
packages/app/tests/docker-git/app-ready-create-fixture.tspackages/app/tests/docker-git/app-ready-create.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
- GitHub Check: E2E (Runtime volumes + SSH)
- GitHub Check: E2E (Clone auto-open SSH)
- GitHub Check: E2E (Browser command)
- GitHub Check: E2E (Login context)
- GitHub Check: E2E (Clone cache)
- GitHub Check: E2E (OpenCode)
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx}: Implement Functional Core, Imperative Shell (FCIS) pattern: CORE layer contains only pure functions with immutable data and mathematical operations; SHELL layer isolates all effects (IO, network, database). Strict dependency direction: SHELL → CORE (never reverse).
Never useany,unknown,eslint-disable,ts-ignore, orastype assertions (except in rigorously justified cases with documentation). Always use exhaustive union type analysis through.exhaustive()pattern matching.
All external dependencies must be wrapped through typed interfaces and injected via Effect-TS Layer pattern. Never call external services directly from CORE functions.
Use monadic composition with Effect-TS for all effects:Effect<Success, Error, Requirements>. Compose effects throughpipe()andEffect.flatMap(). Implement dependency injection via Layer pattern. Handle errors without try/catch blocks.
All functions must be pure in the CORE layer: no side effects (logging, console output, IO operations, mutations). Separate all side effects into the SHELL layer.
Use exhaustive pattern matching with Effect.Match instead of switch statements. Example:Match.value(item).pipe(Match.when(...), Match.exhaustive).
Document all functions with comprehensive TSDoc including:@pure(true/false),@effect(required services),@invariant(mathematical invariants),@precondition,@postcondition,@complexity(time and space),@throwsNever (errors must be typed in Effect).
Use functional comment markers for code clarity: CHANGE (brief description), WHY (mathematical/architectural justification), QUOTE(ТЗ) (requirement citation), REF (RTM or message ID), SOURCE (external source with quote), FORMAT THEOREM (∀x ∈ Domain: P(x) → Q(f(x))), PURITY (CORE|SHELL), EFFECT (Effect type signature), INVARIANT (mathematical invariant), COMPLEXITY (time/space).
Define all external service dependencies as Context.Tag classes with fully typed methods returning Effect types. Example: `class Da...
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.test.{ts,tsx}: Implement property-based testing using fast-check for mathematical properties and invariants. Example:fc.property(fc.array(messageArbitrary), (messages) => isChronologicallySorted(sortMessagesByTimestamp(messages))).
Mock external dependencies in unit tests using Effect's testing utilities. Run tests without Effect runtime for speed. Example:Effect.provide(MockService), Effect.runPromise.
Files:
packages/app/tests/docker-git/app-ready-create.test.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Forbidden constructs in CORE code:any,eslint-disable,ts-ignore,async/await, raw Promise chains (then/catch),Promise.all,try/catchfor logic control,console.*, switch statements (use Match with .exhaustive() instead)
All functions must use Effect-TS for composing effects:Effect<Success, Error, Requirements>. No direct async/await, Promise chains, or try/catch in product logic.
Functional comments must include: CHANGE, WHY, QUOTE(ТЗ) or n/a, REF, SOURCE or n/a, FORMAT THEOREM, PURITY (CORE|SHELL), EFFECT signature for SHELL functions, INVARIANT, and COMPLEXITY.
All data mutations must use immutable patterns (ReadonlyArray, readonly properties, Object.freeze); mutation in SHELL only when absolutely necessary and documented.
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Property-based tests (fast-check) must verify mathematical invariants; unit tests must use Effect test utilities without async/await.
Files:
packages/app/tests/docker-git/app-ready-create.test.ts
**/*.{sh,bash,py,js,ts,jsx,tsx,go,java,rb,php}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce command injection or unsafe shell/process execution with user-controlled input
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.{py,js,ts,jsx,tsx,go,java,rb,php,sh,bash,c,cpp}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files introduce path traversal or writes outside intended project/container state directories
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*.{js,ts,jsx,tsx,py,java,go,rb,php,sh,bash,yml,yaml,json,env*,toml,cfg,config,dockerfile,dockerignore}
📄 CodeRabbit inference engine (Custom checks)
Fail if changed files expose credentials, tokens, private-keys, or PII in source, generated config, logs, or CI output
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
**/*
⚙️ CodeRabbit configuration file
**/*: Ты строгий ревьюер SPEC DRIVEN DEVELOPMENT.Перед выводами изучи README.md, другие *.md файлы, linked issues,
PR description, PR comments/discussion и релевантную кодовую базу.Сверь изменения с исходным ТЗ/спекой и обсуждением. Флагай любой уход
от спеки, недокументированное изменение поведения, отсутствие тестов
для заявленного поведения и security-риск. Если спека не видна,
попроси автора добавить ее в issue или PR description.Проверь решение с точки зрения формальной верификации: какие инварианты,
предусловия и постусловия можно доказать математически, а где доказуемость
слабая. Оцени решение с точки зрения теории игр: устойчивы ли стимулы,
нет ли выгодного обхода правил, и какое решение было бы сильнее.
Files:
packages/app/tests/docker-git/app-ready-create.test.tspackages/app/tests/docker-git/app-ready-create-fixture.ts
🔇 Additional comments (12)
packages/app/tests/docker-git/app-ready-create.test.ts (7)
4-29: LGTM!
36-60: LGTM!
62-78: LGTM!
80-108: LGTM!
110-124: LGTM!
126-131: LGTM!
133-164: LGTM!packages/app/tests/docker-git/app-ready-create-fixture.ts (5)
1-46: LGTM!
67-138: LGTM!
140-174: LGTM!
176-246: LGTM!
248-285: LGTM!
Closes #315
What changed
Enterapplies the active row, clears the buffer, and keeps the selected row in place.Donebutton.Quick Createremains the repo-step fast path.Doneapplies a valid active preview before submit and preserves the existing parse-error path for invalid buffers.Root cause
The browser Settings UI was sharing the unresolved-step flow used by the terminal wizard. Once a setting was applied, that row became “resolved” and disappeared from the web settings list, so navigation and side-arrow previews operated against a shrinking list.
Mathematical guarantees
resolveCreateFlowSteps(values)keeps terminal/TUI unresolved-step semantics unchanged.resolveCreateDisplaySteps(values)is independent of applied values, so every web Settings row remains visible.CreateFlowView.buffer; it does not mutateCreateFlowView.values.EnterreturnsContinuewithstepunchanged andbuffer = "".DonesubmitsresolveCreateInputs(context, updatedValues)only after applying a valid active buffer, otherwise it reports the existing parse error and does not submit.Scope note
origin/mainto keep PR [codex] keep Create settings visible #316 mergeable. The Playwright runtime template assertion inpackages/lib/tests/core/templates.test.ts(expect(runtime?.contents).not.toContain("\\${MCP_PLAYWRIGHT_ENABLE:-0}")) is from that upstream main sync, not a bundled behavior change for the Create Settings feature.Verification
bun run --cwd packages/app vitest run tests/docker-git/app-ready-create.test.ts tests/docker-git/create-flow-render.test.ts tests/docker-git/menu-create-shared.test.ts tests/docker-git/menu-create-display-settings.test.tscd packages/app && ./node_modules/.bin/jscpd tests/docker-git/app-ready-create.test.ts tests/docker-git/create-flow-render.test.ts tests/docker-git/menu-create-shared.test.ts tests/docker-git/menu-create-display-settings.test.ts tests/docker-git/create-flow-test-helpers.ts --config .jscpd.json --reporters consolebun run --cwd packages/app typecheckbun run --cwd packages/app lint:effectgit diff --check390x844: repo step showsQuick Create/Settings; Settings showsDone;ArrowRightpreviews Playwright MCP[Y];Enterconfirms[y]without hiding the row;ArrowDownkeeps applied rows visible;Donesubmits payload withenableMcpPlaywright: true.