@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.
- package/.bongos-core.json +154 -83
- package/CLAUDE.md +11 -238
- package/bin/bongos.js +1 -0
- package/clients/bongos-client/README.md +4 -4
- package/clients/bongos-client/bongos-client.global.js +14 -1
- package/clients/bongos-client/index.cjs +14 -1
- package/clients/bongos-client/index.d.ts +19 -2
- package/clients/bongos-client/index.mjs +11 -1
- package/clients/bongos-client/package.json +1 -1
- package/docs/adr/0133-github-app-manifest-onboarding-signin.md +2 -0
- package/docs/adr/0134-private-first-npm-distribution.md +20 -6
- package/docs/adr/0135-module-upstream-submission-interim-queue.md +34 -0
- package/docs/adr/README.md +5 -4
- package/docs/api/openapi.json +315 -6
- package/docs/api-reference.md +10 -5
- package/docs/architecture.md +1 -1
- package/docs/file-map.md +2 -2
- package/docs/modules-contract.md +2 -0
- package/docs/recipes/instance-deploy.md +4 -4
- package/docs/recipes/instance-first-run.md +51 -0
- package/docs/recipes/packaging-the-core.md +5 -5
- package/docs/recipes/private-npm-distribution.md +22 -12
- package/docs/recipes/self-host.md +1 -1
- package/docs/recipes/upgrading-the-core.md +8 -8
- package/migrations/core_191_module_submissions.sql +45 -0
- package/modules/autonomy/CLAUDE.md +11 -45
- package/modules/builder-settings/CLAUDE.md +11 -54
- package/modules/dev-box/CLAUDE.md +11 -34
- package/modules/discord/CLAUDE.md +11 -46
- package/modules/economy/CLAUDE.md +11 -44
- package/modules/grading/CLAUDE.md +11 -38
- package/modules/hall-ui/CLAUDE.md +11 -57
- package/modules/hall-ui/public/goals-page.js +227 -22
- package/modules/hall-ui/public/goals.html +16 -0
- package/modules/hall-ui/public/new-project-wizard.js +5 -4
- package/modules/ideas/CLAUDE.md +11 -33
- package/modules/lifecycle/CLAUDE.md +11 -59
- package/modules/lifecycle/routes/goals.js +80 -0
- package/modules/memory/CLAUDE.md +11 -36
- package/modules/onboarding/CLAUDE.md +11 -51
- package/modules/security/CLAUDE.md +11 -40
- package/modules/sessions/CLAUDE.md +11 -35
- package/modules/status-ui/CLAUDE.md +11 -43
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/public-landing/create.html +58 -12
- package/public-landing/index.html +40 -21
- package/scripts/gds/CLAUDE.md +11 -140
- package/scripts/gds/claude-materialize.js +151 -18
- package/scripts/gds/claude-md-template.js +84 -0
- package/scripts/gds/cli-lib.js +112 -2
- package/scripts/gds/gen-api-client.js +10 -10
- package/scripts/gds/init.js +53 -13
- package/scripts/gds/migration-namespace.js +1 -1
- package/scripts/gds/module.js +118 -4
- package/scripts/gds/npmrc.js +93 -0
- package/scripts/gds/onboard.js +13 -24
- package/scripts/gds/package-core.js +56 -14
- package/scripts/gds/provision.js +102 -17
- package/scripts/gds/seed-adopt-tasks.js +1 -1
- package/scripts/gds/status.js +6 -1
- package/scripts/gds/task.js +166 -0
- package/scripts/gds/upgrade.js +58 -18
- package/src/bongos/CLAUDE.md +11 -60
- package/src/bongos/auth.js +11 -0
- package/src/bongos/module-submissions.js +56 -0
- package/src/bongos/route-rank-check.js +6 -0
- package/src/bongos/routes/CLAUDE.md +11 -39
- package/src/bongos/routes/auth.js +6 -1
- package/src/bongos/routes/modules.js +123 -21
- package/src/instance-config.js +1 -1
- package/src/module-api.js +13 -1
- package/tests/claude_materialize.mjs +105 -0
- package/tests/device_flow_start.mjs +73 -0
- package/tests/first_run_engine_check.mjs +79 -0
- package/tests/goal_membership_requests.mjs +33 -3
- package/tests/hook_user_agents.mjs +62 -0
- package/tests/init.mjs +59 -6
- package/tests/instance_mismatch_guard.mjs +101 -0
- package/tests/module_cli.mjs +130 -2
- package/tests/module_submissions.mjs +135 -0
- package/tests/npmrc.mjs +105 -0
- package/tests/onboard.mjs +49 -0
- package/tests/package_core.mjs +68 -22
- package/tests/platform_boot.mjs +5 -2
- package/tests/provision.mjs +107 -8
- package/tests/provisioning_github_app_routes.mjs +29 -2
- package/tests/served_paths_shipped.mjs +2 -2
- package/tests/task_cli.mjs +99 -0
- package/tests/upgrade.mjs +89 -25
package/CLAUDE.md
CHANGED
|
@@ -1,242 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @bongos/core — installed platform dependency (not your project's CLAUDE.md)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
# @
|
|
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
|
-
-
|
|
8
|
+
- 229 operations across 40 resource groups
|
|
9
9
|
|
|
10
10
|
## Install
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
npm install @
|
|
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 '@
|
|
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
|
-
// @
|
|
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
|
-
// @
|
|
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 @
|
|
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<
|
|
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
|
-
// @
|
|
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
|
},
|
|
@@ -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.
|