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: 1146eeb875
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2e07df3ded
ℹ️ 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".
| const filenames = new Map(selected.map(element => [element.id, element.sourceFilename])) | ||
| const rows = selectedRelationships(model, ids) | ||
| const files = new Map<string, string>() | ||
| files.set('plan.md', sourceWithFrontmatter({ type: PLAN_TYPE, title: path.basename(to) }, '\n\nArchitecture to implement.\n')) |
There was a problem hiding this comment.
Reject plan names that collide with bundled IDs
When the output directory's basename normalizes to one of the selected IDs—for example, groma plan export checkout --to ../checkout—this writes a bundle that cannot be imported even into an empty project: requireFreeIds derives the draft ID checkout from this title and then rejects it because the bundle already contains that element ID. Validate the title-derived draft ID during export so a successful export is not inherently unusable.
AGENTS.md reference: AGENTS.md:L265-L267
Useful? React with 👍 / 👎.
| id: flow.id, title: flow.title, description: flow.description, overview: escapeMarkdownText(flow.overview), | ||
| steps: `| From | To | Action |\n| --- | --- | --- |\n${rows.join('\n')}`, |
There was a problem hiding this comment.
Preserve literal block markers in flow overviews
When a valid flow overview contains literal block-leading text—for example, Markdown source \# Not a heading—resolveFlows decodes it to # Not a heading, but this call escapes only inline syntax before re-emitting it. The exported plan therefore contains an actual level-one heading and import rejects it, while escaped list or blockquote markers silently change the overview structure. Preserve the overview Markdown or also escape block syntax at line starts so exporting a valid flow cannot produce an invalid or semantically changed bundle.
AGENTS.md reference: AGENTS.md:L265-L267
Useful? React with 👍 / 👎.
| if (isInside(filesystem.absolute(), to)) { | ||
| throw new Error(`"${input.to}" is inside ${filesystem.directory}/, where a plan would be read as architecture`) |
There was a problem hiding this comment.
Refuse export into the alternate Groma root
When a repository currently uses groma/, exporting to .groma or a child such as .groma/plans/x passes this check because it only compares against the active root; the reverse occurs when .groma/ is active. The successful export creates the alternate recognized architecture directory, after which every command fails with Both groma/ and .groma/ exist. Reject destinations inside either reserved root when that path is within the repository.
AGENTS.md reference: AGENTS.md:L265-L267
Useful? React with 👍 / 👎.
Implements TASK-562.
groma plan export <ids...> --to <directory>writes a plan: an OKF bundle with the selected elements as drafts, the relationships between them as draft rows, and the flows that lie entirely inside the selection. Parents outside the selection are named by id only.groma plan import <directory> [--parent <id>]brings the plan into another repository as ghosts under one draft record named after the plan. A colliding id or a missing parent fails the whole import before anything is written.On the live web map, a multi-selection of components offers Export as plan next to Group as and Combine into.
groma planon its own explains what a plan is, anddocs/plans.mdwalks through an example. The component Markdown contract describes the bundle.A Codex agent (GPT-6.1 Sol) built this live during the Devoxx Belgium keynote on 9 October, working TASK-562 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.
Acceptance criteria, as the agent left them
The agent left the browser export unticked: it verified the CLI round trip on a fixture, but not the button in a browser.
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, no new warnings.Overlap with the other PRs from this run
map-session.ts,data.ts,write-commands.ts,organisms/writes.tsand the component Markdown contract are shared with other PRs from the same run. Each adds separate lines or sections.