Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
216 commits
Select commit Hold shift + click to select a range
a5b11a4
chore(frontend): open github-like ui draft
rawkode Jun 19, 2026
84fe805
feat(frontend): make repo chrome more familiar
rawkode Jun 19, 2026
7d59149
feat(frontend): add code browser ref controls
rawkode Jun 19, 2026
e85ff8e
feat(frontend): add code browser commit summary
rawkode Jun 19, 2026
82bc018
feat(frontend): add repository about panel
rawkode Jun 19, 2026
7ccb900
feat(frontend): use familiar pull request tabs
rawkode Jun 19, 2026
d0f5afe
feat(frontend): add code browser file filter
rawkode Jun 19, 2026
268df42
feat(frontend): add familiar readme file header
rawkode Jun 19, 2026
0740049
feat(frontend): make readme the repo home tab
rawkode Jun 19, 2026
7ff3887
feat(frontend): focus code filter with slash
rawkode Jun 19, 2026
5d90929
feat(frontend): add code file copy path action
rawkode Jun 19, 2026
d1a24fe
feat(frontend): polish repo tab count badges
rawkode Jun 19, 2026
2d072e8
feat(frontend): spell out pull request chip
rawkode Jun 19, 2026
0324910
feat(frontend): make clone action familiar
rawkode Jun 19, 2026
b53a250
feat(frontend): polish visibility badge
rawkode Jun 19, 2026
f6ef81f
feat(frontend): align about visibility copy
rawkode Jun 19, 2026
e937aec
feat(frontend): polish about metadata labels
rawkode Jun 19, 2026
6a02966
feat(frontend): polish about metadata typography
rawkode Jun 19, 2026
05420eb
feat(frontend): polish repository panel headers
rawkode Jun 19, 2026
01fbb2e
feat(frontend): polish repository metadata chips
rawkode Jun 19, 2026
6a7d9a8
feat(frontend): polish code browser typography
rawkode Jun 19, 2026
0e5a8a6
feat(frontend): show latest commit details in code browser
rawkode Jun 19, 2026
bd366ba
feat(frontend): rely on code breadcrumbs in file view
rawkode Jun 19, 2026
3c11fcf
feat(frontend): simplify code directory list
rawkode Jun 19, 2026
41449f9
feat(frontend): rely on code breadcrumbs for directories
rawkode Jun 19, 2026
110ffa6
feat(frontend): simplify repository header
rawkode Jun 19, 2026
6750e78
feat(frontend): link repository title home
rawkode Jun 19, 2026
83f4eb8
feat(frontend): clarify about code action
rawkode Jun 19, 2026
7e49845
feat(frontend): format repository vcs labels
rawkode Jun 19, 2026
f61c33b
feat(frontend): spell out version control label
rawkode Jun 19, 2026
9ece504
feat(frontend): label recent commit count
rawkode Jun 19, 2026
0325b96
feat(frontend): spell out vcs chip label
rawkode Jun 19, 2026
482fdf8
feat(frontend): clarify projects summary copy
rawkode Jun 19, 2026
ef03110
feat(frontend): clarify project count labels
rawkode Jun 19, 2026
7b6dab4
feat(frontend): humanize project labels
rawkode Jun 19, 2026
baa1cb0
feat(frontend): humanize project root label
rawkode Jun 19, 2026
bf9c89d
feat(frontend): humanize repository rail counts
rawkode Jun 19, 2026
c426f19
feat(frontend): humanize project policy labels
rawkode Jun 19, 2026
11559ca
feat(frontend): polish project quick actions
rawkode Jun 19, 2026
8ce739a
feat(frontend): simplify project switcher tabs
rawkode Jun 19, 2026
6596ed8
feat(frontend): polish project header
rawkode Jun 19, 2026
bf07ae4
feat(frontend): humanize project metadata chips
rawkode Jun 19, 2026
d3299e5
feat(frontend): clarify project summary stats
rawkode Jun 19, 2026
f6db85b
feat(frontend): polish activity stream status
rawkode Jun 19, 2026
7750881
feat(frontend): humanize workspace project rail
rawkode Jun 19, 2026
8a59306
feat(frontend): spell out workspace pull request tile
rawkode Jun 19, 2026
7fafa78
feat(frontend): clarify pull request shortcut copy
rawkode Jun 19, 2026
b7649c2
feat(frontend): simplify workspace navigation command copy
rawkode Jun 19, 2026
ee4e2a7
feat(frontend): humanize command palette search copy
rawkode Jun 19, 2026
3814e42
feat(frontend): clarify command palette empty state
rawkode Jun 19, 2026
09d2c9a
feat(frontend): clarify shortcut overlay repository copy
rawkode Jun 19, 2026
3902c44
feat(frontend): spell out inbox repository copy
rawkode Jun 19, 2026
5cd9f06
feat(extensions): keep pull request detail navigation repo scoped
rawkode Jun 19, 2026
968c7a3
feat(extensions): clarify pull request list search copy
rawkode Jun 19, 2026
19d1da3
feat(frontend): clarify project epic work links
rawkode Jun 19, 2026
b75d9d1
feat(frontend): polish new repository header
rawkode Jun 19, 2026
e00b214
feat(frontend): polish repository directory typography
rawkode Jun 19, 2026
fbc33ee
feat(frontend): polish runtime empty states
rawkode Jun 19, 2026
1017fc7
feat(frontend): polish instance admin shell
rawkode Jun 20, 2026
3ccdc79
feat(frontend): polish admin readiness rows
rawkode Jun 20, 2026
ac131e1
feat(frontend): polish admin service rows
rawkode Jun 20, 2026
56f1729
feat(frontend): polish admin overview runtime
rawkode Jun 20, 2026
872a857
feat(frontend): polish admin storage paths
rawkode Jun 20, 2026
9a57729
feat(frontend): polish admin storage summary
rawkode Jun 20, 2026
c99a616
feat(frontend): polish admin storage backends
rawkode Jun 20, 2026
3c42337
feat(frontend): polish admin access summary
rawkode Jun 20, 2026
234120e
feat(frontend): polish admin access config
rawkode Jun 20, 2026
dd49a22
feat(frontend): polish admin credential store
rawkode Jun 20, 2026
5d23aa6
feat(frontend): polish admin session rows
rawkode Jun 20, 2026
4daf685
feat(frontend): polish admin session counts
rawkode Jun 20, 2026
08d0f23
feat(frontend): polish admin issuer counts
rawkode Jun 20, 2026
837e418
feat(frontend): polish admin unsupported counts
rawkode Jun 20, 2026
a69b02f
feat(frontend): polish admin credential copy
rawkode Jun 20, 2026
b69149c
feat(frontend): polish admin rate limit labels
rawkode Jun 20, 2026
9ea6df8
feat(frontend): polish admin access header copy
rawkode Jun 20, 2026
8283af8
feat(frontend): polish admin access controls label
rawkode Jun 20, 2026
221f237
feat(frontend): polish admin unavailable pages copy
rawkode Jun 20, 2026
1e1e34f
feat(frontend): polish admin credentials title
rawkode Jun 20, 2026
78f29e3
feat(frontend): polish admin sign-in provider copy
rawkode Jun 20, 2026
251af14
feat(frontend): polish admin provider policy labels
rawkode Jun 20, 2026
9d75aff
feat(frontend): polish admin secret status chips
rawkode Jun 20, 2026
7a22916
feat(frontend): polish admin provider refresh action
rawkode Jun 20, 2026
335ea4f
feat(frontend): polish admin session actions
rawkode Jun 20, 2026
f445043
feat(frontend): polish admin session principals
rawkode Jun 20, 2026
8bdb504
feat(frontend): polish admin credentials timestamp
rawkode Jun 20, 2026
df0ec1e
feat(frontend): polish admin configuration card
rawkode Jun 20, 2026
08f95d3
feat(frontend): polish admin unavailable pages
rawkode Jun 20, 2026
32ef3b3
feat(frontend): polish account token generation
rawkode Jun 20, 2026
d8811b9
feat(frontend): polish account ssh key form
rawkode Jun 20, 2026
c7ebd18
feat(frontend): polish account ssh key list
rawkode Jun 20, 2026
6ff3128
feat(frontend): polish account token list
rawkode Jun 20, 2026
43572e4
feat(frontend): polish account token status
rawkode Jun 20, 2026
78e8ad5
feat(frontend): polish account token details
rawkode Jun 20, 2026
3719a4e
feat(frontend): polish account token panel title
rawkode Jun 20, 2026
8d9833d
feat(frontend): polish account ssh key count
rawkode Jun 20, 2026
bc39add
feat(frontend): polish account ssh key deletion
rawkode Jun 20, 2026
e73c8a4
feat(frontend): polish account ssh key labels
rawkode Jun 20, 2026
51895e5
feat(frontend): polish account token note labels
rawkode Jun 20, 2026
81eb1f7
feat(frontend): polish account token heading
rawkode Jun 20, 2026
fcea15e
feat(frontend): polish account token revoke copy
rawkode Jun 20, 2026
3411f5e
feat(frontend): polish account token count
rawkode Jun 20, 2026
0461726
feat(frontend): polish account token last used
rawkode Jun 20, 2026
81bc2c8
feat(frontend): polish account ssh key last used
rawkode Jun 20, 2026
e3be502
feat(frontend): polish ssh key delete warning
rawkode Jun 20, 2026
771172f
feat(frontend): polish ssh key helper copy
rawkode Jun 20, 2026
77949c5
feat(frontend): polish clone title copy
rawkode Jun 20, 2026
e8401b5
feat(frontend): polish account git copy
rawkode Jun 20, 2026
db573bb
feat(frontend): polish command launcher prompt
rawkode Jun 20, 2026
c0c1763
feat(frontend): polish command palette placeholder
rawkode Jun 20, 2026
ef1fa97
feat(frontend): polish admin navigation copy
rawkode Jun 20, 2026
aa3a984
feat(frontend): polish actions navigation copy
rawkode Jun 20, 2026
5ebfeb7
feat(frontend): polish new repository path copy
rawkode Jun 20, 2026
582b38e
feat(frontend): polish releases empty copy
rawkode Jun 20, 2026
cec525e
feat(frontend): polish extension runtime summary
rawkode Jun 20, 2026
50f4fce
feat(frontend): polish activity empty copy
rawkode Jun 20, 2026
a7a90b6
feat(frontend): polish admin status copy
rawkode Jun 20, 2026
69aced0
feat(frontend): polish repositories empty copy
rawkode Jun 20, 2026
72964a5
feat(frontend): polish access settings copy
rawkode Jun 20, 2026
7750995
feat(frontend): polish storage details copy
rawkode Jun 20, 2026
21b7274
feat(frontend): polish ssh keys empty copy
rawkode Jun 20, 2026
4d0f7d5
feat(frontend): polish token empty copy
rawkode Jun 20, 2026
d0014bd
feat(frontend): polish actions empty copy
rawkode Jun 20, 2026
68efcd5
fix(extensions): enforce epic state transitions
rawkode Jun 20, 2026
e1eab9d
fix(extensions): enforce sprint state transitions
rawkode Jun 20, 2026
645daf7
feat(extensions): add docs summary operation
rawkode Jun 20, 2026
4fb231c
feat(extensions): add sprint board summary
rawkode Jun 20, 2026
dcf76d4
feat(extensions): expose doc front matter
rawkode Jun 20, 2026
2539660
feat(extensions): add docs catalog summary
rawkode Jun 20, 2026
9281a4a
feat(extensions): add kanban issue board summary
rawkode Jun 20, 2026
0f2bd9f
feat(extensions): add docs status board
rawkode Jun 20, 2026
6460ef1
feat(extensions): add bdd scenario summaries
rawkode Jun 20, 2026
d16f921
feat(extensions): add docs checklist summaries
rawkode Jun 20, 2026
034bf80
feat(extensions): add docs reference summaries
rawkode Jun 20, 2026
1e8d9da
feat(extensions): add docs readiness board
rawkode Jun 20, 2026
7f65522
feat(extensions): add docs outline summaries
rawkode Jun 20, 2026
9c5b143
feat(extensions): add docs decision summaries
rawkode Jun 20, 2026
6978ac0
feat(extensions): add docs decision board
rawkode Jun 20, 2026
4e8325e
feat(extensions): add docs traceability board
rawkode Jun 20, 2026
da3bcab
feat(extensions): add docs scenario board
rawkode Jun 20, 2026
e9a97c5
feat(extensions): add epics roadmap board
rawkode Jun 20, 2026
2712639
feat(extensions): add issues triage board
rawkode Jun 20, 2026
e94aa76
feat(extensions): add pull request review board
rawkode Jun 20, 2026
e9302a6
feat(extensions): add pull request review transitions
rawkode Jun 20, 2026
fe73a99
feat(extensions): add docs owner board
rawkode Jun 20, 2026
286d806
feat(extensions): add issue label board
rawkode Jun 20, 2026
e0e91c7
feat(extensions): add issue assignee board
rawkode Jun 20, 2026
a296073
feat(extensions): add issue project board
rawkode Jun 20, 2026
36eb606
feat(extensions): add epic owner board
rawkode Jun 20, 2026
97d5fcc
feat(extensions): add epic project board
rawkode Jun 20, 2026
8e0f841
feat(extensions): add epic target board
rawkode Jun 20, 2026
679e76d
feat(extensions): add docs tag board
rawkode Jun 20, 2026
d64f426
feat(extensions): add docs project board
rawkode Jun 20, 2026
a9a1262
feat(extensions): add project kanban swimlanes
rawkode Jun 20, 2026
d52554f
feat(extensions): add sprint planning board
rawkode Jun 20, 2026
a6c256c
feat(extensions): add check readiness board
rawkode Jun 20, 2026
2864ce1
feat(extensions): add expected check readiness board
rawkode Jun 20, 2026
3f7a4da
feat(extensions): add pull merge readiness board
rawkode Jun 20, 2026
284ed63
feat(extensions): add pull review decisions
rawkode Jun 20, 2026
6aeb174
feat(extensions): gate pull merge readiness on reviews
rawkode Jun 21, 2026
dbdc13e
feat(extensions): add pull review requests
rawkode Jun 21, 2026
49ab868
feat(extensions): add pull reviewer queue
rawkode Jun 21, 2026
a241daa
feat(extensions): add docs handoff board
rawkode Jun 21, 2026
b06e43e
feat(extensions): add issue priority board
rawkode Jun 21, 2026
153905c
feat(extensions): add issue milestone board
rawkode Jun 21, 2026
45c0178
feat(extensions): add docs type board
rawkode Jun 21, 2026
f1eba13
feat(extensions): add issue workflow board
rawkode Jun 21, 2026
4df0262
feat(extensions): add docs implementation board
rawkode Jun 21, 2026
a65cf11
feat(extensions): add pull request author board
rawkode Jun 21, 2026
3d2d5e5
feat(extensions): add pull request base branch board
rawkode Jun 21, 2026
6143a8a
feat(extensions): add pull request head branch board
rawkode Jun 21, 2026
10db1b6
feat(extensions): add issue author board
rawkode Jun 21, 2026
4e6f1e0
feat(extensions): add epic label board
rawkode Jun 21, 2026
5a2f39f
feat(extensions): add epic priority board
rawkode Jun 21, 2026
09c8d80
feat(extensions): add epic milestone board
rawkode Jun 21, 2026
c51217a
feat(frontend): mount workspace home widgets
rawkode Jun 21, 2026
535a1e2
feat(frontend): add actions dashboard
rawkode Jun 21, 2026
d6382d6
feat(frontend): surface repo actions tabs
rawkode Jun 21, 2026
b1ead35
feat(frontend): add repo docs and sprints tabs
rawkode Jun 21, 2026
df40607
feat(frontend): add docs product review board
rawkode Jun 21, 2026
eb957f7
feat(frontend): add checks readiness board
rawkode Jun 21, 2026
0cd6494
feat(frontend): add sprint issue board
rawkode Jun 21, 2026
4fdefb6
feat(frontend): surface pull request readiness overview
rawkode Jun 21, 2026
518ffe3
feat(frontend): restore repository extension slots
rawkode Jun 21, 2026
38fd9d7
feat(frontend): surface product docs workbench
rawkode Jun 21, 2026
def5715
feat(frontend): surface kanban workbench
rawkode Jun 21, 2026
06082cd
feat(frontend): surface pull request readiness
rawkode Jun 21, 2026
d28e250
feat(frontend): add repository commit history
rawkode Jun 21, 2026
7ca2342
feat(frontend): add repository branches surface
rawkode Jun 21, 2026
f49e88a
feat(frontend): add repository tags surface
rawkode Jun 21, 2026
f0fd8ab
feat(extensions): add docs workbench index views
rawkode Jun 21, 2026
484fe62
feat(extensions): add issues board workbench
rawkode Jun 21, 2026
f2f7fe6
feat(extensions): add epics roadmap board
rawkode Jun 21, 2026
0b80a7d
feat(frontend): improve forge shell extensions
rawkode Jun 21, 2026
5d52e66
feat(frontend): add workspace work navigation
rawkode Jun 21, 2026
e58d1e9
feat(extensions): deep link docs workbench boards
rawkode Jun 21, 2026
6f1ebf3
fix(frontend): keep work navigation repo scoped
rawkode Jun 22, 2026
266de85
fix(frontend): polish recent route labels
rawkode Jun 22, 2026
83edb72
fix(frontend): expand core navigation commands
rawkode Jun 22, 2026
7558e02
fix(frontend): label docs recents by board
rawkode Jun 22, 2026
a4f80d3
fix(frontend): keep project drilldowns repo scoped
rawkode Jun 22, 2026
71d8eac
fix(frontend): keep project work actions repo scoped
rawkode Jun 22, 2026
2f5851f
feat(frontend): add project-scoped planning links
rawkode Jun 22, 2026
e6fb951
feat(frontend): add repo project work context
rawkode Jun 22, 2026
b4e4db4
fix(frontend): keep repo work links scoped
rawkode Jun 22, 2026
32a9279
fix(extensions): hide internal issue refs on kanban cards
rawkode Jun 22, 2026
1707326
fix(frontend): align repo specs labels
rawkode Jun 22, 2026
0e0bd1b
fix(frontend): stabilize workspace shell bootstrap
rawkode Jun 22, 2026
001307a
fix(frontend): correct signed-in activity empty state
rawkode Jun 22, 2026
833d58a
fix(frontend): connect signed-in activity stream
rawkode Jun 22, 2026
3758bea
fix(frontend): aggregate workspace issues by repository
rawkode Jun 22, 2026
0e60c57
fix(frontend): label shell rail navigation
rawkode Jun 22, 2026
8fcaaf9
fix(frontend): connect repository index
rawkode Jun 22, 2026
da26d30
feat(extensions): filter epics roadmap board
rawkode Jun 22, 2026
2f82aaa
feat(extensions): filter sprint kanban board
rawkode Jun 22, 2026
0d3340e
feat(extensions): filter specs workbench
rawkode Jun 22, 2026
cbf6364
feat(extensions): filter issues board
rawkode Jun 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,10 @@ The frontend lives under `frontend/` and is a Vite Vue SPA.

The shell owns navigation, route handling, auth/session exchange, GraphQL
transport, extension UI loading, core widgets, and shared layout. Extension UI
bundles are browser ESM assets served from `/_extensions/<id>/assets/...` and
loaded through the SDK registry.
bundles are browser ESM assets served from
`/forge-ui/<module-token>/files/...` and loaded through the SDK registry.
The module token is the hex-encoded extension ID used only for public asset
URLs.

Route ownership:

Expand Down
2 changes: 1 addition & 1 deletion GOAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Status: v3 cutover complete; read/write transport split is the north star
graph after SP6 lands.
- The Vue/Vite shell is the only frontend.
- Extension UI bundles are generated from the `ui/` sources and served from
`/_extensions/...`.
`/forge-ui/...`.
- `start.sh --reset --oneshot` is the end-to-end acceptance path.

Do not restore removed transition routes, old GraphQL aliases, resolver stubs,
Expand Down
6 changes: 3 additions & 3 deletions PRODUCTION_TESTBED.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,9 @@ storage paths are absolute.
- `POST /events/session`
- `GET /events`
- `GET /graphql/stream`
- `POST /_extensions/session`
- `GET /_extensions/<id>/manifest.json`
- `GET /_extensions/<id>/assets/<path>`
- `POST /forge-ui/session`
- `GET /forge-ui/<module-token>/meta.json`
- `GET /forge-ui/<module-token>/files/<path>`
- `/git/...` authentication and scope checks

## Current production-testbed boundary
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,9 @@ Rust `cargo-component` crates and ship real artifacts at

The Vue shell owns navigation, auth/session exchange, GraphQL transport, and UI
extension loading. Browser extension bundles are served from
`/_extensions/<id>/assets/...` and registered through the Comtrya SDK.
`/forge-ui/<module-token>/files/...` and registered through the Comtrya SDK.
The module token is the hex-encoded extension ID used only for public asset
URLs.

Git clone/fetch uses the pure-Rust Smart HTTP path. Git receive-pack/push and
full OIDC browser callback validation are intentionally unsupported in the
Expand Down
2 changes: 1 addition & 1 deletion SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ feature behavior delivered by WASM extensions.
SP6 lands. The `/api/ops` surface is interim; do not extend it beyond what
current extensions need.
- The frontend is a Vite/Vue shell that loads extension UI bundles from
`/_extensions/...`. The shell uses GraphQL for reads and RPC for writes;
`/forge-ui/...`. The shell uses GraphQL for reads and RPC for writes;
extension UI bundles follow the same contract via the generated SDK.
- The implementation favors deletion and current contracts over transition
layers.
Expand Down
2 changes: 1 addition & 1 deletion TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Comtrya product.
previews, and diffs derived from Git.
- Real: Git clone/fetch works through the Vue origin using a scoped Comtrya
credential.
- Real: extension UI manifests and assets are served from `/_extensions/...`.
- Real: extension UI manifests and assets are served from `/forge-ui/...`.
- Real: the Vue shell discovers installed extensions, validates UI manifests,
imports versioned entry assets, and mounts slot/route contributions.
- Real: first-party backend extensions are Rust `cargo-component` crates that
Expand Down
35 changes: 33 additions & 2 deletions comtrya.cue
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@ repository: schema.#Repository & {
// inherit this enablement; per-project `issues` / `epics` blocks
// are policy defaults, not feature toggles. ext_epics is listed so
// project epics and issue-to-epic relationships are available to
// every project in this repo.
extensions: ["ext_issues", "ext_pull_requests", "ext_checks", "ext_epics"]
// every project in this repo. ext_docs is listed so project-owned
// ADRs, specs, PRDs, and BDD scenarios render through the repository
// docs surface instead of living as untyped files. ext_sprints turns
// sprint planning into a first-class repo workbench surface.
extensions: ["ext_issues", "ext_pull_requests", "ext_checks", "ext_epics", "ext_docs", "ext_sprints"]

bookmarks: [
{
Expand Down Expand Up @@ -93,6 +96,29 @@ projects: backend: {
status: "string"
}
}
prd: {
slug: "server/docs/prds"
label: "Backend PRDs"
description: "Product requirements for backend-owned forge capabilities."
properties: {
title: "string"
owner: "principal-ref"
status: "string"
audience: "string"
}
}
scenario: {
slug: "server/docs/scenarios"
label: "BDD Scenarios"
description: "Behavior scenarios that describe user-visible forge workflows."
properties: {
title: "string"
feature: "string"
owner: "principal-ref"
status: "string"
tags: "[...string]"
}
}
}

pulls: {
Expand All @@ -111,6 +137,11 @@ projects: backend: {
requiredFields: ["title"]
}

sprints: {
cadence: "weekly"
defaultCapacity: 8
}

checks: {
catalog: {
"cargo test": {
Expand Down
2 changes: 1 addition & 1 deletion crates/core/src/extensions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ pub struct ExtensionInstallConfig {
/// already rejects any prefix starting with `_` — the entry was permanently
/// unreachable and only existed as defensive documentation (#122 P3).
pub const RESERVED_ROUTE_PREFIXES: &[&str] = &[
"r", "x", "api", "auth", "git", "graphql", "events", "readyz", "healthz", "instance",
"r", "x", "api", "auth", "git", "graphql", "events", "readyz", "healthz", "instance", "ui-ext",
];

fn validate_route_prefix(prefix: &str) -> CoreResult<()> {
Expand Down
4 changes: 2 additions & 2 deletions crates/core/src/http.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ pub fn allowed_methods_for_route(route: &str) -> Vec<&'static str> {
match route {
"/graphql" => vec!["GET", "POST", "OPTIONS"],
"/graphql/stream" | "/events" => vec!["GET", "OPTIONS"],
"/events/session" | "/auth/token-exchange" | "/_extensions/session" => {
"/events/session" | "/auth/token-exchange" | "/ui-ext/session" => {
vec!["POST", "OPTIONS"]
}
route if route.starts_with("/auth/") => vec!["GET", "POST", "OPTIONS"],
route if route.starts_with("/_extensions/") => vec!["GET", "OPTIONS"],
route if route.starts_with("/ui-ext/") => vec!["GET", "OPTIONS"],
route if route.starts_with("/api/ops/") => vec!["POST", "OPTIONS"],
// `/r/<repo>` multiplexes browse (GET) and git smart-HTTP
// (GET info/refs, POST upload-pack/receive-pack) under one prefix,
Expand Down
36 changes: 36 additions & 0 deletions crates/server/docs/prds/repository-docs-surface.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: Repository Docs Surface
owner: platform-maintainers
status: active
audience: maintainers
---

## Problem

Developers expect a forge to keep product intent beside the implementation. Comtrya
already stores ADRs and specs in the repository, but product requirements and
scenario-style acceptance criteria need the same first-class surface so a
single-tenant forge can connect planning, implementation, and review without
sending users to a separate product tool.

## Requirements

- A repository can opt into `ext_docs` once and expose project-owned document
types from `comtrya.cue`.
- Backend-owned PRDs live under `crates/server/docs/prds/` and render in the
Docs extension with their declared front matter.
- Scenario documents live beside backend docs and describe user-visible
workflows in a format that can later drive tests or issue templates.
- The kernel stays generic: it evaluates doc type shape from CUE, while
`ext_docs` owns the reading and rendering experience.

## Non-Goals

- Do not hardcode PRD or BDD semantics into the kernel.
- Do not add a separate requirements service before repo-resident docs have
been proven in the main forge workflow.

## Success

Opening the backend project docs shows ADRs, specs, PRDs, and BDD scenarios as
declared document types, each backed by real repository files.
22 changes: 22 additions & 0 deletions crates/server/docs/scenarios/repository-docs-surface.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
title: Repository docs are discoverable from project context
feature: repository-docs
owner: platform-maintainers
status: active
tags: [docs, projects, bdd]
---

## Scenario

Given the Comtrya repository has opted into `ext_docs`
And the backend project declares ADR, spec, PRD, and scenario document types
When a developer opens the repository docs surface
Then the docs panel groups documents by backend project and declared type
And each file shows its front matter, path, and rendered MDX body
And the developer can expand a document without leaving the forge shell.

## Notes

This scenario is intentionally stored as MDX today. The shape is simple enough
for humans to review, and it gives the extension a concrete BDD-style artifact
to render before we invest in a stricter Gherkin parser or test generator.
Loading
Loading