feat(kanban): add phase 6 gitops enforcement #2562
Closed
MacroscopeApp / Macroscope - Correctness Check
completed
May 6, 2026 in 5m 27s
Issues found but failed to post (294 code objects reviewed).
β’ Merge Base:
499f146
β’ Head:8620410
Details
| β | File Path | Comments Posted |
|---|---|---|
| β | review.md |
|
| β | .gitignore |
|
| β | .cursorrules |
|
| β | .ai/README.md |
|
| β | docs/project.md |
|
| β | scripts/test.ts |
0 |
| β | .cursor/BUGBOT.md |
|
| β | .github/ai-loop.yml |
|
| β | CLAUDE.md |
|
| β | .codex/commands/plan.md |
|
| β | .codex/commands/ship.md |
|
| β | scripts/ai-loop/hash.ts |
0 |
| β | .ai/rules/13-security.md |
|
| β | .claude/commands/ship.md |
|
| β | .codex/commands/phase.md |
|
| β | scripts/ai-loop/state.ts |
0 |
| β | scripts/vitest.config.ts |
|
| β | .claude/commands/phase.md |
|
| β | .codex/commands/review.md |
|
| β | scripts/ai-loop/config.ts |
0 |
| β | scripts/ai-loop/schema.ts |
|
| β | scripts/setup-local-db.sh |
|
| β | .claude/commands/review.md |
|
| β | .codex/commands/open-pr.md |
|
| β | scripts/setup-domain.sh |
|
| β | .ai/i18n/agent-banners.json |
|
| β | .claude/commands/plan.md |
|
| β | docs/agent-orchestration.md |
|
| β | package.json |
|
| β | scripts/preflight/result.ts |
0 |
| β | .ai/rules/00-constitution.md |
|
| β | .ai/rules/18-pr-readiness.md |
|
| β | .codex/commands/env-audit.md |
|
| β | .codex/commands/preflight.md |
|
| β | scripts/ai-loop/github.ts |
0 |
| β | scripts/ai-loop/router.ts |
0 |
| β | scripts/check-port-policy.sh |
|
| β | scripts/preflight/run-cli.ts |
0 |
| β | scripts/security-audit.sh |
|
| β | .claude/commands/env-audit.md |
|
| β | .claude/commands/preflight.md |
|
| β | .codex/commands/ifrs-audit.md |
|
| β | .codex/commands/pdpl-audit.md |
|
| β | .oxfmtrc.json |
|
| β | scripts/preflight/redactor.ts |
0 |
| β | scripts/preflight/registry.ts |
0 |
| β | .ai/rules/22-kanban-console.md |
|
| β | .claude/commands/ifrs-audit.md |
|
| β | .claude/commands/open-pr.md |
|
| β | .claude/commands/pdpl-audit.md |
|
| β | .codex/commands/orchestrate.md |
|
| β | .codex/commands/plan-status.md |
|
| β | apps/web/src/routes/kanban.tsx |
0 |
| β | scripts/ai-loop/pr-metadata.ts |
0 |
| β | scripts/preflight/fix/apply.ts |
0 |
| β | scripts/preflight/runner.ts |
0 |
| β | .ai/rules/15-pdpl-compliance.md |
|
| β | .ai/rules/19-ifrs-compliance.md |
|
| β | .ai/rules/20-environments.md |
|
| β | .claude/commands/orchestrate.md |
|
| β | .claude/commands/plan-status.md |
|
| β | .codex/commands/execute-task.md |
|
| β | .codex/commands/init-project.md |
|
| β | .codex/commands/user-stories.md |
|
| β | .github/workflows/ai-review.yml |
|
| β | scripts/ai-loop/normalize.ts |
0 |
| β | scripts/ai-loop/router-logic.ts |
0 |
| β | .claude/commands/execute-task.md |
|
| β | .claude/commands/init-project.md |
|
| β | scripts/check-pr-readiness.sh |
|
| β | scripts/preflight/output/json.ts |
|
| β | scripts/tests/ai-loop.spec.ts |
|
| β | .ai/rules/14-secret-management.md |
|
| β | .codex/commands/security-audit.md |
|
| β | scripts/ai-loop/executor-state.ts |
0 |
| β | scripts/preflight/secret-cache.ts |
|
| β | scripts/sync-codex-commands.ts |
0 |
| β | .claude/commands/security-audit.md |
|
| β | .github/workflows/pr-readiness.yml |
|
| β | scripts/preflight/checks/env.ts |
0 |
| β | .ai/rules/21-agent-orchestration.md |
|
| β | .claude/commands/user-stories.md |
|
| β | .github/workflows/ai-fix-router.yml |
|
| β | scripts/preflight/checks/support.ts |
0 |
| β | scripts/preflight/fix/post-write.ts |
|
| β | scripts/preflight/version-policy.ts |
0 |
| β | .ai/rules/17-aws-well-architected.md |
|
| β | apps/web/src/kanbanConsoleMock.ts |
0 |
| β | scripts/preflight/checks/stack.ts |
0 |
| β | scripts/preflight/output/markdown.ts |
|
| β | scripts/preflight/output/terminal.ts |
0 |
| β | scripts/sync-codex-environment.ts |
0 |
| β | scripts/tests/port-policy.spec.ts |
|
| β | scripts/preflight/fix/guided-fetch.ts |
0 |
| β | scripts/preflight/fix/provider-cli.ts |
|
| β | .codex/commands/upgrade-multitenant.md |
|
| β | scripts/preflight/fix/auto-generate.ts |
0 |
| β | scripts/preflight/fix/env-bootstrap.ts |
0 |
| β | scripts/preflight/latest-versions.json |
|
| β | scripts/preflight/non-secret-keys.json |
|
| β | scripts/preflight/project-md-schema.ts |
0 |
| β | scripts/verify-template-adoption.sh |
|
| β | .claude/commands/upgrade-multitenant.md |
|
| β | .codex/commands/extract-pr-learnings.md |
|
| β | .codex/environments/environment.toml |
|
| β | scripts/preflight/fix/auto-derive.ts |
0 |
| β | .claude/commands/extract-pr-learnings.md |
|
| β | apps/web/src/kanbanConsoleMock.test.ts |
|
| β | docs/tasks/t3-kanban-project-console.md |
|
| β | packages/contracts/src/kanbanConsole.ts |
|
| β | scripts/preflight/checks/integrations.ts |
0 |
| β | scripts/preflight/markdown-services-table.ts |
|
| β | scripts/tsconfig.json |
|
| β | vitest.config.ts |
|
| β | apps/server/src/kanban/GitStatusProvider.ts |
0 |
| β | scripts/preflight/checks/env/sync-env-guard.ts |
0 |
| β | .github/workflows/ai-fix-executor-claude.yml |
|
| β | packages/contracts/src/kanbanConsole.test.ts |
|
| β | apps/web/src/components/KanbanConsoleMock.tsx |
0 |
| β | .agents/skills/source-command-ifrs-audit/SKILL.md |
|
| β | .agents/skills/source-command-pdpl-audit/SKILL.md |
|
| β | apps/server/src/kanban/AgentWorkflowLauncher.ts |
0 |
| β | apps/server/src/kanban/GitHubProjectsProvider.ts |
0 |
| β | apps/server/src/kanban/GitStatusProvider.test.ts |
|
| β | apps/web/src/components/KanbanConsoleMock.browser.tsx |
0 |
| β | packages/contracts/src/index.ts |
|
| β | apps/server/src/kanban/AgentWorkflowLauncher.test.ts |
|
| β | apps/server/src/kanban/GitHubProjectsProvider.test.ts |
|
| β | .github/workflows/ci.yml |
|
| β | apps/web/src/routes/_chat.index.tsx |
0 |
| β | bun.lock |
|
| β | AGENTS.md |
|
| β | apps/web/src/routeTree.gen.ts |
|
| β | .github/pull_request_template.md |
Filtered Issues Details
apps/server/src/kanban/GitHubProjectsProvider.ts
- line 191: In
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
- line 535: The
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
- line 53: The config file path defaults to
.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
- line 56: The function checks
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
- line 181: The
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
- line 35: The checks for
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 ]
Loading