@bongos/core 1.17.0 → 1.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/.bongos-core.json +154 -83
  2. package/CLAUDE.md +11 -238
  3. package/bin/bongos.js +1 -0
  4. package/clients/bongos-client/README.md +4 -4
  5. package/clients/bongos-client/bongos-client.global.js +14 -1
  6. package/clients/bongos-client/index.cjs +14 -1
  7. package/clients/bongos-client/index.d.ts +19 -2
  8. package/clients/bongos-client/index.mjs +11 -1
  9. package/clients/bongos-client/package.json +1 -1
  10. package/docs/adr/0133-github-app-manifest-onboarding-signin.md +2 -0
  11. package/docs/adr/0134-private-first-npm-distribution.md +20 -6
  12. package/docs/adr/0135-module-upstream-submission-interim-queue.md +34 -0
  13. package/docs/adr/README.md +5 -4
  14. package/docs/api/openapi.json +315 -6
  15. package/docs/api-reference.md +10 -5
  16. package/docs/architecture.md +1 -1
  17. package/docs/file-map.md +2 -2
  18. package/docs/modules-contract.md +2 -0
  19. package/docs/recipes/instance-deploy.md +4 -4
  20. package/docs/recipes/instance-first-run.md +51 -0
  21. package/docs/recipes/packaging-the-core.md +5 -5
  22. package/docs/recipes/private-npm-distribution.md +22 -12
  23. package/docs/recipes/self-host.md +1 -1
  24. package/docs/recipes/upgrading-the-core.md +8 -8
  25. package/migrations/core_191_module_submissions.sql +45 -0
  26. package/modules/autonomy/CLAUDE.md +11 -45
  27. package/modules/builder-settings/CLAUDE.md +11 -54
  28. package/modules/dev-box/CLAUDE.md +11 -34
  29. package/modules/discord/CLAUDE.md +11 -46
  30. package/modules/economy/CLAUDE.md +11 -44
  31. package/modules/grading/CLAUDE.md +11 -38
  32. package/modules/hall-ui/CLAUDE.md +11 -57
  33. package/modules/hall-ui/public/goals-page.js +227 -22
  34. package/modules/hall-ui/public/goals.html +16 -0
  35. package/modules/hall-ui/public/new-project-wizard.js +5 -4
  36. package/modules/ideas/CLAUDE.md +11 -33
  37. package/modules/lifecycle/CLAUDE.md +11 -59
  38. package/modules/lifecycle/routes/goals.js +80 -0
  39. package/modules/memory/CLAUDE.md +11 -36
  40. package/modules/onboarding/CLAUDE.md +11 -51
  41. package/modules/security/CLAUDE.md +11 -40
  42. package/modules/sessions/CLAUDE.md +11 -35
  43. package/modules/status-ui/CLAUDE.md +11 -43
  44. package/package-lock.json +2 -2
  45. package/package.json +1 -1
  46. package/public-landing/create.html +58 -12
  47. package/public-landing/index.html +40 -21
  48. package/scripts/gds/CLAUDE.md +11 -140
  49. package/scripts/gds/claude-materialize.js +151 -18
  50. package/scripts/gds/claude-md-template.js +84 -0
  51. package/scripts/gds/cli-lib.js +112 -2
  52. package/scripts/gds/gen-api-client.js +10 -10
  53. package/scripts/gds/init.js +53 -13
  54. package/scripts/gds/migration-namespace.js +1 -1
  55. package/scripts/gds/module.js +118 -4
  56. package/scripts/gds/npmrc.js +93 -0
  57. package/scripts/gds/onboard.js +13 -24
  58. package/scripts/gds/package-core.js +56 -14
  59. package/scripts/gds/provision.js +102 -17
  60. package/scripts/gds/seed-adopt-tasks.js +1 -1
  61. package/scripts/gds/status.js +6 -1
  62. package/scripts/gds/task.js +166 -0
  63. package/scripts/gds/upgrade.js +58 -18
  64. package/src/bongos/CLAUDE.md +11 -60
  65. package/src/bongos/auth.js +11 -0
  66. package/src/bongos/module-submissions.js +56 -0
  67. package/src/bongos/route-rank-check.js +6 -0
  68. package/src/bongos/routes/CLAUDE.md +11 -39
  69. package/src/bongos/routes/auth.js +6 -1
  70. package/src/bongos/routes/modules.js +123 -21
  71. package/src/instance-config.js +1 -1
  72. package/src/module-api.js +13 -1
  73. package/tests/claude_materialize.mjs +105 -0
  74. package/tests/device_flow_start.mjs +73 -0
  75. package/tests/first_run_engine_check.mjs +79 -0
  76. package/tests/goal_membership_requests.mjs +33 -3
  77. package/tests/hook_user_agents.mjs +62 -0
  78. package/tests/init.mjs +59 -6
  79. package/tests/instance_mismatch_guard.mjs +101 -0
  80. package/tests/module_cli.mjs +130 -2
  81. package/tests/module_submissions.mjs +135 -0
  82. package/tests/npmrc.mjs +105 -0
  83. package/tests/onboard.mjs +49 -0
  84. package/tests/package_core.mjs +68 -22
  85. package/tests/platform_boot.mjs +5 -2
  86. package/tests/provision.mjs +107 -8
  87. package/tests/provisioning_github_app_routes.mjs +29 -2
  88. package/tests/served_paths_shipped.mjs +2 -2
  89. package/tests/task_cli.mjs +99 -0
  90. package/tests/upgrade.mjs +89 -25
package/CLAUDE.md CHANGED
@@ -1,242 +1,15 @@
1
- # Off the Boats — Project Memory
1
+ # @bongos/core — installed platform dependency (not your project's CLAUDE.md)
2
2
 
3
- > **This file is descriptive. The source of truth for permissions, scope, and state is the Bongos database accessed via `/api/bongos/*`.**
4
- > CLAUDE.md is the index and durable *framing* for AI agents — not an authority. Where it describes live state (tasks, versions, claims, ranks, costs) the database wins; where it describes permissions, [`docs/canonical-permissions.md`](docs/canonical-permissions.md) + the server's `requireRank` checks win (see [ADR 0016](docs/adr/<redacted>.md)). If this file and a route/DB row disagree, the route/row is authoritative and the doc is the bug. Editing this file cannot grant any authority.
3
+ This file is a placeholder shipped inside the **@bongos/core** package. The core's own
4
+ internal agent notes are intentionally omitted from the published artifact so they cannot
5
+ load into your instance's context.
5
6
 
6
- This file is the **index and durable framing** for the project. Read it at the start of every session. When a section is relevant to your task, **drill into the linked detail files** rather than expecting all the depth here. Update this file (or a linked detail file) at the end of every session — see [§12 Session Update Protocol](#<redacted>). **Read docs on your instance's builders' hall (`domains.buildersOrigin` in [`config/branding.json`](config/branding.json)), not raw on github.com** — the hall is the canonical doc-reading surface (task refs render as working links there, §8's hall-link convention); github.com is the code host only, where a bare `#NNN` autolinks to a GitHub issue and 404s (tolerated, not supported). If the hall is down, your instance's status page (`domains.statusOrigin`) is the fallback for project state ([ADR 0029](docs/adr/<redacted>.md), off-box), though not full doc rendering. How an agent resolves these surfaces from config alone (with no hard-coded host) is the **docs-discovery contract** — [ADR 0114](docs/adr/<redacted>.md); `GET <publicOrigin>/api/bongos` re-advertises them for zero-config bootstrap.
7
+ **It does not govern this repository.** Your own root `CLAUDE.md`, your `.claude/`
8
+ directory, and the live Bongos database are the source of truth for how work happens here
9
+ and who may do what.
7
10
 
8
- **AI-first norm — the foundational assumption.** Cloud Bongos is an **AI-first build platform: AI agents write the code.** A human owner sets scope, direction, and the hard gates (rank, approval, deploy); the day-to-day building — code, docs, migrations, reviews — is done by AI agents claiming tasks. **Every rule in this file is written for that reader.**
11
+ You are seeing this only because an agent opened a file under `node_modules/@bongos/core/`.
12
+ Nothing in here needs to be read to use the platform — run `bongos help` for commands.
9
13
 
10
- ---
11
-
12
- ## Working with this file (content charter)
13
-
14
- CLAUDE.md loads **in full, every session** — so every line spends context budget, and a bloated file makes agents *miss* real instructions ([ADR 0061](docs/adr/<redacted>.md); the context-rot literature). Two rules keep it lean:
15
-
16
- - **Per-line test:** *would removing this line cause an agent to make a mistake?* If not, cut it.
17
- - **What goes where:**
18
-
19
- | Content | Home |
20
- |---|---|
21
- | Portable methodology — working rules, session protocol, claim→ship lifecycle, this charter | **this file** (the core Cloud Bongos ships to any instance) |
22
- | Host instance identity — product/world/company, vision, visual style | [`docs/project-context.md`](docs/project-context.md) (prose) + [`config/branding.json`](config/branding.json) (the strings code reads) |
23
- | Live state — tasks, versions, ranks, costs, claims | the **Bongos DB** (`/builder-start`, `/status`) |
24
- | *Why* a non-obvious choice was made | an **ADR** ([`docs/adr/`](docs/adr/)) |
25
- | Multi-page how-to / ops guide | a **recipe** ([`docs/recipes/`](docs/recipes/)) |
26
- | One module's public surface + gotchas | that dir's **nested `CLAUDE.md`** (loads on demand) |
27
- | Short per-rule learning | the **`learnings`** table (`learning-capture.js`) |
28
-
29
- **Budget: ≤ ~200 lines.** Past that, relocate detail *down this table* — don't append here. Per-module maps live at [`src/bongos/`](src/bongos/CLAUDE.md), [`src/bongos/routes/`](src/bongos/routes/CLAUDE.md), and [`scripts/gds/`](scripts/gds/CLAUDE.md), and load only when an agent works in that folder.
30
-
31
- ---
32
-
33
- ## Quick navigation
34
-
35
- | If you need… | Go to |
36
- |---|---|
37
- | **What I should claim right now** (parallel-safe tasks) | Run `/builder-start` |
38
- | **What's the status of a version / criterion** (what's left for C8?) | Run `/status` — rolls up each done-when criterion → gating tasks → what remains ([ADR 0025](docs/adr/<redacted>.md)) |
39
- | **Project identity** (product, world, visual style — host context) | [`docs/project-context.md`](docs/project-context.md) (prose) + [`config/branding.json`](config/branding.json) (strings code reads, [contract](docs/branding-contract.md)); split out per [ADR 0062](docs/adr/<redacted>.md) §7 |
40
- | **Live architecture detail** (infra, stack, DB schema, Bongos API) | [`docs/architecture.md`](docs/architecture.md) |
41
- | **API reference** (every endpoint, gate, params) | Generated **OpenAPI 3.1** at [`docs/api/openapi.json`](docs/api/openapi.json) + [`docs/api-reference.md`](docs/api-reference.md); rendered at **`/docs`** on the instance's own origin. Regenerate: `node scripts/gds/gen-api-docs.js` ([ADR 0109](docs/adr/<redacted>.md)). **External consumers**: typed client [`clients/bongos-client`](clients/bongos-client/README.md) + auth/hello-world on-ramp [`docs/api-onramp.md`](docs/api-onramp.md) |
42
- | **Module system** (plugin-API contract, manifest schema, seams, rank-gate rule, module-owned migrations, module-author recipe) | [`docs/modules-contract.md`](docs/modules-contract.md) · [ADR 0083](docs/adr/<redacted>.md) |
43
- | **Who can do what** (rank ladder, trust boundary — DB enforces) | [`docs/canonical-permissions.md`](docs/canonical-permissions.md) · [ADR 0016](docs/adr/<redacted>.md) |
44
- | **How builders earn the reward currency** (cost-plus token reward + per-task credits) | The **economy module** owns the reward policy as per-instance config — currency label + cost-plus margin + USD peg: [`modules/economy/CLAUDE.md`](modules/economy/CLAUDE.md) (`config/branding.json` `currency.label` + `reward.{marginPct,usdPeg}`) · [ADR 0054](docs/adr/<redacted>.md), [ADR 0023](docs/adr/<redacted>.md) |
45
- | **What do we already know about X** (search before re-solving) | Run `/recall <query>` — rank-scoped lexical search over every repo doc + indexed DB prose ([ADR 0060](docs/adr/0060-gds-retrieval-layer.md)) |
46
- | **Where does symbol/function X live** (code altitude map) | `docs/repo-map.md` — generated symbol skeleton (complements `/recall`), now also a **doc link-graph + staleness flags** (which docs a key doc links to; which docs carry unresolved links needing a touch-up — task 2013). **Gitignored + regenerated at deploy/box-fetch, not committed** ([ADR 0110](docs/adr/<redacted>.md)); if absent in your tree run `node scripts/gds/gen-repo-map.js` ([ADR 0063](docs/adr/<redacted>.md)) |
47
- | **What keeps the architecture boundary from rotting** (fitness functions) | `node scripts/gds/fitness.js` — CI gate (in the `unit` check): core↔host import boundary, CLAUDE.md budget + nested-doc presence, no route bypasses rank checks, repo-map freshness ([ADR 0061](docs/adr/<redacted>.md), [0062](docs/adr/<redacted>.md) §1; nested-doc discovery assumes core dirs sit at the instance root — [0108](docs/adr/<redacted>.md) moves them into the core package) |
48
- | **Docs/markdown entropy** (stale links, broken anchors, duplicate prose) | `node scripts/gds/docs-entropy.js [--verbose] [--file-ideas]` — parallel to knip dead-code scan; surfaces broken internal links and cross-file duplicate prose across all tracked `.md` files |
49
- | **Where files live** (full repo tree) | [`docs/file-map.md`](docs/file-map.md) |
50
- | **What a past version shipped / a version's scope** | Per-version scope archives are [`limitations/*-shipped.md`](limitations/) (each written only *after* a guided review — a fresh instance's core template ships with none). This instance's specific game + platform version history + roadmap framing lives in [`docs/project-context.md`](docs/project-context.md); live status via `/status`. |
51
- | **Dev Box desktop app** (mac menu-bar / Windows tray switch for the builder box: pairing auth, downloads, release flow) | [`devbox-app/README.md`](devbox-app/README.md) · [ADR 0045](docs/adr/<redacted>.md) · [`docs/recipes/devbox-app-release.md`](docs/recipes/devbox-app-release.md) |
52
- | **Future limitations to lift / next-version planning** | `limitations/backlog.md` (read-only archive — live tasks now in Bongos DB) |
53
- | **In-flight feature ideas captured during a session** | Capture to the live `idea_inbox` via `node scripts/gds/capture.js "…"`; triage with `/idea-triage`. (The old [`generative-ideas.md`](generative-ideas.md) is a frozen 2026-05-11 snapshot.) |
54
- | **Inbound team messages** (chat → `idea_inbox`, then `/idea-triage`) | The mechanism lives in the **discord module** → [`modules/discord/CLAUDE.md`](modules/discord/CLAUDE.md); this instance's server-specific inbound setup is [`docs/discord/inbound.md`](docs/discord/inbound.md). |
55
- | **Ops gotchas + recipes** (read before deploying) | [`docs/recipes/ops-gotchas.md`](docs/recipes/ops-gotchas.md) |
56
- | **Things stuck on the owner's input** | [`blockers/blockers.md`](blockers/blockers.md) |
57
- | **Why we chose what we chose** (architecture decisions — full ADR index) | [`docs/adr/README.md`](docs/adr/README.md) |
58
- | **Multi-agent system (MAS)** — agent hierarchy, grader, phased plan | [ADR 0024](docs/adr/<redacted>.md) (architecture + ship table) · [0026](docs/adr/<redacted>.md) (BFG) · [0027](docs/adr/<redacted>.md) (6D eval). **All four shipped** — Grader (4-worker adversarial panel + route-rank pre-pass), Conductor (`UserPromptSubmit` hook), Architect (`--scope` audits → [`docs/audits/`](docs/audits/)), BFG. Only Phase 4.5 (autonomous dispatch) is unbuilt. |
59
- | **Architecture audits — first-principles "what to delete" reviews feeding next-version scope** | [`docs/audits/`](docs/audits/) (produced by the Architect — MAS Phase 5; `node scripts/gds/architect-audit.js --scope … --paths …`) |
60
- | **Session-end handoff template** (use at every session end) | [`docs/handoff-template.md`](docs/handoff-template.md) |
61
- | **Discord integration** (build broadcast, channel layout, role sync — a one-way mirror, outside the trust boundary) | The **discord module** owns the mechanism → [`modules/discord/CLAUDE.md`](modules/discord/CLAUDE.md). This instance's server-specific channel config is [`docs/discord/channels.json`](docs/discord/channels.json). |
62
- | **Pixel-art design system** (pipeline, rubric, palette, skills) | The **art-pipeline module** owns the mechanism → [`modules/art-pipeline/CLAUDE.md`](modules/art-pipeline/CLAUDE.md) (operational ref: [`art/README.md`](art/README.md)). The pixel/Greek *style* choice itself is instance detail → [`docs/project-context.md`](docs/project-context.md). |
63
- | **Bongos** — the work-tracking system (formerly GDS/PMS): architecture, schema, slash commands | [ADR 0010](docs/adr/0010-pms-architecture.md); `src/bongos/` + `scripts/gds/`, API at `/api/bongos/*` (the prior `/api/gds/*` stays mounted **forever** as a permanent alias; `/api/pms/*` now 404). Read-side back-compat for the `pms_session` cookie, `PMS_GITHUB_*` env vars, and `~/.config/otb/pms-session.json` stays. |
64
- | **Deploying PMS-V1 + status subdomain end-to-end** | [`docs/pms-v1-deploy.md`](docs/pms-v1-deploy.md) |
65
- | **Public build-status dashboard (live)** | your instance's status page (`domains.statusOrigin`) — source in `modules/status-ui/public/` (carved to a module, BV1.R84) |
66
-
67
- ---
68
-
69
- ## 1. Project Overview
70
-
71
- > **What this instance is** — the product, company, vision, world, and visual style — is host instance context, kept in [`docs/project-context.md`](docs/project-context.md) (prose) + [`config/branding.json`](config/branding.json) (the strings code reads), **not in this portable core**. Per [ADR 0062](docs/adr/<redacted>.md) §7, moving the project identity out of CLAUDE.md *is* the core ↔ host split: CLAUDE.md is the methodology Cloud Bongos ships to any instance; `docs/project-context.md` is what an instance authors on top of it.
72
-
73
- **Work-type axis.** A task's work type comes from its **role/discipline** (engineer / artist / ideator / ui), set per task — not from a version "track." (The former two-track `product`/`internal` model was deprecated in BONGOS-V1; versions are just named scope milestones now.)
74
-
75
- ---
76
-
77
- ## 2. The Prompter (product owner)
78
-
79
- The product owner sets scope, direction, and the hard gates. But there is **no special "owner" entity** — an owner is just a builder with elevated permissions and an **interaction profile**. How to pitch replies to whoever you're working with — tone, technical level, local-toolchain familiarity — is *that builder's* profile, captured at onboarding and injected each session (the **builder-settings module**'s `interaction` knob, sibling of `wandering`; [`modules/builder-settings/CLAUDE.md`](modules/builder-settings/CLAUDE.md)). `/me` carries the resolved `interaction.contract`.
80
-
81
- **Portable defaults** (the fallback when a builder has set no profile — the `interaction-prefs.js` defaults): assume the reader may not be a software engineer (define jargon on first use; treat local toolchains — Homebrew, ports, env vars — as new, explained step by step); frame trade-offs as **cost, time, and what the user will see**, not framework taxonomy; ask about **outcomes and product behavior**, not implementation details (decide those yourself and present for confirmation); be concise. A builder's profile overrides these.
82
-
83
- **Turn-end sound** is builder-local ergonomics, owned by the builder-settings module (per-sound on/off + volume + per-event variant); `.claude/hooks/stop-sound.js` plays it by flag priority — raise the **triumph** flag only for genuine milestones.
84
-
85
- **Build broadcast.** On deploy, the shipped task's `--summary` is broadcast to the team chat (short, no jargon, business-owner audience); inbound flows back to `idea_inbox`. The mechanism + this instance's channels live in the **discord module** ([`modules/discord/CLAUDE.md`](modules/discord/CLAUDE.md)) — a one-way mirror, outside the trust boundary.
86
-
87
- **Subagent model routing — quality first, cost lever second.** Subagent spawns via the `Agent` tool MUST set the `model` parameter explicitly — never inherit silently — to the builder's resolved **model allocation**. The *shape* is stable methodology: the main interactive session runs the top tier (what the builder sits in front of); subagents default to the development tier; only mechanical known-path work (list claimable, fetch a row by id, log a cost entry, read a known file) drops to the cheap tier. *Why the tiers split by judgment-load, not by task:* research feeds code that ships, so a cheaper research tier degrades downstream quality more than it saves — when in doubt, pick the development tier.
88
-
89
- The tier **values** are settings-driven ([`modules/builder-settings/CLAUDE.md`](modules/builder-settings/CLAUDE.md), task 2011): instance default `config/branding.json` `models.{main,subagentDefault,subagentRoutine}` (this instance: `opus` / `opus` / `haiku`, i.e. "no Sonnet"), overridable per builder. The resolved allocation is on `/me` (`model_allocation.effective`); changing a tier is a config/settings edit, not a doc edit.
90
-
91
- ---
92
-
93
- ## 3. Company Context
94
-
95
- > Instance identity — company, vision, world, and visual style (the former §§3/5/6/7) — is host context in [`docs/project-context.md`](docs/project-context.md); the machine-readable strings are the branding contract ([`config/branding.json`](config/branding.json) / [`docs/branding-contract.md`](docs/branding-contract.md)). Why this lives out of the core is the §1 note + the charter. §§3/5/6/7 stay as stub headings so existing anchors/cross-refs resolve.
96
-
97
- ---
98
-
99
- ## 4. Financial Constraints
100
-
101
- **This instance's actual budget — the annual number and the spend target — is host context in [`docs/project-context.md`](docs/project-context.md).** The portable posture every instance inherits:
102
-
103
- - **Choose the cheapest viable option.** Bootstrapped mindset — avoid expensive architectures and premium SaaS unless there is no reasonable alternative.
104
- - **Document the trade-off in an ADR** ([`docs/adr/`](docs/adr/)) when a more expensive option is chosen, so the decision can be revisited.
105
- - **Optimize monthly recurring cost.** Any proposal that locks in a high fixed monthly cost (managed servers, large always-on databases, premium CDNs with per-GB egress at high volume) needs explicit justification and a cheaper fallback.
106
- - **The owner controls spend.** Nothing gets purchased without the owner's explicit go-ahead.
107
-
108
- ---
109
-
110
- ## 5. Goal & Vision
111
-
112
- > Host identity → [`docs/project-context.md`](docs/project-context.md) (see the §3 note).
113
-
114
- ---
115
-
116
- ## 6. World Design
117
-
118
- > Host identity → [`docs/project-context.md`](docs/project-context.md) — the world/setting + the trademark posture (the world name is a single config string, `identity.worldName`). See the §3 note.
119
-
120
- ---
121
-
122
- ## 7. Visual Style
123
-
124
- > Host identity → [`docs/project-context.md`](docs/project-context.md) — the visual style, the self-improving `art/` pipeline (palette/rubric non-negotiables), and the art skills. See the §3 note; operational reference: [`art/README.md`](art/README.md).
125
-
126
- ---
127
-
128
- ## 8. Versioning Methodology
129
-
130
- The project ships version-by-version. Each version is a named scope milestone — some user-facing (V1, V2, V3…), some improving *how* we build (the platform versions). There is no "track" taxonomy; a task's work type comes from its role/discipline.
131
-
132
- **Live version names, statuses, and ship dates are in the Bongos `versions` table (`/status`) — this instance's version history is host state, not portable core** (the product-roadmap framing + platform-version history are preserved in [`docs/project-context.md`](docs/project-context.md)). A key methodology rule (`feedback_new_version_review`): a new version's scope-truth archive isn't written — and the repo isn't "king" for that version — until a guided shipped-tasks + code review with a senior builder produces it. A builder claims whatever is claimable; versions ship independently.
133
-
134
- The durable artifacts of this method are folders + a database:
135
-
136
- - [`limitations/*-shipped.md`](limitations/) — the **mechanism**: one preserved scope archive per shipped version, each written only *after* a guided shipped-tasks + code review (a fresh instance ships with none). *This* instance's specific per-version archives + which versions still await their review are host state — [`docs/project-context.md`](docs/project-context.md).
137
- - **Bongos database** (Postgres `tasks` + `claims` + `versions`) — the live work-tracking layer; `/builder-start` shows what's claimable. `limitations/backlog.md` is a frozen pre-import archive.
138
- - [`docs/recipes/`](docs/recipes/) — long-form ops guides (read before similar work); short per-rule learnings go to the `learnings` table (`learning-capture.js`).
139
- - [`blockers/`](blockers/) — work needing the owner's input (resolve = delete). [`docs/adr/`](docs/adr/) ([index](docs/adr/README.md)) — Architecture Decision Records for any non-obvious choice.
140
- - [`generative-ideas.md`](generative-ideas.md) — frozen 2026-05-11 snapshot; live ideas go to `idea_inbox` via `capture.js`, triaged with `/idea-triage`.
141
-
142
- **Working rules while building:**
143
-
144
- - **Every change is backed by a claimed Bongos task. No exceptions.** This is the methodology's hard rule. If you find yourself about to commit code, edit a doc, run a DB migration, change a config, move a task between versions, or otherwise alter state — and you do not hold an active Bongos claim covering that work — stop. Create or find the task in Bongos, claim it, *then* make the change. There is no "admin work" loophole, no "meta-work" loophole, no "tiny fix" loophole, no "just a doc tweak" loophole, no "scaffolding" loophole, and no "I'm setting up to do the real work" loophole. The point of the rule is that Bongos is the complete ledger of what happened to this project — if a change isn't in it, the ledger lies. (See feedback memory: `feedback_follow_methodology.md`.)
145
- - **Direct DB writes are work too.** Updating `tasks`, `versions`, `blockers`, etc. via `psql` is a change to project state. It needs a claimed task just like a `git commit` does. The fact that the API doesn't yet expose an endpoint for the operation does NOT make it admin work — it just means the operation runs under a claim via SQL instead of via an HTTP call. Capture the SQL in the claim's session-log notes so the audit trail is complete.
146
- - **Start every session with `/builder-start`** to see claimable tasks. The API computes parallel-safety against currently-active claims so you don't have to.
147
- - **Claim before working.** `/builder-claim N` locks the task to your session. If the claim fails (already claimed, touches conflict, not ready, **dependencies not shipped**), pick another. If nothing exists for the work you're about to do, create the task first via `POST /api/bongos/tasks` or `node scripts/gds/capture.js`, then claim it.
148
- - **Dependencies gate everything.** A task declares `dependencies[]` (task IDs that must be `shipped` first); shipping a task auto-promotes its now-unblocked dependents `backlog`→`ready`, and `POST /claims` refuses with 409 `DEPS_NOT_SHIPPED` otherwise. The `V##.R##` rank prefix is decorative; deps are load-bearing. Full mechanics + CRUD endpoints in [ADR 0015](docs/adr/<redacted>.md).
149
- - **Ship or release at session end.** `/builder-ship` runs smoke tests, then chains `completed` → `confirmed` (**credits land here**) → `shipped` (merged + deployed). Anything left at `confirmed` is landed automatically by the server reconciler within ~5 min. `/builder-release` returns the task with no credits. `git merge` at land time is the authoritative collision detector (a wrong up-front touches[] prediction is not ship-blocking). See the `/builder-ship` skill doc.
150
- - **How readily you surface a tangent vs. silently capture it is your *wandering* level** — a per-builder, rank-defaulted knob (newcomers = Locked: never raise off-task tangents or investigations; file them with `capture.js` and stay on the claim). It tunes the three rules below; it does *not* limit in-task initiative. Resolved + clamped server-side, injected each session ([`modules/builder-settings/wandering-prefs.js`](modules/builder-settings/wandering-prefs.js)).
151
- - Idea that fits inside an existing claim → just ship it under that claim.
152
- - Idea that **does not** fit the active claim and is small + in current version → finish current claim first, then claim a new task for it.
153
- - Idea that's bigger or out of scope → create a new task via `POST /api/bongos/tasks` (status `backlog`) or capture via `node scripts/gds/capture.js` for `idea_inbox` triage.
154
- - Significant non-obvious decision made → write an ADR in [`docs/adr/`](docs/adr/) and link it from the shipping task's notes.
155
- - Discovery that took more than ~10 minutes to diagnose → capture as a learning via `node scripts/gds/learning-capture.js` (DB-backed; see `learnings` table). For longer multi-page recipes, write a file under `docs/recipes/`.
156
- - Stuck on something only the owner can decide/provide → write a [`blockers/`](blockers/) entry AND attach the blocker_ref to the relevant task.
157
- - Change touched anything the onboarding diagrams describe (ranks, task statuses, versions, currency-and-karma / architecture) → **all 5 diagrams are auto-generated** by `scripts/gds/gen-diagrams.js` (runs on deploy; `.svg`/`.png` + `assertions.json` in lockstep). **Never hand-edit a `.mmd` or `assertions.json`** — edit the template in `gen-diagrams.js`, run it, commit. Backstop in [`docs/handoff-template.md`](docs/handoff-template.md).
158
- - **Never write a bare `#NNN` for a Bongos record in prose you emit** (chat, reasoning, commits/PRs, docs) — a bare `#NNN` autolinks to GitHub issues and **404s** (our task/idea/blocker ids ≠ GitHub's). Write the hall link `[#NNN](<buildersOrigin>#/task/NNN)` — using your instance's hall origin (`domains.buildersOrigin`), which renders as a clean `#NNN`; plain `task NNN` is fine too. Enforced in committed Markdown by `scripts/gds/linkify-refs.js` and at turn-end by the `.claude/hooks/stop-refcheck.js` Stop hook (a genuine `PR #8` is left alone).
159
-
160
- **At end of session:** `/builder-ship` (or `/builder-release`) the active claim, then review [`generative-ideas.md`](generative-ideas.md) — promote actionable ideas into new tasks, deliver in-scope small ones, delete bad ones.
161
-
162
- ---
163
-
164
- ## 9. Product versions (summary)
165
-
166
- > **Product-version scope is host context + live DB state — not portable core.** The named product versions, what each shipped, the carry-forward limits, and the roadmap framing are this instance's identity: see [`docs/project-context.md`](docs/project-context.md) for the human roadmap framing and [`limitations/`](limitations/) for the preserved per-version scope archives (e.g. [`limitations/v1-shipped.md`](limitations/v1-shipped.md)). The **live source of truth is the Bongos `versions` table** — run `/status`. This heading stays a stub so existing cross-references and anchors keep resolving (see the §3 note).
167
-
168
- ---
169
-
170
- ## 10. Architecture — current state
171
-
172
- The full architecture detail — live infra (domain, host, TLS, hardening), application stack, networking + render model, code & deploy flow, the complete DB schema (game + Bongos tables, columns, views), and the Bongos API surface — lives in **[`docs/architecture.md`](docs/architecture.md)**, **not in this portable core**: it describes *this* instance's live system, and a fresh instance authors its own. Read the detail file for any specifics.
173
-
174
- Two anchors are always true and stay here: **the Bongos DB is the source of truth for all live work state** (this index only ever *describes* the schema), and the Bongos API is mounted at **`/api/bongos/*`**. The architecture *rules* that are portable are the trust-boundary ones below.
175
-
176
- > **Decision rationale (why we chose what):** full index at [`docs/adr/README.md`](docs/adr/README.md) — the load-bearing methodology decisions are 0010 (Bongos work-tracker), 0016 (trust boundary), 0024 (MAS), and 0061/0062 (context-layer decomposition + core↔host split); instance-specific stack and infra ADRs are indexed there too.
177
-
178
- > **Permissions / builder ranks: the DB enforces, markdown only describes.** Authority lives in `builders.rank` on the prod DB, checked server-side per request with **no caching**. A builder editing local files (CLAUDE.md, skills, `settings.json`, hooks) cannot grant themselves authority. The rank ladder, what's gated, the local-edit failure modes, and the **no-hardcoded-admin-identity rule** (enforced by `scripts/gds/audit-authorship.sh` — no rank or builder identity is ever baked into a file) are all in **[`docs/canonical-permissions.md`](docs/canonical-permissions.md)**; the decision is [ADR 0016](docs/adr/<redacted>.md).
179
-
180
- > **🔒 Product builders build the product, not the platform they stand on.** The permission/pipeline internals an instance runs on — the rank/authz machinery, the ship/grade/deploy pipeline, DB `migrations/`, `infra/`, and the trust-boundary docs — are vendored Cloud Bongos core, not instance product surface. Landing code is Bongos's job: claim a task and run `/builder-ship`, never a raw `git push`/`ssh`/deploy. **Who may modify that core, the rank floor that gates it, and the hard enforcement** (protected-path glob, pre-push hook, grader pre-pass, post-push main audit) live in [`docs/canonical-permissions.md`](docs/canonical-permissions.md) and [ADR 0043](docs/adr/<redacted>.md) — editing local files can't grant that authority.
181
-
182
- ---
183
-
184
- ## 11. File Map — Where Things Live
185
-
186
- The full repo tree — project root, `migrations/`, `scripts/`, `src/`, `public*/`, `art/`, `tests/`, `.claude/skills/`, `.claude/scheduled-tasks/`, and the deploy-host layout — lives in **[`docs/file-map.md`](docs/file-map.md)**, the single source for the tree. Split out of this index to keep CLAUDE.md lean.
187
-
188
- ---
189
-
190
- ## 12. Session Update Protocol
191
-
192
- **At the START of every session**, before doing anything else:
193
-
194
- 1. **Run `/builder-start`** to see what's claimable. Confirm with the owner which task to claim.
195
- 2. **Run `/builder-claim N`** before starting work. The claim is what makes parallel sessions safe.
196
-
197
- At the **end of every session**, before signing off:
198
-
199
- 1. **Resolve your claim.** `/builder-ship` (with handoff notes + value summary) on success, `/builder-release` on abandonment. Bongos records the session log entry and awards credits.
200
- 2. **Write a session log entry as its own file** at [`docs/session-logs/YYYY-MM-DD-<slug>.md`](docs/session-logs/) using [`docs/handoff-template.md`](docs/handoff-template.md). **Do not hand-edit the §13 index** — the recent-sessions snippet there and the full [`docs/session-log-index.md`](docs/session-log-index.md) are generated from the files and regenerate at ship (`scripts/gds/gen-session-index.js`); just drop your dated file. For single-task sessions, the Bongos `session_logs` row is sufficient and a separate file isn't needed.
201
- 3. **Review the idea_inbox** via `GET /api/bongos/inbox` (or run the `/idea-triage` skill — recommended daily). Promote actionable ideas into new tasks; mark stale ones discarded.
202
- 4. **Update detail files** if anything changed: new gotcha → long-form recipe under [`docs/recipes/`](docs/recipes/) OR short-form rule via `node scripts/gds/learning-capture.js`; new blocker → `POST /api/bongos/blockers` (the markdown file is frozen archive); decision made → new ADR. If a version has no king-doc yet, capture version-related notes in `idea_inbox` + that version's tasks until its guided review pass produces the scope archive.
203
- 5. **Update [`docs/architecture.md`](docs/architecture.md)** if the live system changed (§10 here is only an orientation + link).
204
- 6. **Update [`docs/file-map.md`](docs/file-map.md)** if files or folders were added/moved/deleted (§11 here is only an orientation + link).
205
- - *These "remember to update the detail files" steps (4–6) are backstopped mechanically:* `docs/repo-map.md`'s **staleness flags** (task 2013) list docs whose internal links no longer resolve — a regenerated signal of what drifted, so the touch-up is prompted, not left to memory.
206
- 7. **No session-log index chore.** The §13 snippet + [`docs/session-log-index.md`](docs/session-log-index.md) regenerate from the files at ship — never hand-edit them. (Compressing very old prose into [`docs/session-log-archive.md`](docs/session-log-archive.md) is optional housekeeping for the on-disk corpus, not a per-session context-budget step.)
207
-
208
- If nothing changed in a section, leave it alone — don't churn.
209
-
210
- ### Daily cadence skills (run once per day, not per session)
211
-
212
- Two manual slash-commands exist to keep the methodology surfaces from accumulating drift. Run each once per day (any session can pick them up; doesn't matter which one, as long as it happens):
213
-
214
- - **`/idea-triage`** — walk the open `idea_inbox` rows. For each: promote (→ task), discard, merge with another, or defer. Keeps the inbox actionable; deferring is fine but the cadence is the discipline.
215
- - **`/blocker-review`** — walk the open `blockers` rows. For each: resolved (auto-promotes linked tasks via DB trigger), still blocked (with a note), or escalate (surface to the owner / external ask).
216
-
217
- Both are NOT scheduled cron tasks — they're invoked manually via slash command at the start or end of any session. If a day passes without either running, the queues quietly grow; running them is the structural cure for the markdown-graveyard pattern that Phases 0–3 dismantled.
218
-
219
- > **`/merge-mode` is *not* a daily chore — don't run it on a schedule or tell builders to.** The server lands merges itself: green PRs auto-merge, a 5-min reconciler flips `confirmed → shipped`, and the [ADR 0082](docs/adr/<redacted>.md) resolver self-heals generated-file conflicts. It's the **rare manual fallback** for a strand still stuck after the ~5-min sweep (e.g. a non-generated-file conflict the server can't resolve) — reach for it then, not before.
220
-
221
- In addition, ~17 scheduled routines under [`.claude/scheduled-tasks/`](.claude/scheduled-tasks/) run autonomously on cron (e.g. `overnight-code-review`, `idea-triage-nightly`, `overnight-builder`, `bfg`, `security-review-weekly`). They complement the manual cadence skills so every methodology surface keeps flowing without per-session tax. Each is **instance-wide** (one scheduled run per instance, not one cron per builder — per-builder effects come from iterating builders in the routine body); which are on by default, their cadence, and which need the autonomy flag armed is the portability contract [`config/scheduled-routines.json`](config/scheduled-routines.json) ([ADR 0115](docs/adr/<redacted>.md)).
222
-
223
- ---
224
-
225
- ## 13. Session Log
226
-
227
- Session-log **prose** lives one file per session under [`docs/session-logs/`](docs/session-logs/) — `YYYY-MM-DD-<slug>.md`, written from [`docs/handoff-template.md`](docs/handoff-template.md) (older entries compressed into [`docs/session-log-archive.md`](docs/session-log-archive.md)); the DB session corpus (`session_logs` + the BFG `session_records`) is the structured record. The index is **generated**: full history in [`docs/session-log-index.md`](docs/session-log-index.md), and the recent slice below is regenerated at ship by `scripts/gds/gen-session-index.js` (the `gen-diagrams`/`gen-repo-map` pattern — [ADR 0062](docs/adr/<redacted>.md) §8). **Do not hand-edit the list below or the index** — write your dated file and both regenerate; generating from real files means a link can never dangle (retires the recurring §13 hand-maintenance drift).
228
-
229
- <!-- BEGIN GENERATED SESSION-LOG SNIPPET (scripts/gds/gen-session-index.js — do not hand-edit) -->
230
- **Recent sessions** (newest 10 — full history in [`docs/session-log-index.md`](docs/session-log-index.md)):
231
-
232
- - [2026-07-07 — Branded project-creation experience on cloudbongos.com (goal 35)](docs/session-logs/<redacted>.md)
233
- - [2026-07-04 — Planning session: "Robust, versioned, easy-to-call public API" (BONGOS-V1 goal 36)](docs/session-logs/<redacted>.md)
234
- - [2026-07-03 — Roadmap tab, batch-claim bug fixes, hall UI backlog seed](docs/session-logs/<redacted>.md)
235
- - [2026-07-03 — Hall UI redesign: dashboard shell, neutral voice, dark mode + the Goals page](docs/session-logs/<redacted>.md)
236
- - [2026-07-03 — Governance planning session: <redacted> roles & permissions (BONGOS-V1)](docs/session-logs/<redacted>.md)
237
- - [2026-07-03 — Cloud Bongos sky-whale — foundational multi-angle turnaround (task 1743)](docs/session-logs/<redacted>.md)
238
- - [2026-07-03 — Claude Bongos + Gemini Bongos vanity doors → cloudbongos.com orbs](docs/session-logs/<redacted>.md)
239
- - [2026-07-02 — Bongo Buddha tickle animation: land seeds (1699) + solve within-clip style-drift (1710)](docs/session-logs/<redacted>.md)
240
- - [2026-06-26 — Land Builder 25's world-building plan into V2 (task 1569)](docs/session-logs/<redacted>.md)
241
- - [2026-06-26 — Cloud Bongos ↔ Example separation: gap analysis + seed the foundation tasks](docs/session-logs/<redacted>.md)
242
- <!-- END GENERATED SESSION-LOG SNIPPET -->
14
+ _To work ON the platform core itself, use the standalone @bongos/core source repository,
15
+ not this vendored copy._
package/bin/bongos.js CHANGED
@@ -69,6 +69,7 @@ if (VERSION === '0.0.0') { try { VERSION = require('../package.json').version ||
69
69
  // api.js caller (e.g. waking your box is just POST /box/ensure).
70
70
  const VERBS = {
71
71
  start: { script: 'start.js', group: 'work', summary: 'List tasks you can claim right now' },
72
+ task: { script: 'task.js', group: 'work', summary: 'Create or show a task (bongos task new --title … --description …)' },
72
73
  claim: { script: 'claim.js', group: 'work', summary: 'Claim a task by id (bongos claim 1246)' },
73
74
  ship: { script: 'ship.js', group: 'work', summary: 'Grade, merge, and deploy your claimed task' },
74
75
  release: { script: 'release.js', group: 'work', summary: 'Cancel a claim — task returns to ready (no credits)' },
@@ -1,22 +1,22 @@
1
- # @cloudbongos/client
1
+ # @bongos/client
2
2
 
3
3
  A **generated**, zero-dependency typed client for the Bongos API — produced from
4
4
  `docs/api/openapi.json` by `scripts/gds/gen-api-client.js` (ADR 0118). Do not edit
5
5
  by hand; it regenerates when the spec changes, so it can never drift from the routes.
6
6
 
7
7
  - API version: **v1** (served at `/api/bongos/v1`)
8
- - 224 operations across 40 resource groups
8
+ - 229 operations across 40 resource groups
9
9
 
10
10
  ## Install
11
11
 
12
12
  ```bash
13
- npm install @cloudbongos/client # internal registry / workspace path
13
+ npm install @bongos/client # internal registry / workspace path
14
14
  ```
15
15
 
16
16
  ## Use
17
17
 
18
18
  ```js
19
- import { createClient, ApiError } from '@cloudbongos/client';
19
+ import { createClient, ApiError } from '@bongos/client';
20
20
 
21
21
  const api = createClient({
22
22
  baseUrl: 'https://example.com/api/bongos/v1', // or omit for same-origin (browser)
@@ -1,8 +1,11 @@
1
- // @cloudbongos/client (browser-global build) — GENERATED from index.mjs by
1
+ // @bongos/client (browser-global build) — GENERATED from index.mjs by
2
2
  // scripts/gds/gen-api-client.js. DO NOT EDIT BY HAND. Exposes window.BongosClient
3
3
  // for classic <script> pages. Same behavior as the ESM build.
4
4
  (function (global) {
5
5
  'use strict';
6
+ // @bongos/client — GENERATED from the OpenAPI spec by
7
+ // scripts/gds/gen-api-client.js (task 1995 / ADR 0118). DO NOT EDIT BY HAND —
8
+ // regenerate on spec change. Zero deps; uses the platform fetch.
6
9
 
7
10
  const API_VERSION = "v1";
8
11
  const DEFAULT_BASE_URL = "/api/bongos/v1";
@@ -304,10 +307,14 @@ function createClient(opts = {}) {
304
307
  patchGoalsIdMembersBuilderId: (args) => request("PATCH", "/goals/{id}/members/{builderId}", { hasBody: true }, args),
305
308
  // POST /goals/{id}/reopen — rank: metic+archon — POST /goals/:id/reopen
306
309
  postGoalsIdReopen: (args) => request("POST", "/goals/{id}/reopen", { hasBody: true }, args),
310
+ // GET /goals/{id}/requests — rank: any-builder — GET /goals/:id/requests
311
+ getGoalsIdRequests: (args) => request("GET", "/goals/{id}/requests", { hasBody: false }, args),
307
312
  // POST /goals/{id}/requests — rank: any-builder — POST /goals/:id/requests
308
313
  postGoalsIdRequests: (args) => request("POST", "/goals/{id}/requests", { hasBody: true }, args),
309
314
  // POST /goals/{id}/requests/{reqId}/respond — rank: any-builder — POST /goals/:id/requests/:reqId/respond
310
315
  postGoalsIdRequestsReqIdRespond: (args) => request("POST", "/goals/{id}/requests/{reqId}/respond", { hasBody: true }, args),
316
+ // POST /goals/{id}/requests/{reqId}/withdraw — rank: any-builder — POST /goals/:id/requests/:reqId/withdraw
317
+ postGoalsIdRequestsReqIdWithdraw: (args) => request("POST", "/goals/{id}/requests/{reqId}/withdraw", { hasBody: true }, args),
311
318
  // POST /goals/{id}/scope — rank: metic+archon — POST /goals/:id/scope
312
319
  postGoalsIdScope: (args) => request("POST", "/goals/{id}/scope", { hasBody: true }, args),
313
320
  // POST /goals/{id}/tasks — rank: any-builder — POST /goals/:id/tasks
@@ -440,6 +447,8 @@ function createClient(opts = {}) {
440
447
  postModulesKeyEnable: (args) => request("POST", "/modules/{key}/enable", { hasBody: true }, args),
441
448
  // POST /modules/{key}/submit — rank: metic+archon — POST /modules/:key/submit
442
449
  postModulesKeySubmit: (args) => request("POST", "/modules/{key}/submit", { hasBody: true }, args),
450
+ // GET /modules/submissions — rank: metic+archon — GET /modules/submissions
451
+ getModulesSubmissions: (args) => request("GET", "/modules/submissions", { hasBody: false }, args),
443
452
  },
444
453
  "overrideRequests": {
445
454
  // GET /override-requests — rank: archon — GET /override-requests
@@ -454,6 +463,8 @@ function createClient(opts = {}) {
454
463
  getProvisioningFleetCostLedger: (args) => request("GET", "/provisioning/fleet/cost-ledger", { hasBody: false }, args),
455
464
  // GET /provisioning/github-app/callback — rank: public — GET /provisioning/github-app/callback
456
465
  getProvisioningGithubAppCallback: (args) => request("GET", "/provisioning/github-app/callback", { hasBody: false }, args),
466
+ // GET /provisioning/github-app/status — rank: public — GET /provisioning/github-app/status
467
+ getProvisioningGithubAppStatus: (args) => request("GET", "/provisioning/github-app/status", { hasBody: false }, args),
457
468
  // GET /provisioning/health — rank: public — GET /provisioning/health
458
469
  getProvisioningHealth: (args) => request("GET", "/provisioning/health", { hasBody: false }, args),
459
470
  // GET /provisioning/instances — rank: any-builder — GET /provisioning/instances
@@ -468,6 +479,8 @@ function createClient(opts = {}) {
468
479
  postProvisioningInstancesIdGithubApp: (args) => request("POST", "/provisioning/instances/{id}/github-app", { hasBody: true }, args),
469
480
  // POST /provisioning/instances/{id}/teardown — rank: any-builder — POST /provisioning/instances/:id/teardown
470
481
  postProvisioningInstancesIdTeardown: (args) => request("POST", "/provisioning/instances/{id}/teardown", { hasBody: true }, args),
482
+ // GET /provisioning/onboard-plan — rank: public — GET /provisioning/onboard-plan
483
+ getProvisioningOnboardPlan: (args) => request("GET", "/provisioning/onboard-plan", { hasBody: false }, args),
471
484
  // GET /provisioning/tls-check — rank: public — GET /provisioning/tls-check
472
485
  getProvisioningTlsCheck: (args) => request("GET", "/provisioning/tls-check", { hasBody: false }, args),
473
486
  },
@@ -1,6 +1,9 @@
1
- // @cloudbongos/client (CommonJS build) — GENERATED from index.mjs by
1
+ // @bongos/client (CommonJS build) — GENERATED from index.mjs by
2
2
  // scripts/gds/gen-api-client.js. DO NOT EDIT BY HAND. Same behavior as the ESM
3
3
  // build; only the module bindings differ. For require()-based consumers.
4
+ // @bongos/client — GENERATED from the OpenAPI spec by
5
+ // scripts/gds/gen-api-client.js (task 1995 / ADR 0118). DO NOT EDIT BY HAND —
6
+ // regenerate on spec change. Zero deps; uses the platform fetch.
4
7
  'use strict';
5
8
 
6
9
  const API_VERSION = "v1";
@@ -303,10 +306,14 @@ function createClient(opts = {}) {
303
306
  patchGoalsIdMembersBuilderId: (args) => request("PATCH", "/goals/{id}/members/{builderId}", { hasBody: true }, args),
304
307
  // POST /goals/{id}/reopen — rank: metic+archon — POST /goals/:id/reopen
305
308
  postGoalsIdReopen: (args) => request("POST", "/goals/{id}/reopen", { hasBody: true }, args),
309
+ // GET /goals/{id}/requests — rank: any-builder — GET /goals/:id/requests
310
+ getGoalsIdRequests: (args) => request("GET", "/goals/{id}/requests", { hasBody: false }, args),
306
311
  // POST /goals/{id}/requests — rank: any-builder — POST /goals/:id/requests
307
312
  postGoalsIdRequests: (args) => request("POST", "/goals/{id}/requests", { hasBody: true }, args),
308
313
  // POST /goals/{id}/requests/{reqId}/respond — rank: any-builder — POST /goals/:id/requests/:reqId/respond
309
314
  postGoalsIdRequestsReqIdRespond: (args) => request("POST", "/goals/{id}/requests/{reqId}/respond", { hasBody: true }, args),
315
+ // POST /goals/{id}/requests/{reqId}/withdraw — rank: any-builder — POST /goals/:id/requests/:reqId/withdraw
316
+ postGoalsIdRequestsReqIdWithdraw: (args) => request("POST", "/goals/{id}/requests/{reqId}/withdraw", { hasBody: true }, args),
310
317
  // POST /goals/{id}/scope — rank: metic+archon — POST /goals/:id/scope
311
318
  postGoalsIdScope: (args) => request("POST", "/goals/{id}/scope", { hasBody: true }, args),
312
319
  // POST /goals/{id}/tasks — rank: any-builder — POST /goals/:id/tasks
@@ -439,6 +446,8 @@ function createClient(opts = {}) {
439
446
  postModulesKeyEnable: (args) => request("POST", "/modules/{key}/enable", { hasBody: true }, args),
440
447
  // POST /modules/{key}/submit — rank: metic+archon — POST /modules/:key/submit
441
448
  postModulesKeySubmit: (args) => request("POST", "/modules/{key}/submit", { hasBody: true }, args),
449
+ // GET /modules/submissions — rank: metic+archon — GET /modules/submissions
450
+ getModulesSubmissions: (args) => request("GET", "/modules/submissions", { hasBody: false }, args),
442
451
  },
443
452
  "overrideRequests": {
444
453
  // GET /override-requests — rank: archon — GET /override-requests
@@ -453,6 +462,8 @@ function createClient(opts = {}) {
453
462
  getProvisioningFleetCostLedger: (args) => request("GET", "/provisioning/fleet/cost-ledger", { hasBody: false }, args),
454
463
  // GET /provisioning/github-app/callback — rank: public — GET /provisioning/github-app/callback
455
464
  getProvisioningGithubAppCallback: (args) => request("GET", "/provisioning/github-app/callback", { hasBody: false }, args),
465
+ // GET /provisioning/github-app/status — rank: public — GET /provisioning/github-app/status
466
+ getProvisioningGithubAppStatus: (args) => request("GET", "/provisioning/github-app/status", { hasBody: false }, args),
456
467
  // GET /provisioning/health — rank: public — GET /provisioning/health
457
468
  getProvisioningHealth: (args) => request("GET", "/provisioning/health", { hasBody: false }, args),
458
469
  // GET /provisioning/instances — rank: any-builder — GET /provisioning/instances
@@ -467,6 +478,8 @@ function createClient(opts = {}) {
467
478
  postProvisioningInstancesIdGithubApp: (args) => request("POST", "/provisioning/instances/{id}/github-app", { hasBody: true }, args),
468
479
  // POST /provisioning/instances/{id}/teardown — rank: any-builder — POST /provisioning/instances/:id/teardown
469
480
  postProvisioningInstancesIdTeardown: (args) => request("POST", "/provisioning/instances/{id}/teardown", { hasBody: true }, args),
481
+ // GET /provisioning/onboard-plan — rank: public — GET /provisioning/onboard-plan
482
+ getProvisioningOnboardPlan: (args) => request("GET", "/provisioning/onboard-plan", { hasBody: false }, args),
470
483
  // GET /provisioning/tls-check — rank: public — GET /provisioning/tls-check
471
484
  getProvisioningTlsCheck: (args) => request("GET", "/provisioning/tls-check", { hasBody: false }, args),
472
485
  },
@@ -1,4 +1,4 @@
1
- // GENERATED — TypeScript types for @cloudbongos/client (task 1995; field-level
1
+ // GENERATED — TypeScript types for @bongos/client (task 1995; field-level
2
2
  // request typing added in task 2050 / ADR 0118). DO NOT EDIT BY HAND.
3
3
  export declare const API_VERSION: string;
4
4
  export declare const DEFAULT_BASE_URL: string;
@@ -34,6 +34,7 @@ export interface GetDemoHealthResponse { module: unknown; ok: boolean; coreVersi
34
34
  export interface GetDiscordChannelsPlanResponse { ok: boolean; guild_id: unknown; op_count: unknown; ops: unknown; warnings: unknown }
35
35
  export interface GetDoneWhenPendingReviewResponse { criteria: unknown; count: unknown }
36
36
  export interface GetGoalsIdConflictsResponse { ok: boolean; goal_id: unknown; conflicts: unknown; cross_goals_considered: unknown }
37
+ export interface GetGoalsIdRequestsResponse { requests: unknown }
37
38
  export interface GetGoalsIdResponse { goal: unknown; members: unknown; criteria: unknown; dependencies: unknown }
38
39
  export interface GetGoalsResponse { goals: unknown }
39
40
  export interface GetGradesByBuilderResponse { window_days: unknown; builders: unknown }
@@ -54,11 +55,14 @@ export interface GetMemoryBfgBuildersBuilderIdFilesResponse { builder_id: unknow
54
55
  export interface GetMemoryFileResponse { builder_id: unknown; path: unknown; content: unknown; sha256: unknown; byte_len: unknown; mtime: unknown; updated_at: unknown; created_at: unknown }
55
56
  export interface GetMemoryFilesResponse { builder_id: unknown; count: unknown; files: unknown }
56
57
  export interface GetModulesResponse { modules: unknown; own_built: unknown; core_loaded: unknown; submit_pipeline_live: boolean }
58
+ export interface GetModulesSubmissionsResponse { submissions: unknown }
57
59
  export interface GetOverrideRequestsResponse { requests: unknown }
58
60
  export interface GetProvisioningFleetResponse { instances: unknown }
61
+ export interface GetProvisioningGithubAppStatusResponse { ok: boolean; status: unknown; ready: unknown; terminal: unknown; domain: unknown; instance_status: unknown }
59
62
  export interface GetProvisioningHealthResponse { module: unknown; ok: boolean; coreVersion: unknown }
60
63
  export interface GetProvisioningInstancesIdResponse { instance: unknown; open_intent: unknown }
61
64
  export interface GetProvisioningInstancesResponse { instances: unknown }
65
+ export interface GetProvisioningOnboardPlanResponse { mode: unknown; steps: unknown }
62
66
  export interface GetPublicBlockersIdResponse { blocker: unknown }
63
67
  export interface GetPublicBountyTableResponse { table: unknown; currency: unknown }
64
68
  export interface GetPublicGradesResponse { window_days: unknown; rolling: unknown; trend: unknown; threshold: unknown; grader_version: unknown }
@@ -177,6 +181,7 @@ export interface PostGoalsIdMembersResponse { ok: boolean; member: unknown }
177
181
  export interface PostGoalsIdReopenResponse { ok: boolean; goal: unknown }
178
182
  export interface PostGoalsIdRequestsReqIdRespondRequest { action: string }
179
183
  export interface PostGoalsIdRequestsReqIdRespondResponse { ok: boolean; action: unknown; request: unknown; member?: unknown }
184
+ export interface PostGoalsIdRequestsReqIdWithdrawResponse { ok: boolean; request: unknown }
180
185
  export interface PostGoalsIdRequestsRequest { note?: string }
181
186
  export interface PostGoalsIdRequestsResponse { ok: boolean; request: unknown }
182
187
  export interface PostGoalsIdScopeRequest { add: string[] }
@@ -205,6 +210,8 @@ export interface PostMemoryBuildersBuilderIdBfgWriteResponse { ok: boolean; buil
205
210
  export interface PostMemorySyncRequest { files?: unknown[] }
206
211
  export interface PostModulesKeyEnableRequest { enabled?: unknown }
207
212
  export interface PostModulesKeyEnableResponse { ok: boolean; key: unknown; enabled: unknown; note: unknown }
213
+ export interface PostModulesKeySubmitRequest { signed_by?: string }
214
+ export interface PostModulesKeySubmitResponse { ok: boolean; submission: unknown }
208
215
  export interface PostOverrideRequestsIdDecideRequest { decision: string; note?: string }
209
216
  export interface PostProvisioningInstancesIdForceTeardownResponse { ok: boolean; queued: unknown; action: unknown; status: unknown; message: unknown }
210
217
  export interface PostProvisioningInstancesIdGithubAppRequest { account?: string }
@@ -483,10 +490,14 @@ export interface BongosClient {
483
490
  patchGoalsIdMembersBuilderId(args: RequestArgs & { body: PatchGoalsIdMembersBuilderIdRequest }): Promise<PatchGoalsIdMembersBuilderIdResponse>;
484
491
  /** POST /goals/{id}/reopen — rank: metic+archon */
485
492
  postGoalsIdReopen(args?: RequestArgs): Promise<PostGoalsIdReopenResponse>;
493
+ /** GET /goals/{id}/requests — rank: any-builder */
494
+ getGoalsIdRequests(args?: RequestArgs): Promise<GetGoalsIdRequestsResponse>;
486
495
  /** POST /goals/{id}/requests — rank: any-builder */
487
496
  postGoalsIdRequests(args?: RequestArgs & { body?: PostGoalsIdRequestsRequest }): Promise<PostGoalsIdRequestsResponse>;
488
497
  /** POST /goals/{id}/requests/{reqId}/respond — rank: any-builder */
489
498
  postGoalsIdRequestsReqIdRespond(args: RequestArgs & { body: PostGoalsIdRequestsReqIdRespondRequest }): Promise<PostGoalsIdRequestsReqIdRespondResponse>;
499
+ /** POST /goals/{id}/requests/{reqId}/withdraw — rank: any-builder */
500
+ postGoalsIdRequestsReqIdWithdraw(args?: RequestArgs): Promise<PostGoalsIdRequestsReqIdWithdrawResponse>;
490
501
  /** POST /goals/{id}/scope — rank: metic+archon */
491
502
  postGoalsIdScope(args: RequestArgs & { body: PostGoalsIdScopeRequest }): Promise<PostGoalsIdScopeResponse>;
492
503
  /** POST /goals/{id}/tasks — rank: any-builder */
@@ -618,7 +629,9 @@ export interface BongosClient {
618
629
  /** POST /modules/{key}/enable — rank: metic+archon */
619
630
  postModulesKeyEnable(args?: RequestArgs & { body?: PostModulesKeyEnableRequest }): Promise<PostModulesKeyEnableResponse>;
620
631
  /** POST /modules/{key}/submit — rank: metic+archon */
621
- postModulesKeySubmit(args?: RequestArgs): Promise<ApiResponse>;
632
+ postModulesKeySubmit(args?: RequestArgs & { body?: PostModulesKeySubmitRequest }): Promise<PostModulesKeySubmitResponse>;
633
+ /** GET /modules/submissions — rank: metic+archon */
634
+ getModulesSubmissions(args?: RequestArgs): Promise<GetModulesSubmissionsResponse>;
622
635
  };
623
636
  "overrideRequests": {
624
637
  /** GET /override-requests — rank: archon */
@@ -633,6 +646,8 @@ export interface BongosClient {
633
646
  getProvisioningFleetCostLedger(args?: RequestArgs): Promise<ApiResponse>;
634
647
  /** GET /provisioning/github-app/callback — rank: public */
635
648
  getProvisioningGithubAppCallback(args?: RequestArgs): Promise<ApiResponse>;
649
+ /** GET /provisioning/github-app/status — rank: public */
650
+ getProvisioningGithubAppStatus(args?: RequestArgs): Promise<GetProvisioningGithubAppStatusResponse>;
636
651
  /** GET /provisioning/health — rank: public */
637
652
  getProvisioningHealth(args?: RequestArgs): Promise<GetProvisioningHealthResponse>;
638
653
  /** GET /provisioning/instances — rank: any-builder */
@@ -647,6 +662,8 @@ export interface BongosClient {
647
662
  postProvisioningInstancesIdGithubApp(args?: RequestArgs & { body?: PostProvisioningInstancesIdGithubAppRequest }): Promise<PostProvisioningInstancesIdGithubAppResponse>;
648
663
  /** POST /provisioning/instances/{id}/teardown — rank: any-builder */
649
664
  postProvisioningInstancesIdTeardown(args?: RequestArgs): Promise<PostProvisioningInstancesIdTeardownResponse>;
665
+ /** GET /provisioning/onboard-plan — rank: public */
666
+ getProvisioningOnboardPlan(args?: RequestArgs): Promise<GetProvisioningOnboardPlanResponse>;
650
667
  /** GET /provisioning/tls-check — rank: public */
651
668
  getProvisioningTlsCheck(args?: RequestArgs): Promise<ApiResponse>;
652
669
  };
@@ -1,4 +1,4 @@
1
- // @cloudbongos/client — GENERATED from the OpenAPI spec by
1
+ // @bongos/client — GENERATED from the OpenAPI spec by
2
2
  // scripts/gds/gen-api-client.js (task 1995 / ADR 0118). DO NOT EDIT BY HAND —
3
3
  // regenerate on spec change. Zero deps; uses the platform fetch.
4
4
  'use strict';
@@ -303,10 +303,14 @@ export function createClient(opts = {}) {
303
303
  patchGoalsIdMembersBuilderId: (args) => request("PATCH", "/goals/{id}/members/{builderId}", { hasBody: true }, args),
304
304
  // POST /goals/{id}/reopen — rank: metic+archon — POST /goals/:id/reopen
305
305
  postGoalsIdReopen: (args) => request("POST", "/goals/{id}/reopen", { hasBody: true }, args),
306
+ // GET /goals/{id}/requests — rank: any-builder — GET /goals/:id/requests
307
+ getGoalsIdRequests: (args) => request("GET", "/goals/{id}/requests", { hasBody: false }, args),
306
308
  // POST /goals/{id}/requests — rank: any-builder — POST /goals/:id/requests
307
309
  postGoalsIdRequests: (args) => request("POST", "/goals/{id}/requests", { hasBody: true }, args),
308
310
  // POST /goals/{id}/requests/{reqId}/respond — rank: any-builder — POST /goals/:id/requests/:reqId/respond
309
311
  postGoalsIdRequestsReqIdRespond: (args) => request("POST", "/goals/{id}/requests/{reqId}/respond", { hasBody: true }, args),
312
+ // POST /goals/{id}/requests/{reqId}/withdraw — rank: any-builder — POST /goals/:id/requests/:reqId/withdraw
313
+ postGoalsIdRequestsReqIdWithdraw: (args) => request("POST", "/goals/{id}/requests/{reqId}/withdraw", { hasBody: true }, args),
310
314
  // POST /goals/{id}/scope — rank: metic+archon — POST /goals/:id/scope
311
315
  postGoalsIdScope: (args) => request("POST", "/goals/{id}/scope", { hasBody: true }, args),
312
316
  // POST /goals/{id}/tasks — rank: any-builder — POST /goals/:id/tasks
@@ -439,6 +443,8 @@ export function createClient(opts = {}) {
439
443
  postModulesKeyEnable: (args) => request("POST", "/modules/{key}/enable", { hasBody: true }, args),
440
444
  // POST /modules/{key}/submit — rank: metic+archon — POST /modules/:key/submit
441
445
  postModulesKeySubmit: (args) => request("POST", "/modules/{key}/submit", { hasBody: true }, args),
446
+ // GET /modules/submissions — rank: metic+archon — GET /modules/submissions
447
+ getModulesSubmissions: (args) => request("GET", "/modules/submissions", { hasBody: false }, args),
442
448
  },
443
449
  "overrideRequests": {
444
450
  // GET /override-requests — rank: archon — GET /override-requests
@@ -453,6 +459,8 @@ export function createClient(opts = {}) {
453
459
  getProvisioningFleetCostLedger: (args) => request("GET", "/provisioning/fleet/cost-ledger", { hasBody: false }, args),
454
460
  // GET /provisioning/github-app/callback — rank: public — GET /provisioning/github-app/callback
455
461
  getProvisioningGithubAppCallback: (args) => request("GET", "/provisioning/github-app/callback", { hasBody: false }, args),
462
+ // GET /provisioning/github-app/status — rank: public — GET /provisioning/github-app/status
463
+ getProvisioningGithubAppStatus: (args) => request("GET", "/provisioning/github-app/status", { hasBody: false }, args),
456
464
  // GET /provisioning/health — rank: public — GET /provisioning/health
457
465
  getProvisioningHealth: (args) => request("GET", "/provisioning/health", { hasBody: false }, args),
458
466
  // GET /provisioning/instances — rank: any-builder — GET /provisioning/instances
@@ -467,6 +475,8 @@ export function createClient(opts = {}) {
467
475
  postProvisioningInstancesIdGithubApp: (args) => request("POST", "/provisioning/instances/{id}/github-app", { hasBody: true }, args),
468
476
  // POST /provisioning/instances/{id}/teardown — rank: any-builder — POST /provisioning/instances/:id/teardown
469
477
  postProvisioningInstancesIdTeardown: (args) => request("POST", "/provisioning/instances/{id}/teardown", { hasBody: true }, args),
478
+ // GET /provisioning/onboard-plan — rank: public — GET /provisioning/onboard-plan
479
+ getProvisioningOnboardPlan: (args) => request("GET", "/provisioning/onboard-plan", { hasBody: false }, args),
470
480
  // GET /provisioning/tls-check — rank: public — GET /provisioning/tls-check
471
481
  getProvisioningTlsCheck: (args) => request("GET", "/provisioning/tls-check", { hasBody: false }, args),
472
482
  },
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "@cloudbongos/client",
2
+ "name": "@bongos/client",
3
3
  "version": "0.0.2",
4
4
  "description": "Generated typed client for the Bongos API (ADR 0118). Do not edit by hand.",
5
5
  "type": "module",
@@ -33,6 +33,8 @@ The conversion endpoint is unauthenticated (the code is the auth), so the web ti
33
33
 
34
34
  `redirect_url` = the **mothership** callback (the instance can't do the exchange). `callback_urls` = the **instance's** own `/api/gds/auth/web/callback` (what `auth.js` actually builds) **and** the `/api/bongos/...` alias, so sign-in works regardless of which prefix a build emits. `default_permissions: {}` (sign-in needs none), `hook_attributes.active:false`, `public:false`. Personal vs org differs only in the POST URL (derived from the repo owner); the App works for sign-in either way.
35
35
 
36
+ **App name (tasks 2093 → 2095).** GitHub App names are globally unique across all of GitHub, so a bare project slug (e.g. `demo`) is almost always already taken. The auto name is the **instance domain** (e.g. `demo.cloudbongos.com`): a domain is inherently unique (so it never collides) and it reads perfectly on GitHub's sign-in consent screen, where the name is shown as *"`<name>` by `<owner>` … will redirect to `https://<domain>`"* — the name IS the destination. GitHub keeps the dots in the display name (only the internal slug is transformed) and caps it at 34 chars. **Fallback** (no domain, or a domain over 34 chars): brand-qualify the project — `<mothership brand> - <project>`, e.g. `Cloud Bongos - demo`, from the mothership's own `branding().identity.productName` (portable, not hardcoded) — still far less collision-prone than a bare slug. Either way it is only a default the owner can rename on GitHub's confirmation screen.
37
+
36
38
  ## Consequences
37
39
 
38
40
  - **Back-compat preserved.** An instance already on an OAuth App keeps working untouched — `loadGithubCreds()` reads the same `<PREFIX>_GITHUB_CLIENT_ID/SECRET`. The manifest path is the new *default* for fresh instances; nothing about `auth.js` changed.