@bongos/core 1.18.19 → 1.19.3
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 +547 -197
- package/.claude/skills/builder-box/SKILL.md +1 -1
- package/.claude/skills/builder-claim/SKILL.md +1 -1
- package/.claude/skills/goal-create/SKILL.md +1 -1
- package/.claude/skills/idea-triage/SKILL.md +1 -1
- package/.claude/skills/planning-session/SKILL.md +5 -5
- package/.claude/skills/scan-before-install/SKILL.md +165 -0
- package/bin/bongos.js +33 -7
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +63 -41
- package/clients/bongos-client/index.cjs +63 -41
- package/clients/bongos-client/index.d.ts +78 -44
- package/clients/bongos-client/index.mjs +63 -41
- package/docs/adr/0020-security-model-public-stub.md +1 -1
- package/docs/adr/0097-one-active-claim-per-session-and-worktree-binding.md +2 -0
- package/docs/adr/0137-upstream-publish-policy-manual-owner-gated.md +1 -1
- package/docs/adr/0144-devbox-rehome-onto-cloudbongos-plane.md +1 -1
- package/docs/adr/0151-governance-permissions-as-atom-ranks-as-roles.md +2 -1
- package/docs/adr/0155-adopt-private-repo-widen-oauth-scope.md +51 -0
- package/docs/adr/0156-user-set-display-name-wins.md +62 -0
- package/docs/adr/0157-archon-is-rank-and-identity-only.md +93 -0
- package/docs/adr/0158-choke-point-verdict-taxonomy.md +174 -0
- package/docs/adr/0159-merge-gate-reconciliation.md +88 -0
- package/docs/adr/0160-main-audit-repo-verifiable-caller.md +77 -0
- package/docs/adr/0161-publish-on-merge.md +34 -0
- package/docs/adr/README.md +9 -0
- package/docs/api/openapi.json +1209 -233
- package/docs/api-reference.md +61 -46
- package/docs/architecture.md +1 -1
- package/docs/canonical-permissions.md +61 -16
- package/docs/design/vanilla-hall-ui-redesign-scope.md +1 -1
- package/docs/file-map.md +4 -1
- package/docs/onboarding/diagrams/assertions.json +3 -3
- package/docs/recipes/core-release-pipeline.md +181 -0
- package/docs/recipes/packaging-the-core.md +2 -0
- package/docs/recipes/parallel-goal-waves.md +1 -3
- package/docs/recipes/private-npm-distribution.md +6 -2
- package/docs/recipes/upgrading-the-core.md +2 -0
- package/migrations/core_197_display_name_source.sql +56 -0
- package/migrations/core_204_rekey_active_claim_per_session_worktree.sql +77 -0
- package/migrations/core_205_versions_track_default.sql +28 -0
- package/modules/autonomy/routes/autonomy.js +1 -1
- package/modules/builder-settings/db.js +7 -1
- package/modules/dev-box/app/src/vendor/bongos-client.cjs +63 -41
- package/modules/dev-box/routes/box.js +11 -9
- package/modules/discord/auth.js +3 -1
- package/modules/discord/routes/discord.js +8 -2
- package/modules/discord/ship-broadcast.js +48 -1
- package/modules/governance/catalog.js +70 -20
- package/modules/governance/db.js +102 -0
- package/modules/governance/migrations/governance_006_version_create.sql +38 -0
- package/modules/governance/migrations/governance_007_delegate_archon_ops_to_metic.sql +72 -0
- package/modules/governance/routes/governance.js +235 -6
- package/modules/grading/grader-workers/index.js +18 -9
- package/modules/hall-ui/public/gate.js +6 -2
- package/modules/hall-ui/public/goals-page.js +6 -2
- package/modules/hall-ui/public/governance.css +100 -0
- package/modules/hall-ui/public/governance.html +77 -0
- package/modules/hall-ui/public/governance.js +353 -0
- package/modules/hall-ui/public/harbor.js +14 -8
- package/modules/hall-ui/public/instances-panel.js +3 -1
- package/modules/hall-ui/public/new-project-wizard.js +6 -0
- package/modules/hall-ui/public/people.html +51 -0
- package/modules/hall-ui/public/people.js +100 -0
- package/modules/hall-ui/public/profile.html +2 -1
- package/modules/hall-ui/public/profile.js +9 -3
- package/modules/hall-ui/public/sessions.js +4 -2
- package/modules/hall-ui/public/shell.js +28 -7
- package/modules/hall-ui/public/task-detail.js +6 -3
- package/modules/hall-ui/public/watch.js +17 -9
- package/modules/ideas/blockers.js +44 -7
- package/modules/ideas/routes/blockers.js +12 -7
- package/modules/ideas/routes/inbox.js +2 -2
- package/modules/lifecycle/db.js +84 -17
- package/modules/lifecycle/github-push.js +37 -10
- package/modules/lifecycle/publish-reconciler.js +128 -31
- package/modules/lifecycle/routes/claims.js +10 -4
- package/modules/lifecycle/routes/dependencies.js +2 -2
- package/modules/lifecycle/routes/done-when.js +4 -4
- package/modules/lifecycle/routes/gate-approvals.js +9 -3
- package/modules/lifecycle/routes/goals.js +5 -5
- package/modules/lifecycle/routes/tasks.js +99 -69
- package/modules/lifecycle/routes/versions.js +13 -2
- package/modules/lifecycle/ship-card.js +38 -7
- package/modules/memory/routes/memory.js +2 -2
- package/modules/onboarding/routes/access-requests.js +3 -3
- package/modules/platform-identity/routes/projects.js +10 -6
- package/modules/platform-identity/routes/scouting.js +2 -2
- package/modules/provisioning/migrations/provisioning_004_onboard_mode.sql +30 -0
- package/modules/provisioning/provisioning.js +24 -6
- package/modules/provisioning/routes/provisioning.js +24 -6
- package/modules/security/artifact-scan/aggregate.js +133 -0
- package/modules/security/artifact-scan/detectors/capabilities.js +53 -0
- package/modules/security/artifact-scan/detectors/config-obfuscation.js +41 -0
- package/modules/security/artifact-scan/detectors/credentials.js +112 -0
- package/modules/security/artifact-scan/detectors/dependencies.js +115 -0
- package/modules/security/artifact-scan/detectors/hooks.js +116 -0
- package/modules/security/artifact-scan/detectors/injection.js +118 -0
- package/modules/security/artifact-scan/detectors/mcp.js +102 -0
- package/modules/security/artifact-scan/detectors/network.js +67 -0
- package/modules/security/artifact-scan/detectors/npm-lifecycle.js +67 -0
- package/modules/security/artifact-scan/detectors/permissions.js +91 -0
- package/modules/security/artifact-scan/detectors/shared.js +219 -0
- package/modules/security/artifact-scan/fence-local.js +99 -0
- package/modules/security/artifact-scan/fetch.js +330 -0
- package/modules/security/artifact-scan/floor.js +319 -0
- package/modules/security/artifact-scan/limits.js +66 -0
- package/modules/security/artifact-scan/manifest.js +203 -0
- package/modules/security/artifact-scan/mirror.js +158 -0
- package/modules/security/artifact-scan/quarantine.js +149 -0
- package/modules/security/artifact-scan/rebuild-spec.js +120 -0
- package/modules/security/artifact-scan/report.js +155 -0
- package/modules/security/artifact-scan/sanitize.js +317 -0
- package/modules/security/migrations/security_001_tool_scans.sql +145 -0
- package/modules/security/module.json +2 -2
- package/modules/security/routes/reports.js +11 -7
- package/modules/security/routes/scans.js +115 -0
- package/modules/security/scan-store.js +214 -0
- package/modules/security/tests/aggregate.mjs +283 -0
- package/modules/security/tests/artifact_scan.mjs +591 -0
- package/modules/security/tests/floor.mjs +549 -0
- package/modules/security/tests/mirror.mjs +350 -0
- package/modules/security/tests/sanitize_rebuild.mjs +499 -0
- package/modules/security/tests/scan_store.mjs +250 -0
- package/modules/security/tests/tool_scans_migration.mjs +116 -0
- package/modules/sessions/routes/sessions.js +6 -5
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/public-landing/create.html +13 -3
- package/scripts/gds/abandon.js +1 -1
- package/scripts/gds/audit-authorship.sh +6 -0
- package/scripts/gds/box.js +1 -1
- package/scripts/gds/bump-version.js +76 -0
- package/scripts/gds/claim.js +15 -0
- package/scripts/gds/cli-lib.js +16 -4
- package/scripts/gds/gating.js +28 -13
- package/scripts/gds/gen-api-docs.js +1 -1
- package/scripts/gds/goal.js +234 -0
- package/scripts/gds/init.js +77 -15
- package/scripts/gds/main-audit.js +80 -11
- package/scripts/gds/mirror-redact.js +6 -0
- package/scripts/gds/newcomer-floor.js +2 -2
- package/scripts/gds/provision.js +230 -94
- package/scripts/gds/run-unit-tests.js +9 -1
- package/scripts/gds/sandbox-stage.js +66 -9
- package/scripts/gds/search-ingest-md.js +1 -0
- package/scripts/gds/sequence.js +67 -8
- package/scripts/gds/ship.js +183 -50
- package/scripts/hall-preview/server.js +1 -1
- package/scripts/migrate.sh +5 -5
- package/src/bongos/auth.js +129 -27
- package/src/bongos/db-kernel.js +66 -5
- package/src/bongos/db.js +6 -7
- package/src/bongos/github-repos.js +19 -7
- package/src/bongos/goal-scope-check.js +1 -1
- package/src/bongos/module-scope-map.js +3 -1
- package/src/bongos/permission-path-check.js +1 -1
- package/src/bongos/route-rank-check.js +73 -30
- package/src/bongos/routes/audit-log.js +4 -2
- package/src/bongos/routes/auth.js +8 -4
- package/src/bongos/routes/backup.js +7 -4
- package/src/bongos/routes/builders.js +23 -11
- package/src/bongos/routes/github.js +15 -4
- package/src/bongos/routes/llm-cache.js +5 -2
- package/src/bongos/routes/modules.js +9 -5
- package/src/bongos/routes/security.js +21 -12
- package/src/bongos/serve-internal.js +22 -7
- package/src/module-api.js +96 -13
- package/src/platform-server.js +14 -0
- package/tests/api_client.mjs +18 -2
- package/tests/api_path_404.mjs +3 -0
- package/tests/art_stage.mjs +2 -1
- package/tests/atlas.mjs +32 -4
- package/tests/auth_admission_gate.mjs +17 -5
- package/tests/auth_error_brand.mjs +41 -21
- package/tests/auth_resolve_failure.mjs +155 -0
- package/tests/blocker_link.mjs +88 -0
- package/tests/bongos_cli.mjs +91 -0
- package/tests/bongos_downloads.mjs +2 -1
- package/tests/box_dns_repoint.mjs +2 -0
- package/tests/box_ship_permissions.mjs +2 -0
- package/tests/box_terminal_ssrf.mjs +23 -17
- package/tests/bump_version.mjs +71 -0
- package/tests/claim_error_surface.mjs +23 -0
- package/tests/claude_materialize.mjs +4 -0
- package/tests/cli_box_scope.mjs +40 -0
- package/tests/cloud_bongos_pack.mjs +34 -4
- package/tests/conductor.mjs +2 -1
- package/tests/criterion_authoring_gate.mjs +28 -5
- package/tests/currency_label.mjs +10 -1
- package/tests/deploy_instance.mjs +2 -0
- package/tests/devbox_downloads.mjs +2 -1
- package/tests/display_name.mjs +95 -6
- package/tests/eviction_policy.mjs +2 -1
- package/tests/file_map.mjs +10 -0
- package/tests/first_admin_bootstrap.mjs +10 -2
- package/tests/first_run_engine_check.mjs +2 -1
- package/tests/fitness.mjs +26 -6
- package/tests/gate_approvals.mjs +15 -2
- package/tests/github_push_land_proof.mjs +50 -4
- package/tests/github_repos_helpers.mjs +30 -5
- package/tests/github_token_store.mjs +23 -0
- package/tests/goal_abuse_matrix.mjs +13 -3
- package/tests/goal_cli.mjs +89 -0
- package/tests/governance_abuse_matrix.mjs +386 -0
- package/tests/governance_fold.mjs +156 -0
- package/tests/governance_fold_bench.mjs +50 -0
- package/tests/governance_live_proof.mjs +201 -0
- package/tests/governance_page_gates.mjs +21 -9
- package/tests/governance_parity.mjs +11 -2
- package/tests/governance_require_permission.mjs +125 -1
- package/tests/governance_routes.mjs +334 -0
- package/tests/grader.mjs +7 -3
- package/tests/hall_nav.mjs +14 -4
- package/tests/helpers.mjs +73 -0
- package/tests/hook_core_resolve.mjs +2 -1
- package/tests/host_topology_skips.mjs +97 -0
- package/tests/infra_exec_paths.mjs +14 -4
- package/tests/init.mjs +147 -0
- package/tests/known_failing_ratchet.mjs +89 -0
- package/tests/lifecycle-card.mjs +2 -1
- package/tests/main_audit.mjs +72 -1
- package/tests/memory_isolation.mjs +56 -9
- package/tests/migrate_root_resolution.mjs +1 -1
- package/tests/mirror_redact.mjs +19 -0
- package/tests/module_api.mjs +3 -1
- package/tests/module_loader.mjs +4 -0
- package/tests/modules.mjs +35 -7
- package/tests/modules_route.mjs +29 -5
- package/tests/onboarding_observability.mjs +49 -11
- package/tests/onboarding_route_signals.mjs +1 -0
- package/tests/one_active_claim_per_session.mjs +80 -0
- package/tests/patch_gate_ordering.mjs +102 -0
- package/tests/pre_compact.mjs +2 -1
- package/tests/preview_server.mjs +2 -1
- package/tests/profile_route.mjs +1 -0
- package/tests/provision.mjs +170 -0
- package/tests/provisioning_onboard_mode.mjs +180 -0
- package/tests/publish_manifest.mjs +16 -3
- package/tests/publish_reconciler.mjs +181 -10
- package/tests/rank_tier_single_source.mjs +205 -0
- package/tests/recall_hints.mjs +2 -1
- package/tests/repo_map.mjs +4 -0
- package/tests/route_permission_check.mjs +14 -5
- package/tests/rubric_fixtures.mjs +3 -0
- package/tests/run_routine_two_root.mjs +2 -0
- package/tests/sandbox_stage.mjs +69 -7
- package/tests/search_ingest.mjs +7 -0
- package/tests/security_docs.mjs +28 -6
- package/tests/sequence.mjs +64 -0
- package/tests/session-cards.mjs +2 -1
- package/tests/session_start_freshness.mjs +2 -1
- package/tests/ship_broadcast_server.mjs +63 -1
- package/tests/ship_card.mjs +66 -0
- package/tests/ship_ci_deploy.mjs +66 -1
- package/tests/ship_smoke_gate.mjs +76 -0
- package/tests/versions_route.mjs +15 -0
- package/tests/workflow_exec_paths.mjs +16 -4
- package/tests/worktree_guard.mjs +2 -1
package/docs/api-reference.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Bongos API reference
|
|
4
4
|
|
|
5
|
-
> **Generated from the live route files** — the route file is authoritative.
|
|
5
|
+
> **Generated from the live route files** — the route file is authoritative. 268 endpoints across 44 route files.
|
|
6
6
|
> Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
|
|
7
7
|
|
|
8
8
|
Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>.md)): `public` < `any-builder` < `metic+archon` < `archon`.
|
|
@@ -32,7 +32,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
32
32
|
|
|
33
33
|
| Method | Path | Rank | Body | Description |
|
|
34
34
|
|---|---|---|---|---|
|
|
35
|
-
| GET | `/api/bongos/audit-log` | `archon` | — | GET /api/gds/audit-log?limit=&offset=&builder_id=&method= Paginated, newest-first. |
|
|
35
|
+
| GET | `/api/bongos/audit-log` | `metic+archon` | — | GET /api/gds/audit-log?limit=&offset=&builder_id=&method= Paginated, newest-first. |
|
|
36
36
|
|
|
37
37
|
## `auth` (18)
|
|
38
38
|
|
|
@@ -61,14 +61,14 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
61
61
|
|
|
62
62
|
| Method | Path | Rank | Body | Description |
|
|
63
63
|
|---|---|---|---|---|
|
|
64
|
-
| GET | `/api/bongos/autonomy/precheck` | `archon` | — | |
|
|
64
|
+
| GET | `/api/bongos/autonomy/precheck` | `metic+archon` | — | |
|
|
65
65
|
|
|
66
66
|
## `backup` (2)
|
|
67
67
|
|
|
68
68
|
| Method | Path | Rank | Body | Description |
|
|
69
69
|
|---|---|---|---|---|
|
|
70
70
|
| GET | `/api/bongos/backup/status` | `metic+archon` | — | any working builder may check or trigger a backup. |
|
|
71
|
-
| POST | `/api/bongos/backup/trigger` | `metic+archon` | — |
|
|
71
|
+
| POST | `/api/bongos/backup/trigger` | `metic+archon` | — | kicks off a fresh dump; same gate as the status read. |
|
|
72
72
|
|
|
73
73
|
## `blockers` (5)
|
|
74
74
|
|
|
@@ -77,7 +77,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
77
77
|
| GET | `/api/bongos/blockers` | `public` | — | List currently-open blockers + the tasks each is blocking. |
|
|
78
78
|
| POST | `/api/bongos/blockers` | `any-builder` | `title`, `body_md`, `source`, `source_ref` | FILE a blocker (contribution, not resolution). |
|
|
79
79
|
| GET | `/api/bongos/blockers/:id` | `any-builder` | — | single blocker detail read. |
|
|
80
|
-
| POST | `/api/bongos/blockers/:id/link` | `metic+archon` | `task_id` | Link an existing blocker to a task
|
|
80
|
+
| POST | `/api/bongos/blockers/:id/link` | `metic+archon` | `task_id` | Link an existing blocker to a task. |
|
|
81
81
|
| POST | `/api/bongos/blockers/:id/resolve` | `metic+archon` | `resolution_note` | Resolve. |
|
|
82
82
|
|
|
83
83
|
## `box` (18)
|
|
@@ -107,10 +107,10 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
107
107
|
|
|
108
108
|
| Method | Path | Rank | Body | Description |
|
|
109
109
|
|---|---|---|---|---|
|
|
110
|
-
| GET | `/api/bongos/boxes` | `archon` | — | GET /boxes — full roster across all builders. |
|
|
111
|
-
| PATCH | `/api/bongos/boxes/:builderId/block` | `archon` | `blocked`, `reason`, `close_current` | PATCH /boxes/:builderId/block — Archon bars (or un-bars) a builder from OPENING dev boxes (idea 257 / task 1163; migration 104). |
|
|
112
|
-
| POST | `/api/bongos/boxes/:builderId/close` | `archon` | — | POST /boxes/:builderId/close — Archon force-closes ANY builder's box (idea 257 / task 1163). |
|
|
113
|
-
| GET | `/api/bongos/boxes/cost-ledger` | `archon` | — | GET /boxes/cost-ledger — the full per-builder container-cost ledger + totals (task 602). |
|
|
110
|
+
| GET | `/api/bongos/boxes` | `metic+archon` | — | GET /boxes — full roster across all builders. |
|
|
111
|
+
| PATCH | `/api/bongos/boxes/:builderId/block` | `metic+archon` | `blocked`, `reason`, `close_current` | PATCH /boxes/:builderId/block — Archon bars (or un-bars) a builder from OPENING dev boxes (idea 257 / task 1163; migration 104). |
|
|
112
|
+
| POST | `/api/bongos/boxes/:builderId/close` | `metic+archon` | — | POST /boxes/:builderId/close — Archon force-closes ANY builder's box (idea 257 / task 1163). |
|
|
113
|
+
| GET | `/api/bongos/boxes/cost-ledger` | `metic+archon` | — | GET /boxes/cost-ledger — the full per-builder container-cost ledger + totals (task 602). |
|
|
114
114
|
|
|
115
115
|
## `bug-attachments` (1)
|
|
116
116
|
|
|
@@ -122,22 +122,22 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
122
122
|
|
|
123
123
|
| Method | Path | Rank | Body | Description |
|
|
124
124
|
|---|---|---|---|---|
|
|
125
|
-
| GET | `/api/bongos/builders/:id/active-claims` | `archon` | — | GET /builders/:id/active-claims — V3.R14 (task 238). |
|
|
126
|
-
| PATCH | `/api/bongos/builders/:id/budget` | `archon` | `monthly_budget_usd` | PATCH /builders/:id/budget — set or clear a builder's monthly spend ceiling (V3.R84 task 302, criterion C3). |
|
|
125
|
+
| GET | `/api/bongos/builders/:id/active-claims` | `metic+archon` | — | GET /builders/:id/active-claims — V3.R14 (task 238). |
|
|
126
|
+
| PATCH | `/api/bongos/builders/:id/budget` | `metic+archon` | `monthly_budget_usd` | PATCH /builders/:id/budget — set or clear a builder's monthly spend ceiling (V3.R84 task 302, criterion C3). |
|
|
127
127
|
| GET | `/api/bongos/builders/:id/onboarding` | `public` | — | GET /builders/:id/onboarding — V3.R75 (task 294) onboarding checklist read. |
|
|
128
128
|
| GET | `/api/bongos/builders/:id/profile` | `public` | — | GET /builders/:id/profile — the viewable builder profile page's read (task 1467, goal 25 "bx-identity"). |
|
|
129
129
|
| PATCH | `/api/bongos/builders/:id/rank` | `archon` | `rank` | sole chokepoint that mutates builders.rank; ADR 0016 §enforcement. |
|
|
130
130
|
| PATCH | `/api/bongos/builders/:id/status` | `archon` | `status`, `reason` | PATCH /builders/:id/status — graceful exit + reactivation (V3.R88 task 307). |
|
|
131
131
|
| GET | `/api/bongos/builders/directory` | `any-builder` | — | GET /builders/directory — the any-builder-readable picker roster (task 1877): every ACTIVE builder's identity, for a client-side invite d… |
|
|
132
132
|
| GET | `/api/bongos/builders/me/pending-rank-change` | `any-builder` | — | GET /builders/me/pending-rank-change — V3.R28 / task 249 ceremony signal task 3. |
|
|
133
|
-
| GET | `/api/bongos/builders/roster` | `archon` | — | GET /builders/roster — V3.R14 (task 238) onboarding observability. |
|
|
133
|
+
| GET | `/api/bongos/builders/roster` | `metic+archon` | — | GET /builders/roster — V3.R14 (task 238) onboarding observability. |
|
|
134
134
|
|
|
135
135
|
## `claims` (6)
|
|
136
136
|
|
|
137
137
|
| Method | Path | Rank | Body | Description |
|
|
138
138
|
|---|---|---|---|---|
|
|
139
139
|
| POST | `/api/bongos/claims` | `any-builder` | `task_id`, `worktree_name`, `head_sha`, `bind_session`, `enforce_touches` | own work (claim a ready task); Xenos additionally filtered to newcomer_friendly rows inside db.claimTask (returns rank_too_low_for_task 4… |
|
|
140
|
-
| POST | `/api/bongos/claims/:id/release-on-behalf` | `archon` | `reason` | POST /claims/:id/release-on-behalf — V3.R14 (task 238). |
|
|
140
|
+
| POST | `/api/bongos/claims/:id/release-on-behalf` | `metic+archon` | `reason` | POST /claims/:id/release-on-behalf — V3.R14 (task 238). |
|
|
141
141
|
| POST | `/api/bongos/claims/:id/resolve` | `any-builder` | `outcome`, `notes_md`, `value_summary`, `verification`, `force`, `committed_files`, `sandbox_review` | resolve own claim (ship/abandon); ownership checked in db.resolveClaim (NOT_YOUR_CLAIM). |
|
|
142
142
|
| POST | `/api/bongos/claims/batch` | `any-builder` | `task_ids`, `worktree_name`, `bind_session` | Atomic multi-claim. |
|
|
143
143
|
| POST | `/api/bongos/claims/batch/release` | `any-builder` | `claim_ids`, `force` | Bulk release (task 1758) — the batch twin of resolve(outcome='abandoned'). |
|
|
@@ -160,22 +160,22 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
160
160
|
|
|
161
161
|
| Method | Path | Rank | Body | Description |
|
|
162
162
|
|---|---|---|---|---|
|
|
163
|
-
| GET | `/api/bongos/discord/channels/plan` | `archon` | — | GET /api/bongos/discord/channels/plan — dry run. |
|
|
164
|
-
| POST | `/api/bongos/discord/channels/reconcile` | `archon` | — | POST /api/bongos/discord/channels/reconcile — apply the config to Discord now. |
|
|
163
|
+
| GET | `/api/bongos/discord/channels/plan` | `metic+archon` | — | GET /api/bongos/discord/channels/plan — dry run. |
|
|
164
|
+
| POST | `/api/bongos/discord/channels/reconcile` | `metic+archon` | — | POST /api/bongos/discord/channels/reconcile — apply the config to Discord now. |
|
|
165
165
|
|
|
166
166
|
## `done-when` (3)
|
|
167
167
|
|
|
168
168
|
| Method | Path | Rank | Body | Description |
|
|
169
169
|
|---|---|---|---|---|
|
|
170
170
|
| POST | `/api/bongos/done-when/:criterionId/satisfy` | `metic+archon` | `satisfied_by_task_id` | Auth (Metic+): confirm a criterion — flip it to satisfied. |
|
|
171
|
-
| POST | `/api/bongos/done-when/:criterionId/unsatisfy` | `archon` | — | Auth: flip a criterion back to unsatisfied (rare; for corrections). |
|
|
171
|
+
| POST | `/api/bongos/done-when/:criterionId/unsatisfy` | `metic+archon` | — | Auth: flip a criterion back to unsatisfied (rare; for corrections). |
|
|
172
172
|
| GET | `/api/bongos/done-when/pending-review` | `metic+archon` | — | Auth (Metic+): the criterion review queue — every criterion auto-flagged "met — pending review" (≥1 linked task, all shipped, not yet con… |
|
|
173
173
|
|
|
174
174
|
## `gate-approvals` (2)
|
|
175
175
|
|
|
176
176
|
| Method | Path | Rank | Body | Description |
|
|
177
177
|
|---|---|---|---|---|
|
|
178
|
-
| GET | `/api/bongos/gate-approvals` | `archon` | — | GET /gate-approvals — open PRs awaiting owner approval (gate-review red), with the verdict + per-file reasons + changed files + diff link. |
|
|
178
|
+
| GET | `/api/bongos/gate-approvals` | `metic+archon` | — | GET /gate-approvals — open PRs awaiting owner approval (gate-review red), with the verdict + per-file reasons + changed files + diff link. |
|
|
179
179
|
| POST | `/api/bongos/gate-approvals/:pr/approve` | `archon` | — | POST /gate-approvals/:pr/approve — record owner approval for a stuck gate PR and re-run the gate-review check so it clears. |
|
|
180
180
|
|
|
181
181
|
## `github` (2)
|
|
@@ -212,13 +212,26 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
212
212
|
| POST | `/api/bongos/goals/:id/transfer` | `any-builder` | `builder_id` | POST /goals/:id/transfer — hand the goal to a new owner (task 1735). |
|
|
213
213
|
| PATCH | `/api/bongos/goals/:id/visibility` | `any-builder` | `visibility` | PATCH /goals/:id/visibility — make a goal public\|private (task 1952 / ADR 0112). |
|
|
214
214
|
| GET | `/api/bongos/goals/inbox` | `any-builder` | — | GET /goals/inbox — the caller's private-goals inbox (task 1952 / ADR 0112): { invitations: invites addressed to me (accept/decline); join… |
|
|
215
|
-
| POST | `/api/bongos/goals/reorder` | `archon` | `version_id`, `ordered_ids` | POST /goals/reorder — Archon drag-to-reorder: set the priority order of every goal WITHIN one version (task 1760). |
|
|
215
|
+
| POST | `/api/bongos/goals/reorder` | `metic+archon` | `version_id`, `ordered_ids` | POST /goals/reorder — Archon drag-to-reorder: set the priority order of every goal WITHIN one version (task 1760). |
|
|
216
|
+
|
|
217
|
+
## `governance` (8)
|
|
218
|
+
|
|
219
|
+
| Method | Path | Rank | Body | Description |
|
|
220
|
+
|---|---|---|---|---|
|
|
221
|
+
| GET | `/api/bongos/governance/assignments` | `archon` | — | governance.manage — every builder↔role assignment row. |
|
|
222
|
+
| POST | `/api/bongos/governance/assignments` | `archon` | `builder_id`, `role_key` | governance.manage — assign a CUSTOM role to a builder. |
|
|
223
|
+
| DELETE | `/api/bongos/governance/assignments/:builderId/:roleKey` | `archon` | — | governance.manage — remove a custom-role assignment. |
|
|
224
|
+
| GET | `/api/bongos/governance/permissions` | `archon` | — | governance.manage — the permission catalog + principals, straight from code (the catalog is CODE, not a table); no DB read. |
|
|
225
|
+
| GET | `/api/bongos/governance/roles` | `archon` | — | governance.manage — the full role list with each role's grants. |
|
|
226
|
+
| POST | `/api/bongos/governance/roles` | `archon` | `role_key`, `label`, `description` | governance.manage — create a CUSTOM role (is_system false, no seeded_rank — the seeded four exist only via governance_002). |
|
|
227
|
+
| PUT | `/api/bongos/governance/roles/:roleKey/permissions/:permissionKey` | `archon` | — | governance.manage — grant one OPERATIONAL permission to a custom role (the toggle's ON half). |
|
|
228
|
+
| DELETE | `/api/bongos/governance/roles/:roleKey/permissions/:permissionKey` | `archon` | — | governance.manage — revoke a grant (the toggle's OFF half). |
|
|
216
229
|
|
|
217
230
|
## `grades` (1)
|
|
218
231
|
|
|
219
232
|
| Method | Path | Rank | Body | Description |
|
|
220
233
|
|---|---|---|---|---|
|
|
221
|
-
| GET | `/api/bongos/grades/by-builder` | `archon` | — | GET /grades/by-builder?days=30 — per-builder grade breakdown (task 726). |
|
|
234
|
+
| GET | `/api/bongos/grades/by-builder` | `metic+archon` | — | GET /grades/by-builder?days=30 — per-builder grade breakdown (task 726). |
|
|
222
235
|
|
|
223
236
|
## `healthz` (1)
|
|
224
237
|
|
|
@@ -234,7 +247,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
234
247
|
| POST | `/api/bongos/inbox` | `any-builder` | `title`, `body_md`, `kind`, `suggested_version`, `suggested_priority` | for ordinary ideas; metic+ for kind='criterion-proposal'. |
|
|
235
248
|
| GET | `/api/bongos/inbox/:id` | `any-builder` | — | single idea read for the "#NNN" deep-link resolver (task 1047). |
|
|
236
249
|
| PATCH | `/api/bongos/inbox/:id` | `metic+archon` | `status`, `kind`, `promoted_to_task_id`, `reviewed_at`, `merged_into_idea_id`, `triage_note` | Metic+ (task 360 / ADR 0018): idea triage (promote/discard/merge) shapes the backlog. |
|
|
237
|
-
| POST | `/api/bongos/inbox/:id/ratify` | `archon` | `notes_md` | V3.R31 (task 252) — Archon ratifies a criterion-proposal idea, atomically: - INSERT done_when_criteria row on the target version - UPDATE… |
|
|
250
|
+
| POST | `/api/bongos/inbox/:id/ratify` | `metic+archon` | `notes_md` | V3.R31 (task 252) — Archon ratifies a criterion-proposal idea, atomically: - INSERT done_when_criteria row on the target version - UPDATE… |
|
|
238
251
|
|
|
239
252
|
## `instance` (1)
|
|
240
253
|
|
|
@@ -301,8 +314,8 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
301
314
|
| GET | `/api/bongos/memory/bfg/builders/:builderId/file` | `bfg-principal` | — | |
|
|
302
315
|
| GET | `/api/bongos/memory/bfg/builders/:builderId/files` | `bfg-principal` | — | |
|
|
303
316
|
| POST | `/api/bongos/memory/builders/:builderId/bfg-write` | `bfg-principal` | `kind`, `slug`, `title`, `body_md`, `rationale`, `karma_delta` | ----------------------------------------------------------------------- BFG CROSS-BUILDER WRITE (task 446 / ADR 0026 §6C) — the FIRST cro… |
|
|
304
|
-
| GET | `/api/bongos/memory/builders/:builderId/file` | `archon` | — | GET /memory/builders/:builderId/file?path=... |
|
|
305
|
-
| GET | `/api/bongos/memory/builders/:builderId/files` | `archon` | — | GET /memory/builders/:builderId/files — Archon lists ANOTHER builder's memory file metadata. |
|
|
317
|
+
| GET | `/api/bongos/memory/builders/:builderId/file` | `metic+archon` | — | GET /memory/builders/:builderId/file?path=... |
|
|
318
|
+
| GET | `/api/bongos/memory/builders/:builderId/files` | `metic+archon` | — | GET /memory/builders/:builderId/files — Archon lists ANOTHER builder's memory file metadata. |
|
|
306
319
|
| GET | `/api/bongos/memory/file` | `any-builder` | — | GET /memory/file?path=... |
|
|
307
320
|
| DELETE | `/api/bongos/memory/file` | `any-builder` | validated | DELETE /memory/file?path=... |
|
|
308
321
|
| GET | `/api/bongos/memory/files` | `any-builder` | — | GET /memory/files — list the AUTHENTICATED builder's memory files (metadata only, no content). |
|
|
@@ -332,32 +345,32 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
332
345
|
|
|
333
346
|
| Method | Path | Rank | Body | Description |
|
|
334
347
|
|---|---|---|---|---|
|
|
335
|
-
| GET | `/api/bongos/override-requests` | `archon` | — | GET /override-requests?status=open — Archon queue. |
|
|
336
|
-
| POST | `/api/bongos/override-requests/:id/decide` | `archon` | `decision`, `note` | POST /override-requests/:id/decide — body: { decision: 'approve'\|'deny', note? } On approve, atomically flips the task completed→confirme… |
|
|
348
|
+
| GET | `/api/bongos/override-requests` | `metic+archon` | — | GET /override-requests?status=open — Archon queue. |
|
|
349
|
+
| POST | `/api/bongos/override-requests/:id/decide` | `metic+archon` | `decision`, `note` | POST /override-requests/:id/decide — body: { decision: 'approve'\|'deny', note? } On approve, atomically flips the task completed→confirme… |
|
|
337
350
|
|
|
338
351
|
## `projects` (5)
|
|
339
352
|
|
|
340
353
|
| Method | Path | Rank | Body | Description |
|
|
341
354
|
|---|---|---|---|---|
|
|
342
|
-
| GET | `/api/bongos/projects` | `archon` | — | the full curation list (includes unfeatured + owner attribution). |
|
|
343
|
-
| POST | `/api/bongos/projects` | `archon` | `origin`, `name`, `tagline`, `art_url` | create / update a catalog entry (manual seed for hand-wired instances; federated projects auto-catalogue at registration). |
|
|
344
|
-
| PATCH | `/api/bongos/projects/:id/featured` | `archon` | `featured` | the feature / unfeature control (the ADR 0141 §5 curation gate). |
|
|
355
|
+
| GET | `/api/bongos/projects` | `metic+archon` | — | the full curation list (includes unfeatured + owner attribution). |
|
|
356
|
+
| POST | `/api/bongos/projects` | `metic+archon` | `origin`, `name`, `tagline`, `art_url` | create / update a catalog entry (manual seed for hand-wired instances; federated projects auto-catalogue at registration). |
|
|
357
|
+
| PATCH | `/api/bongos/projects/:id/featured` | `metic+archon` | `featured` | the feature / unfeature control (the ADR 0141 §5 curation gate). |
|
|
345
358
|
| GET | `/api/bongos/projects/featured` | `public` | — | a curated public showcase; no auth by design. |
|
|
346
|
-
| POST | `/api/bongos/projects/invite` | `archon` | `client_id`, `github_login` | invite a builder into a project (ADR 0141 §5, task #1002115). |
|
|
359
|
+
| POST | `/api/bongos/projects/invite` | `metic+archon` | `client_id`, `github_login` | invite a builder into a project (ADR 0141 §5, task #1002115). |
|
|
347
360
|
|
|
348
361
|
## `provisioning` (13)
|
|
349
362
|
|
|
350
363
|
| Method | Path | Rank | Body | Description |
|
|
351
364
|
|---|---|---|---|---|
|
|
352
|
-
| GET | `/api/bongos/provisioning/fleet` | `archon` | — | GET /provisioning/fleet — the full instance roster across all owners. |
|
|
353
|
-
| GET | `/api/bongos/provisioning/fleet/cost-ledger` | `archon` | — | GET /provisioning/fleet/cost-ledger — per-instance monthly estimate + total. |
|
|
365
|
+
| GET | `/api/bongos/provisioning/fleet` | `metic+archon` | — | GET /provisioning/fleet — the full instance roster across all owners. |
|
|
366
|
+
| GET | `/api/bongos/provisioning/fleet/cost-ledger` | `metic+archon` | — | GET /provisioning/fleet/cost-ledger — per-instance monthly estimate + total. |
|
|
354
367
|
| GET | `/api/bongos/provisioning/github-app/callback` | `public` | — | GET /provisioning/github-app/callback?code=&state= — GitHub redirects the owner's BROWSER here after they approve the App Manifest (task … |
|
|
355
368
|
| GET | `/api/bongos/provisioning/github-app/status` | `public` | — | GET /provisioning/github-app/status?state=<> — the PUBLIC progress read the onboarding callback page polls (task 2096) to know when setup… |
|
|
356
369
|
| GET | `/api/bongos/provisioning/health` | `public` | — | GET /provisioning/health — liveness + the core version this module mounted against. |
|
|
357
370
|
| GET | `/api/bongos/provisioning/instances` | `any-builder` | — | GET /provisioning/instances — the caller's own instances + each open intent. |
|
|
358
|
-
| POST | `/api/bongos/provisioning/instances` | `any-builder` | `slug`, `target_ref`, `hosting_shape`, `domain`, `tier` | POST /provisioning/instances — request a new instance. |
|
|
371
|
+
| POST | `/api/bongos/provisioning/instances` | `any-builder` | `slug`, `target_ref`, `hosting_shape`, `domain`, `tier`, `onboard_mode` | POST /provisioning/instances — request a new instance. |
|
|
359
372
|
| GET | `/api/bongos/provisioning/instances/:id` | `any-builder` | — | GET /provisioning/instances/:id — read one of the caller's own instances. |
|
|
360
|
-
| POST | `/api/bongos/provisioning/instances/:id/force-teardown` | `archon` | — | POST /provisioning/instances/:id/force-teardown — Archon tears down ANY instance. |
|
|
373
|
+
| POST | `/api/bongos/provisioning/instances/:id/force-teardown` | `metic+archon` | — | POST /provisioning/instances/:id/force-teardown — Archon tears down ANY instance. |
|
|
361
374
|
| POST | `/api/bongos/provisioning/instances/:id/github-app` | `any-builder` | `account` | POST /provisioning/instances/:id/github-app — mint a GitHub-App-Manifest onboarding link for the caller's OWN instance (task 2080, ADR 01… |
|
|
362
375
|
| POST | `/api/bongos/provisioning/instances/:id/teardown` | `any-builder` | — | POST /provisioning/instances/:id/teardown — request teardown of the caller's OWN instance. |
|
|
363
376
|
| GET | `/api/bongos/provisioning/onboard-plan` | `public` | — | GET /provisioning/onboard-plan?mode=greenfield\|adopt — the CANONICAL onboarding step sequence (task 2085; goal 35 / criterion 165: "the c… |
|
|
@@ -390,7 +403,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
390
403
|
|
|
391
404
|
| Method | Path | Rank | Body | Description |
|
|
392
405
|
|---|---|---|---|---|
|
|
393
|
-
| GET | `/api/bongos/scouting` | `archon` | — | the internal talent directory across every project. |
|
|
406
|
+
| GET | `/api/bongos/scouting` | `metic+archon` | — | the internal talent directory across every project. |
|
|
394
407
|
|
|
395
408
|
## `search` (2)
|
|
396
409
|
|
|
@@ -399,20 +412,22 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
399
412
|
| POST | `/api/bongos/search` | `any-builder` | `expand`, `q`, `source_kind`, `limit` | POST /search — two modes (ADR 0095 C1 / task 1658, progressive disclosure): 1. |
|
|
400
413
|
| POST | `/api/bongos/search/mark` | `any-builder` | `chunk_id`, `useful` | POST /search/mark — the write half of the memory-usefulness feedback loop (ADR 0095 C3, task 1660). |
|
|
401
414
|
|
|
402
|
-
## `security` (
|
|
415
|
+
## `security` (12)
|
|
403
416
|
|
|
404
417
|
| Method | Path | Rank | Body | Description |
|
|
405
418
|
|---|---|---|---|---|
|
|
406
419
|
| GET | `/api/bongos/security/adr` | `metic+archon` | — | GET /api/gds/security/adr Metic+ only. |
|
|
407
|
-
| GET | `/api/bongos/security/docs` | `archon` | — | GET /api/gds/security/docs — list doc METADATA (no content). |
|
|
408
|
-
| POST | `/api/bongos/security/docs` | `archon` | `slug`, `title`, `content_md` | POST /api/gds/security/docs — upsert a doc by slug. |
|
|
409
|
-
| GET | `/api/bongos/security/docs/:slug` | `archon` | — | GET /api/gds/security/docs/:slug — one doc WITH content, or 404. |
|
|
410
|
-
| GET | `/api/bongos/security/reports` | `archon` | — | GET /api/bongos/security/reports?status=<status> Archon-only, newest-first. |
|
|
420
|
+
| GET | `/api/bongos/security/docs` | `metic+archon` | — | GET /api/gds/security/docs — list doc METADATA (no content). |
|
|
421
|
+
| POST | `/api/bongos/security/docs` | `metic+archon` | `slug`, `title`, `content_md` | POST /api/gds/security/docs — upsert a doc by slug. |
|
|
422
|
+
| GET | `/api/bongos/security/docs/:slug` | `metic+archon` | — | GET /api/gds/security/docs/:slug — one doc WITH content, or 404. |
|
|
423
|
+
| GET | `/api/bongos/security/reports` | `metic+archon` | — | GET /api/bongos/security/reports?status=<status> Archon-only, newest-first. |
|
|
411
424
|
| POST | `/api/bongos/security/reports` | `metic+archon` | `target`, `severity`, `title`, `description`, `repro_steps_md` | POST /api/bongos/security/reports — file a new vulnerability report. |
|
|
412
|
-
| POST | `/api/bongos/security/reports/:id/confirm` | `archon` | `drachmae_awarded` | POST /api/bongos/security/reports/:id/confirm Body: { drachmae_awarded?: integer } — defaults to the severity tier bounty if omitted. |
|
|
413
|
-
| POST | `/api/bongos/security/reports/:id/dispute` | `archon` | — | POST /api/bongos/security/reports/:id/dispute Marks the report disputed and clears drachmae_awarded. |
|
|
414
|
-
| POST | `/api/bongos/security/reports/:id/fix` | `archon` | — | POST /api/bongos/security/reports/:id/fix Marks the report fixed and stamps fixed_at. |
|
|
415
|
-
| POST | `/api/bongos/security/reports/:id/link-fix` | `archon` | `task_id` | POST /api/bongos/security/reports/:id/link-fix Body: { task_id: integer } — attaches a fix-task FK. |
|
|
425
|
+
| POST | `/api/bongos/security/reports/:id/confirm` | `metic+archon` | `drachmae_awarded` | POST /api/bongos/security/reports/:id/confirm Body: { drachmae_awarded?: integer } — defaults to the severity tier bounty if omitted. |
|
|
426
|
+
| POST | `/api/bongos/security/reports/:id/dispute` | `metic+archon` | — | POST /api/bongos/security/reports/:id/dispute Marks the report disputed and clears drachmae_awarded. |
|
|
427
|
+
| POST | `/api/bongos/security/reports/:id/fix` | `metic+archon` | — | POST /api/bongos/security/reports/:id/fix Marks the report fixed and stamps fixed_at. |
|
|
428
|
+
| POST | `/api/bongos/security/reports/:id/link-fix` | `metic+archon` | `task_id` | POST /api/bongos/security/reports/:id/link-fix Body: { task_id: integer } — attaches a fix-task FK. |
|
|
429
|
+
| GET | `/api/bongos/security/scans` | `any-builder` | — | GET /api/bongos/security/scans?content_hash=<64 hex> "Have these exact bytes been scanned before, and what did the scan say?" Newest first. |
|
|
430
|
+
| POST | `/api/bongos/security/scans` | `metic+archon` | `target_url`, `artifact_kind`, `resolved_sha`, `content_hash`, `file_count`, `total_bytes`, `tier`, `verdict`, `completion`, `abort_code`, `findings_critical`, `findings_high`, `findings_medium`, `findings_low`, `findings_summary`, `action_taken`, `engine_version` | POST /api/bongos/security/scans — record one scan run. |
|
|
416
431
|
|
|
417
432
|
## `session` (1)
|
|
418
433
|
|
|
@@ -427,7 +442,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
427
442
|
| POST | `/api/bongos/sessions` | `any-builder` | `session_id`, `task_ids`, `total_tokens`, `duration_seconds`, `started_at`, `ended_at`, `detail`, `metrics`, `model_usage` | upload your OWN session digest. |
|
|
428
443
|
| GET | `/api/bongos/sessions/:id` | `any-builder` | — | own session full detail (deep-dive); cross-builder fetch requires Archon + a fail-closed audit row (BFG-principal posture until 6C.1). |
|
|
429
444
|
| GET | `/api/bongos/sessions/mine` | `any-builder` | — | your OWN sessions (self-serve; no audit needed). |
|
|
430
|
-
| GET | `/api/bongos/sessions/search` | `archon` | — | cross-builder corpus search (BFG-principal posture until 6C.1). |
|
|
445
|
+
| GET | `/api/bongos/sessions/search` | `metic+archon` | — | cross-builder corpus search (BFG-principal posture until 6C.1). |
|
|
431
446
|
|
|
432
447
|
## `sso` (7)
|
|
433
448
|
|
|
@@ -469,16 +484,16 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
469
484
|
| POST | `/api/bongos/tasks/:id/vote` | `metic+archon` | `vote` | POST /tasks/:id/vote { vote: 1 \| -1 \| 0 } — cast/change/clear a peer vote on a confirmed/shipped task. |
|
|
470
485
|
| GET | `/api/bongos/tasks/claimable` | `any-builder` | — | NOTE: /tasks/claimable must come BEFORE /tasks/:id or Express will route 'claimable' to the :id param. |
|
|
471
486
|
| GET | `/api/bongos/tasks/newcomer-floor` | `any-builder` | — | GET /tasks/newcomer-floor — supply gauge for the newcomer queue (task 614). |
|
|
472
|
-
| POST | `/api/bongos/tasks/newcomer-restock` | `archon` | — | POST /tasks/newcomer-restock (task 1168) — bring every evergreen newcomer chore's standing pool up to its configured floor. |
|
|
487
|
+
| POST | `/api/bongos/tasks/newcomer-restock` | `metic+archon` | — | POST /tasks/newcomer-restock (task 1168) — bring every evergreen newcomer chore's standing pool up to its configured floor. |
|
|
473
488
|
| GET | `/api/bongos/tasks/peer-votes/feed` | `any-builder` | — | GET /tasks/peer-votes/feed — recent confirmed/shipped work by OTHER builders, each with its net vote total and the caller's own current v… |
|
|
474
|
-
| POST | `/api/bongos/tasks/peer-votes/tally` | `archon` | — | POST /tasks/peer-votes/tally — fold matured votes (≥7 days old, not yet counted) into karma_log, one net row per shipping builder, then m… |
|
|
489
|
+
| POST | `/api/bongos/tasks/peer-votes/tally` | `metic+archon` | — | POST /tasks/peer-votes/tally — fold matured votes (≥7 days old, not yet counted) into karma_log, one net row per shipping builder, then m… |
|
|
475
490
|
|
|
476
491
|
## `versions` (7)
|
|
477
492
|
|
|
478
493
|
| Method | Path | Rank | Body | Description |
|
|
479
494
|
|---|---|---|---|---|
|
|
480
495
|
| GET | `/api/bongos/versions` | `public` | — | read-only version list; mirrors /public/versions. |
|
|
481
|
-
| POST | `/api/bongos/versions` | `archon` | `id`, `name`, `status`, `done_when`, `scope_doc_path`, `criteria` | POST /versions — create a version + its done-when criteria in one call. |
|
|
496
|
+
| POST | `/api/bongos/versions` | `metic+archon` | `id`, `name`, `status`, `track`, `done_when`, `scope_doc_path`, `criteria` | POST /versions — create a version + its done-when criteria in one call. |
|
|
482
497
|
| GET | `/api/bongos/versions/:id/done-when` | `public` | — | Public: status.example.com fetches this every 60s alongside other public/* surfaces. |
|
|
483
498
|
| POST | `/api/bongos/versions/:id/done-when` | `metic+archon` | `criterion_id`, `criterion_md`, `goal_id`, `sort_order` | Auth (Metic+, then the goal's own authority): create a done-when criterion at RUNTIME. |
|
|
484
499
|
| GET | `/api/bongos/versions/:id/progress` | `public` | — | Per-criterion progress rollup: each done-when criterion → the tasks that gate it (task_criteria, migration 055) → live statuses → what re… |
|
package/docs/architecture.md
CHANGED
|
@@ -231,7 +231,7 @@ markdown describes, the DB enforces.**
|
|
|
231
231
|
|
|
232
232
|
- **`example.com`** — game (Phaser + Colyseus). Static files from `public/`. `/builders` + `/builders/*` now **301-redirect to `builders.example.com/<rest>`** ([#739](https://example.com/builders#/task/739) then promoted to permanent 301 in [#741](https://example.com/builders#/task/741), ADR 0036 cutover); the apex no longer serves the builder surface directly.
|
|
233
233
|
- **`status.example.com`** — public build dashboard. **Carved to the `status-ui` module in BV1.R84** ([ADR 0093](adr/<redacted>.md) §1): the surface moved from `public-status/` to `modules/status-ui/public/`, now served by the loader's web-surface seam (`moduleWebSurfaces` → `serve-internal.js`, routed on the `status.` Host prefix the manifest declares) instead of a hardcoded block — no behavior change. Layout reorganized in [#726](https://example.com/builders#/task/726) (ADR 0036): Pulse / Watch(uptime) / Architects / Works / Treasury / Lately Inscribed / The World — the grade-aggregate, estimation-drift, and repo-health tablets moved to the Archon `/watch` page. **⚠ Served OFF the droplet** (ADR 0029, outage resilience): the live page is **GitHub Pages from the separate repo `example-owner/example-status`** (CNAME → Fastly), reading data cross-origin from the droplet's `/api/gds/public/*` (CORS open) and an availability banner from the prober's `status-data` branch. The droplet still serves `modules/status-ui/public/` (on the `status.` host) as a same-origin fallback, but **DNS points at Pages, not the droplet** — so a droplet deploy does NOT update the live page. Changes to the surface publish to the mirror via `scripts/status-mirror-sync.js` (re-pointed at `modules/status-ui/public/`; status.js/style.css/cursors are byte-identical copies; index.html gets the off-box bits injected), run automatically by `.github/workflows/sync-status-mirror.yml` (needs the `STATUS_MIRROR_TOKEN` secret) ([#737](https://example.com/builders#/task/737)). **⚠ FOLLOW-UP (R84):** that workflow's path trigger still watches `public-status/**` and must be re-pointed at `modules/status-ui/public/**` by an owner/Archon — the GitHub App can't push `.github/workflows/*` (learning 107), so until then the mirror sync won't auto-fire on future status edits.
|
|
234
|
-
- **`builders.example.com`** — dedicated builder surface (`isBuildersHost`, ADR 0036). **Carved to the `hall-ui` module in BV1.R85** ([ADR 0093](adr/<redacted>.md) §1): the surface moved from `public-builders/` to `modules/hall-ui/public/` (~13k LOC, the largest module) and is a loader-discovered web-surface module (`contributes.webSurfaces` host `builders.`). UNLIKE the generic status surface it keeps its **dedicated** serving block in `serve-internal.js` (`BUILDERS_DIR = modules/hall-ui/public/`), partitioned out of the generic web-surface loop on the `isBuildersHost` predicate. A thin rewrite shim maps every non-API path onto the existing `/builders/*` tree (so all serving + gating + asset-stamping is reused), serving the hall (`/`), the
|
|
234
|
+
- **`builders.example.com`** — dedicated builder surface (`isBuildersHost`, ADR 0036). **Carved to the `hall-ui` module in BV1.R85** ([ADR 0093](adr/<redacted>.md) §1): the surface moved from `public-builders/` to `modules/hall-ui/public/` (~13k LOC, the largest module) and is a loader-discovered web-surface module (`contributes.webSurfaces` host `builders.`). UNLIKE the generic status surface it keeps its **dedicated** serving block in `serve-internal.js` (`BUILDERS_DIR = modules/hall-ui/public/`), partitioned out of the generic web-surface loop on the `isBuildersHost` predicate. A thin rewrite shim maps every non-API path onto the existing `/builders/*` tree (so all serving + gating + asset-stamping is reused), serving the hall (`/`), the Metic+ **`/watch`** monitoring page (gated by `requireGovernancePage`), **`/settings`** (Voices + Craft prefs), plus ranks/sessions/primer/diagrams. No behavior change — byte-identical (only `window.__MODULES__.enabled` gains `hall-ui:true`). **Additive** — until its DNS A record + cert are live, the whole surface stays reachable at `example.com/builders/*`. No `.github/workflows/*` follow-up: unlike R84, no workflow path-trigger watches `public-builders/**`.
|
|
235
235
|
- **`/downloads/devbox/*`** (every host, mounted right after the API so the builders-host shim can't rewrite it — [#904](https://example.com/builders#/task/904), [ADR 0045](adr/<redacted>.md)): branded download surface for the Dev Box desktop app. `/{mac-arm64,mac-x64,win-x64}` (+ `mac`/`win` aliases) 302 to the release assets on the public releases repo named in [`config/devbox-app.json`](../config/devbox-app.json); `latest.json` feeds the app's update check. Logic in [`src/devbox-downloads.js`](../src/devbox-downloads.js); the installers never ride the git deploy.
|
|
236
236
|
- The `/api/gds/*` surface is reachable from every host. **Cross-subdomain sign-in:** the `gds_session` cookie is scoped to `.example.com` on the production hosts (apex/www/builders/status) and host-only on localhost/staging (no cross-env token bleed); the OAuth handshake runs on the canonical origin with a validated `?return=` (open-redirect-guarded) so the subdomain can land a builder back on itself.
|
|
237
237
|
- Caddy gets a site block per host ([`infra/Caddyfile`](../infra/Caddyfile)), all reverse-proxying to `127.0.0.1:3000`.
|
|
@@ -55,11 +55,17 @@ ranks are a no-op until code grants them privileges. As of **[#692](https://exam
|
|
|
55
55
|
forming the ordered claim-gate tier **`xenos` (1) < `thetes` (2) < `metic` (3) < `archon` (4)**
|
|
56
56
|
(`REQUIRES_RANK_TIER` in `src/bongos/db.js`):
|
|
57
57
|
|
|
58
|
-
- **`archon`** — Lars (`github_login = 'example-owner'`, set by migration 023).
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
—
|
|
62
|
-
|
|
58
|
+
- **`archon`** — Lars (`github_login = 'example-owner'`, set by migration 023). **Since
|
|
59
|
+
[ADR 0157](adr/<redacted>.md) (2026-08-05) the Archon rank is responsible for
|
|
60
|
+
RANK and IDENTITY, not day-to-day administration.** It is everything a Metic can do, plus: **rank**
|
|
61
|
+
(grant/revoke — the single writer), **identity** (offboard/(de)activate, admit an access request, revoke
|
|
62
|
+
sessions), the **four escalation keys** that would otherwise make that delegation self-reversible
|
|
63
|
+
(grader-bypass confirm, CI gate approval, protected-module goal scope, and `governance.manage`),
|
|
64
|
+
**version close**, cross-tier dependency edges, and the substrate floors (push `main`, protected paths,
|
|
65
|
+
ssh — ADR 0043). Version-**level** criteria (a `done-when` with no `goal_id`, or one outside an open
|
|
66
|
+
version / outside a goal they own) also stay Archon per
|
|
67
|
+
[ADR 0154](adr/<redacted>.md), though that ADR's `done-when/:id/unsatisfy`
|
|
68
|
+
carve-out was superseded — unsatisfy is Metic now. Overrides any claim. The authority that
|
|
63
69
|
stays *exclusively* Archon — never delegated to Metic — is **setting rank** (`PATCH /builders/:id/rank`)
|
|
64
70
|
and **closing versions**.
|
|
65
71
|
- **`metic`** — the Archon-approved **working rank**. Full claim/ship of any ready task (own work),
|
|
@@ -126,15 +132,33 @@ index = higher authority). So `requireRank('archon')` admits `archon` **and the
|
|
|
126
132
|
silently *lost* all archon-gated authority — while still denying everything below the floor. Unknown
|
|
127
133
|
or missing ranks fail closed.
|
|
128
134
|
|
|
129
|
-
- **Archon-only** —
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
**
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
`POST /api/gds/tasks/:id/
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
- **Archon-only** — **rank, identity, and the four escalation keys ([ADR 0157](adr/<redacted>.md), owner decision 2026-08-05).**
|
|
136
|
+
That ADR narrowed Archon from ~50 route gates to 9 live ones, on the rule *"the Archon rank is
|
|
137
|
+
responsible for rank and identity only"*:
|
|
138
|
+
- **rank** — `PATCH /api/gds/builders/:id/rank` (the single writer).
|
|
139
|
+
- **identity** — `PATCH /api/gds/builders/:id/status` (offboard/(de)activate), `GET|PATCH /api/gds/access-requests[/:id]`
|
|
140
|
+
(who is admitted), `POST /api/gds/auth/revoke[-all]` (whose sessions are valid).
|
|
141
|
+
- **the four escalation keys**, which look operational but are not: `POST /api/gds/tasks/:id/confirm`
|
|
142
|
+
(grader-bypass), `POST /api/gds/gate-approvals/:pr/approve` (CI deploy-gate override), protected-module
|
|
143
|
+
**goal scope** ([ADR 0086](adr/<redacted>.md)), and `governance.manage` (the
|
|
144
|
+
roles/permissions tab). Delegating any one of them lets a Metic reach Archon in four steps — create a
|
|
145
|
+
protected-scope goal in the permission core, claim a task there (protected paths already floor at
|
|
146
|
+
*metic* per [ADR 0043](adr/<redacted>.md)), confirm
|
|
147
|
+
past the failed grade, approve their own red gate — so keeping rank Archon-only depends on keeping
|
|
148
|
+
these Archon-only too. **Any future delegation must re-check that chain.**
|
|
149
|
+
- plus `version.close` (paired with rank as the powers that never delegate), the cross-tier
|
|
150
|
+
`POST|DELETE /api/gds/dependencies` (`system: true` — no system permission is grantable below archon),
|
|
151
|
+
and the substrate floors (`deploy.push_main` / `path.protected.modify` / `infra.ssh`, ADR 0043).
|
|
152
|
+
|
|
153
|
+
Earlier one-power delegations that ADR 0157 generalises: **task authoring** — `POST /api/gds/tasks`,
|
|
154
|
+
`PATCH /api/gds/tasks/:id` (incl. the `newcomer_friendly` flag), `POST /api/gds/tasks/:id/promote`, and the
|
|
155
|
+
`tasks/:id/{dependencies,criteria}` CRUD — moved to Metic+ in [ADR 0090](adr/<redacted>.md),
|
|
156
|
+
and **task retirement** — `POST /api/gds/tasks/:id/abandon`, plus the `abandoned → backlog` restore on
|
|
157
|
+
`/promote` — in [ADR 0152](adr/<redacted>.md) (see the Metic+Archon bullet).
|
|
158
|
+
`POST /api/gds/done-when/:id/unsatisfy` **was** Archon-only and moved to Metic in ADR 0157, superseding
|
|
159
|
+
[ADR 0154](adr/<redacted>.md)'s "the backward ratchet stays Archon" carve-out;
|
|
160
|
+
satisfy and unsatisfy remain separate permissions, so confirming a criterion still never confers
|
|
161
|
+
un-confirming one. **A manual promotion advances exactly
|
|
138
162
|
ONE live rung at a time** (`xenos→thetes→metic→archon`; [#707](https://example.com/builders#/task/707)) — a multi-rung jump (e.g. `xenos→metic`) returns
|
|
139
163
|
`400 multi_rung_promotion` naming the next allowed rung. Demotions are unconstrained (offboarding
|
|
140
164
|
drops straight to `xenos`); the automatic `xenos→thetes` graduation is +1 and unaffected.
|
|
@@ -147,10 +171,31 @@ or missing ranks fail closed.
|
|
|
147
171
|
[ADR 0154](adr/<redacted>.md), also `POST /api/gds/versions/:id/done-when`
|
|
148
172
|
(criterion **create**) — but walled by goal ownership, not by rank alone: a non-Archon must name a
|
|
149
173
|
`goal_id`, on an open (`planning`/`building`) version, in an `open` goal they **own or manage** (the same
|
|
150
|
-
`authorizeGoalManagement` wall as goal visibility/invites/roles). Version-level criteria
|
|
151
|
-
`done-when/:id/unsatisfy`
|
|
174
|
+
`authorizeGoalManagement` wall as goal visibility/invites/roles). Version-level criteria stay Archon;
|
|
175
|
+
`done-when/:id/unsatisfy` moved here in [ADR 0157](adr/<redacted>.md). The floor here is
|
|
152
176
|
`metic`, so **`thetes` does NOT pass these** — it sits below `metic` on the ladder and inherits none
|
|
153
177
|
of its grants (ADR 0034); `archon` and the divine tiers above it do.
|
|
178
|
+
|
|
179
|
+
**[ADR 0157](adr/<redacted>.md) added the whole operational block here** —
|
|
180
|
+
20 permissions that had been Archon-gated only by ADR 0016's fail-closed default, never by a decision:
|
|
181
|
+
the governance/monitoring **pages** (`/watch`, `/harbor`, `/gate` — `page.view.governance`) and
|
|
182
|
+
`GET /api/gds/sessions/search`; the **dev-box + provisioning fleets** (`GET /boxes[/cost-ledger]`,
|
|
183
|
+
`POST /boxes/:b/close`, `PATCH .../block`, `GET /provisioning/fleet[/cost-ledger]`,
|
|
184
|
+
`POST .../force-teardown`); **security adjudication** (`GET /security/reports`,
|
|
185
|
+
`POST /security/reports/:id/{confirm,dispute,fix,link-fix}`, `/security/docs` CRUD);
|
|
186
|
+
`GET /api/gds/audit-log`; the **roster reads** (`GET /builders/roster`, `/grades/by-builder`,
|
|
187
|
+
`/builders/:id/active-claims`); **cross-builder memory reads** (`GET /memory/builders/:id/file[s]`);
|
|
188
|
+
**project curation + scouting**; `PATCH /builders/:id/budget`; `POST /inbox/:id/ratify`;
|
|
189
|
+
`GET /override-requests` + `POST .../:id/decide`; `POST /claims/:id/release-on-behalf`;
|
|
190
|
+
`POST /done-when/:id/unsatisfy`; `POST /goals/reorder`; `POST /versions`;
|
|
191
|
+
`POST /tasks/newcomer-restock`; `POST /tasks/peer-votes/tally`; `GET /discord/channels/plan` +
|
|
192
|
+
`POST .../reconcile`; `GET /autonomy/precheck`. Plus `GET /gate-approvals`, whose read was split out as
|
|
193
|
+
`gate_approval.read` so the Gate page is usable at Metic while **approving** stays Archon.
|
|
194
|
+
|
|
195
|
+
> **Note the one confidentiality widening:** `/security/docs` (the engagement-report store with
|
|
196
|
+
> attacker-usable exploit detail) is now Metic-readable, because it shares `security.report.adjudicate`
|
|
197
|
+
> with the report-adjudication writes. Every other delegated permission widens who may *act*; this one
|
|
198
|
+
> widens who may *read*. ADR 0157 §Consequences records the split that would undo it if wanted.
|
|
154
199
|
- **Any authenticated builder** — own work: claim/ship/cost/learnings/file-blocker/file-idea. Two
|
|
155
200
|
row-level claim rules apply (enforced in `db.claimTask` / `claimTasksBatch`, not by `requireRank`):
|
|
156
201
|
a **`xenos` can only CLAIM tasks flagged `newcomer_friendly`** (returns `rank_too_low_for_task`),
|
|
@@ -268,7 +268,7 @@ The hall has hard architectural constraints (see `modules/hall-ui/CLAUDE.md`). P
|
|
|
268
268
|
- **Widget registry is the source of truth.** A fitness check (`scripts/gds/fitness.js checkHallSectionRegistry`) reds the build if a `<section class="scroll">` is hardcoded into `<main>`. Views must mount registered widgets, not inline them.
|
|
269
269
|
- **No framework, no build step.** Static HTML/CSS/JS polling `/api/gds/*`. The shell is hand-rolled CSS + a small amount of JS — no framework may be introduced.
|
|
270
270
|
- **Dedicated serving block.** `src/bongos/serve-internal.js` serves this from `BUILDERS_DIR` with the subdomain rewrite shim, canonical redirects, page gates, and asset-stamping. New assets must carry the content-hash `?v=` stamp.
|
|
271
|
-
- **Server-side gates stay authoritative.** Hiding a sidebar item is cosmetic; `
|
|
271
|
+
- **Server-side gates stay authoritative.** Hiding a sidebar item is cosmetic; `requireGovernancePage` and the sign-in redirects remain the real access control.
|
|
272
272
|
- **Brand pack drives copy.** Neutralizing voice = a neutral default pack + removing hardcoded lore, not English strings baked into markup.
|
|
273
273
|
- **Module-contributed widgets keep working.** The shell must give a stable mount point so a module's `hall-widget.js` lands in the right view (`injectModuleHallWidgets` seam).
|
|
274
274
|
|
package/docs/file-map.md
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
├── README.md ← public-facing one-paragraph summary
|
|
12
12
|
├── .gitignore
|
|
13
13
|
├── package.json / package-lock.json
|
|
14
|
+
├── CODEOWNERS ← owner review on the merge-gate surfaces (real since task 1002611, ADR 0159); inert until branch protection is on (scripts/gds/gating.js) — keep aligned with gate-review.js HARD_FLOOR_GLOBS
|
|
14
15
|
├── server.js ← game boot: Express + Colyseus + the shared internal surface (mountInternalSurfaces), binds 127.0.0.1:3000
|
|
15
16
|
│
|
|
16
17
|
├── .devcontainer/ ← the Example Dev Box, defined as code (ADR 0031 §3) — builds identically on a DO box + a laptop
|
|
@@ -111,7 +112,7 @@
|
|
|
111
112
|
│ ├── grading/ ← CORE-DOMAIN carve (BV1.R73, default-on): the grade-a-diff adversarial worker panel + deterministic pre-passes + rubric; registers the `grade` kernel port. CLAUDE.md, module.json, routes/grade.js, grader.js, grader-rubric.json.
|
|
112
113
|
│ ├── economy/ ← CORE-DOMAIN carve (BV1.R77, default-on): credit allocation + cost ledger + streaks + achievements + leaderboard; registers the `reward` kernel port. CLAUDE.md, module.json, routes/{cost,leaderboard,reward}.js, credits.js, cost.js, cost-classify.js, cost-summary-shape.js, streak.js, achievements.js, reward.js.
|
|
113
114
|
│ ├── ideas/ ← CORE-DOMAIN carve (BV1.R78, default-on): the idea_inbox capture/triage/criterion-proposal flow + the blockers queue; registers the `ideas.capture` kernel port (retired the `captureIdea` doorway leak). CLAUDE.md, module.json, routes/{inbox,blockers}.js, inbox.js, blockers.js.
|
|
114
|
-
│ ├── security/ ← CORE-DOMAIN carve (BV1.R79, default-on): red-team/vulnerability report intake + the env-aware bounty payout table (Metic+); registers the `security` kernel port the core /public/bounty-table resolves. <redacted> (permission-path-check, route-rank-check) stays kernel — this is <redacted>. CLAUDE.md, module.json, routes/reports.js, security.js, secret-scrub.js.
|
|
115
|
+
│ ├── security/ ← CORE-DOMAIN carve (BV1.R79, default-on): red-team/vulnerability report intake + the env-aware bounty payout table (Metic+); registers the `security` kernel port the core /public/bounty-table resolves. <redacted> (permission-path-check, route-rank-check) stays kernel — this is <redacted>. CLAUDE.md, module.json, routes/{reports,scans}.js, security.js, secret-scrub.js, scan-store.js. **artifact-scan/** (goal 1000055, /scan-before-install): fetch.js (hardened clone), quarantine.js (holding pen), manifest.js (content hash), mirror.js (scrubbed reading-room), fence-local.js (vendored scrub/fence), floor.js + detectors/ (zero-LLM deterministic floor — npm-lifecycle, hooks, mcp, permissions, credentials, network, injection, dependencies, capabilities; persisted before any model reads).
|
|
115
116
|
│ ├── builder-settings/ ← CORE-DOMAIN carve (BV1.R80, default-on): per-builder prefs — wandering level, per-skill model ceilings, sound/render toggles — + builder-needs. `GET /me` resolves the `builder-settings` kernel port for these slices. CLAUDE.md, module.json, routes/settings.js, wandering-prefs.js, skill-prefs.js, sound-prefs.js, event-sound-prefs.js, render-prefs.js, model-alloc-prefs.js, interaction-prefs.js, display-name.js, builder-needs.js.
|
|
116
117
|
│ ├── onboarding/ ← CORE-DOMAIN carve (BV1.R81, default-on): admission (access-request → Archon approval), the server-ticked onboarding state machine, the friction analyzer, and evergreen newcomer-chore restock; registers the `onboarding` kernel port. CLAUDE.md, module.json, routes/access-requests.js, onboarding.js, onboarding-state.js, newcomer-restock.js, approval-broadcast.js.
|
|
117
118
|
│ ├── sessions/ ← CORE-DOMAIN carve (BV1.R82, default-on): the session_records corpus + data plane (upload, cross-builder search/deep-dive), the BFG read-the-room scorer, session-pulse/stale-claim helpers. Registers no port — reached via HTTP POST to its own /sessions route; resolves the economy `reward` port for the cost-plus token reward. CLAUDE.md, module.json, routes/sessions.js, bfg.js, pulse.js.
|
|
@@ -160,6 +161,7 @@
|
|
|
160
161
|
│ ├── release.js ← resolve claim as abandoned (`/builder-release`)
|
|
161
162
|
│ ├── cost.js ← log a cost entry (`/builder-cost`)
|
|
162
163
|
│ ├── me.js ← current builder profile + leaderboard
|
|
164
|
+
│ ├── goal.js ← goal board CLI: `list` (rollup per goal) + `show <id>` (criteria, tasks, waits-on, next claimable)
|
|
163
165
|
│ ├── seed-v3-tasks.js ← V3 Planning Session #1: 80 net-new GDS-V3 tasks (V3.R01–V3.R89) + 10 idea_inbox promotions; idempotent on source_ref
|
|
164
166
|
│ ├── backfill-cost.js ← read art ledger → POST /api/gds/cost (idempotent)
|
|
165
167
|
│ ├── smoke-write.sh ← write-path smoke (create→claim→ship round-trip)
|
|
@@ -362,6 +364,7 @@ tests/
|
|
|
362
364
|
├── priority-session/SKILL.md ← /priority-session — a trusted builder answers plain-speech questions; the answers reweight the idea_inbox + suggest what to build next
|
|
363
365
|
├── read-session-export/SKILL.md ← /read-session-export — read a Claude Code /export zip fast (prompts + thinking + tool calls → stdout); reads the existing export, doesn't make one. Backed by scripts/gds/read-session-export.js
|
|
364
366
|
├── recall/SKILL.md ← /recall — one-call project-knowledge search across repo docs + DB prose (tasks, learnings, session logs)
|
|
367
|
+
├── scan-before-install/SKILL.md ← /scan-before-install — quarantine-fetch a third-party repo/plugin, deterministic floor + tiered subagent panel over the scrubbed mirror, arithmetic verdict + honest-limits report to the builder's own config dir; prints install commands (pinned SHA only), never installs (goal 1000055)
|
|
365
368
|
├── session-handoff/SKILL.md ← /session-handoff — compose a clean, paste-ready next-steps prompt to START a fresh session with (keeps context light by curating what carries forward); read-only, distinct from /builder-ship's ledger notes and /builder-end's close-out
|
|
366
369
|
└── status/SKILL.md ← /status — what's the status of X / what's left for criterion Cn (read-only rollup)
|
|
367
370
|
```
|
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
],
|
|
23
23
|
"default_rank": "xenos",
|
|
24
24
|
"wired_ranks": [
|
|
25
|
-
"archon",
|
|
26
|
-
"metic",
|
|
27
25
|
"xenos",
|
|
28
|
-
"
|
|
26
|
+
"archon",
|
|
27
|
+
"thetes",
|
|
28
|
+
"metic"
|
|
29
29
|
],
|
|
30
30
|
"_wired_note": "A rank is 'wired' if it has behavior: it appears in a requireRank(...) call, is the column default, is SET by a migration, or is a key in the live REQUIRES_RANK_TIER claim-gate map (db.js). archon = requireRank + seeded; metic + thetes + xenos = tier-map members (claim-floor comparison); xenos = column default + set on /builder-exit (migration 025); thetes = the auto-graduation target (xenos→thetes after 3 confirmed tasks, #692 / ADR 0034)."
|
|
31
31
|
},
|