@bongos/core 1.18.0 → 1.18.18
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 +1740 -640
- package/.claude/skills/builder-box/SKILL.md +6 -0
- package/.claude/skills/builder-sequence/SKILL.md +97 -0
- package/.claude/skills/builder-ship/SKILL.md +8 -2
- package/.claude/skills/builder-start/SKILL.md +11 -0
- package/.claude/skills/builder-sync/SKILL.md +41 -0
- package/.claude/skills/fix-task/SKILL.md +64 -0
- package/.claude/skills/goal-create/SKILL.md +158 -0
- package/.claude/skills/goal-review/SKILL.md +3 -1
- package/.claude/skills/idea-triage/SKILL.md +14 -8
- package/.claude/skills/merge-mode/SKILL.md +2 -2
- package/.claude/skills/new-project/SKILL.md +1 -0
- package/.claude/skills/planning-session/SKILL.md +45 -18
- package/.env.local.example +4 -3
- package/README.md +5 -3
- package/bin/bongos.js +1 -0
- package/clients/bongos-client/README.md +2 -2
- package/clients/bongos-client/bongos-client.global.js +82 -18
- package/clients/bongos-client/index.cjs +82 -18
- package/clients/bongos-client/index.d.ts +131 -29
- package/clients/bongos-client/index.mjs +82 -18
- package/config/branding.neutral.json +11 -2
- package/config/governance.neutral.json +21 -0
- package/docs/adr/0043-git-ssh-trust-boundary-and-rank-floor-on-permission-paths.md +24 -0
- package/docs/adr/0090-metic-task-authoring.md +1 -1
- package/docs/adr/0142-project-context-is-prose-only.md +41 -0
- package/docs/adr/0143-onboarding-repo-picker-oauth-scope.md +35 -0
- package/docs/adr/0144-devbox-rehome-onto-cloudbongos-plane.md +41 -0
- package/docs/adr/0144-federated-single-logout-backchannel.md +42 -0
- package/docs/adr/0145-devbox-app-branding-driven-module.md +44 -0
- package/docs/adr/0145-free-hosted-project-tier-isolation-and-domain-separation.md +62 -0
- package/docs/adr/0146-configurable-reward-mode-cost-plus-only.md +53 -0
- package/docs/adr/0147-standalone-live-docs-regen.md +39 -0
- package/docs/adr/0148-task-scoped-box-source-access.md +48 -0
- package/docs/adr/0149-bongos-dev-local-launcher.md +57 -0
- package/docs/adr/0150-box-first-boot-bringup-vendored-instances.md +68 -0
- package/docs/adr/0151-governance-permissions-as-atom-ranks-as-roles.md +229 -0
- package/docs/adr/0152-landing-gate-served-by-the-core-app.md +92 -0
- package/docs/adr/0152-metic-task-abandonment.md +67 -0
- package/docs/adr/0153-sequential-chain-runner.md +51 -0
- package/docs/adr/0154-goal-owner-criterion-authoring.md +86 -0
- package/docs/adr/README.md +15 -2
- package/docs/api/openapi.json +2648 -483
- package/docs/api-reference.md +73 -13
- package/docs/architecture.md +4 -2
- package/docs/branding-contract.md +3 -1
- package/docs/canonical-permissions.md +21 -8
- package/docs/file-map.md +15 -7
- package/docs/onboarding/diagrams/01-task-lifecycle.mmd +2 -2
- package/docs/onboarding/diagrams/02-rank-ladder.mmd +3 -1
- package/docs/onboarding/diagrams/05-versioning.mmd +1 -3
- package/docs/onboarding/diagrams/assertions.json +4 -7
- package/docs/onboarding/drachmae-and-karma.md +3 -3
- package/docs/onboarding/primer.md +17 -16
- package/docs/onboarding/slash-commands.md +124 -0
- package/docs/recipes/builder-box-lifecycle.md +23 -0
- package/docs/recipes/devbox-app-release.md +14 -4
- package/docs/recipes/instance-first-run.md +16 -0
- package/docs/recipes/local-dev.md +81 -0
- package/docs/recipes/ops-gotchas.md +19 -1
- package/docs/recipes/overnight-builder.md +1 -1
- package/docs/recipes/packaging-the-core.md +13 -0
- package/docs/recipes/parallel-goal-waves.md +174 -0
- package/docs/recipes/ship-and-regrade.md +2 -2
- package/docs/recipes/standalone-live-docs.md +48 -0
- package/docs/recipes/upgrading-the-core.md +5 -2
- package/docs/recipes/work-on-a-task-from-your-dev-box.md +108 -0
- package/migrations/003_pms.sql +6 -7
- package/migrations/006_pms_v2.sql +3 -31
- package/migrations/039_newcomer_friendly_column.sql +5 -0
- package/migrations/102_remove_box_first_provision_approval.sql +4 -0
- package/migrations/core_192_github_oauth_tokens.sql +33 -0
- package/migrations/core_193_task_needs_rebase.sql +28 -0
- package/migrations/core_194_confirmed_backlog_clawback.sql +63 -0
- package/migrations/core_195_idea_triage_provenance.sql +57 -0
- package/migrations/core_196_session_reward_topup.sql +69 -0
- package/modules/autonomy/pollers/routine-timers.js +9 -8
- package/modules/builder-settings/wandering-prefs.js +61 -18
- package/modules/dev-box/app/README.md +73 -0
- package/modules/dev-box/app/assets/tray/mac-alertTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-alertTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-busyTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-busyTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-offTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-offTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-onTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-onTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/win-alert.png +0 -0
- package/modules/dev-box/app/assets/tray/win-busy.png +0 -0
- package/modules/dev-box/app/assets/tray/win-off.png +0 -0
- package/modules/dev-box/app/assets/tray/win-on.png +0 -0
- package/modules/dev-box/app/build-resources/dmg-background.png +0 -0
- package/modules/dev-box/app/build-resources/dmg-background@2x.png +0 -0
- package/modules/dev-box/app/build-resources/icon.png +0 -0
- package/modules/dev-box/app/electron-builder.tmpl.yml +95 -0
- package/modules/dev-box/app/electron-builder.yml +95 -0
- package/modules/dev-box/app/package-lock.json +5291 -0
- package/modules/dev-box/app/package.json +30 -0
- package/modules/dev-box/app/renderer/app.js +319 -0
- package/modules/dev-box/app/renderer/index.html +45 -0
- package/modules/dev-box/app/renderer/styles.css +246 -0
- package/modules/dev-box/app/renderer/theme.generated.css +16 -0
- package/modules/dev-box/app/scripts/apply-dmg-backdrop.sh +82 -0
- package/modules/dev-box/app/scripts/dmgbuild-settings.py +39 -0
- package/modules/dev-box/app/scripts/gen-brand.js +138 -0
- package/modules/dev-box/app/scripts/gen-dmg-backdrop.py +323 -0
- package/modules/dev-box/app/scripts/gen-icons.js +286 -0
- package/modules/dev-box/app/scripts/vendor-client.js +23 -0
- package/modules/dev-box/app/src/box-controller.js +287 -0
- package/modules/dev-box/app/src/brand.generated.json +13 -0
- package/modules/dev-box/app/src/brand.js +16 -0
- package/modules/dev-box/app/src/config.js +19 -0
- package/modules/dev-box/app/src/gds-client.js +90 -0
- package/modules/dev-box/app/src/main.js +610 -0
- package/modules/dev-box/app/src/pairing.js +57 -0
- package/modules/dev-box/app/src/preload.js +29 -0
- package/modules/dev-box/app/src/session-store.js +58 -0
- package/modules/dev-box/app/src/ssh-setup.js +569 -0
- package/modules/dev-box/app/src/task-picker.js +70 -0
- package/modules/dev-box/app/src/tray.js +99 -0
- package/modules/dev-box/app/src/updater.js +55 -0
- package/modules/dev-box/app/src/vendor/bongos-client.cjs +698 -0
- package/modules/dev-box/app/test/unit.mjs +526 -0
- package/modules/dev-box/box-access.js +121 -4
- package/modules/dev-box/boxes.js +20 -0
- package/modules/dev-box/module.json +1 -1
- package/modules/dev-box/routes/box.js +87 -3
- package/modules/economy/credits.js +116 -25
- package/modules/economy/reward.js +8 -0
- package/modules/economy/streak.js +2 -1
- package/modules/governance/CLAUDE.md +15 -0
- package/modules/governance/catalog.js +419 -0
- package/modules/governance/config.js +174 -0
- package/modules/governance/db.js +125 -0
- package/modules/governance/migrations/governance_001_tables.sql +81 -0
- package/modules/governance/migrations/governance_002_seed_and_backfill.sql +103 -0
- package/modules/governance/migrations/governance_003_task_abandon_metic.sql +28 -0
- package/modules/governance/migrations/governance_004_criterion_create.sql +39 -0
- package/modules/governance/migrations/governance_005_resync_builder_rank_roles.sql +56 -0
- package/modules/governance/module.json +10 -0
- package/modules/governance/protected-surfaces.js +88 -0
- package/modules/governance/protected-surfaces.json +80 -0
- package/modules/governance/rank-roles.js +83 -0
- package/modules/governance/resolver.js +221 -0
- package/modules/governance/routes/governance.js +89 -0
- package/modules/governance/routes/role-sync.js +49 -0
- package/modules/governance/session-scopes.js +127 -0
- package/modules/governance/session-scopes.json +38 -0
- package/modules/hall-ui/public/atlas.css +117 -0
- package/modules/hall-ui/public/atlas.html +3 -114
- package/modules/hall-ui/public/brand-apply.js +34 -6
- package/modules/hall-ui/public/builders.js +187 -219
- package/modules/hall-ui/public/diagrams.html +2 -0
- package/modules/hall-ui/public/dom-utils.js +27 -0
- package/modules/hall-ui/public/drachmae.html +2 -0
- package/modules/hall-ui/public/drachmae.js +54 -1
- package/modules/hall-ui/public/gate.css +98 -0
- package/modules/hall-ui/public/gate.html +3 -95
- package/modules/hall-ui/public/goal-inbox.js +4 -1
- package/modules/hall-ui/public/goals-page.js +626 -114
- package/modules/hall-ui/public/goals.css +79 -1
- package/modules/hall-ui/public/goals.html +38 -11
- package/modules/hall-ui/public/hall-widgets.js +62 -52
- package/modules/hall-ui/public/harbor.css +123 -0
- package/modules/hall-ui/public/harbor.html +3 -120
- package/modules/hall-ui/public/index.html +11 -4
- package/modules/hall-ui/public/instances-panel.js +4 -1
- package/modules/hall-ui/public/modules.css +63 -0
- package/modules/hall-ui/public/modules.html +3 -60
- package/modules/hall-ui/public/my-projects.html +78 -0
- package/modules/hall-ui/public/my-projects.js +142 -0
- package/modules/hall-ui/public/new-project-wizard.js +7 -3
- package/modules/hall-ui/public/not-ready.html +2 -0
- package/modules/hall-ui/public/pair.css +73 -0
- package/modules/hall-ui/public/pair.html +3 -70
- package/modules/hall-ui/public/palette.js +302 -0
- package/modules/hall-ui/public/primer.css +13 -0
- package/modules/hall-ui/public/primer.html +2 -0
- package/modules/hall-ui/public/profile.html +2 -0
- package/modules/hall-ui/public/ranks.html +2 -0
- package/modules/hall-ui/public/roadmap.css +179 -0
- package/modules/hall-ui/public/roadmap.html +9 -172
- package/modules/hall-ui/public/roadmap.js +329 -316
- package/modules/hall-ui/public/scouting.html +45 -0
- package/modules/hall-ui/public/scouting.js +73 -0
- package/modules/hall-ui/public/sessions.css +16 -0
- package/modules/hall-ui/public/sessions.html +3 -13
- package/modules/hall-ui/public/settings.html +2 -0
- package/modules/hall-ui/public/settings.js +4 -4
- package/modules/hall-ui/public/shell.js +143 -18
- package/modules/hall-ui/public/style.css +231 -39
- package/modules/hall-ui/public/task-detail.js +347 -26
- package/modules/hall-ui/public/task.html +6 -1
- package/modules/hall-ui/public/watch.html +2 -0
- package/modules/hall-ui/public/work.html +8 -6
- package/modules/hall-ui/public/work.js +1 -1
- package/modules/ideas/inbox.js +61 -11
- package/modules/ideas/routes/inbox.js +23 -0
- package/modules/lifecycle/claim-eligibility.js +72 -0
- package/modules/lifecycle/db.js +519 -139
- package/modules/lifecycle/done-when.js +18 -3
- package/modules/lifecycle/github-push.js +19 -2
- package/modules/lifecycle/goal-advisory.js +114 -0
- package/modules/lifecycle/goal-authz.js +62 -0
- package/modules/lifecycle/lifecycle.js +9 -0
- package/modules/lifecycle/publish-reconciler.js +109 -6
- package/modules/lifecycle/routes/claims.js +68 -23
- package/modules/lifecycle/routes/done-when.js +110 -15
- package/modules/lifecycle/routes/goals.js +8 -38
- package/modules/lifecycle/routes/tasks.js +38 -6
- package/modules/lifecycle/ship-card.js +6 -0
- package/modules/onboarding/onboarding-state.js +1 -1
- package/modules/platform-identity/CLAUDE.md +15 -0
- package/modules/platform-identity/hub-device.js +147 -0
- package/modules/platform-identity/hub-keys.js +151 -0
- package/modules/platform-identity/migrations/platform_identity_001_tables.sql +114 -0
- package/modules/platform-identity/migrations/platform_identity_002_client_origin_index.sql +18 -0
- package/modules/platform-identity/migrations/platform_identity_003_project_memberships.sql +42 -0
- package/modules/platform-identity/migrations/platform_identity_004_projects.sql +44 -0
- package/modules/platform-identity/migrations/platform_identity_005_builder_activity.sql +42 -0
- package/modules/platform-identity/module.json +18 -0
- package/modules/platform-identity/platform-identity.js +531 -0
- package/modules/platform-identity/pollers/code-sweep.js +43 -0
- package/modules/platform-identity/routes/my-projects.js +140 -0
- package/modules/platform-identity/routes/projects.js +107 -0
- package/modules/platform-identity/routes/scouting.js +35 -0
- package/modules/platform-identity/routes/sso.js +402 -0
- package/modules/platform-identity/tests/platform-identity.mjs +388 -0
- package/modules/platform-identity/ui/.gitkeep +0 -0
- package/modules/security/routes/reports.js +10 -0
- package/modules/sessions/db.js +166 -21
- package/modules/sessions/module.json +1 -1
- package/modules/sessions/pollers/session-reward-reconcile.js +78 -0
- package/modules/sessions/routes/sessions.js +33 -0
- package/modules/status-ui/public/explore.html +54 -0
- package/modules/status-ui/public/explore.js +67 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/public-landing/assets/anim/idle/frame_00.webp +0 -0
- package/public-landing/assets/anim/idle/frame_01.webp +0 -0
- package/public-landing/assets/anim/idle/frame_02.webp +0 -0
- package/public-landing/assets/anim/idle/frame_03.webp +0 -0
- package/public-landing/assets/anim/idle/frame_04.webp +0 -0
- package/public-landing/assets/anim/idle/frame_05.webp +0 -0
- package/public-landing/assets/anim/idle/frame_06.webp +0 -0
- package/public-landing/assets/anim/idle/frame_07.webp +0 -0
- package/public-landing/assets/anim/idle/frame_08.webp +0 -0
- package/public-landing/assets/anim/idle/frame_09.webp +0 -0
- package/public-landing/assets/anim/idle/frame_10.webp +0 -0
- package/public-landing/assets/anim/idle/frame_11.webp +0 -0
- package/public-landing/assets/anim/idle/frame_12.webp +0 -0
- package/public-landing/assets/anim/idle/frame_13.webp +0 -0
- package/public-landing/assets/anim/idle/frame_14.webp +0 -0
- package/public-landing/assets/anim/idle/frame_15.webp +0 -0
- package/public-landing/assets/anim/idle/frame_16.webp +0 -0
- package/public-landing/assets/anim/idle/frame_17.webp +0 -0
- package/public-landing/assets/anim/idle/frame_18.webp +0 -0
- package/public-landing/assets/anim/idle/frame_19.webp +0 -0
- package/public-landing/assets/anim/idle/frame_20.webp +0 -0
- package/public-landing/assets/anim/idle/frame_21.webp +0 -0
- package/public-landing/assets/anim/idle/frame_22.webp +0 -0
- package/public-landing/assets/anim/idle/frame_23.webp +0 -0
- package/public-landing/assets/anim/idle/frame_24.webp +0 -0
- package/public-landing/assets/anim/idle/frame_25.webp +0 -0
- package/public-landing/assets/anim/idle/frame_26.webp +0 -0
- package/public-landing/assets/anim/idle/frame_27.webp +0 -0
- package/public-landing/assets/anim/idle/frame_28.webp +0 -0
- package/public-landing/assets/anim/idle/frame_29.webp +0 -0
- package/public-landing/assets/anim/idle/frame_30.webp +0 -0
- package/public-landing/assets/anim/idle/frame_31.webp +0 -0
- package/public-landing/assets/anim/idle/frame_32.webp +0 -0
- package/public-landing/assets/anim/idle/frame_33.webp +0 -0
- package/public-landing/assets/anim/idle/frame_34.webp +0 -0
- package/public-landing/assets/anim/idle/frame_35.webp +0 -0
- package/public-landing/assets/anim/idle/frame_36.webp +0 -0
- package/public-landing/assets/anim/idle/frame_37.webp +0 -0
- package/public-landing/assets/anim/idle/frame_38.webp +0 -0
- package/public-landing/assets/anim/idle/frame_39.webp +0 -0
- package/public-landing/assets/anim/idle/frame_40.webp +0 -0
- package/public-landing/assets/anim/idle/frame_41.webp +0 -0
- package/public-landing/assets/anim/idle/frame_42.webp +0 -0
- package/public-landing/assets/anim/idle/frame_43.webp +0 -0
- package/public-landing/create.html +252 -62
- package/public-landing/gate/README.md +137 -0
- package/public-landing/gate/dispmaps/bar.png +0 -0
- package/public-landing/gate/dispmaps/flat.png +0 -0
- package/public-landing/gate/dispmaps/key.png +0 -0
- package/public-landing/gate/index.html +587 -0
- package/public-landing/gate/previews/cloud-bongos.jpg +0 -0
- package/public-landing/gate/previews/off-the-boats.jpg +0 -0
- package/public-landing/gate/space.css +799 -0
- package/public-landing/gate/space.js +1826 -0
- package/public-landing/gate/sprites/enter.png +0 -0
- package/public-landing/gate/sprites/search.png +0 -0
- package/public-landing/gate/sprites/terminal-blank.png +0 -0
- package/public-landing/gate/sprites/tile.png +0 -0
- package/public-landing/world/assets/clouds/cloud-island-large.png +0 -0
- package/public-landing/world/assets/clouds/cloud-puff.png +0 -0
- package/public-landing/world/assets/creatures/creature-whale-cargo.png +0 -0
- package/public-landing/world/assets/creatures/creature-whale-glide.png +0 -0
- package/public-landing/world/assets/plates/plate-clouds-near.png +0 -0
- package/public-landing/world/assets/plates/scene-establishing.png +0 -0
- package/scripts/gds/abandon.js +6 -4
- package/scripts/gds/api.js +10 -5
- package/scripts/gds/api.ps1 +26 -0
- package/scripts/gds/api.sh +6 -0
- package/scripts/gds/audit-ships.js +7 -1
- package/scripts/gds/backfill-sessions.js +78 -18
- package/scripts/gds/backup.js +23 -1
- package/scripts/gds/box-connect-lib.js +124 -31
- package/scripts/gds/box-sync.js +66 -0
- package/scripts/gds/box.js +225 -53
- package/scripts/gds/cf-tunnel.js +145 -6
- package/scripts/gds/claim.js +34 -3
- package/scripts/gds/cli-lib.js +161 -21
- package/scripts/gds/code.js +6 -2
- package/scripts/gds/deploy-divergence.js +209 -0
- package/scripts/gds/dev-lib.js +309 -0
- package/scripts/gds/dev.js +322 -0
- package/scripts/gds/doctor.js +90 -61
- package/scripts/gds/fetch-art-key.js +1 -1
- package/scripts/gds/fetch-sound-prefs.js +2 -2
- package/scripts/gds/fitness.js +228 -12
- package/scripts/gds/gds-db-backup.service +16 -1
- package/scripts/gds/gds-db-offsite.service +9 -1
- package/scripts/gds/gen-api-client.js +1 -1
- package/scripts/gds/gen-api-docs.js +36 -14
- package/scripts/gds/gen-diagrams.js +45 -28
- package/scripts/gds/gen-file-map.js +2 -1
- package/scripts/gds/gen-freshness.js +32 -0
- package/scripts/gds/gen-repo-map.js +3 -2
- package/scripts/gds/gen-session-index.js +14 -5
- package/scripts/gds/hooks/pre-push.js +2 -2
- package/scripts/gds/init.js +60 -3
- package/scripts/gds/install-git-hooks.js +1 -1
- package/scripts/gds/key-card.js +15 -6
- package/scripts/gds/key-status.js +1 -1
- package/scripts/gds/linkify-refs.js +35 -9
- package/scripts/gds/lint-migrations.js +102 -0
- package/scripts/gds/login.js +58 -11
- package/scripts/gds/mirror-redact.js +5 -0
- package/scripts/gds/package-core.js +263 -4
- package/scripts/gds/paste-token.js +7 -1
- package/scripts/gds/preflight.js +126 -0
- package/scripts/gds/provision.js +268 -19
- package/scripts/gds/publish-manifest.js +22 -1
- package/scripts/gds/reauth.js +7 -3
- package/scripts/gds/regen-instance-docs.js +47 -0
- package/scripts/gds/run-unit-tests.js +42 -16
- package/scripts/gds/seed-bongos-v1-seo-tasks.js +104 -0
- package/scripts/gds/seed-bv1-profiles-tasks.js +126 -0
- package/scripts/gds/sequence.js +425 -0
- package/scripts/gds/session-cost.js +10 -1
- package/scripts/gds/setup.js +72 -5
- package/scripts/gds/shell.js +5 -3
- package/scripts/gds/ship.js +433 -59
- package/scripts/gds/smoke-gds.js +139 -8
- package/scripts/gds/start.js +171 -22
- package/scripts/gds/status.js +1 -1
- package/scripts/gds/triage.js +10 -9
- package/scripts/gds/upgrade.js +271 -7
- package/scripts/migrate.sh +10 -0
- package/scripts/status-mirror-sync.js +114 -84
- package/src/bongos/api-errors.js +1 -0
- package/src/bongos/auth.js +809 -107
- package/src/bongos/db-kernel.js +27 -0
- package/src/bongos/db.js +105 -0
- package/src/bongos/github-repos.js +93 -0
- package/src/bongos/module-scope-map.js +27 -1
- package/src/bongos/permission-path-check.js +136 -102
- package/src/bongos/repo-info.js +47 -11
- package/src/bongos/route-rank-check.js +429 -46
- package/src/bongos/routes/_helpers.js +12 -1
- package/src/bongos/routes/auth.js +312 -13
- package/src/bongos/routes/backup.js +58 -2
- package/src/bongos/routes/github.js +90 -0
- package/src/bongos/routes/instance.js +15 -3
- package/src/bongos/routes/me.js +35 -1
- package/src/bongos/routes.js +2 -0
- package/src/bongos/serve-internal.js +84 -15
- package/src/branding.js +49 -2
- package/src/instance-config.js +46 -0
- package/src/module-api.js +140 -1
- package/src/platform-server.js +86 -9
- package/tests/abandon_task.mjs +59 -3
- package/tests/api_cli_flags.mjs +53 -0
- package/tests/auth_page_gate.mjs +13 -0
- package/tests/backfill_sessions.mjs +127 -1
- package/tests/backup_cli.mjs +54 -0
- package/tests/bongos_box_connect.mjs +77 -0
- package/tests/box_access.mjs +130 -1
- package/tests/box_credential.mjs +125 -0
- package/tests/box_host_keys.mjs +24 -0
- package/tests/box_infra_resolve.mjs +149 -0
- package/tests/box_scope_session.mjs +6 -2
- package/tests/box_sync.mjs +55 -0
- package/tests/box_task_scope.mjs +99 -0
- package/tests/branding.mjs +41 -23
- package/tests/cf_ruleset_preflight.mjs +142 -0
- package/tests/cf_tunnel.mjs +37 -0
- package/tests/claim_gate_rebase.mjs +98 -0
- package/tests/clawback_confirmed_backlog.mjs +103 -0
- package/tests/cli_lib_formatters.mjs +20 -0
- package/tests/confirm_attribution.mjs +30 -46
- package/tests/credit_grant.mjs +198 -10
- package/tests/criterion_authoring_gate.mjs +272 -0
- package/tests/criterion_progress.mjs +33 -1
- package/tests/dev_lib.mjs +253 -0
- package/tests/devbox_artifact_gate.mjs +75 -0
- package/tests/devbox_dmg_backdrop.mjs +137 -0
- package/tests/devbox_icons.mjs +304 -0
- package/tests/devbox_installer_brand.mjs +232 -0
- package/tests/devbox_key_register.mjs +234 -0
- package/tests/docs_openapi_route.mjs +110 -0
- package/tests/doctor_hooks.mjs +141 -0
- package/tests/extract_json.mjs +140 -0
- package/tests/fitness.mjs +89 -0
- package/tests/gen_freshness.mjs +96 -0
- package/tests/github_repos_helpers.mjs +91 -0
- package/tests/github_token_store.mjs +121 -0
- package/tests/goal_advisory.mjs +251 -0
- package/tests/goal_criterion_confirm_ui.mjs +269 -0
- package/tests/goal_routes.mjs +59 -4
- package/tests/goal_tier.mjs +12 -3
- package/tests/governance_catalog.mjs +129 -0
- package/tests/governance_claim_eligibility.mjs +262 -0
- package/tests/governance_config.mjs +187 -0
- package/tests/governance_ownership_scope.mjs +410 -0
- package/tests/governance_page_gates.mjs +324 -0
- package/tests/governance_parity.mjs +336 -0
- package/tests/governance_principals.mjs +232 -0
- package/tests/governance_protected_surfaces.mjs +208 -0
- package/tests/governance_require_permission.mjs +223 -0
- package/tests/governance_resolver.mjs +84 -0
- package/tests/governance_role_sync.mjs +231 -0
- package/tests/governance_seed.mjs +127 -0
- package/tests/governance_session_scope.mjs +434 -0
- package/tests/governance_vanilla_boot.mjs +203 -0
- package/tests/grade_attribution.mjs +7 -7
- package/tests/hall_audit.mjs +223 -0
- package/tests/hall_nav.mjs +191 -0
- package/tests/hall_palette.mjs +206 -0
- package/tests/hall_signout.mjs +124 -0
- package/tests/hook_user_agents.mjs +10 -0
- package/tests/idea_triage.mjs +162 -0
- package/tests/idp_device_exchange.mjs +198 -0
- package/tests/idp_federation.mjs +100 -0
- package/tests/init.mjs +51 -0
- package/tests/instance_config.mjs +65 -0
- package/tests/instance_mismatch_guard.mjs +23 -6
- package/tests/instance_release_config.mjs +104 -0
- package/tests/linkify_refs.mjs +15 -2
- package/tests/migrations_forward_safe.mjs +86 -0
- package/tests/module_api.mjs +1 -1
- package/tests/module_contributions.mjs +55 -0
- package/tests/module_loader.mjs +10 -5
- package/tests/module_scope_active_claims.mjs +94 -0
- package/tests/needs_rebase.mjs +92 -0
- package/tests/one_active_claim_per_session.mjs +76 -0
- package/tests/override_attribution.mjs +10 -8
- package/tests/override_request_ownership.mjs +8 -4
- package/tests/package_core.mjs +246 -1
- package/tests/parse_cookie_decode.mjs +42 -0
- package/tests/pay_on_land.mjs +129 -0
- package/tests/platform_boot.mjs +100 -1
- package/tests/post_login_landing.mjs +42 -0
- package/tests/preflight_checks.mjs +72 -0
- package/tests/provision.mjs +289 -7
- package/tests/pruned_lockfile_integrity.mjs +79 -0
- package/tests/publish_branch_route.mjs +53 -0
- package/tests/publish_reconciler.mjs +187 -2
- package/tests/repo_info_binding.mjs +248 -0
- package/tests/reward_gate.mjs +11 -2
- package/tests/reward_mode_cost_plus_only.mjs +116 -0
- package/tests/reward_mode_surfacing.mjs +168 -0
- package/tests/route_permission_check.mjs +301 -0
- package/tests/route_rank_check.mjs +254 -12
- package/tests/route_validation.mjs +30 -0
- package/tests/sequence.mjs +267 -0
- package/tests/session_digest.mjs +44 -0
- package/tests/session_index.mjs +18 -6
- package/tests/session_records.mjs +39 -1
- package/tests/session_reward_on_land.mjs +381 -0
- package/tests/session_reward_reconcile.mjs +229 -0
- package/tests/ship_api_client_pathspec.mjs +100 -0
- package/tests/ship_base_flag.mjs +93 -0
- package/tests/ship_ci_deploy.mjs +140 -3
- package/tests/ship_upstream_deletion.mjs +57 -0
- package/tests/smoke_target.mjs +233 -0
- package/tests/start_env_guard.mjs +87 -0
- package/tests/start_rebase_warning.mjs +103 -0
- package/tests/status_mirror_sync.mjs +122 -0
- package/tests/stop_refcheck.mjs +19 -1
- package/tests/task_goal_link.mjs +15 -6
- package/tests/upgrade.mjs +393 -5
- package/tests/web_admission_status.mjs +162 -0
- package/tests/write_validation_gaps.mjs +110 -0
- package/.gitignore +0 -91
- package/docs/adr/0139-platform-history-migration-to-cloudbongos.md +0 -94
- package/docs/adr/0140-cloudbongos-standalone-reprovision.md +0 -43
- package/scripts/hall-preview/fixtures/access-requests.json +0 -20
- package/scripts/hall-preview/fixtures/achievements.json +0 -76
- package/scripts/hall-preview/fixtures/analytics__builder.json +0 -251
- package/scripts/hall-preview/fixtures/audit-log.json +0 -68
- package/scripts/hall-preview/fixtures/blockers__detail.json +0 -12
- package/scripts/hall-preview/fixtures/box__me.json +0 -5
- package/scripts/hall-preview/fixtures/boxes__cost-ledger.json +0 -69
- package/scripts/hall-preview/fixtures/builders__active-claims.json +0 -1
- package/scripts/hall-preview/fixtures/builders__directory.json +0 -81
- package/scripts/hall-preview/fixtures/builders__roster.json +0 -48
- package/scripts/hall-preview/fixtures/goals.json +0 -502
- package/scripts/hall-preview/fixtures/goals__25.json +0 -96
- package/scripts/hall-preview/fixtures/goals__26.json +0 -67
- package/scripts/hall-preview/fixtures/goals__3.json +0 -103
- package/scripts/hall-preview/fixtures/goals__35.json +0 -49
- package/scripts/hall-preview/fixtures/goals__conflicts.json +0 -154
- package/scripts/hall-preview/fixtures/goals__detail.json +0 -96
- package/scripts/hall-preview/fixtures/goals__inbox.json +0 -5
- package/scripts/hall-preview/fixtures/goals__requests.json +0 -3
- package/scripts/hall-preview/fixtures/grades__by-builder.json +0 -32
- package/scripts/hall-preview/fixtures/inbox.json +0 -330
- package/scripts/hall-preview/fixtures/inbox__detail.json +0 -15
- package/scripts/hall-preview/fixtures/instance.json +0 -124
- package/scripts/hall-preview/fixtures/leaderboard.json +0 -184
- package/scripts/hall-preview/fixtures/me.json +0 -476
- package/scripts/hall-preview/fixtures/me__art-key__own.json +0 -6
- package/scripts/hall-preview/fixtures/me__event-sound-prefs.json +0 -209
- package/scripts/hall-preview/fixtures/me__recent-ships.json +0 -304
- package/scripts/hall-preview/fixtures/me__render.json +0 -5
- package/scripts/hall-preview/fixtures/me__skill-prefs.json +0 -143
- package/scripts/hall-preview/fixtures/me__sound-prefs.json +0 -67
- package/scripts/hall-preview/fixtures/me__wandering.json +0 -43
- package/scripts/hall-preview/fixtures/override-requests.json +0 -15
- package/scripts/hall-preview/fixtures/provisioning__fleet.json +0 -1
- package/scripts/hall-preview/fixtures/provisioning__fleet__cost-ledger.json +0 -1
- package/scripts/hall-preview/fixtures/provisioning__instances.json +0 -1
- package/scripts/hall-preview/fixtures/public__analytics__ecosystem.json +0 -516
- package/scripts/hall-preview/fixtures/public__bounty-table.json +0 -37
- package/scripts/hall-preview/fixtures/public__cost-summary.json +0 -742
- package/scripts/hall-preview/fixtures/public__estimation-drift.json +0 -41
- package/scripts/hall-preview/fixtures/public__grades.json +0 -50
- package/scripts/hall-preview/fixtures/public__progress.json +0 -124
- package/scripts/hall-preview/fixtures/public__recent-shipped.json +0 -426
- package/scripts/hall-preview/fixtures/public__repo-health.json +0 -160
- package/scripts/hall-preview/fixtures/public__repo-info.json +0 -5
- package/scripts/hall-preview/fixtures/security__docs.json +0 -10
- package/scripts/hall-preview/fixtures/security__reports.json +0 -31
- package/scripts/hall-preview/fixtures/sessions__search.json +0 -9
- package/scripts/hall-preview/fixtures/tasks.json +0 -2420
- package/scripts/hall-preview/fixtures/tasks__claimable.json +0 -2555
- package/scripts/hall-preview/fixtures/tasks__detail.json +0 -111
- package/scripts/hall-preview/fixtures/tasks__peer-votes__feed.json +0 -330
- package/scripts/hall-preview/fixtures/versions.json +0 -89
package/docs/api-reference.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<!-- GENERATED by scripts/gds/gen-api-docs.js — do not hand-edit. Run `node scripts/gds/gen-api-docs.js`. -->
|
|
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. 258 endpoints across 42 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`.
|
|
@@ -34,7 +34,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
34
34
|
|---|---|---|---|---|
|
|
35
35
|
| GET | `/api/bongos/audit-log` | `archon` | — | GET /api/gds/audit-log?limit=&offset=&builder_id=&method= Paginated, newest-first. |
|
|
36
36
|
|
|
37
|
-
## `auth` (
|
|
37
|
+
## `auth` (18)
|
|
38
38
|
|
|
39
39
|
| Method | Path | Rank | Body | Description |
|
|
40
40
|
|---|---|---|---|---|
|
|
@@ -42,7 +42,9 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
42
42
|
| GET | `/api/bongos/auth/app-pair/info` | `any-builder` | — | read-only: what the approve page shows BEFORE the click (device name/platform for the given code). |
|
|
43
43
|
| POST | `/api/bongos/auth/app-pair/poll` | `public` | `poll_token` | poll with the secret poll_token; the token IS the bearer (mirrors /auth/device/poll, where the device_code is the bearer). |
|
|
44
44
|
| POST | `/api/bongos/auth/app-pair/start` | `public` | `device_name`, `platform` | starts a pairing; returns opaque codes only, no identity. |
|
|
45
|
+
| POST | `/api/bongos/auth/backchannel-logout` | `public` | `logout_token` | POST /auth/backchannel-logout — the INSTANCE side of federated single-logout (ADR 0144, task 1002238). |
|
|
45
46
|
| POST | `/api/bongos/auth/cli-token/issue` | `any-builder` | — | POST /auth/cli-token/issue — V3.R91 / task 401. |
|
|
47
|
+
| POST | `/api/bongos/auth/device/exchange` | `public` | `assertion` | POST /auth/device/exchange — CLI federation (ADR 0141 §1). |
|
|
46
48
|
| POST | `/api/bongos/auth/device/poll` | `public` | `device_code` | auth flow; the device code itself is the bearer. |
|
|
47
49
|
| POST | `/api/bongos/auth/device/start` | `public` | — | /auth/device — CLI flow rank: public — auth flow itself; identity establishment, not authorization. |
|
|
48
50
|
| GET | `/api/bongos/auth/discord/callback` | `any-builder` | — | completes the link to the caller's own identity. |
|
|
@@ -51,6 +53,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
51
53
|
| POST | `/api/bongos/auth/logout` | `any-builder` | — | own session, no rank gate (a Xenos can log themselves out). |
|
|
52
54
|
| POST | `/api/bongos/auth/revoke` | `archon` | `session_id` | POST /auth/revoke — V3.R38 / task 259. |
|
|
53
55
|
| POST | `/api/bongos/auth/revoke-all` | `archon` | `builder_id` | POST /auth/revoke-all — V3.R38 / task 259. |
|
|
56
|
+
| GET | `/api/bongos/auth/web/admission-status` | `public` | — | GET /auth/web/admission-status?login=X — the probe renderAccessPendingPage polls (task 1002097). |
|
|
54
57
|
| GET | `/api/bongos/auth/web/callback` | `public` | — | OAuth callback; the state cookie + code are the bearer. |
|
|
55
58
|
| GET | `/api/bongos/auth/web/start` | `public` | — | /auth/web — browser flow (used by the /builders page). |
|
|
56
59
|
|
|
@@ -77,7 +80,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
77
80
|
| POST | `/api/bongos/blockers/:id/link` | `metic+archon` | `task_id` | Link an existing blocker to a task (puts the task in 'blocked' status if it's currently 'backlog' or 'ready'). |
|
|
78
81
|
| POST | `/api/bongos/blockers/:id/resolve` | `metic+archon` | `resolution_note` | Resolve. |
|
|
79
82
|
|
|
80
|
-
## `box` (
|
|
83
|
+
## `box` (18)
|
|
81
84
|
|
|
82
85
|
| Method | Path | Rank | Body | Description |
|
|
83
86
|
|---|---|---|---|---|
|
|
@@ -91,6 +94,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
91
94
|
| POST | `/api/bongos/box/host-keys` | `any-builder` | `host_keys` | POST /box/host-keys — the box publishes its own PUBLIC SSH host keys (task 1187 / idea 235). |
|
|
92
95
|
| GET | `/api/bongos/box/managed-settings` | `any-builder` | — | GET /box/managed-settings — the caller's Claude Desktop managed-settings.json. |
|
|
93
96
|
| GET | `/api/bongos/box/me` | `any-builder` | — | GET /box/me — the caller's own box. |
|
|
97
|
+
| GET | `/api/bongos/box/scope` | `any-builder` | — | GET /box/scope — the credential-FREE companion to /box/source-access (BV1.R100 / goal 1000051). |
|
|
94
98
|
| GET | `/api/bongos/box/source-access` | `any-builder` | — | GET /box/source-access — the box fetches its rank-scoped clone spec + the credential to pull it (ADR 0031 §6, task 600). |
|
|
95
99
|
| GET | `/api/bongos/box/ssh-key` | `any-builder` | — | GET /box/ssh-key — list the caller's registered keys. |
|
|
96
100
|
| POST | `/api/bongos/box/ssh-key` | `any-builder` | `public_key`, `label` | POST /box/ssh-key — register the caller's own public SSH key. |
|
|
@@ -174,6 +178,13 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
174
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. |
|
|
175
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. |
|
|
176
180
|
|
|
181
|
+
## `github` (2)
|
|
182
|
+
|
|
183
|
+
| Method | Path | Rank | Body | Description |
|
|
184
|
+
|---|---|---|---|---|
|
|
185
|
+
| GET | `/api/bongos/github/repos` | `any-builder` | — | acts only on the caller's OWN GitHub identity (the token they granted). |
|
|
186
|
+
| POST | `/api/bongos/github/repos` | `any-builder` | `name` | creates a repo in the caller's OWN account. |
|
|
187
|
+
|
|
177
188
|
## `goals` (24)
|
|
178
189
|
|
|
179
190
|
| Method | Path | Rank | Body | Description |
|
|
@@ -213,16 +224,17 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
213
224
|
|
|
214
225
|
| Method | Path | Rank | Body | Description |
|
|
215
226
|
|---|---|---|---|---|
|
|
216
|
-
| GET | `/api/bongos/healthz` | `public` | — | liveness probe; status.
|
|
227
|
+
| GET | `/api/bongos/healthz` | `public` | — | liveness probe; status.example.com hits this anonymously. |
|
|
217
228
|
|
|
218
|
-
## `inbox` (
|
|
229
|
+
## `inbox` (5)
|
|
219
230
|
|
|
220
231
|
| Method | Path | Rank | Body | Description |
|
|
221
232
|
|---|---|---|---|---|
|
|
222
233
|
| GET | `/api/bongos/inbox` | `any-builder` | — | read open ideas; skill-friction rows filtered by viewer rank. |
|
|
223
234
|
| POST | `/api/bongos/inbox` | `any-builder` | `title`, `body_md`, `kind`, `suggested_version`, `suggested_priority` | for ordinary ideas; metic+ for kind='criterion-proposal'. |
|
|
224
235
|
| GET | `/api/bongos/inbox/:id` | `any-builder` | — | single idea read for the "#NNN" deep-link resolver (task 1047). |
|
|
225
|
-
| PATCH | `/api/bongos/inbox/:id` | `metic+archon` | `status`, `kind`, `promoted_to_task_id`, `reviewed_at` | Metic+ (task 360 / ADR 0018): idea triage (promote/discard/merge) shapes the backlog. |
|
|
236
|
+
| 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… |
|
|
226
238
|
|
|
227
239
|
## `instance` (1)
|
|
228
240
|
|
|
@@ -282,13 +294,15 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
282
294
|
| GET | `/api/bongos/me/wandering` | `any-builder` | — | Per-builder "wandering" level (task 1268, migration 119). |
|
|
283
295
|
| PATCH | `/api/bongos/me/wandering` | `any-builder` | _undocumented_ | PATCH the wandering level. |
|
|
284
296
|
|
|
285
|
-
## `memory` (
|
|
297
|
+
## `memory` (9)
|
|
286
298
|
|
|
287
299
|
| Method | Path | Rank | Body | Description |
|
|
288
300
|
|---|---|---|---|---|
|
|
289
301
|
| GET | `/api/bongos/memory/bfg/builders/:builderId/file` | `bfg-principal` | — | |
|
|
290
302
|
| GET | `/api/bongos/memory/bfg/builders/:builderId/files` | `bfg-principal` | — | |
|
|
291
303
|
| 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. |
|
|
292
306
|
| GET | `/api/bongos/memory/file` | `any-builder` | — | GET /memory/file?path=... |
|
|
293
307
|
| DELETE | `/api/bongos/memory/file` | `any-builder` | validated | DELETE /memory/file?path=... |
|
|
294
308
|
| GET | `/api/bongos/memory/files` | `any-builder` | — | GET /memory/files — list the AUTHENTICATED builder's memory files (metadata only, no content). |
|
|
@@ -303,6 +317,17 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
303
317
|
| POST | `/api/bongos/modules/:key/submit` | `metic+archon` | `signed_by` | POST /api/gds/modules/:key/submit — ADR 0107 §1 upstreaming submission. |
|
|
304
318
|
| GET | `/api/bongos/modules/submissions` | `metic+archon` | — | GET /api/gds/modules/submissions?status=&module_key= — the upstreaming review queue (task 1771 reads this). |
|
|
305
319
|
|
|
320
|
+
## `my-projects` (6)
|
|
321
|
+
|
|
322
|
+
| Method | Path | Rank | Body | Description |
|
|
323
|
+
|---|---|---|---|---|
|
|
324
|
+
| GET | `/api/bongos/my-projects` | `any-builder` | — | the caller's OWN cross-project memberships (own data). |
|
|
325
|
+
| POST | `/api/bongos/my-projects/:clientId/leave` | `any-builder` | — | leave a project from the caller's OWN membership list. |
|
|
326
|
+
| GET | `/api/bongos/my-projects/invites` | `any-builder` | — | the caller's OWN pending invitations (ADR 0141 §5). |
|
|
327
|
+
| POST | `/api/bongos/my-projects/invites/:clientId/accept` | `any-builder` | — | accept an invite (pending → builder) for the caller's OWN account. |
|
|
328
|
+
| POST | `/api/bongos/my-projects/invites/:clientId/decline` | `any-builder` | — | decline an invite (delete the pending row) for the caller's OWN account. |
|
|
329
|
+
| POST | `/api/bongos/my-projects/join` | `any-builder` | `origin` | request to join a project. |
|
|
330
|
+
|
|
306
331
|
## `override-requests` (2)
|
|
307
332
|
|
|
308
333
|
| Method | Path | Rank | Body | Description |
|
|
@@ -310,6 +335,16 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
310
335
|
| GET | `/api/bongos/override-requests` | `archon` | — | GET /override-requests?status=open — Archon queue. |
|
|
311
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… |
|
|
312
337
|
|
|
338
|
+
## `projects` (5)
|
|
339
|
+
|
|
340
|
+
| Method | Path | Rank | Body | Description |
|
|
341
|
+
|---|---|---|---|---|
|
|
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). |
|
|
345
|
+
| 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). |
|
|
347
|
+
|
|
313
348
|
## `provisioning` (13)
|
|
314
349
|
|
|
315
350
|
| Method | Path | Rank | Body | Description |
|
|
@@ -349,7 +384,13 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
349
384
|
| GET | `/api/bongos/public/repo-info` | `public` | — | GitHub URL bases for the deployed checkout (V3.R13-followup-2 task 411). |
|
|
350
385
|
| GET | `/api/bongos/public/tasks/:id` | `public` | — | Single-task resolver for "#NNN" deep links. |
|
|
351
386
|
| GET | `/api/bongos/public/uptime` | `public` | — | Uptime: current status + 90-day history bucketed by hour. |
|
|
352
|
-
| GET | `/api/bongos/public/versions` | `public` | — | read-only surface for status.
|
|
387
|
+
| GET | `/api/bongos/public/versions` | `public` | — | read-only surface for status.example.com. |
|
|
388
|
+
|
|
389
|
+
## `scouting` (1)
|
|
390
|
+
|
|
391
|
+
| Method | Path | Rank | Body | Description |
|
|
392
|
+
|---|---|---|---|---|
|
|
393
|
+
| GET | `/api/bongos/scouting` | `archon` | — | the internal talent directory across every project. |
|
|
353
394
|
|
|
354
395
|
## `search` (2)
|
|
355
396
|
|
|
@@ -358,13 +399,20 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
358
399
|
| POST | `/api/bongos/search` | `any-builder` | `expand`, `q`, `source_kind`, `limit` | POST /search — two modes (ADR 0095 C1 / task 1658, progressive disclosure): 1. |
|
|
359
400
|
| 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). |
|
|
360
401
|
|
|
361
|
-
## `security` (
|
|
402
|
+
## `security` (10)
|
|
362
403
|
|
|
363
404
|
| Method | Path | Rank | Body | Description |
|
|
364
405
|
|---|---|---|---|---|
|
|
406
|
+
| GET | `/api/bongos/security/adr` | `metic+archon` | — | GET /api/gds/security/adr Metic+ only. |
|
|
365
407
|
| GET | `/api/bongos/security/docs` | `archon` | — | GET /api/gds/security/docs — list doc METADATA (no content). |
|
|
366
408
|
| POST | `/api/bongos/security/docs` | `archon` | `slug`, `title`, `content_md` | POST /api/gds/security/docs — upsert a doc by slug. |
|
|
367
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. |
|
|
411
|
+
| 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. |
|
|
368
416
|
|
|
369
417
|
## `session` (1)
|
|
370
418
|
|
|
@@ -381,6 +429,18 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
381
429
|
| GET | `/api/bongos/sessions/mine` | `any-builder` | — | your OWN sessions (self-serve; no audit needed). |
|
|
382
430
|
| GET | `/api/bongos/sessions/search` | `archon` | — | cross-builder corpus search (BFG-principal posture until 6C.1). |
|
|
383
431
|
|
|
432
|
+
## `sso` (7)
|
|
433
|
+
|
|
434
|
+
| Method | Path | Rank | Body | Description |
|
|
435
|
+
|---|---|---|---|---|
|
|
436
|
+
| POST | `/api/bongos/sso/activity/rollup` | `public` | `client_id`, `client_secret`, `github_id`, `credits`, `tasks_shipped`, `karma`, `rank`, `disciplines` | POST /sso/activity/rollup — a federated instance reports a builder's activity snapshot (ADR 0141 §4). |
|
|
437
|
+
| GET | `/api/bongos/sso/authorize` | `public` | — | GET /sso/authorize?client_id=&redirect_uri=&state= — the browser authorize leg. |
|
|
438
|
+
| POST | `/api/bongos/sso/device/poll` | `public` | `device_code` | POST /sso/device/poll — poll the hub device flow. |
|
|
439
|
+
| POST | `/api/bongos/sso/device/start` | `public` | `origin` | POST /sso/device/start — begin CLI federation. |
|
|
440
|
+
| POST | `/api/bongos/sso/membership/check-in` | `public` | `client_id`, `client_secret`, `github_id`, `github_login`, `display_name`, `avatar_url`, `role` | POST /sso/membership/check-in — a federated instance reports, on every sign-in, that a builder builds on its project (ADR 0141 §3). |
|
|
441
|
+
| GET | `/api/bongos/sso/pubkey` | `public` | — | GET /sso/pubkey — the hub's Ed25519 assertion-verification key (public). |
|
|
442
|
+
| POST | `/api/bongos/sso/token` | `public` | `client_id`, `client_secret`, `code`, `redirect_uri` | POST /sso/token — server-to-server code redemption. |
|
|
443
|
+
|
|
384
444
|
## `tasks` (27)
|
|
385
445
|
|
|
386
446
|
| Method | Path | Rank | Body | Description |
|
|
@@ -389,7 +449,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
389
449
|
| POST | `/api/bongos/tasks` | `metic+archon` | `version_id`, `title`, `description`, `status`, `touches`, `est_minutes`, `est_cost_usd`, `manual_degree`, `priority`, `automation_tag`, `credits_reward`, `source`, `source_ref`, `value_summary`, `kind`, `discipline`, `parallel_safe`, `newcomer_friendly`, `security_sensitive`, `requires_rank`, `auto_detect_touches`, `criterion_ids`, `module_key`, `goal_id` | Task create/promote/edit (plan/scope mutation) is Metic+ as of ADR 0090 (owner decision 2026-06-26): a Metic who can run idea-triage may … |
|
|
390
450
|
| GET | `/api/bongos/tasks/:id` | `any-builder` | — | single-task read; preserved per CRITICAL §4 (supervisor hot path). |
|
|
391
451
|
| PATCH | `/api/bongos/tasks/:id` | `metic+archon` | `kind`, `discipline`, `requires_rank`, `module_key`, `goal_id`, `parent_task_id`, `parallel_safe`, `newcomer_friendly`, `xenos_claimable`, `security_sensitive`, `automation_tag` | PATCH /tasks/:id — supports body.parent_task_id (V2 C2), body.kind (V2 B1), body.discipline (mig 014), body.parallel_safe (mig 028), and … |
|
|
392
|
-
| POST | `/api/bongos/tasks/:id/abandon` | `archon` | `reason` | POST /tasks/:id/abandon — terminal "retire this task" transition (task 987). |
|
|
452
|
+
| POST | `/api/bongos/tasks/:id/abandon` | `metic+archon` | `reason` | POST /tasks/:id/abandon — terminal "retire this task" transition (task 987). |
|
|
393
453
|
| POST | `/api/bongos/tasks/:id/attest-gate` | `any-builder` | `head_sha` | POST /tasks/:id/attest-gate — body: { head_sha }. |
|
|
394
454
|
| POST | `/api/bongos/tasks/:id/confirm` | `any-builder` | `verified` | |
|
|
395
455
|
| GET | `/api/bongos/tasks/:id/criteria` | `any-builder` | — | GET /tasks/:id/criteria — the criteria this task gates (with live "Cn" + source). |
|
|
@@ -419,8 +479,8 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
419
479
|
|---|---|---|---|---|
|
|
420
480
|
| GET | `/api/bongos/versions` | `public` | — | read-only version list; mirrors /public/versions. |
|
|
421
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. |
|
|
422
|
-
| GET | `/api/bongos/versions/:id/done-when` | `public` | — | Public: status.
|
|
423
|
-
| POST | `/api/bongos/versions/:id/done-when` | `archon` | `criterion_id`, `criterion_md`, `goal_id`, `sort_order` | Auth (
|
|
482
|
+
| GET | `/api/bongos/versions/:id/done-when` | `public` | — | Public: status.example.com fetches this every 60s alongside other public/* surfaces. |
|
|
483
|
+
| 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. |
|
|
424
484
|
| 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… |
|
|
425
485
|
| GET | `/api/bongos/versions/close-suggestions` | `public` | — | Close-flow gate suggestions for every version still 'building'. |
|
|
426
486
|
| GET | `/api/bongos/versions/progress` | `public` | — | read-only progress aggregate; mirrors /public/progress. |
|
package/docs/architecture.md
CHANGED
|
@@ -108,11 +108,13 @@ tasks(id, version_id, title, description, status, touches text[], est_minutes, e
|
|
|
108
108
|
promoted_at, shipped_at, shipped_by, value_summary, created_at, updated_at)
|
|
109
109
|
status ∈ {backlog, ready, active, blocked, completed, confirmed, shipped, abandoned}
|
|
110
110
|
completed = builder declared done (Phase 5 / 2026-05-10)
|
|
111
|
-
confirmed = scanner+smoke passed AND quality grader >= threshold;
|
|
111
|
+
confirmed = scanner+smoke passed AND quality grader >= threshold; verified, NOT yet paid
|
|
112
112
|
(task 197 / 2026-05-12 — grader is a hard gate; on grader fail the task
|
|
113
113
|
stays at completed, no credits, builder can manual-confirm via POST
|
|
114
114
|
/tasks/:id/confirm if they think the grade is wrong)
|
|
115
|
-
shipped = merged to main + deployed
|
|
115
|
+
shipped = merged to main + deployed; credits awarded here (credit_log.reason =
|
|
116
|
+
'task.shipped' — ADR 0120 pays on land, not on confirm; which streams
|
|
117
|
+
actually pay depends on the instance reward mode, ADR 0146)
|
|
116
118
|
indexes: (version_id, status), (priority), GIN(touches)
|
|
117
119
|
task_blockers(task_id, blocker_ref) -- markdown anchors are canonical
|
|
118
120
|
claims(id, task_id, builder_id, worktree_name, claimed_at, released_at, outcome)
|
|
@@ -25,6 +25,7 @@ env override → instance config (config/branding.json) → neutral star
|
|
|
25
25
|
| `llmProjectName` | The project name injected into grader / architect / onboarding **LLM prompts**, so a non-OTB instance is graded against its own identity. **Required.** |
|
|
26
26
|
| `domains.publicOrigin` | Public game/app origin. **Required.** |
|
|
27
27
|
| `domains.buildersOrigin` / `statusOrigin` | Hall + status origins. **These three (`publicOrigin`/`buildersOrigin`/`statusOrigin`) are the docs-discovery contract** ([ADR 0114](adr/<redacted>.md)): the hall is the canonical doc-reading surface, `/docs` on `publicOrigin` renders the API reference, the status page is the outage fallback. `GET <publicOrigin>/api/bongos` re-advertises them (`hall`/`status`/`public`) so an agent resolves the surfaces with no hard-coded host. |
|
|
28
|
+
| `domains.statusDataUrl` | **Optional.** The off-box prober's `status.json` URL that the mirrored status page's availability banner polls (ADR 0029). Read by `scripts/status-mirror-sync.js`; `""` (the neutral default) = this instance publishes no off-box mirror, and the publisher REFUSES rather than shipping a banner that points nowhere. (task [#1002510](https://cloudbongos.com/builders#/task/1002510)) |
|
|
28
29
|
| `domains.cookieDomain` | Session cookie domain (`""` = host-only — the safe default; never widen to a parent domain by accident). |
|
|
29
30
|
| `domains.oauthOrigin` | Canonical sign-in origin. |
|
|
30
31
|
| `domains.provisioningOrigin` | **Optional.** Control-plane front-door origin the [provisioning module](../../modules/provisioning/CLAUDE.md) uses to build a new customer's GitHub-App `redirect_url`. Set it when the control plane co-hosts a game whose `publicOrigin` is the game's own domain (OTB = customer 0) so the customer's App carries the PLATFORM brand (e.g. `https://get.cloudbongos.com`), not the game's. **Falls back to `publicOrigin` when unset** — an instance whose `publicOrigin` is already the platform needs no override. Env-overridable: `<PREFIX>_PROVISIONING_ORIGIN`. ([#2101](https://example.com/builders#/task/2101)) |
|
|
@@ -34,11 +35,12 @@ env override → instance config (config/branding.json) → neutral star
|
|
|
34
35
|
| `repo` | `{ owner, name }` GitHub binding. |
|
|
35
36
|
| `db.database` | DB name the GDS pool connects to when neither `DATABASE_URL` nor `PGHOST`/`PGDATABASE` is set (`src/bongos/pool.js`, ADR 0062 §5). `null` in the neutral starter = **fail loud** rather than silently target a host DB. |
|
|
36
37
|
| `currency` | `{ label, symbol }` — the reward unit label (e.g. "example"). Display only. |
|
|
37
|
-
| `reward` | `{ marginPct, usdPeg }` — the per-instance reward POLICY the economy module reads ([ADR 0054](adr/<redacted>.md),
|
|
38
|
+
| `reward` | `{ marginPct, usdPeg, mode }` — the per-instance reward POLICY the economy module reads ([ADR 0054](adr/<redacted>.md) + ADR 0146, tasks 2009/1002270): the cost-plus margin percent (default `20`), the example-per-USD peg (default `1`), and `mode` — `"cost-plus-and-estimate"` (default; pay both the per-task author estimate AND the cost-plus session reward) or `"cost-plus-only"` (suppress the per-task estimate payout; the cost-plus session reward is the sole equity reward). A committed, code-reviewed change — not a live UI knob. Omit ⇒ code defaults (20% margin, 1:1 peg, pay both streams). |
|
|
38
39
|
| `models` | `{ main, subagentDefault, subagentRoutine }` — the per-instance subagent model-allocation DEFAULT the builder-settings module reads (task 2011): the tier for the main session, subagent-default work, and routine plumbing (tiers: `haiku`/`sonnet`/`opus`/`fable`). A per-builder override resolves over this. Omit ⇒ code defaults (`opus`/`opus`/`haiku`). |
|
|
39
40
|
| `tracks` | The configurable version-track set (replaces the hardcoded `product\|internal`). |
|
|
40
41
|
| `theme` | `{ palette, mode }` — palette file ref + theme mode. |
|
|
41
42
|
| `copy` | Instance copy keys (tagline, hallName, notFound, …). Full copy pack adoption = task [#1196](https://example.com/builders#/task/1196). |
|
|
43
|
+
| `landing.postLogin` | Where a successful web sign-in lands when it carried no explicit `?return=` / same-apex `Referer` (`src/bongos/routes/auth.js` `postLoginLanding`). **Portable default `/builders`** — the hall always exists. A platform-home instance points this at its OWN front door so a visitor who signs in from there returns there instead of being auto-redirected into the hall (cloudbongos.com → `/gate/`, the orbs). Validated through the same open-redirect allowlist as `?return=` (a misconfigured value falls back to `/builders`). Env-overridable: `<PREFIX>_POST_LOGIN_LANDING`. (task [#1002240](https://cloudbongos.com/builders#/task/1002240)) |
|
|
42
44
|
| `envPrefix` | Env-var namespace for overrides (`OTB`, `CLOUDBONGOS`, …). |
|
|
43
45
|
|
|
44
46
|
**Not here:** feature-module on/off flags (game, art, discord, dev-box) are a sibling config owned by R54 (task [#1193](https://example.com/builders#/task/1193)).
|
|
@@ -56,7 +56,9 @@ forming the ordered claim-gate tier **`xenos` (1) < `thetes` (2) < `metic` (3) <
|
|
|
56
56
|
(`REQUIRES_RANK_TIER` in `src/bongos/db.js`):
|
|
57
57
|
|
|
58
58
|
- **`archon`** — Lars (`github_login = 'example-owner'`, set by migration 023). Top authority: everything a
|
|
59
|
-
Metic can do, plus grader-bypass confirm,
|
|
59
|
+
Metic can do, plus grader-bypass confirm, set **version-level** scope (a `done-when` criterion with no
|
|
60
|
+
`goal_id`, any criterion outside an open version or outside a goal they own, and `done-when/:id/unsatisfy`
|
|
61
|
+
— [ADR 0154](adr/<redacted>.md)),
|
|
60
62
|
grant/revoke ranks, offboard builders, version close, infra. Overrides any claim. The authority that
|
|
61
63
|
stays *exclusively* Archon — never delegated to Metic — is **setting rank** (`PATCH /builders/:id/rank`)
|
|
62
64
|
and **closing versions**.
|
|
@@ -66,8 +68,10 @@ forming the ordered claim-gate tier **`xenos` (1) < `thetes` (2) < `metic` (3) <
|
|
|
66
68
|
(owner decision 2026-06-26) a Metic may also author + shape tasks**: create (`POST /tasks`), edit
|
|
67
69
|
(`PATCH /tasks/:id`), promote (`POST /tasks/:id/promote`), and wire a task's dependencies + criterion
|
|
68
70
|
links (`/tasks/:id/dependencies`, `/tasks/:id/criteria`) — the reasoning being that a rank trusted to
|
|
69
|
-
*triage* ideas is trusted to *seed* the work they become. **
|
|
70
|
-
|
|
71
|
+
*triage* ideas is trusted to *seed* the work they become. **As of [ADR 0152](adr/<redacted>.md)
|
|
72
|
+
(owner decision 2026-07-27) a Metic may also retire work** — `POST /tasks/:id/abandon` — and undo a
|
|
73
|
+
mis-retire, since `POST /tasks/:id/promote` now also restores `abandoned → backlog`. **Still cannot**
|
|
74
|
+
set rank, close versions, grader-bypass confirm, or author cross-tier `POST /dependencies` / goal-scope edges
|
|
71
75
|
([ADR 0086](adr/<redacted>.md)) — those stay Archon. A builder reaches Metic
|
|
72
76
|
only by deliberate Archon promotion (`PATCH /builders/:id/rank`).
|
|
73
77
|
- **`thetes`** — the **graduated-newcomer rank** (ADR 0034). Claims the **whole general queue** — any
|
|
@@ -123,12 +127,13 @@ silently *lost* all archon-gated authority — while still denying everything be
|
|
|
123
127
|
or missing ranks fail closed.
|
|
124
128
|
|
|
125
129
|
- **Archon-only** — ratification / scope / infra: `POST /api/gds/tasks/:id/confirm` (grader-bypass past
|
|
126
|
-
a failed grade), `POST /api/gds/
|
|
127
|
-
`POST /api/gds/done-when/:id/unsatisfy`, `PATCH /api/gds/builders/:id/{rank,status}`, and the
|
|
130
|
+
a failed grade), `POST /api/gds/done-when/:id/unsatisfy`, `PATCH /api/gds/builders/:id/{rank,status}`, and the
|
|
128
131
|
cross-tier `POST|DELETE /api/gds/dependencies` + goal-scope edges ([ADR 0086](adr/<redacted>.md)).
|
|
129
132
|
**Task authoring itself — `POST /api/gds/tasks`, `PATCH /api/gds/tasks/:id` (incl. the
|
|
130
133
|
`newcomer_friendly` flag), `POST /api/gds/tasks/:id/promote`, and the `tasks/:id/{dependencies,criteria}`
|
|
131
|
-
CRUD — moved to Metic+ in [ADR 0090](adr/<redacted>.md)
|
|
134
|
+
CRUD — moved to Metic+ in [ADR 0090](adr/<redacted>.md)**, and **task retirement —
|
|
135
|
+
`POST /api/gds/tasks/:id/abandon`, plus the `abandoned → backlog` restore on `/promote` — in
|
|
136
|
+
[ADR 0152](adr/<redacted>.md)** (see the Metic+Archon bullet).
|
|
132
137
|
Setting rank and closing versions never delegate below Archon. **A manual promotion advances exactly
|
|
133
138
|
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
|
|
134
139
|
`400 multi_rung_promotion` naming the next allowed rung. Demotions are unconstrained (offboarding
|
|
@@ -138,7 +143,12 @@ or missing ranks fail closed.
|
|
|
138
143
|
[ADR 0090](adr/<redacted>.md), full task authoring**: `POST /api/gds/tasks`,
|
|
139
144
|
`PATCH /api/gds/tasks/:id`, `POST /api/gds/tasks/:id/promote`, the `tasks/:id/dependencies` +
|
|
140
145
|
`tasks/:id/criteria` CRUD, and `POST /api/gds/done-when/:id/satisfy` (criterion confirm,
|
|
141
|
-
[ADR 0086](adr/<redacted>.md)).
|
|
146
|
+
[ADR 0086](adr/<redacted>.md)). Since
|
|
147
|
+
[ADR 0154](adr/<redacted>.md), also `POST /api/gds/versions/:id/done-when`
|
|
148
|
+
(criterion **create**) — but walled by goal ownership, not by rank alone: a non-Archon must name a
|
|
149
|
+
`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 and
|
|
151
|
+
`done-when/:id/unsatisfy` stay Archon. The floor here is
|
|
142
152
|
`metic`, so **`thetes` does NOT pass these** — it sits below `metic` on the ladder and inherits none
|
|
143
153
|
of its grants (ADR 0034); `archon` and the divine tiers above it do.
|
|
144
154
|
- **Any authenticated builder** — own work: claim/ship/cost/learnings/file-blocker/file-idea. Two
|
|
@@ -196,7 +206,10 @@ Authority over *the code itself* rides the same ladder, enforced server-side fro
|
|
|
196
206
|
ADR 0016's per-request rank check covers `/api/gds/*` only. Two surfaces it does **not** cover —
|
|
197
207
|
`git push` to `main` and `ssh` to the droplet — were used in the Builder 25 incident to land an
|
|
198
208
|
un-graded tiering change straight on prod `main`. The repo is a free-plan private repo, so GitHub
|
|
199
|
-
branch protection is unavailable; the enforcement is therefore code-side, in three layers (ADR 0043)
|
|
209
|
+
branch protection is unavailable; the enforcement is therefore code-side, in three layers (ADR 0043).
|
|
210
|
+
**Verified still true 2026-07-24** — no classic protection, no rulesets, no CODEOWNERS, and a
|
|
211
|
+
non-admin merged PR #19 to `main` with zero required checks; see ADR 0043 §"Branch-protection status"
|
|
212
|
+
for the probes. `main-audit.js` is therefore still the *authoritative* layer, not a backup one:
|
|
200
213
|
|
|
201
214
|
- A builder **below Metic** (`xenos`, `thetes`) may **not modify permission-sensitive paths** — the
|
|
202
215
|
rank/authz machinery, the ship/grade/deploy pipeline, DB `migrations/`, `infra/`, and the
|
package/docs/file-map.md
CHANGED
|
@@ -36,6 +36,8 @@
|
|
|
36
36
|
├── brand/ ← repo-canonical design system (ADR 0081)
|
|
37
37
|
│ └── cloud-bongos/ ← Cloud Bongos brand: README design guide + tokens.json + regen_*.py + assets/ (mascot, 9 animation states, Docker-homage sky-whale, coin logo + Baloo 2 wordmark, painted code-glyph charms). Built under task 1506 (mascot restyle 1529, code glyphs 1527); illustrations generated via Gemini (modules/art-pipeline/pipeline gen_api).
|
|
38
38
|
│
|
|
39
|
+
├── config/ ← per-instance config packs. Each pair resolves env → `X.json` (this host's, boundary-excluded) → `X.neutral.json` (the portable starter, the twin that publishes with the core): branding (ADR 0062 §3), modules, design-tokens, and governance role templates (BV1.R96 — labels/descriptions/custom-role templates only; live grants + assignments are DB rows).
|
|
40
|
+
│
|
|
39
41
|
├── docs/
|
|
40
42
|
│ ├── adr/ ← Architecture Decision Records
|
|
41
43
|
│ │ ├── README.md ← full ADR index (authoritative)
|
|
@@ -151,6 +153,8 @@
|
|
|
151
153
|
│ ├── sandbox-stage.js ← stage the working tree on the live game preview (box OR local) for browser review before ship; resolvePreviewContext picks the context (`/builder-stage`; #927, ADR 0046; local: task 1056)
|
|
152
154
|
│ ├── local-preview.js ← builder CLI for the LOCAL sandbox: start/stop/status/restart/logs/url of the game-only preview at http://localhost:3100 (`npm run preview`; task 1056)
|
|
153
155
|
│ ├── local-preview-lib.js ← core of the local sandbox launcher (detached `node src/preview-server.js`, pid/health/port mgmt); shared by local-preview.js + sandbox-stage.js (task 1056)
|
|
156
|
+
│ ├── dev.js ← `bongos dev`: one-command LOCAL launcher for a standalone instance (Postgres → createdb → migrate → server on the branding port → sign-in); up/stop/status (ADR 0149)
|
|
157
|
+
│ ├── dev-lib.js ← pure + injectable core of `bongos dev` (branding→port/db/env resolution, managed detached server pid/health); unit-tested by tests/dev_lib.mjs (ADR 0149)
|
|
154
158
|
│ ├── session-eval.js ← BFG session-inefficiency analysis engine (6D.3): classify turns, compute ceremony-vs-work, detect footguns, file systemic findings (ADR 0027)
|
|
155
159
|
│ ├── linkify-refs.js ← rewrite bare `#NNN` task refs across ALL docs → status-dashboard permalinks (stops GitHub's PR/issue autolinker mis-linking them); conservative classifier, token-free id list via /public/ref-ids; --apply / --check (CI gate: .github/workflows/doc-ref-linkify.yml) / --dry-run default ([#604](https://example.com/builders#/task/604), [#653](https://example.com/builders#/task/653)).
|
|
156
160
|
│ ├── release.js ← resolve claim as abandoned (`/builder-release`)
|
|
@@ -322,7 +326,7 @@ tests/
|
|
|
322
326
|
├── builder-backup/SKILL.md ← /builder-backup — check DB backup status or trigger a fresh local dump before risky changes (migrations, destructive SQL); no SSH required
|
|
323
327
|
├── builder-box/SKILL.md ← /builder-box — show the builder their own dev box (state, IP/host, cost, SSH keys) and help them (re)connect
|
|
324
328
|
├── builder-claim/SKILL.md ← /builder-claim N — atomic claim; prints the claim-time context pack + discipline playbook routing
|
|
325
|
-
├── builder-connect/SKILL.md ← /builder-connect — one-command connect of the builder's Claude Desktop to their
|
|
329
|
+
├── builder-connect/SKILL.md ← /builder-connect — one-command connect of the builder's Claude Desktop to their Example dev box (ADR 0031)
|
|
326
330
|
├── builder-cost/SKILL.md ← /builder-cost — log a cost-ledger entry (api|compute|infra|domain|art|other)
|
|
327
331
|
├── builder-end/SKILL.md ← /builder-end — safely close out a session: resolve the claim (ship/release) + clean-git verify + worktree teardown + (on a dev box) offer to close the box; the bookend to /builder-start, and the own-scoped session close-out that /builder-exit redirects non-Archons to
|
|
328
332
|
├── builder-exit/SKILL.md ← /builder-exit — gracefully offboard (or reactivate) a builder: release claims, seal session logs, drop rank to xenos
|
|
@@ -330,26 +334,30 @@ tests/
|
|
|
330
334
|
├── builder-reauth/SKILL.md ← /builder-reauth — refresh an expired GDS CLI session the UI-first way (no terminal Device Flow)
|
|
331
335
|
├── builder-redteam/SKILL.md ← /builder-redteam — file a red-team / vulnerability report (severity, target, repro) to /api/gds/security
|
|
332
336
|
├── builder-release/SKILL.md ← /builder-release — abandon a claim (task returns to ready, no credits)
|
|
337
|
+
├── builder-sequence/SKILL.md ← /builder-sequence N — walk a whole dependency chain from one kickoff (claim → build → ship → next), one claim at a time; halts and reports on migration/security/protected-path/thin-spec/judgement tasks (scripts/gds/sequence.js, task 1002484)
|
|
333
338
|
├── builder-setup/SKILL.md ← /builder-setup — one-time GitHub Device Flow auth (GDS); multi-builder-on-one-device gate
|
|
334
339
|
├── builder-ship/SKILL.md ← /builder-ship — record + award credits (runs touches[] scanner; warns on drift; sandbox-first review gate on dev boxes, ADR 0046)
|
|
335
340
|
├── builder-stage/SKILL.md ← /builder-stage — stage work on the builder's sandbox (sandbox-<login>) for browser review before shipping (#927, ADR 0046)
|
|
336
341
|
├── builder-start/SKILL.md ← /builder-start — list claimable tasks (parallel-safe vs active claims)
|
|
342
|
+
├── builder-sync/SKILL.md ← /builder-sync — 'sync now': re-run the box source-fetch on demand so a freshly-claimed task's code lands within seconds, re-scoped to the active claim (BV1.R96, ADR 0148)
|
|
337
343
|
├── close-box/SKILL.md ← /close-box — tear down the dev box you're working on, from inside the box terminal (POST /box/close)
|
|
338
344
|
├── design-sync/SKILL.md ← /design-sync — export repo design tokens + surfaces into Claude Design (token-preview bundle) and land generated UI code back as a GDS task (ADR 0081)
|
|
339
|
-
├── dev/SKILL.md ← /dev — engineering-session playbook for engineer-discipline tasks; the default understand→scoped-change→verify→ship loop made explicit ([#1272](https://
|
|
345
|
+
├── dev/SKILL.md ← /dev — engineering-session playbook for engineer-discipline tasks; the default understand→scoped-change→verify→ship loop made explicit ([#1272](https://example.com/builders#/task/1272))
|
|
340
346
|
├── feedback/SKILL.md ← /feedback — pull the latest Bongos feedback bundle (prompt.md + screenshot file paths) into a Claude Code session; backed by scripts/gds/feedback-latest.js (BV1.R13, ADR 0087)
|
|
341
347
|
├── figma-design-sync/SKILL.md ← sync UI-surface tokens/surfaces with Figma (push a frame plan, land a designer's Code Connect / MCP snapshot edit back as code) — the ADR 0081 human escape hatch; distinct from otb-figma-sync's pixel-art tile review (task 2048)
|
|
348
|
+
├── fix-task/SKILL.md ← /fix-task N — claim, fix (test-first), verify, and ship a single GDS task by id end to end; defers to /builder-claim + /builder-ship for their own mechanics
|
|
349
|
+
├── goal-create/SKILL.md ← /goal-create — plan and create ONE goal (the module-scoped workspace between version and criteria, ADR 0086) in one session: <redacted>, scope wall, 2-4 criteria, seed tasks; also the auto-pickup when a task is created with no goal to live in (goal_advisory); Metic+ (Archon for a protected-module scope)
|
|
342
350
|
├── goal-review/SKILL.md ← /goal-review — walk the criterion review queue: each auto-flagged 'met — pending review' criterion gets confirm / reject / defer; confirming a goal's last criterion auto-achieves it (ADR 0086 §6); Metic+
|
|
343
351
|
├── idea-triage/SKILL.md ← /idea-triage — daily walk through the GDS idea_inbox (promote / discard / merge); Metic+
|
|
344
|
-
├── ideate/SKILL.md ← /ideate — ideation-session playbook for ideator-discipline tasks; inverts the loop (human drives, Claude is the sounding board) ([#1267](https://
|
|
352
|
+
├── ideate/SKILL.md ← /ideate — ideation-session playbook for ideator-discipline tasks; inverts the loop (human drives, Claude is the sounding board) ([#1267](https://example.com/builders#/task/1267))
|
|
345
353
|
├── merge-mode/SKILL.md ← /merge-mode — manual fallback for the auto-merge: land every confirmed task (merge + smoke + deploy)
|
|
346
|
-
├── new-project/SKILL.md ← /new-project — the canonical zero-to-live onboarding runbook for a new STANDALONE instance (name+address → init → scaffold → provision → OAuth+verified-secret+sign-in → verify → brand); the CLI + hall wizard are forms over it ([#1981](https://
|
|
354
|
+
├── new-project/SKILL.md ← /new-project — the canonical zero-to-live onboarding runbook for a new STANDALONE instance (name+address → init → scaffold → provision → OAuth+verified-secret+sign-in → verify → brand); the CLI + hall wizard are forms over it ([#1981](https://example.com/builders#/task/1981))
|
|
347
355
|
├── otb-character-review/SKILL.md ← /otb-character-review — score a painterly character ANIMATION (same character / anatomy / pose / smooth motion) — the animation sibling of otb-design-review (ADR 0088)
|
|
348
|
-
├── otb-design-review/SKILL.md ← /otb-design-review — score a tile against the
|
|
356
|
+
├── otb-design-review/SKILL.md ← /otb-design-review — score a tile against the Example rubric
|
|
349
357
|
├── otb-feedback-capture/SKILL.md ← /otb-feedback-capture — verbal design feedback → a durable style_guide.md rule
|
|
350
|
-
├── otb-figma-sync/SKILL.md ← /otb-figma-sync — push tiles into the
|
|
358
|
+
├── otb-figma-sync/SKILL.md ← /otb-figma-sync — push tiles into the Example Figma file as a review canvas
|
|
351
359
|
├── otb-tile-generate/SKILL.md ← /otb-tile-generate — run the pixel-art pipeline (generate world tiles/sprites)
|
|
352
|
-
├── paint/SKILL.md ← /paint — art-session playbook for artist-discipline tasks; show-first/low-text, drives the otb-* pixel-art pipeline underneath ([#1269](https://
|
|
360
|
+
├── paint/SKILL.md ← /paint — art-session playbook for artist-discipline tasks; show-first/low-text, drives the otb-* pixel-art pipeline underneath ([#1269](https://example.com/builders#/task/1269))
|
|
353
361
|
├── planning-session/SKILL.md ← /planning-session — run a structured planning session for an upcoming version (set criteria, brainstorm, rank, seed GDS); Metic+
|
|
354
362
|
├── priority-session/SKILL.md ← /priority-session — a trusted builder answers plain-speech questions; the answers reweight the idea_inbox + suggest what to build next
|
|
355
363
|
├── 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
|
|
@@ -9,8 +9,8 @@ stateDiagram-v2
|
|
|
9
9
|
blocked --> active: blocker resolved
|
|
10
10
|
active --> ready: /builder-release (no credits)
|
|
11
11
|
active --> completed: /builder-ship: declared done + smoke tests
|
|
12
|
-
completed --> confirmed: grader passes
|
|
13
|
-
confirmed --> shipped: CI + gate-review → auto-merge + deploy
|
|
12
|
+
completed --> confirmed: grader passes (verified — not yet paid)
|
|
13
|
+
confirmed --> shipped: CI + gate-review → auto-merge + deploy ◀ CREDITS AWARDED HERE
|
|
14
14
|
backlog --> abandoned: dropped
|
|
15
15
|
shipped --> [*]: live in production
|
|
16
16
|
note right of confirmed
|
|
@@ -31,7 +31,7 @@ flowchart TB
|
|
|
31
31
|
subgraph B_outsider["Outsider / sub-citizen — sandboxed"]
|
|
32
32
|
direction TB
|
|
33
33
|
r_metic["● metic — LIVE"]
|
|
34
|
-
r_thetes["
|
|
34
|
+
r_thetes["● thetes — LIVE"]
|
|
35
35
|
r_metic --> r_thetes
|
|
36
36
|
r_xenos["● xenos — default for new builders, LIVE"]
|
|
37
37
|
r_thetes --> r_xenos
|
|
@@ -47,8 +47,10 @@ flowchart TB
|
|
|
47
47
|
direction TB
|
|
48
48
|
P_archon["archon: create/promote/PATCH tasks · version close · grant ranks · override claims"]
|
|
49
49
|
P_metic["metic: claim any task · idea triage · blocker review · planning/priority · file red-team; CANNOT create tasks or grant ranks"]
|
|
50
|
+
P_thetes["thetes (auto-graduated after 3 ships): claim the whole general queue; NO scope-shaping — cannot triage, file red-team, resolve blockers, or create/edit tasks"]
|
|
50
51
|
P_default["xenos (default): claim ONLY newcomer_friendly tasks + ship/release OWN work · log cost · capture learnings · file blockers+ideas; CANNOT create/edit tasks or touch others' claims"]
|
|
51
52
|
end
|
|
52
53
|
r_archon -.-> P_archon
|
|
53
54
|
r_metic -.-> P_metic
|
|
55
|
+
r_thetes -.-> P_thetes
|
|
54
56
|
r_xenos -.-> P_default
|
|
@@ -7,14 +7,12 @@ flowchart TB
|
|
|
7
7
|
POOL --> VERSIONS
|
|
8
8
|
subgraph VERSIONS["Every task inherits its version; role/discipline is the work-type axis"]
|
|
9
9
|
direction TB
|
|
10
|
-
v_V1["V1 — building"]
|
|
11
10
|
v_PMS_V1["PMS-V1 — shipped"]
|
|
12
|
-
v_V1 --> v_PMS_V1
|
|
13
11
|
v_PMS_V2["PMS-V2 — shipped"]
|
|
14
12
|
v_PMS_V1 --> v_PMS_V2
|
|
15
13
|
v_GDS_V3["GDS-V3 — shipped"]
|
|
16
14
|
v_PMS_V2 --> v_GDS_V3
|
|
17
|
-
v_GDS_V4["GDS-V4 —
|
|
15
|
+
v_GDS_V4["GDS-V4 — shipped"]
|
|
18
16
|
v_GDS_V3 --> v_GDS_V4
|
|
19
17
|
v_BONGOS_V1["BONGOS-V1 — building"]
|
|
20
18
|
v_GDS_V4 --> v_BONGOS_V1
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
"wired_ranks": [
|
|
25
25
|
"archon",
|
|
26
26
|
"metic",
|
|
27
|
-
"xenos"
|
|
27
|
+
"xenos",
|
|
28
|
+
"thetes"
|
|
28
29
|
],
|
|
29
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)."
|
|
30
31
|
},
|
|
@@ -40,15 +41,11 @@
|
|
|
40
41
|
"shipped",
|
|
41
42
|
"abandoned"
|
|
42
43
|
],
|
|
43
|
-
"credits_awarded_at": "
|
|
44
|
+
"credits_awarded_at": "confirmed->shipped"
|
|
44
45
|
},
|
|
45
46
|
"versioning": {
|
|
46
47
|
"diagram": "05-versioning",
|
|
47
48
|
"versions": [
|
|
48
|
-
{
|
|
49
|
-
"id": "V1",
|
|
50
|
-
"status": "building"
|
|
51
|
-
},
|
|
52
49
|
{
|
|
53
50
|
"id": "PMS-V1",
|
|
54
51
|
"status": "shipped"
|
|
@@ -63,7 +60,7 @@
|
|
|
63
60
|
},
|
|
64
61
|
{
|
|
65
62
|
"id": "GDS-V4",
|
|
66
|
-
"status": "
|
|
63
|
+
"status": "shipped"
|
|
67
64
|
},
|
|
68
65
|
{
|
|
69
66
|
"id": "BONGOS-V1",
|
|
@@ -84,13 +84,13 @@ There's a published payout rate-card by severity for red-team / security finding
|
|
|
84
84
|
|
|
85
85
|
### Where in the lifecycle credits land
|
|
86
86
|
|
|
87
|
-
Example are awarded at the **`
|
|
87
|
+
Example are awarded at the **`confirmed → shipped`** edge — when the code actually lands on `main` and deploys — **not** when verification passes. Passing the grader gets you to `confirmed`, which is verified but *unpaid*; a task that strands there without landing earns nothing until it does ([ADR 0120](../adr/<redacted>.md), "pay on land"). Releasing a task with `/builder-release` pays nothing.
|
|
88
88
|
|
|
89
89
|
```
|
|
90
90
|
active ──▶ completed ──▶ confirmed ──▶ shipped
|
|
91
91
|
(declared (verified — (merged to main
|
|
92
|
-
done +
|
|
93
|
-
smoke) LAND HERE)
|
|
92
|
+
done + NOT yet + deployed —
|
|
93
|
+
smoke) paid) CREDITS LAND HERE)
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
> **Note:** the old up-front `touches[]` *drift scanner* that used to run at ship time is **gone** (task [#879](https://example.com/builders#/task/879), [ADR 0049](../adr/<redacted>.md)). The ship gate is **smoke tests only**; `git merge` at land time is the real collision detector.
|