@bongos/core 1.21.68 → 1.21.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/.bongos-core.json +36 -36
  2. package/.claude/skills/bongos-feedback/SKILL.md +10 -46
  3. package/clients/bongos-client/README.md +1 -1
  4. package/clients/bongos-client/bongos-client.global.js +6 -2
  5. package/clients/bongos-client/index.cjs +6 -2
  6. package/clients/bongos-client/index.d.ts +10 -3
  7. package/clients/bongos-client/index.mjs +6 -2
  8. package/docs/api/openapi.json +151 -15
  9. package/docs/api-reference.md +6 -4
  10. package/docs/copy-inventory.md +371 -366
  11. package/docs/copy-registry.json +457 -412
  12. package/docs/module-api-changelog.md +4 -0
  13. package/docs/page-inventory.json +2 -1
  14. package/docs/page-readings.json +718 -714
  15. package/modules/platform-identity/instance-feedback.js +108 -7
  16. package/modules/platform-identity/routes/sso.js +71 -0
  17. package/modules/public-landing/public/account.html +88 -1
  18. package/modules/public-landing/public/account.probes.json +9 -0
  19. package/modules/public-landing/public/account.states.json +2 -1
  20. package/modules/public-landing/public/assets/cosmos.css +3 -0
  21. package/modules/public-landing/public/projects.html +14 -81
  22. package/package-lock.json +2 -2
  23. package/package.json +1 -1
  24. package/release-notes.json +11 -0
  25. package/scripts/gds/feedback-send.js +144 -71
  26. package/src/bongos/platform-visibility-gate.js +3 -0
  27. package/src/bongos/routes/feedback.js +91 -77
  28. package/src/module-api.js +1 -1
  29. package/tests/card_apply_ui.mjs +0 -1
  30. package/tests/hub_account_page.mjs +132 -6
  31. package/tests/instance_feedback.mjs +267 -68
  32. package/tests/public_landing_projects.mjs +12 -13
package/.bongos-core.json CHANGED
@@ -2,11 +2,11 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/gds/package-core.js",
5
- "core_version": "1.21.68",
6
- "core_contract": "1.21.68",
7
- "source_commit": "905d458be330f20adcb3a7d845df43fee7eff689",
5
+ "core_version": "1.21.70",
6
+ "core_contract": "1.21.70",
7
+ "source_commit": "799c79fb4bc15a5e245ed46a99e5dd64f4919cb3",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-06T18:26:22.762Z",
9
+ "built_at": "2026-10-06T20:12:59.064Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 587,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 3583,
20
- "tree_sha256": "a902270fa53256d93862bf90030c31725f778c4a86e45b3e7ab48660dbb1a34f",
20
+ "tree_sha256": "2b64f5c207fa75236b6cbc9a1d184fe7952421dd51a20fd2f5e31ec352a8be40",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -42,7 +42,7 @@
42
42
  {
43
43
  "path": ".claude/skills/bongos-feedback/SKILL.md",
44
44
  "mode": "0000644",
45
- "sha256": "b30912b54c07c873cc94398af0ffd6c8e364a0f7f81a866343667cc5a87da25a"
45
+ "sha256": "8cbf792ddc9aec8f9be65c6be4532a7f4593d2b3818311c6daf6aabec99b1bc7"
46
46
  },
47
47
  {
48
48
  "path": ".claude/skills/bug-triage/SKILL.md",
@@ -312,12 +312,12 @@
312
312
  {
313
313
  "path": "clients/bongos-client/README.md",
314
314
  "mode": "0000644",
315
- "sha256": "64898ab4e4c50f816f893db4d935ac04bee0e674129b10840d0ac88b5fe6ce0b"
315
+ "sha256": "5b0af2f15d83dcd9e74eb5a381f28d28af9ea0af33881da240729ca1e392bf0a"
316
316
  },
317
317
  {
318
318
  "path": "clients/bongos-client/bongos-client.global.js",
319
319
  "mode": "0000644",
320
- "sha256": "71502f60514d4e9dfc93a8c812302423d776db48d8035ca9e0ce0ef0a5bb2dce"
320
+ "sha256": "d0c9745553265fcc941c29753b44cd526b5e6e3ffc4da98676a3a31becd9d09a"
321
321
  },
322
322
  {
323
323
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -327,17 +327,17 @@
327
327
  {
328
328
  "path": "clients/bongos-client/index.cjs",
329
329
  "mode": "0000644",
330
- "sha256": "ca9bacfcb336995f72080cc7d6574c7a6a6a22ae38f5c3ae226299471551f60d"
330
+ "sha256": "fd19be4bddd44f6e14bdf0a86903d65dc2aa7d1642a3228f1594bcca1cc9fd09"
331
331
  },
332
332
  {
333
333
  "path": "clients/bongos-client/index.d.ts",
334
334
  "mode": "0000644",
335
- "sha256": "13975c1817d7441022af0decfcc9561e09e7c953eb92aa8ce36831abdd61223b"
335
+ "sha256": "a8a84e3a327cd6c8962865573b0e35487b41f64f2e287b5df80e1499f42e9e15"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/index.mjs",
339
339
  "mode": "0000644",
340
- "sha256": "968533c3b36431c47ff8dc6a0b0f8719e10fd24f979d54531227195535d95d56"
340
+ "sha256": "af56c93778ef8d471a247e7acf936d3635e0852da6733afd22691801fda343d5"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/package.json",
@@ -2302,12 +2302,12 @@
2302
2302
  {
2303
2303
  "path": "docs/api-reference.md",
2304
2304
  "mode": "0000644",
2305
- "sha256": "0b828454e83a6321177f11793f120372fdddaef0dec6a02471937785685944df"
2305
+ "sha256": "79ac8643ddda444a597821f6cf81c25e58baaf9eaee7422dc0d597c8557d8097"
2306
2306
  },
2307
2307
  {
2308
2308
  "path": "docs/api/openapi.json",
2309
2309
  "mode": "0000644",
2310
- "sha256": "3ee03a72d3757bca0938a893421ca02710d4f0c73634a381b873664c086b435a"
2310
+ "sha256": "2e745e8f23dd12587b9ce79c642f932c885ad3263d38144949281f9b26563b2b"
2311
2311
  },
2312
2312
  {
2313
2313
  "path": "docs/architecture.md",
@@ -2332,12 +2332,12 @@
2332
2332
  {
2333
2333
  "path": "docs/copy-inventory.md",
2334
2334
  "mode": "0000644",
2335
- "sha256": "a338c70d6961753218870d4fd2b4d0e3635c08dcb844d5fc29dbcb9cd794baa4"
2335
+ "sha256": "508f0fb0fa81fd8613210b247e7a52d3f04f28a4e150cd832f05fba7b5ff455f"
2336
2336
  },
2337
2337
  {
2338
2338
  "path": "docs/copy-registry.json",
2339
2339
  "mode": "0000644",
2340
- "sha256": "666dfc9b070689d718baa83aaf9fbfe8dfe75c22bc7912e5d628b08f0a2c2ab1"
2340
+ "sha256": "4d7ae0a88ecbfac2dae3ece480733dfb5041ecd6e43dede7a311886d9a65c802"
2341
2341
  },
2342
2342
  {
2343
2343
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2847,7 +2847,7 @@
2847
2847
  {
2848
2848
  "path": "docs/module-api-changelog.md",
2849
2849
  "mode": "0000644",
2850
- "sha256": "fd5870bc0ed7adb62a63d1339b2922163ef6dcd5e38d183b2902c7767782b5bd"
2850
+ "sha256": "b43fd3370397bc58fc63f7f9c3a1616f9c429613174a8498d69ca19697d7ee25"
2851
2851
  },
2852
2852
  {
2853
2853
  "path": "docs/modules-contract.md",
@@ -2932,12 +2932,12 @@
2932
2932
  {
2933
2933
  "path": "docs/page-inventory.json",
2934
2934
  "mode": "0000644",
2935
- "sha256": "8b11721e3598a6fc4efe99dd0d087f0c8fb5c54288fffff63aa8ac2a8c6516ff"
2935
+ "sha256": "dab7f6dc5248e3be4e1c13d06eff8f430fa26b7932b4800733cbd4caa7bf4b61"
2936
2936
  },
2937
2937
  {
2938
2938
  "path": "docs/page-readings.json",
2939
2939
  "mode": "0000644",
2940
- "sha256": "7e8658d86ed640ea55dad973f0f39b124d6f8960d87c7dab17981c0365f64436"
2940
+ "sha256": "f503601476e44b6a2e939d9e1858e3c4756bd3e52159b15bcbd3907d46917ead"
2941
2941
  },
2942
2942
  {
2943
2943
  "path": "docs/project-context.template.md",
@@ -7797,7 +7797,7 @@
7797
7797
  {
7798
7798
  "path": "modules/platform-identity/instance-feedback.js",
7799
7799
  "mode": "0000644",
7800
- "sha256": "a23b225541730f48ddd620c80b8393f8468d7438543aac77febbc52d7cc42b0c"
7800
+ "sha256": "e1786bed35fb98b4d47113b6d8486891c67f72505d4ad74819bac02a1b3b6eab"
7801
7801
  },
7802
7802
  {
7803
7803
  "path": "modules/platform-identity/invite-authz.js",
@@ -8082,7 +8082,7 @@
8082
8082
  {
8083
8083
  "path": "modules/platform-identity/routes/sso.js",
8084
8084
  "mode": "0000644",
8085
- "sha256": "0ecc3f416dbd03ee47a2c18a64faa6e0e0fac1d19c10a5246f7c77aa313d8264"
8085
+ "sha256": "d2aa5ee441648f4167db2453385c6c022ebad3a86afcd6187071deb1be90e402"
8086
8086
  },
8087
8087
  {
8088
8088
  "path": "modules/platform-identity/scouting-authz.js",
@@ -8597,17 +8597,17 @@
8597
8597
  {
8598
8598
  "path": "modules/public-landing/public/account.html",
8599
8599
  "mode": "0000644",
8600
- "sha256": "d3d14303eb98c6b8ea14c323c51187f012af2fcc7dbe1f9253caa6453a51a1ce"
8600
+ "sha256": "165599120b503458ae3d315e6cf74dde9af3da0234f2661ed4bca9e215e3c0f0"
8601
8601
  },
8602
8602
  {
8603
8603
  "path": "modules/public-landing/public/account.probes.json",
8604
8604
  "mode": "0000644",
8605
- "sha256": "d592e0f97f5415c1b42d8cb508b3bca327a2484640a7ee2aa9bef606d400bfa9"
8605
+ "sha256": "43d20ae2fb2cefadcc03b94e8174c497b92cf51fa4f57135998635b0262ddfd5"
8606
8606
  },
8607
8607
  {
8608
8608
  "path": "modules/public-landing/public/account.states.json",
8609
8609
  "mode": "0000644",
8610
- "sha256": "a429eff666926b959a61a5c779142374c4ab907bcd4cf74cb538fcca968fde18"
8610
+ "sha256": "c232d5fab0e9cb91b289b1cd0d7bdef78dfc5441bd2ba0f39c6b50e87b32ecba"
8611
8611
  },
8612
8612
  {
8613
8613
  "path": "modules/public-landing/public/assets/anim/idle/frame_00.webp",
@@ -8832,7 +8832,7 @@
8832
8832
  {
8833
8833
  "path": "modules/public-landing/public/assets/cosmos.css",
8834
8834
  "mode": "0000644",
8835
- "sha256": "cd6dde0d815eca5fd014ca5722df4c91af120c557cf26454b822b11eee41231a"
8835
+ "sha256": "b58c1e77f4f549726eaae07b5d94f9a094841f54b6b82ea1f9bff6c5bdeb7ed3"
8836
8836
  },
8837
8837
  {
8838
8838
  "path": "modules/public-landing/public/assets/hub-bar.js",
@@ -9257,7 +9257,7 @@
9257
9257
  {
9258
9258
  "path": "modules/public-landing/public/projects.html",
9259
9259
  "mode": "0000644",
9260
- "sha256": "7e8fd840bb93b5e432fc156678bdde7f94aaecfdcd9cdec1e553eb990a4b8d11"
9260
+ "sha256": "d3c1e65e6ae86b97b9ff6705520016e122ef48101d0fd0907730e90df3b3ce57"
9261
9261
  },
9262
9262
  {
9263
9263
  "path": "modules/public-landing/public/projects.probes.json",
@@ -10037,12 +10037,12 @@
10037
10037
  {
10038
10038
  "path": "package-lock.json",
10039
10039
  "mode": "0000644",
10040
- "sha256": "9bf9f4221d7b278a8bc8220046fea675373e383d3588e644f0727b2ac942ddb5"
10040
+ "sha256": "0abde492bc94b4bafd14a5f402b76fb5e9063f66f5ec9a9a930b17edff3363e1"
10041
10041
  },
10042
10042
  {
10043
10043
  "path": "package.json",
10044
10044
  "mode": "0000644",
10045
- "sha256": "36e78f9f5af0899ec6d026bc20abdce4e5a467130e639d432238d677cac0aa36"
10045
+ "sha256": "152af0cc2be56f12652515999ee93e697cdd85749c2eb5c430e39d76eada090e"
10046
10046
  },
10047
10047
  {
10048
10048
  "path": "public-docs/index.html",
@@ -10062,7 +10062,7 @@
10062
10062
  {
10063
10063
  "path": "release-notes.json",
10064
10064
  "mode": "0000644",
10065
- "sha256": "125ba1b20b6eb21664bccbfa277c61a65a58920b48a7a26126a4782d7e48ad26"
10065
+ "sha256": "62116e737a2e0bbf80e7d5f0f539f65be938c7823e3dc5b97ee3ae5d5f4f02df"
10066
10066
  },
10067
10067
  {
10068
10068
  "path": "scripts/cron/style_guide_audit.sh",
@@ -10562,7 +10562,7 @@
10562
10562
  {
10563
10563
  "path": "scripts/gds/feedback-send.js",
10564
10564
  "mode": "0000644",
10565
- "sha256": "9b5b7002dc26d36b48da20dfc8cd44b6dd64089b1ae66c1f589135808d6c6f1a"
10565
+ "sha256": "3b043beaecc95b9e1019d8b56c5e1e16a279bfcf5904e8547db6ca620309390b"
10566
10566
  },
10567
10567
  {
10568
10568
  "path": "scripts/gds/fetch-art-key.js",
@@ -12087,7 +12087,7 @@
12087
12087
  {
12088
12088
  "path": "src/bongos/platform-visibility-gate.js",
12089
12089
  "mode": "0000644",
12090
- "sha256": "c5c258b7a0be2b6c3be9ee9aac8cb55afc156f04e279579c648f9e70a06e0e2b"
12090
+ "sha256": "7238926a2efa205bf6efa49b111940687549a6466e43a327ba56d9121d18cbc5"
12091
12091
  },
12092
12092
  {
12093
12093
  "path": "src/bongos/pool.js",
@@ -12172,7 +12172,7 @@
12172
12172
  {
12173
12173
  "path": "src/bongos/routes/feedback.js",
12174
12174
  "mode": "0000644",
12175
- "sha256": "691924ef1295a5d50cb035b998879b15d47d92a09526feab3c5e46c63f5c51b1"
12175
+ "sha256": "6307d32f0739bd5107d8259b0b9f316da8e875257975d8465559db8f7d232167"
12176
12176
  },
12177
12177
  {
12178
12178
  "path": "src/bongos/routes/github.js",
@@ -12282,7 +12282,7 @@
12282
12282
  {
12283
12283
  "path": "src/module-api.js",
12284
12284
  "mode": "0000644",
12285
- "sha256": "46c686b3ad977c0ebf004d351746e3fa5491de0d2898c873c4604c9edfce5f5c"
12285
+ "sha256": "c297a4a84c33a4b846abd7707f0b10a813ca418841c2455dba9a453c283c9752"
12286
12286
  },
12287
12287
  {
12288
12288
  "path": "src/module-loader/catalog.js",
@@ -12987,7 +12987,7 @@
12987
12987
  {
12988
12988
  "path": "tests/card_apply_ui.mjs",
12989
12989
  "mode": "0000644",
12990
- "sha256": "6433b12023b211cbf53da24fe5867270740600a9c6e739bdc08d47089f19ee54"
12990
+ "sha256": "40aa5a2862e922f4af5bf9c15db0793d78974e4b1e3e227f11bdc5ab01bfc84b"
12991
12991
  },
12992
12992
  {
12993
12993
  "path": "tests/cascade-dispatch.mjs",
@@ -14817,7 +14817,7 @@
14817
14817
  {
14818
14818
  "path": "tests/hub_account_page.mjs",
14819
14819
  "mode": "0000644",
14820
- "sha256": "faefa979261125922986d80edc370ef02741f7a7ad56384931a455406dfb3092"
14820
+ "sha256": "fa7185f509a6ea99d58387aae12eaea27dfce26df824bba8ba573b63c01a065a"
14821
14821
  },
14822
14822
  {
14823
14823
  "path": "tests/hub_cookie_host_only.mjs",
@@ -15122,7 +15122,7 @@
15122
15122
  {
15123
15123
  "path": "tests/instance_feedback.mjs",
15124
15124
  "mode": "0000644",
15125
- "sha256": "e3402d4767d21bd6d5ab80ad6f0670d4c94c9c56ff1c4656ebd4218b191a8b1c"
15125
+ "sha256": "704a506419ff49032b9604dc039113eaa63db68ac7a57fa09e09162ce7acfae5"
15126
15126
  },
15127
15127
  {
15128
15128
  "path": "tests/instance_manifest.mjs",
@@ -16492,7 +16492,7 @@
16492
16492
  {
16493
16493
  "path": "tests/public_landing_projects.mjs",
16494
16494
  "mode": "0000644",
16495
- "sha256": "39a4d682f3f8d817d83f380f6c3a38bc65bc6d6fc99b0bcb44c38c447075d29b"
16495
+ "sha256": "7a29898d25e8c233663c17220a3c1af99cb43613633eea97422a50991f52c7a1"
16496
16496
  },
16497
16497
  {
16498
16498
  "path": "tests/public_mirror_export.mjs",
@@ -7,61 +7,25 @@ plain: >-
7
7
  reach-for: >-
8
8
  When Bongos itself got in your way — a command that failed or confused you, or something you wish it did. You do not have to ask; complaining is enough.
9
9
  cost: >-
10
- Free. It files one note with the Bongos maintainers and changes nothing in your project.
10
+ Free, and instant: one line back, and it sends in the background. It changes nothing in your project.
11
11
  ---
12
12
 
13
- **Script skill (authoritative).** The core action is `bongos feedback "<message>"` (or `--idea "<message>"`, or `--message-file <path>`). Run it and print its output verbatim.
13
+ Sends a note about Bongos — the tool — straight to its maintainers (tasks 1004462, 1004591). One tool call, one line back.
14
14
 
15
- This **sends** a note about Bongos — the tool — upstream to its maintainers on Cloud Bongos, where a bug becomes a task waiting for a maintainer's approval (tasks 1004462, 1004467).
15
+ **When.** File when the builder (a) labels it — "Bongos feedback: …", "tell the Bongos team" — that **is** the go; (b) wishes — "Bongos should…" (**Suggestions count**: send with `--idea`, even if you also fix it in their project); or (c) vents that Bongos is broken — **File it without being asked**, don't argue them out of it. Only about **Bongos itself** (a `bongos`/`/builder-*` command, claim, ship, grade, deploy, upgrade, hall, Settings, sign-in, credits, how it organises work). Not their own project's code, Claude, their laptop or GitHub, nor a rule working as designed. **One filing per distinct problem per session.**
16
16
 
17
- ## Two ways in
17
+ **Write it yourself — Never paste the rant.** First line = what went wrong (it becomes the title); then what they did, what they expected, what happened, the exact error line. No code, file contents, secrets or personal data.
18
18
 
19
- - **Asked** — the builder labels a message as feedback for Bongos ("Bongos feedback: …", "feedback for Bongos", "tell the Bongos team", "report this") or runs `/bongos-feedback`. A message that already says what the feedback is **is** the go: write the report, send it, and show them what was sent. Only when they ask you to report something without saying what, draft it and send on their go.
20
- - **Suggestions count.** Feedback is not only breakage. "Bongos should…", "I don't want Bongos to…", or a complaint about how Bongos organises their work (versions, goals, tasks, ranks) is feedback too — send it with `--idea`. Fixing it in their own project (moving the goal, saving a preference) is fine, but it does not replace sending it: the next project would hit the same thing.
21
- - **Proactive** — the builder is venting that Bongos is not working: frustration, swearing, "this is broken again", "why does X keep failing", "Bongos is useless today". **File it without being asked**, then tell them in one line (below). The owner's standing rule (2026-09-30): every rant about Bongos not working becomes something to fix. Do not ask permission first, and do not argue them out of it.
22
-
23
- ## Is it about Bongos? (proactive mode files only when yes)
24
-
25
- File when the complaint is about **Bongos itself**: how it organises their work (a goal that forced a new version, a version they did not want), a `bongos`/`/builder-*` command, a claim, ship, grade, merge or deploy step, the hall, Settings, sign-in, credits, the upgrade, or a Bongos message that confused them.
26
-
27
- Do **not** file when it is about their **own project's** code, tests or design, about Claude itself, their laptop, GitHub or another service — or when the "problem" is a rule working as designed (an `[otb-plain]` card saying `By design: Yes`). If it is genuinely unclear, fix the thing in front of you first and file only if it turns out to be Bongos.
28
-
29
- **One filing per distinct problem per session.** A second rant about the same failure adds nothing; say it is already filed (with the number) instead.
30
-
31
- ## Writing the report
32
-
33
- Write it yourself from what you saw. **Never paste the rant.** The maintainers need the facts, not the mood:
34
-
35
- 1. A plain first line naming what went wrong — it becomes the title. (`bongos claim hung for two minutes, then failed with fetch failed`)
36
- 2. What the builder was doing, what they expected, what happened instead, and the exact error line if there was one.
37
- 3. Whether it happened more than once, and any workaround you found.
38
-
39
- **Leave out:** code, file contents, secrets, tokens, customer or personal data, and anything about their project the maintainers do not need. Only the text you send travels (plus the Bongos and CLI versions, added automatically). As a backstop the command runs every report through Bongos's secret scrubber and refuses to send if it can't, but it is a backstop, not permission to be careless.
40
-
41
- A report that is really a wish ("I'd like Bongos to…") goes with `--idea`.
42
-
43
- ## Sending
44
-
45
- From the project checkout. For anything longer than one line, write the report to a file with the Write tool first — the shell eats backticks inside a quoted argument:
19
+ **Send** (stdin, so nothing in the text is mangled by the shell):
46
20
 
47
21
  ```bash
48
- bongos feedback --message-file <path>
22
+ bongos feedback --message-file - <<'EOF'
23
+ <report>
24
+ EOF
49
25
  ```
50
26
 
51
- ## Telling the builder
52
-
53
- **Proactive:** one line, after sending, then carry on with what they were doing. For example: *"I've reported this to the Bongos team as task 1004500 — it's waiting for a maintainer to approve it."* No more than that, unless they ask what was sent — then show them the report.
54
-
55
- **Asked:** report the CLI's output verbatim.
56
-
57
- ## If it refuses
58
-
59
- The CLI prints one plain line for each refusal. In proactive mode, a refusal is one line to the builder and nothing more — never retry in a loop.
60
-
61
- - **"not connected to Cloud Bongos"** — a self-hosted project has no link to the hub. Point the builder at the Bongos core repository's issue tracker.
62
- - **"does not yet know you as a member"** — the hub only accepts reports from someone it has seen sign in to this project. Signing in to the project once through Cloud Bongos in a browser fixes it.
63
- - **"Too much feedback"** — the hourly cap. Don't retry; mention it once.
27
+ Add `--idea` for a wish. The command prints one line — relay it, then carry on. Proactive filing: one short sentence, e.g. *"I've sent that to the Bongos team."* If it says the project runs only on this computer, tell the builder in one line; never retry.
64
28
 
65
29
  ## Files this skill touches
66
30
 
67
- - Runs: `bongos feedback` → `scripts/gds/feedback-send.js` → `POST /api/bongos/feedback` on this project (`src/bongos/routes/feedback.js`) → the hub's `POST /api/bongos/sso/feedback` (`modules/platform-identity/instance-feedback.js`).
31
+ - Runs: `bongos feedback` → `scripts/gds/feedback-send.js` → a receipt from this project (`POST /api/bongos/feedback/receipt`, `src/bongos/routes/feedback.js`) → the hub's `POST /api/bongos/sso/feedback/direct` (`modules/platform-identity/instance-feedback.js`), which redeems the receipt before filing.
@@ -5,7 +5,7 @@ A **generated**, zero-dependency typed client for the Bongos API — produced fr
5
5
  by hand; it regenerates when the spec changes, so it can never drift from the routes.
6
6
 
7
7
  - API version: **v1** (served at `/api/bongos/v1`)
8
- - 520 operations across 75 resource groups
8
+ - 522 operations across 75 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -385,8 +385,10 @@ function createClient(opts = {}) {
385
385
  getDoneWhenPendingReview: (args) => request("GET", "/done-when/pending-review", { hasBody: false }, args),
386
386
  },
387
387
  "feedback": {
388
- // POST /feedback — rank: any-builder — POST /feedback
389
- postFeedback: (args) => request("POST", "/feedback", { hasBody: true }, args),
388
+ // POST /feedback/receipt — rank: any-builder — POST /feedback/receipt
389
+ postFeedbackReceipt: (args) => request("POST", "/feedback/receipt", { hasBody: true }, args),
390
+ // GET /feedback/receipt/{id} — rank: public — GET /feedback/receipt/:id
391
+ getFeedbackReceiptId: (args) => request("GET", "/feedback/receipt/{id}", { hasBody: false }, args),
390
392
  },
391
393
  "founding": {
392
394
  // POST /founding/alive — rank: any-builder — POST /founding/alive
@@ -1125,6 +1127,8 @@ function createClient(opts = {}) {
1125
1127
  postSsoDeviceStart: (args) => request("POST", "/sso/device/start", { hasBody: true }, args),
1126
1128
  // POST /sso/feedback — rank: public — POST /sso/feedback
1127
1129
  postSsoFeedback: (args) => request("POST", "/sso/feedback", { hasBody: true }, args),
1130
+ // POST /sso/feedback/direct — rank: public — POST /sso/feedback/direct
1131
+ postSsoFeedbackDirect: (args) => request("POST", "/sso/feedback/direct", { hasBody: true }, args),
1128
1132
  // POST /sso/invites/clear — rank: public — POST /sso/invites/clear
1129
1133
  postSsoInvitesClear: (args) => request("POST", "/sso/invites/clear", { hasBody: true }, args),
1130
1134
  // POST /sso/invites/notify — rank: public — POST /sso/invites/notify
@@ -384,8 +384,10 @@ function createClient(opts = {}) {
384
384
  getDoneWhenPendingReview: (args) => request("GET", "/done-when/pending-review", { hasBody: false }, args),
385
385
  },
386
386
  "feedback": {
387
- // POST /feedback — rank: any-builder — POST /feedback
388
- postFeedback: (args) => request("POST", "/feedback", { hasBody: true }, args),
387
+ // POST /feedback/receipt — rank: any-builder — POST /feedback/receipt
388
+ postFeedbackReceipt: (args) => request("POST", "/feedback/receipt", { hasBody: true }, args),
389
+ // GET /feedback/receipt/{id} — rank: public — GET /feedback/receipt/:id
390
+ getFeedbackReceiptId: (args) => request("GET", "/feedback/receipt/{id}", { hasBody: false }, args),
389
391
  },
390
392
  "founding": {
391
393
  // POST /founding/alive — rank: any-builder — POST /founding/alive
@@ -1124,6 +1126,8 @@ function createClient(opts = {}) {
1124
1126
  postSsoDeviceStart: (args) => request("POST", "/sso/device/start", { hasBody: true }, args),
1125
1127
  // POST /sso/feedback — rank: public — POST /sso/feedback
1126
1128
  postSsoFeedback: (args) => request("POST", "/sso/feedback", { hasBody: true }, args),
1129
+ // POST /sso/feedback/direct — rank: public — POST /sso/feedback/direct
1130
+ postSsoFeedbackDirect: (args) => request("POST", "/sso/feedback/direct", { hasBody: true }, args),
1127
1131
  // POST /sso/invites/clear — rank: public — POST /sso/invites/clear
1128
1132
  postSsoInvitesClear: (args) => request("POST", "/sso/invites/clear", { hasBody: true }, args),
1129
1133
  // POST /sso/invites/notify — rank: public — POST /sso/invites/notify
@@ -316,7 +316,8 @@ export interface PostDoneWhenCriterionIdUatRequest { kind: string; recording?: s
316
316
  export interface PostDoneWhenCriterionIdUatResponse { ok: boolean; signoff: unknown; criterion_closed: unknown; achieved_goals: unknown; closed_versions: unknown }
317
317
  export interface PostDoneWhenCriterionIdUnsatisfyRequest { reason?: string }
318
318
  export interface PostDoneWhenCriterionIdUnsatisfyResponse { criterion: unknown }
319
- export interface PostFeedbackRequest { message: string; kind?: "bug" | "idea"; context?: unknown }
319
+ export interface PostFeedbackReceiptRequest { sha256: string; kind?: "bug" | "idea" }
320
+ export interface PostFeedbackReceiptResponse { ok: boolean; receipt: unknown; hub: unknown }
320
321
  export interface PostFoundingPlanRequest { days?: Record<string, unknown>; passes?: number; advisors?: string; government?: string; expected_builders?: number; existing?: boolean }
321
322
  export interface PostGithubRepoVisibilityRequest { repo: string; visibility: "public" | "private" }
322
323
  export interface PostGithubRepoVisibilityResponse { ok: boolean; repo: unknown; private_deployable: boolean }
@@ -496,6 +497,8 @@ export interface PostSsoApplicantProfileRequest { client_id: string; client_secr
496
497
  export interface PostSsoApplicantProfileResponse { profile: unknown; guild: unknown }
497
498
  export interface PostSsoDevicePollRequest { device_code: string }
498
499
  export interface PostSsoDeviceStartRequest { origin: string }
500
+ export interface PostSsoFeedbackDirectRequest { origin: string; receipt: string; message: string; kind?: string; context?: unknown }
501
+ export interface PostSsoFeedbackDirectResponse { ok: boolean; accepted: boolean }
499
502
  export interface PostSsoFeedbackRequest { client_id: string; client_secret: string; github_id: StringifiableId; message: string; kind?: string; context?: unknown }
500
503
  export interface PostSsoInvitesClearRequest { client_id: string; client_secret: string; github_login: string }
501
504
  export interface PostSsoInvitesNotifyRequest { client_id: string; client_secret: string; github_login: string }
@@ -879,8 +882,10 @@ export interface BongosClient {
879
882
  getDoneWhenPendingReview(args?: RequestArgs): Promise<GetDoneWhenPendingReviewResponse>;
880
883
  };
881
884
  "feedback": {
882
- /** POST /feedback — rank: any-builder */
883
- postFeedback(args: RequestArgs & { body: PostFeedbackRequest }): Promise<ApiResponse>;
885
+ /** POST /feedback/receipt — rank: any-builder */
886
+ postFeedbackReceipt(args: RequestArgs & { body: PostFeedbackReceiptRequest }): Promise<PostFeedbackReceiptResponse>;
887
+ /** GET /feedback/receipt/{id} — rank: public */
888
+ getFeedbackReceiptId(args?: RequestArgs): Promise<ApiResponse>;
884
889
  };
885
890
  "founding": {
886
891
  /** POST /founding/alive — rank: any-builder */
@@ -1619,6 +1624,8 @@ export interface BongosClient {
1619
1624
  postSsoDeviceStart(args: RequestArgs & { body: PostSsoDeviceStartRequest }): Promise<ApiResponse>;
1620
1625
  /** POST /sso/feedback — rank: public */
1621
1626
  postSsoFeedback(args: RequestArgs & { body: PostSsoFeedbackRequest }): Promise<ApiResponse>;
1627
+ /** POST /sso/feedback/direct — rank: public */
1628
+ postSsoFeedbackDirect(args: RequestArgs & { body: PostSsoFeedbackDirectRequest }): Promise<PostSsoFeedbackDirectResponse>;
1622
1629
  /** POST /sso/invites/clear — rank: public */
1623
1630
  postSsoInvitesClear(args: RequestArgs & { body: PostSsoInvitesClearRequest }): Promise<ApiResponse>;
1624
1631
  /** POST /sso/invites/notify — rank: public */
@@ -381,8 +381,10 @@ export function createClient(opts = {}) {
381
381
  getDoneWhenPendingReview: (args) => request("GET", "/done-when/pending-review", { hasBody: false }, args),
382
382
  },
383
383
  "feedback": {
384
- // POST /feedback — rank: any-builder — POST /feedback
385
- postFeedback: (args) => request("POST", "/feedback", { hasBody: true }, args),
384
+ // POST /feedback/receipt — rank: any-builder — POST /feedback/receipt
385
+ postFeedbackReceipt: (args) => request("POST", "/feedback/receipt", { hasBody: true }, args),
386
+ // GET /feedback/receipt/{id} — rank: public — GET /feedback/receipt/:id
387
+ getFeedbackReceiptId: (args) => request("GET", "/feedback/receipt/{id}", { hasBody: false }, args),
386
388
  },
387
389
  "founding": {
388
390
  // POST /founding/alive — rank: any-builder — POST /founding/alive
@@ -1121,6 +1123,8 @@ export function createClient(opts = {}) {
1121
1123
  postSsoDeviceStart: (args) => request("POST", "/sso/device/start", { hasBody: true }, args),
1122
1124
  // POST /sso/feedback — rank: public — POST /sso/feedback
1123
1125
  postSsoFeedback: (args) => request("POST", "/sso/feedback", { hasBody: true }, args),
1126
+ // POST /sso/feedback/direct — rank: public — POST /sso/feedback/direct
1127
+ postSsoFeedbackDirect: (args) => request("POST", "/sso/feedback/direct", { hasBody: true }, args),
1124
1128
  // POST /sso/invites/clear — rank: public — POST /sso/invites/clear
1125
1129
  postSsoInvitesClear: (args) => request("POST", "/sso/invites/clear", { hasBody: true }, args),
1126
1130
  // POST /sso/invites/notify — rank: public — POST /sso/invites/notify