Skip to content

feat(cli): the directory form is the one layout (X_LAYOUT_SIBLING_MODULE); both tracked apps migrated (#710 row 10) - #744

Merged
sebyx07 merged 5 commits into
mainfrom
feat/710-one-generator-layout
Oct 9, 2026
Merged

sebyx07 merged 5 commits into
mainfrom
feat/710-one-generator-layout

Conversation

@sebyx07

@sebyx07 sebyx07 commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Row 10 of #710 (owner decision 10): the generator's directory form is the one layout.

The refusal. x verify's boundaries step refuses a module X.ts beside a directory X/ in an app's surfaces — X_LAYOUT_SIBLING_MODULE (registered with scripts/new-error-code.ts: error-codes.ts, wiki/Error-Codes.md, mcp-errors.ts). ./actions resolves to the file and never the directory, so two homes for one kind of thing disagree silently. packages/cli/src/app-layout.ts, wired into appBoundaryFindings; tests at the function and at the step.

Both tracked apps migrated. Every flat primitive file is split one primitive per file into its kind's directory, named for the export in kebab case — actions/ (actions, mutators, a transition(), llm()/agent()/hive(), pushSubscribe()), live/ (live: true) and queries/, jobs/ (every job factory but backfill(), which keeps backfills/), tasks/:

  • examples/dummy: 56 primitives out of 19 files; api/tasks.ts's two tasks moved into digest/tasks/ and mcp/tasks/; api/index.ts registers module by module. A helper used by one primitive moved with it; constants other modules import stay exported from the primitive's file.
  • dummy/social-media-clone: 11 primitives out of 7 files; the friends slice's shared output schemas moved to friends/views.ts, the tasks slice's instant helpers to tasks/instant.ts; api/tasks.ts lists the four modules.
  • One behavioural fix the move needed: syncConnection's recorded site is ${import.meta.dir}/../fixtures now that the job sits one directory deeper.
  • Comments, READMEs, CLAUDE.md files and wiki pages that named the old files point at the new ones. Three schema files keep their comment as written: the app's schema hash covers source text, so editing them would demand a migration.

Docs: docs/architecture/12-generated-app.md:126 (the line #710 names), 15-adding-a-feature.md, wiki/Project-Layout.md, wiki/Actions.md, wiki/Policies-And-Authz.md.

Both app gates green locally: examples/dummy 20/20, social-media-clone 20/20. 157 files, nearly all mechanical moves.

🤖 Generated with Claude Code

…DULE; both tracked apps migrated (#710 row 10)

x verify's boundaries step refuses a module X.ts beside a directory X/.
examples/dummy's and the demo's flat actions/jobs/live/mutator files are
split one primitive per file into actions/, live/, queries/, jobs/ and
tasks/, registered module by module; docs say the directory form is the
one layout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 158 files, which is 8 over the limit of 150.

To get a review, reduce the PR to 150 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to Team to raise the limit.

The included review limit has been reached and this organization has disabled usage-based review continuation. Wait for reviews to reset or ask a billing admin to change After included review limits.

Check out review usage here.

  • Ask an admin to enable usage-based reviews

Open in CodeRabbit

Reviews can continue after your included limit without a manual trigger. An admin must approve usage-based billing.

⚙️ Run configuration
  • Configuration used: Repository: developerz-ai/ultimate/.coderabbit.yml
  • Review profile: ASSERTIVE
  • Plan: Essentials
  • Run ID: 069433a6-cb4a-4db9-9baf-d685833e29d1

📥 Commits

Reviewing files that changed from the base of the PR and between d039c6a and 0852a25.


📒 Files selected for processing (158)
  • CHANGELOG.md
  • README.md
  • docs/architecture/12-generated-app.md
  • docs/architecture/15-adding-a-feature.md
  • dummy/social-media-clone/.claude/agents/web-dev.md
  • dummy/social-media-clone/.claude/commands/planx.md
  • dummy/social-media-clone/apps/web/README.md
  • dummy/social-media-clone/apps/web/api/tasks.ts
  • dummy/social-media-clone/apps/web/app/friends/actions.ts
  • dummy/social-media-clone/apps/web/app/friends/actions/block-user.ts
  • dummy/social-media-clone/apps/web/app/friends/actions/request-friend.ts
  • dummy/social-media-clone/apps/web/app/friends/actions/respond-friend.ts
  • dummy/social-media-clone/apps/web/app/friends/actions/unblock-user.ts
  • dummy/social-media-clone/apps/web/app/friends/views.ts
  • dummy/social-media-clone/apps/web/app/messages/action.test.ts
  • dummy/social-media-clone/apps/web/app/messages/actions/send-message.ts
  • dummy/social-media-clone/apps/web/app/messages/live.test.ts
  • dummy/social-media-clone/apps/web/app/messages/live/live-thread.ts
  • dummy/social-media-clone/apps/web/app/messages/topics.ts
  • dummy/social-media-clone/apps/web/app/notifications/actions/mark-notifications-read.ts
  • dummy/social-media-clone/apps/web/app/notifications/mutator.test.ts
  • dummy/social-media-clone/apps/web/app/notifications/page.tsx
  • dummy/social-media-clone/apps/web/app/notifications/queries/inbox.ts
  • dummy/social-media-clone/apps/web/app/notifications/topics.ts
  • dummy/social-media-clone/apps/web/app/tasks/errors.ts
  • dummy/social-media-clone/apps/web/app/tasks/instant.ts
  • dummy/social-media-clone/apps/web/app/tasks/jobs.test.ts
  • dummy/social-media-clone/apps/web/app/tasks/jobs/reset-demo.ts
  • dummy/social-media-clone/apps/web/app/tasks/jobs/sweep-orphan-media.ts
  • dummy/social-media-clone/apps/web/app/tasks/schedule.test.ts
  • dummy/social-media-clone/apps/web/app/tasks/tasks/hourly-demo-reset.ts
  • dummy/social-media-clone/apps/web/app/tasks/tasks/hourly-media-sweep.ts
  • examples/dummy/CLAUDE.md
  • examples/dummy/README.md
  • examples/dummy/apps/web/api/index.ts
  • examples/dummy/apps/web/app/auth/actions.test.ts
  • examples/dummy/apps/web/app/auth/actions/end-session.ts
  • examples/dummy/apps/web/app/contact/actions/contact-sales.ts
  • examples/dummy/apps/web/app/contact/jobs/send-sales-receipt.ts
  • examples/dummy/apps/web/app/digest/jobs.job.test.ts
  • examples/dummy/apps/web/app/digest/jobs/deliver-digest.ts
  • examples/dummy/apps/web/app/digest/jobs/send-digest.ts
  • examples/dummy/apps/web/app/digest/tasks/nightly-digest.ts
  • examples/dummy/apps/web/app/feed/live.ts
  • examples/dummy/apps/web/app/layout.tsx
  • examples/dummy/apps/web/app/mcp/jobs.job.test.ts
  • examples/dummy/apps/web/app/mcp/jobs/purge-mcp-confirmations.ts
  • examples/dummy/apps/web/app/mcp/tasks/hourly-purge.ts
  • examples/dummy/apps/web/app/models.test.ts
  • examples/dummy/apps/web/app/orgs/actions.contract.test.ts
  • examples/dummy/apps/web/app/orgs/actions.ts
  • examples/dummy/apps/web/app/orgs/actions/grant-avatar-upload.ts
  • examples/dummy/apps/web/app/orgs/actions/invite-member.ts
  • examples/dummy/apps/web/app/orgs/actions/member-avatar.ts
  • examples/dummy/apps/web/app/orgs/actions/upgrade-plan.ts
  • examples/dummy/apps/web/app/orgs/jobs.job.test.ts
  • examples/dummy/apps/web/app/orgs/jobs/onboard-org.ts
  • examples/dummy/apps/web/app/orgs/jobs/send-invite.ts
  • examples/dummy/apps/web/app/orgs/service.ts
  • examples/dummy/apps/web/app/posts/[id]/page.tsx
  • examples/dummy/apps/web/app/posts/actions.contract.test.ts
  • examples/dummy/apps/web/app/posts/actions.test.ts
  • examples/dummy/apps/web/app/posts/actions.ts
  • examples/dummy/apps/web/app/posts/actions/create-comment.ts
  • examples/dummy/apps/web/app/posts/actions/create-post.ts
  • examples/dummy/apps/web/app/posts/actions/keep-draft-review.ts
  • examples/dummy/apps/web/app/posts/actions/like-post.ts
  • examples/dummy/apps/web/app/posts/actions/move-post-status.ts
  • examples/dummy/apps/web/app/posts/actions/publish-post.ts
  • examples/dummy/apps/web/app/posts/actions/request-draft-review.ts
  • examples/dummy/apps/web/app/posts/actions/request-posts-export.ts
  • examples/dummy/apps/web/app/posts/actions/review-draft.ts
  • examples/dummy/apps/web/app/posts/actions/summarize-posts.ts
  • examples/dummy/apps/web/app/posts/actions/summarize.ts
  • examples/dummy/apps/web/app/posts/channel-ref.ts
  • examples/dummy/apps/web/app/posts/jobs.job.test.ts
  • examples/dummy/apps/web/app/posts/jobs/comment-posted.ts
  • examples/dummy/apps/web/app/posts/jobs/export-posts.ts
  • examples/dummy/apps/web/app/posts/jobs/notify-subscribers.ts
  • examples/dummy/apps/web/app/posts/jobs/review-draft-later.ts
  • examples/dummy/apps/web/app/posts/like-mutation.ts
  • examples/dummy/apps/web/app/posts/live.live.test.ts
  • examples/dummy/apps/web/app/posts/live.page.test.ts
  • examples/dummy/apps/web/app/posts/live.ts
  • examples/dummy/apps/web/app/posts/live/live-feed.ts
  • examples/dummy/apps/web/app/posts/mail.ts
  • examples/dummy/apps/web/app/posts/mcp-drive.contract.test.ts
  • examples/dummy/apps/web/app/posts/mutator.test.ts
  • examples/dummy/apps/web/app/posts/notifiers.job.test.ts
  • examples/dummy/apps/web/app/posts/post-by-id.contract.test.ts
  • examples/dummy/apps/web/app/posts/prompts/review-draft.ts
  • examples/dummy/apps/web/app/posts/prompts/summarize.ts
  • examples/dummy/apps/web/app/posts/public-slugs.contract.test.ts
  • examples/dummy/apps/web/app/posts/queries/feed-activity.ts
  • examples/dummy/apps/web/app/posts/queries/org-posts.ts
  • examples/dummy/apps/web/app/posts/queries/post-by-id.ts
  • examples/dummy/apps/web/app/posts/queries/post-by-slug.ts
  • examples/dummy/apps/web/app/posts/queries/post-record.ts
  • examples/dummy/apps/web/app/posts/queries/post-review.ts
  • examples/dummy/apps/web/app/posts/queries/public-post-slugs.ts
  • examples/dummy/apps/web/app/posts/queries/public-post.ts
  • examples/dummy/apps/web/app/posts/queries/public-posts.ts
  • examples/dummy/apps/web/app/posts/repo.ts
  • examples/dummy/apps/web/app/posts/review.job.test.ts
  • examples/dummy/apps/web/app/runs/actions.test.ts
  • examples/dummy/apps/web/app/runs/actions.ts
  • examples/dummy/apps/web/app/runs/actions/answer-prompt.ts
  • examples/dummy/apps/web/app/runs/actions/cancel-run.ts
  • examples/dummy/apps/web/app/runs/actions/connect-site.ts
  • examples/dummy/apps/web/app/runs/actions/issue-run-key.ts
  • examples/dummy/apps/web/app/runs/actions/revoke-run-key.ts
  • examples/dummy/apps/web/app/runs/actions/start-run.ts
  • examples/dummy/apps/web/app/runs/jobs.test.ts
  • examples/dummy/apps/web/app/runs/jobs/sync-connection.ts
  • examples/dummy/apps/web/app/runs/live.live.test.ts
  • examples/dummy/apps/web/app/runs/live.test.ts
  • examples/dummy/apps/web/app/runs/live/live-run-events.ts
  • examples/dummy/apps/web/app/runs/queries/run-connections.ts
  • examples/dummy/apps/web/app/runs/runs.contract.test.ts
  • examples/dummy/apps/web/app/runs/runs.job.test.ts
  • examples/dummy/apps/web/app/runs/runs.test.ts
  • examples/dummy/apps/web/app/runs/service.ts
  • examples/dummy/apps/web/app/settings/actions.contract.test.ts
  • examples/dummy/apps/web/app/settings/actions.ts
  • examples/dummy/apps/web/app/settings/actions/save-preferences.ts
  • examples/dummy/apps/web/app/settings/actions/set-theme.ts
  • examples/dummy/apps/web/app/settings/actions/subscribe-push.ts
  • examples/dummy/apps/web/app/settings/actions/toggle-digest-opt-in.ts
  • examples/dummy/apps/web/app/settings/actions/unsubscribe-push.ts
  • examples/dummy/apps/web/app/settings/mutator.test.ts
  • examples/dummy/apps/web/app/settings/mutator.ts
  • examples/dummy/apps/web/app/webhooks/actions.ts
  • examples/dummy/apps/web/app/webhooks/actions/add-webhook-endpoint.ts
  • examples/dummy/apps/web/app/webhooks/actions/remove-webhook-endpoint.ts
  • examples/dummy/apps/web/app/webhooks/endpoints.test.ts
  • examples/dummy/apps/web/app/webhooks/jobs.job.test.ts
  • examples/dummy/apps/web/app/webhooks/jobs/post-published-webhook.ts
  • examples/dummy/apps/web/app/webhooks/service.ts
  • examples/dummy/apps/web/shared/services.ts
  • examples/dummy/apps/web/site/pricing/page.tsx
  • examples/dummy/x.verify.json
  • framework.manifest.json
  • packages/ai/README.md
  • packages/cli/src/app-layout.test.ts
  • packages/cli/src/app-layout.ts
  • packages/cli/src/boundary-findings.test.ts
  • packages/cli/src/boundary-findings.ts
  • packages/cli/src/error-codes.ts
  • packages/cli/src/mcp-errors.ts
  • scripts/primitive-factories-used.test.ts
  • scripts/set-cookie-literals.test.ts
  • scripts/wiki-fences-backlog.ts
  • wiki/Actions.md
  • wiki/Agents.md
  • wiki/Client-Data.md
  • wiki/Error-Codes.md
  • wiki/Policies-And-Authz.md
  • wiki/Project-Layout.md

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

sebyx07 and others added 4 commits October 9, 2026 10:00
…r-layout

# Conflicts:
#	framework.manifest.json
…x g resource writes ui.tsx beside ui/

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sebyx07
sebyx07 merged commit bcf3030 into main Oct 9, 2026
17 checks passed
@sebyx07
sebyx07 deleted the feat/710-one-generator-layout branch October 9, 2026 15:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant