feat(kanban): add phase 6 gitops enforcement#2562
Conversation
chore: adopt kanban governance baseline
…console feat(web): add phase 2 mock kanban console
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Opened against the upstream repo by mistake from the product fork workflow. Closing and recreating in MohAnghabo/kanban-console. |
ApprovabilityVerdict: Unable to determine Macroscope's correctness review was unable to post its findings for this PR. Approvability cannot proceed without a successful correctness review. You can customize Macroscope's approvability policy. Learn more. |
Summary
latestTagandtargetTagmetadata.Linked Work
Testing Guide
bun checkFocused checks also run during implementation:
bun run fmt:checkbun run --cwd packages/contracts test -- kanbanConsolebun run --cwd apps/server test -- GitStatusProviderbun run --cwd apps/web test -- kanbanConsoleMockbun run --cwd apps/server typecheckRisks and Rollback
Readiness Checklist
Note
Cursor Bugbot is generating a summary for commit 8620410. Configure here.
Note
Add phase 6 GitOps enforcement with kanban console UI, AI loop workflows, and preflight checks
KanbanConsoleMockReact component with multi-view navigation, drag-and-drop task movement, and RTL/Arabic locale support, rendering at/kanbanand as the authenticated home viewGitHubProjectsProvider,KanbanGitStatusProvider, andAgentWorkflowLauncherEffect services for managing GitHub Projects board state, git status, and agent workflow dispatchscripts/preflight/) covering Doppler auth, stack-specific tooling (Neon/Convex/Vercel), environment tier parity, and secret rotation, with fix applicators that write secrets to Dopplersync-codex-commands.tsCLI that generates and validates.codex/commands/wrappers from.claude/commands/canonical runbooks, with--checkmode for drift detection.ai/rules/) covering PDPL compliance, IFRS accounting, secret management, PR readiness, AWS Well-Architected, and agent orchestration.github/ai-loop.yml📊 Macroscope summarized 8620410. 38 files reviewed, 11 issues evaluated, 6 issues filtered, 0 comments posted
🗂️ Filtered Issues
apps/server/src/kanban/GitHubProjectsProvider.ts — 0 comments posted, 1 evaluated, 1 filtered
fieldValue, the priority of the nullish coalescing on line 191 is reversed. When the GitHub CLI returns field values with structure{ "field": { "name": "Status" }, "name": "In Progress" }, the expressiontrim(field.name) ?? trim(objectValue(field.field)?.name)evaluatesfield.namefirst, which yields the value ("In Progress") rather than the field name ("Status"). Since "in progress" is not in thewantedset for field names like "Status", the field is skipped and the lookup falls through to the fallback. The expression should betrim(objectValue(field.field)?.name) ?? trim(field.name)to prioritize the nestedfield.field.name(the actual field name) overfield.name(which may hold the value). [ Failed validation ]apps/server/src/kanban/GitStatusProvider.ts — 0 comments posted, 1 evaluated, 1 filtered
targetTagOutputgit command is only executed wheninput.targetTagis explicitly provided, buttargetTagon line 554 can also be derived fromreleaseTagFromBranch(branch). Wheninput.targetTagis undefined andtargetTagis derived from the branch name,targetTagOutputwill always be an empty string (fromEffect.succeed("")), causing thegate-tag-readinessgate to incorrectly report "passing" even if the derived tag already exists in the repository. [ Posting failed ]scripts/ai-loop/config.ts — 0 comments posted, 1 evaluated, 1 filtered
.github/ai-loop.yml(a YAML file), but the code usesJSON.parse()to parse it. YAML is a superset of JSON, meaning valid JSON is valid YAML, but not vice versa. If the config file uses any YAML-specific syntax (like unquoted strings, multi-line strings with|, anchors, etc.),JSON.parse()will throw aSyntaxError. Either the file extension should be.json, or a YAML parser library should be used. [ Failed validation ]scripts/ai-loop/router-logic.ts — 0 comments posted, 1 evaluated, 1 filtered
state.last_result_fingerprintbut the calling code stores the fingerprint instate.last_signal_fingerprint. Inrouter.ts, after computingfindingSetFingerprint, it is assigned tolast_signal_fingerprint(e.g.,last_signal_fingerprint: findingSetFingerprint). However,shouldBlockRepeatedFindingSetcompares againstlast_result_fingerprint, which is a different field that is never populated with the finding fingerprint. This means the repeated-finding-set detection will never trigger, defeating the intended blocking behavior. [ Failed validation ]scripts/preflight/checks/integrations.ts — 0 comments posted, 1 evaluated, 1 filtered
doppler/yamlcheck provides a misleading hint even when the check passes. Whenfiles.length > 0 && !hasPlaceholderevaluates to true (status ="pass"), the hint is still set to"Replace placeholder Doppler project names."because the ternary at lines 182-185 only distinguishes betweenfiles.length === 0andfiles.length > 0, not whether the check passed. Other checks in this file correctly useundefinedfor the hint when passing (e.g., line 221, line 250), but this one always provides a string hint. [ Failed validation ]scripts/preflight/fix/apply.ts — 0 comments posted, 1 evaluated, 1 filtered
stack-b/convex-deployment(lines 34-38) andstack-a/neon-url(lines 44-46) only verifystatus === "error"but do not check thefixableproperty, unlike the other fix conditions which usehasFixableIssue. This inconsistency means fixes will be attempted for these checks even if they reportfixable: false, potentially running provider CLI commands when the check explicitly indicated the issue cannot be auto-fixed. [ Posting failed ]