Skip to content

feat(web): add a read-only SubmitQueue web UI as a mountable module - #810

Open
behinddwalls wants to merge 1 commit into
mainfrom
preetam/web-ui
Open

behinddwalls wants to merge 1 commit into
mainfrom
preetam/web-ui

Conversation

@behinddwalls

@behinddwalls behinddwalls commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Why?

SubmitQueue has no browser UI, and deployers need one they can mount in their own web stack without forking it.

What?

  • web/submitqueue: the UI as one mountable package (routes, controllers, pages, styles, polling, cursor signing) behind a single handle(path) entry, free of generated protos, transports, and web frameworks. Change pages that scan the receipt window refresh on request instead of polling.
  • web/service/submitqueue: the Next.js reference host and its wiring, with a Bazel-built image in the local stack.
  • web/api: private generated gateway bindings for the host and the e2e test.
  • doc/rfc/web-ui.md: URL, UX, and boundary decisions.
  • CI: failed jobs also upload Bazel test outputs (Playwright traces, compose logs), not just test.log.

Test Plan

✅ make web-check
✅ make web-e2e-test
✅ make lint, make check-gazelle, and make check-tidy

Try it locally

Requires Docker; Bazel brings its own Node.

make local-submitqueue-start   # builds and starts the full stack, then prints the web URL
make demo-requests             # submits a few requests to browse
make local-stop                # tears the stack down

Open the printed URL and sign in as test / test. Start at the queue directory, open a queue, then a request's Summary and History tabs, and follow a change link to its submission history. make web-e2e-test runs the same flows headlessly.

🤖 Generated with Claude Code

@behinddwalls
behinddwalls force-pushed the preetam/web-ui branch 2 times, most recently from ff7dde6 to ab0ebb8 Compare October 7, 2026 21:35
@behinddwalls
behinddwalls marked this pull request as ready for review October 7, 2026 21:36
@behinddwalls
behinddwalls requested review from a team and sbalabanov as code owners October 7, 2026 21:36
behinddwalls added a commit that referenced this pull request Oct 8, 2026
…oreview

## Summary

### Why?

Recent sessions kept getting the same corrections in review: speculative packages and adapters, homegrown wrappers, host code in the library, framework layouts, non-Bazel tooling, re-encoded IDs, internal names in a public repo, and separate CI workflows. Autoreview also never ran its architecture or correctness lenses on TypeScript, because `.ts`/`.tsx` files classified as `other`.

### What?

- `AGENTS.md`: new **Design Defaults** section, aligned with the decisions in the web UI RFC (#810), plus CI credential/workflow rules, naming and doc-concision bullets, and stack/test-plan commit guidance.
- `review-scope.py`: new `web` kind (`.ts`, `.tsx`, `.js`, `.css`; `*.test.*` as tests), and `internal-reference` and `new-workflow` smells.
- `review.md` / `lenses.md`: route `web` to all code lenses; treat unneeded added surface as should-fix; add checks for each design default; sweep commit messages for internal names; skip data-migration findings for OSS deployments.

## Test Plan

✅ `bazel test //.agents/skills/autoreview/scripts:all`
✅ `make fmt` leaves the tree unchanged
behinddwalls added a commit that referenced this pull request Oct 8, 2026
…oreview

## Summary

### Why?

Recent sessions kept getting the same corrections in review: speculative packages and adapters, homegrown wrappers, host code in the library, framework layouts, non-Bazel tooling, re-encoded IDs, internal names in a public repo, and separate CI workflows. Autoreview also never ran its architecture or correctness lenses on TypeScript, because `.ts`/`.tsx` files classified as `other`.

### What?

- `AGENTS.md`: new **Design Defaults** section, aligned with the decisions in the web UI RFC (#810), plus CI credential/workflow rules, naming, RFCs-describe-main, and doc-concision bullets, and stack/test-plan commit guidance.
- `review-scope.py`: new `web` kind (`.ts`, `.tsx`, `.js`, `.css`; `*.test.*` as tests), and `internal-reference` and `new-workflow` smells.
- `review.md` / `lenses.md`: route `web` to all code lenses; treat unneeded added surface as should-fix; add checks for each design default; sweep commit messages for internal names; skip data-migration findings for OSS deployments.

## Test Plan

✅ `bazel test //.agents/skills/autoreview/scripts:all`
✅ `make fmt` leaves the tree unchanged
behinddwalls added a commit that referenced this pull request Oct 8, 2026
…n's design

## Summary

### Why?

Recent sessions kept getting the same review corrections: speculative packages and adapters, homegrown wrappers, host code in the library, framework layouts, non-Bazel tooling, re-encoded IDs, internal names in a public repo, separate CI workflows, and RFCs that describe discussion rather than main. Autoreview also never ran its architecture or correctness lenses on TypeScript, because `.ts`/`.tsx` files classified as `other`. One such RFC already exists: queue-scoped decimal IDs shipped (#770, #804), but the decision still lived in a standalone "current vs proposed" RFC.

### What?

- `AGENTS.md`: new **Design Defaults** section, aligned with the web UI RFC (#810); CI credential and workflow rules; naming, RFCs-describe-main, and concise-docs bullets; ask before splitting a large change into a stack; local run steps in the Test Plan.
- Autoreview `review-scope.py`: new `web` kind (`.ts`, `.tsx`, `.js`, `.css`; `*.test.*` as tests), and `internal-reference` and `new-workflow` smells.
- Autoreview `review.md` / `lenses.md`: route `web` to all code lenses; treat unneeded added surface as should-fix; add checks for each design default and for RFCs that diverge from main; sweep commit messages for internal names; skip data-migration findings for OSS deployments.
- RFCs: add a **Resource IDs** section to `doc/rfc/submitqueue/workflow.md`, delete `doc/rfc/scoped-resource-ids.md` and its index entry, and fix stale ID text in the history, list, and Stovepipe workflow RFCs.

## Test Plan

✅ `bazel test //.agents/skills/autoreview/scripts:all`
✅ `bazel test //tool/docsite:site_test` (strict link check)
✅ `make fmt` leaves the tree unchanged
behinddwalls added a commit that referenced this pull request Oct 8, 2026
…n's design

## Summary

### Why?

Recent sessions kept getting the same review corrections: speculative packages and adapters, homegrown wrappers, host code in the library, framework layouts, non-Bazel tooling, re-encoded IDs, internal names in a public repo, separate CI workflows, and RFCs that describe discussion rather than main. Autoreview also never ran its architecture or correctness lenses on TypeScript, because `.ts`/`.tsx` files classified as `other`. One such RFC already exists: queue-scoped decimal IDs shipped (#770, #804), but the decision still lived in a standalone "current vs proposed" RFC.

### What?

- `AGENTS.md`: new **Design Defaults** section, aligned with the web UI RFC (#810); CI credential and workflow rules; naming, RFCs-describe-main, and concise-docs bullets; ask before splitting a large change into a stack; local run steps in the Test Plan.
- Autoreview `review-scope.py`: new `web` kind (`.ts`, `.tsx`, `.js`, `.css`; `*.test.*` as tests), and `internal-reference` and `new-workflow` smells.
- Autoreview `review.md` / `lenses.md`: route `web` to all code lenses; treat unneeded added surface as should-fix; add checks for each design default and for RFCs that diverge from main; sweep commit messages for internal names; skip data-migration findings for OSS deployments.
- RFCs: add a **Resource IDs** section to `doc/rfc/submitqueue/workflow.md`, delete `doc/rfc/scoped-resource-ids.md` and its index entry, fix stale ID text in the history and Stovepipe workflow RFCs, delete the superseded SubmitQueue `list-api.md` proposal (shipped as `status-list-api.md`), and describe the implemented Stovepipe List API as current rather than proposed.

## Test Plan

✅ `bazel test //.agents/skills/autoreview/scripts:all`
✅ `bazel test //tool/docsite:site_test` (strict link check)
✅ `make fmt` leaves the tree unchanged
behinddwalls added a commit that referenced this pull request Oct 8, 2026
…n's design

## Summary

### Why?

Recent sessions kept getting the same review corrections: speculative packages and adapters, homegrown wrappers, host code in the library, framework layouts, non-Bazel tooling, re-encoded IDs, internal names in a public repo, separate CI workflows, and RFCs that describe discussion rather than main. Autoreview also never ran its architecture or correctness lenses on TypeScript, because `.ts`/`.tsx` files classified as `other`. One such RFC already exists: queue-scoped decimal IDs shipped (#770, #804), but the decision still lived in a standalone "current vs proposed" RFC.

### What?

- `AGENTS.md`: new **Design Defaults** section, aligned with the web UI RFC (#810); CI credential and workflow rules; naming, RFCs-describe-main, and concise-docs bullets; ask before splitting a large change into a stack; local run steps in the Test Plan.
- Autoreview `review-scope.py`: new `web` kind (`.ts`, `.tsx`, `.js`, `.css`; `*.test.*` as tests), and `internal-reference` and `new-workflow` smells.
- Autoreview `review.md` / `lenses.md`: route `web` to all code lenses; treat unneeded added surface as should-fix; add checks for each design default and for RFCs that diverge from main; sweep commit messages for internal names; skip data-migration findings for OSS deployments.
- RFCs: add a **Resource IDs** section to `doc/rfc/submitqueue/workflow.md`, delete `doc/rfc/scoped-resource-ids.md` and its index entry, fix stale ID text in the history and Stovepipe workflow RFCs, delete the superseded SubmitQueue `list-api.md` proposal (shipped as `status-list-api.md`), and describe the implemented Stovepipe List API as current rather than proposed.

## Test Plan

✅ `bazel test //.agents/skills/autoreview/scripts:all`
✅ `bazel test //tool/docsite:site_test` (strict link check)
✅ `make fmt` leaves the tree unchanged
behinddwalls added a commit that referenced this pull request Oct 8, 2026
…n's design

## Summary

### Why?

Recent sessions kept getting the same review corrections: speculative packages and adapters, homegrown wrappers, host code in the library, framework layouts, non-Bazel tooling, re-encoded IDs, internal names in a public repo, separate CI workflows, and RFCs that describe discussion rather than main. Autoreview also never ran its architecture or correctness lenses on TypeScript, because `.ts`/`.tsx` files classified as `other`. One such RFC already exists: queue-scoped decimal IDs shipped (#770, #804), but the decision still lived in a standalone "current vs proposed" RFC.

### What?

- `AGENTS.md`: new **Design Defaults** section, aligned with the web UI RFC (#810); CI credential and workflow rules; naming, RFCs-describe-main, and concise-docs bullets; ask before splitting a large change into a stack; local run steps in the Test Plan.
- Autoreview `review-scope.py`: new `web` kind (`.ts`, `.tsx`, `.js`, `.css`; `*.test.*` as tests), and `internal-reference` and `new-workflow` smells.
- Autoreview dispatch: the parent runs a planner, one lens reviewer per assignment in parallel, and a consolidator, because subagents cannot start their own. Committed targets are reviewed in a clean detached worktree so local edits never skip checks, and every readable changed file must appear in some reviewer's Read list or the report marks it unreviewed.
- Autoreview `review.md` / `lenses.md`: route `web` to all code lenses; treat unneeded added surface as should-fix; add checks for each design default and for RFCs that diverge from main; sweep commit messages for internal names; skip data-migration findings for OSS deployments.
- RFCs: add a **Resource IDs** section to `doc/rfc/submitqueue/workflow.md`, delete `doc/rfc/scoped-resource-ids.md` and its index entry, fix stale ID text in the history and Stovepipe workflow RFCs, delete the superseded SubmitQueue `list-api.md` proposal (shipped as `status-list-api.md`), and describe the implemented Stovepipe List API as current rather than proposed.

## Test Plan

✅ `bazel test //.agents/skills/autoreview/scripts:all`
✅ `bazel test //tool/docsite:site_test` (strict link check)
✅ `make fmt` leaves the tree unchanged
behinddwalls added a commit that referenced this pull request Oct 8, 2026
…n's design

## Summary

### Why?

Recent sessions kept getting the same review corrections: speculative packages and adapters, homegrown wrappers, host code in the library, framework layouts, non-Bazel tooling, re-encoded IDs, internal names in a public repo, separate CI workflows, and RFCs that describe discussion rather than main. Autoreview also never ran its architecture or correctness lenses on TypeScript, because `.ts`/`.tsx` files classified as `other`. One such RFC already exists: queue-scoped decimal IDs shipped (#770, #804), but the decision still lived in a standalone "current vs proposed" RFC.

### What?

- `AGENTS.md`: new **Design Defaults** section, aligned with the web UI RFC (#810); CI credential and workflow rules; naming, RFCs-describe-main, and concise-docs bullets; ask before splitting a large change into a stack; local run steps in the Test Plan.
- Autoreview `review-scope.py`: new `web` kind (`.ts`, `.tsx`, `.js`, `.css`; `*.test.*` as tests), and `internal-reference` and `new-workflow` smells.
- Autoreview dispatch: the parent runs a planner, one lens reviewer per assignment in parallel, and a consolidator, because subagents cannot start their own. Committed targets are reviewed in a clean detached worktree so local edits never skip checks, and every readable changed file must appear in some reviewer's Read list or the report marks it unreviewed.
- Autoreview `review.md` / `lenses.md`: route `web` to all code lenses; treat unneeded added surface as should-fix; add checks for each design default and for RFCs that diverge from main; sweep commit messages for internal names; skip data-migration findings for OSS deployments.
- RFCs: add a **Resource IDs** section to `doc/rfc/submitqueue/workflow.md`, delete `doc/rfc/scoped-resource-ids.md` and its index entry, fix stale ID text in the history and Stovepipe workflow RFCs, delete the superseded SubmitQueue `list-api.md` proposal (shipped as `status-list-api.md`), and describe the implemented Stovepipe List API as current rather than proposed.

## Test Plan

✅ `bazel test //.agents/skills/autoreview/scripts:all`
✅ `bazel test //tool/docsite:site_test` (strict link check)
✅ `make fmt` leaves the tree unchanged
behinddwalls added a commit that referenced this pull request Oct 8, 2026
…n's design

## Summary

### Why?

Recent sessions kept getting the same review corrections: speculative packages and adapters, homegrown wrappers, host code in the library, framework layouts, non-Bazel tooling, re-encoded IDs, internal names in a public repo, separate CI workflows, and RFCs that describe discussion rather than main. Autoreview also never ran its architecture or correctness lenses on TypeScript, because `.ts`/`.tsx` files classified as `other`. One such RFC already exists: queue-scoped decimal IDs shipped (#770, #804), but the decision still lived in a standalone "current vs proposed" RFC.

### What?

- `AGENTS.md`: new **Design Defaults** section, aligned with the web UI RFC (#810); CI credential and workflow rules; naming, RFCs-describe-main, and concise-docs bullets; ask before splitting a large change into a stack; local run steps in the Test Plan.
- Autoreview `review-scope.py`: new `web` kind (`.ts`, `.tsx`, `.js`, `.css`; `*.test.*` as tests), and `internal-reference` and `new-workflow` smells.
- Autoreview dispatch: the parent runs a planner, one lens reviewer per assignment in parallel, and a consolidator, because subagents cannot start their own. Committed targets are reviewed in a clean detached worktree so local edits never skip checks, and every readable changed file must appear in some reviewer's Read list or the report marks it unreviewed. Coverage is counted from Read/Partial/Unread buckets rather than judged, and every finding must be re-opened at its cited line before it is admitted, with a recheck log in the report.
- Autoreview `review.md` / `lenses.md`: route `web` to all code lenses; treat unneeded added surface as should-fix; add checks for each design default and for RFCs that diverge from main; sweep commit messages for internal names; skip data-migration findings for OSS deployments.
- RFCs: add a **Resource IDs** section to `doc/rfc/submitqueue/workflow.md`, delete `doc/rfc/scoped-resource-ids.md` and its index entry, fix stale ID text in the history and Stovepipe workflow RFCs, delete the superseded SubmitQueue `list-api.md` proposal (shipped as `status-list-api.md`), and describe the implemented Stovepipe List API as current rather than proposed.

## Test Plan

✅ `bazel test //.agents/skills/autoreview/scripts:all`
✅ `bazel test //tool/docsite:site_test` (strict link check)
✅ `make fmt` leaves the tree unchanged
## Summary

### Why?

SubmitQueue has no browser UI, and deployers need one they can mount in their own web stack without forking it.

### What?

- `web/submitqueue`: the UI as one mountable package (routes, controllers, pages, styles, polling, cursor signing) behind a single `handle(path)` entry, free of generated protos, transports, and web frameworks. Change pages that scan the receipt window refresh on request instead of polling.
- `web/service/submitqueue`: the Next.js reference host and its wiring, with a Bazel-built image in the local stack.
- `web/api`: private generated gateway bindings for the host and the e2e test.
- `doc/rfc/web-ui.md`: URL, UX, and boundary decisions.
- CI: failed jobs also upload Bazel test outputs (Playwright traces, compose logs), not just `test.log`.

## Test Plan

✅ `make web-check`
✅ `make web-e2e-test`
✅ `make lint`, `make check-gazelle`, and `make check-tidy`

### Try it locally

Requires Docker; Bazel brings its own Node.

```bash
make local-submitqueue-start   # builds and starts the full stack, then prints the web URL
make demo-requests             # submits a few requests to browse
make local-stop                # tears the stack down
```

Open the printed URL and sign in as `test` / `test`. Start at the queue directory, open a queue, then a request's Summary and History tabs, and follow a change link to its submission history. `make web-e2e-test` runs the same flows headlessly.

This branch has not been deployed

No deployments
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