Garry Tan and Claude Opus 4.7
6fd38519de
feat(v0.22.0): public-exports contract test + CI count guard (Lane 2 / R2)
...
Master locks 17 public subpath exports as gbrain's stable third-party
contract. Zero enforcement existed. This PR locks the surface in two
layers:
1. test/public-exports.test.ts — runtime contract test.
Reads package.json "exports" at startup. For each subpath, imports
via the package name ("gbrain/engine"), NOT the relative filesystem
path — that's the difference between exercising the actual resolver
and bypassing it. Every subpath gets a canary symbol pinned (e.g.
gbrain/search/hybrid must export hybridSearch + rrfFusion) so a
refactor that renames or removes one fails CI before downstream
consumers (gbrain-evals) silently break.
2. scripts/check-exports-count.sh — CI structural guard.
Wired into `bun test` after check-jsonb-pattern.sh +
check-progress-to-stdout.sh + check-wasm-embedded.sh per master's
precedent. EXPECTED_COUNT=17 baseline — shrinks fail loudly,
growth also fails so the new canary must be pinned in the runtime
test deliberately.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-25 21:56:05 -07:00
..
2026-04-25 12:25:34 -07:00
2026-04-24 00:08:54 -07:00
2026-04-25 12:25:34 -07:00
2026-04-24 00:24:10 -07:00
2026-04-22 01:34:22 -07:00
2026-04-25 12:25:34 -07:00
2026-04-18 16:57:38 +08:00
2026-04-21 18:35:45 -07:00
2026-04-11 21:25:44 -10:00
2026-04-14 19:41:34 -10:00
2026-04-22 01:34:22 -07:00
2026-04-20 07:30:00 +08:00
2026-04-20 07:30:00 +08:00
2026-04-18 18:16:18 +08:00
2026-04-24 00:08:54 -07:00
2026-04-20 23:14:38 +08:00
2026-04-21 11:51:32 -07:00
2026-04-25 12:25:34 -07:00
2026-04-23 19:34:27 -07:00
2026-04-20 21:54:36 +08:00
2026-04-09 12:25:04 -10:00
2026-04-25 12:25:34 -07:00
2026-04-25 12:25:34 -07:00
2026-04-21 17:54:13 -07:00
2026-04-12 07:48:47 -10:00
2026-04-25 12:25:34 -07:00
2026-04-25 12:25:34 -07:00
2026-04-25 12:25:34 -07:00
2026-04-06 16:50:15 -07:00
2026-04-14 19:41:34 -10:00
2026-04-22 16:24:23 -07:00
2026-04-20 21:54:36 +08:00
2026-04-23 19:34:27 -07:00
2026-04-23 07:17:40 -07:00
2026-04-24 00:08:54 -07:00
2026-04-20 21:54:36 +08:00
2026-04-25 12:25:34 -07:00
2026-04-22 08:23:24 -07:00
2026-04-11 00:01:09 -10:00
2026-04-14 19:41:34 -10:00
2026-04-20 07:30:00 +08:00
2026-04-25 12:25:34 -07:00
2026-04-25 21:50:02 -07:00
2026-04-25 21:51:11 -07:00
2026-04-25 21:51:11 -07:00
2026-04-25 21:55:11 -07:00
2026-04-25 21:55:11 -07:00
2026-04-13 21:03:40 -10:00
2026-04-24 00:08:54 -07:00
2026-04-22 01:34:22 -07:00
2026-04-20 07:05:27 +08:00
2026-04-20 07:30:00 +08:00
2026-04-14 21:40:48 -10:00
2026-04-25 12:25:34 -07:00
2026-04-09 10:17:13 -07:00
2026-04-13 07:49:13 -10:00
2026-04-16 23:03:15 -07:00
2026-04-13 07:49:13 -10:00
2026-04-23 19:34:27 -07:00
2026-04-18 18:16:18 +08:00
2026-04-22 08:23:24 -07:00
2026-04-25 21:54:12 -07:00
2026-04-19 07:14:24 +08:00
2026-04-09 10:17:13 -07:00
2026-04-12 07:48:47 -10:00
2026-04-25 12:25:34 -07:00
2026-04-18 16:57:38 +08:00
2026-04-16 23:03:15 -07:00
2026-04-22 01:34:22 -07:00
2026-04-13 21:03:40 -10:00
2026-04-25 12:25:34 -07:00
2026-04-25 12:25:34 -07:00
2026-04-24 00:08:54 -07:00
2026-04-11 21:25:44 -10:00
2026-04-24 00:08:54 -07:00
2026-04-25 21:54:12 -07:00
2026-04-21 21:14:17 -07:00
2026-04-25 21:50:02 -07:00
2026-04-25 12:25:34 -07:00
2026-04-20 23:14:38 +08:00
2026-04-18 16:57:38 +08:00
2026-04-18 16:57:38 +08:00
2026-04-18 18:16:18 +08:00
2026-04-19 07:14:24 +08:00
2026-04-22 01:34:22 -07:00
2026-04-20 07:30:00 +08:00
2026-04-21 13:19:23 -07:00
2026-04-22 01:34:22 -07:00
2026-04-25 12:25:34 -07:00
2026-04-25 12:25:34 -07:00
2026-04-22 01:34:22 -07:00
2026-04-24 01:09:28 -07:00
2026-04-24 01:09:28 -07:00
2026-04-24 00:08:54 -07:00
2026-04-24 00:08:54 -07:00
2026-04-25 12:25:34 -07:00
2026-04-08 23:26:11 -10:00
2026-04-25 12:25:34 -07:00
2026-04-12 17:38:48 -07:00
2026-04-23 19:34:27 -07:00
2026-04-20 07:30:00 +08:00
2026-04-21 18:35:45 -07:00
2026-04-18 16:57:38 +08:00
2026-04-21 17:54:13 -07:00
2026-04-25 21:56:05 -07:00
2026-04-12 13:23:55 -10:00
2026-04-21 21:14:17 -07:00
2026-04-25 12:25:34 -07:00
2026-04-16 23:03:15 -07:00
2026-04-22 01:34:22 -07:00
2026-04-22 01:34:22 -07:00
2026-04-25 12:25:34 -07:00
2026-04-23 19:34:27 -07:00
2026-04-25 12:25:34 -07:00
2026-04-19 07:14:24 +08:00
2026-04-23 19:34:27 -07:00
2026-04-11 21:25:44 -10:00
2026-04-25 12:25:34 -07:00
2026-04-21 18:35:45 -07:00
2026-04-24 01:39:58 -07:00
2026-04-22 01:34:22 -07:00
2026-04-23 19:34:27 -07:00
2026-04-25 12:25:34 -07:00
2026-04-16 23:03:15 -07:00
2026-04-18 18:16:18 +08:00
2026-04-09 10:17:13 -07:00
2026-04-23 19:34:27 -07:00
2026-04-22 02:07:00 -07:00
2026-04-23 19:34:27 -07:00
2026-04-18 16:57:38 +08:00
2026-04-23 19:34:27 -07:00
2026-04-23 19:34:27 -07:00
2026-04-14 19:41:34 -10:00
2026-04-11 10:52:30 -10:00
2026-04-22 16:24:23 -07:00
2026-04-22 16:24:23 -07:00
2026-04-22 16:24:23 -07:00
2026-04-13 07:49:13 -10:00
2026-04-21 21:14:17 -07:00
2026-04-21 21:14:17 -07:00
2026-04-22 01:34:22 -07:00
2026-04-22 01:34:22 -07:00
2026-04-09 10:17:13 -07:00
2026-04-24 00:24:10 -07:00
2026-04-25 12:25:34 -07:00
2026-04-25 12:25:34 -07:00
2026-04-20 23:14:38 +08:00
2026-04-25 12:25:34 -07:00
2026-04-22 08:23:24 -07:00
2026-04-14 19:41:34 -10:00
2026-04-20 23:14:38 +08:00
2026-04-25 12:25:34 -07:00
2026-04-18 18:16:18 +08:00
2026-04-19 18:23:02 +08:00
2026-04-22 01:34:22 -07:00
2026-04-20 07:30:00 +08:00
2026-04-09 10:17:13 -07:00