Repository navigation
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Groma architecture comparison
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3b9be4053f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| dependencies: InitCommandDependencies, | ||
| ): Promise<void> { | ||
| if (status === 'initialized' || status === 'unchanged') return | ||
| if ((await readScannerConfig(repositoryRoot)).workSources?.length) return |
There was a problem hiding this comment.
Report initialization failures for selected Backlog sources
When plugins.json already selects Backlog and initializeAvailableBacklog returns failed, this early return prevents the following failure branch from showing its error. Consequently, a rerun of interactive groma init reports successful completion even though the selected work source could not be initialized; handle failed before short-circuiting an existing selection.
Useful? React with 👍 / 👎.
| if (config.useGitignore !== undefined && typeof config.useGitignore !== 'boolean') { | ||
| throw new Error(`${sourceFilename} useGitignore must be true or false`) | ||
| } | ||
| const workSources = configuredWorkSources(config.workSources, sourceFilename) |
There was a problem hiding this comment.
Reject IDs shared across plugin kinds
A hand-authored plugins.json can give a scanner the valid ID backlog while also selecting the backlog work source, because the duplicate-ID check below only iterates scanners after workSources is parsed. The settings and management APIs identify entries only by ID—removePlugin('backlog'), for example, always removes the work source first—so the scanner row cannot be managed reliably; validate IDs across both sections as the add commands already do.
Useful? React with 👍 / 👎.
| options: StartViewerOptions = {}, | ||
| ): Promise<TerminalViewer> { | ||
| const workSource = options.workSource ?? backlogPlugin.create(repositoryRoot) | ||
| const workSource = await workSourceSession(repositoryRoot, options.workSource) |
There was a problem hiding this comment.
Remove documentation of the embedded Backlog default
The hosts now load a work source only through plugins.json, but the unchanged product documentation still says they use an embedded Backlog plugin by default (docs/viewers/creating-a-plugin.md:70-77, docs/viewers/index.md:37-42, docs/product-model.md:356-366, and docs/scanners/index.md:82-84). A developer following those pages will expect Backlog tasks whenever the CLI is installed, which directly contradicts this change's opt-in behavior; update these descriptions to explain explicit selection.
AGENTS.md reference: AGENTS.md:L80-L82
Useful? React with 👍 / 👎.
Implements TASK-568. Plugins are now explicit.
groma/plugins.jsonreplacesscanners.json, with ascannerssection (same entries and validation as before) and aworkSourcessection. Nothing loads unless the file lists it, so groma.md no longer calls the Backlog.md CLI just because it is on the PATH.The Backlog adapter becomes an installable package like the scanners, with found, missing or blocked readiness and a version check. New
groma plugin add|list|remove|install|updatecommands manage every kind, and the scanner commands keep working. The web and terminal settings group plugins by kind, andgroma initrecords Backlog.md when you choose it. There is no migration code, as AGENTS.md asks: this repository'sscanners.jsonis converted, and so is the one test fixture that had one.A Codex agent (GPT-6.1 Sol) built this live during the Devoxx Belgium keynote on 9 October, working TASK-568 in one checkout it shared with five other agents. This branch holds only this task's changes: I matched every changed line to the agent session that wrote it and rebuilt the task on a fresh branch from main.
groma/plugins.jsonis regenerated from main's scanner list, because the demo branch had kept only the TypeScript scanner.TASK-561 (icon packs, #118) builds on this plugin system and is stacked on this PR.
Acceptance criteria, as the agent left them
Validation
On stage the agents were told not to install, build or run tests, so these are the first runs of this code.
bun run typecheckpasses.biome lint: no errors. Two new cognitive-complexity warnings, inconfig.tsand the web scanner settings.groma initthat chooses Backlog.md.scanners.jsonis still open.Overlap with the other PRs from this run
src/viewers/web/map-session.tsis shared with the plans (#120), playback (#121) and metrics (#123) PRs, andsrc/cli.tswith the criticality PR (#122). Each adds separate lines. If this lands after the criticality PR (#122),groma lintshould switch from the Backlog adapter toloadWorkSource, as that agent's final version did.