Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
206 commits
Select commit Hold shift + click to select a range
38ef726
feat(mgmt): Management MCP control plane, rebased onto main (SHARK-3373)
mikhailak Jul 16, 2026
97f4d14
fix(mgmt): address PR #6 review — secret hygiene, TOTP 6-digit, alert…
mikhailak Jul 16, 2026
c5a6a41
fix(mgmt): gate edit_api_key only on blockchain-scope change (#6 split)
mikhailak Jul 17, 2026
39e7741
feat(mgmt): option-A HITL binding — stable account sub + human-login …
mikhailak Jul 20, 2026
77a5658
feat(mgmt): HITL follow-ups — browser-binding cookie, mandatory-ankrS…
mikhailak Jul 20, 2026
5cdb7ba
docs(mgmt): document GATEWAY_JWT_PRIVATE_KEY generation + ownership (…
mikhailak Jul 20, 2026
f42df40
Merge main into SHARK-3373 mgmt branch + audit gate green
mikhailak Jul 23, 2026
97d8952
fix(mgmt): gate credit-threshold suppression + bind reportBlockchainE…
mikhailak Jul 23, 2026
fb7758f
Merge remote-tracking branch 'origin/main' into feature/SHARK-3373-mg…
mikhailak Jul 23, 2026
a072ca1
feat(mgmt): add MGMT_ALLOW_LOOPBACK_REDIRECT to enable loopback redir…
mikhailak Jul 23, 2026
5af0c02
fix(mgmt): send fixed UAuth login state at leg 2, not the echoed sess…
mikhailak Jul 24, 2026
9e344b1
fix(mgmt): robustly normalize UAuth expires_at so real logins are not…
mikhailak Jul 24, 2026
aa0654f
fix(mgmt): base64-decode UAuth access_token before parsing fields (SH…
mikhailak Jul 24, 2026
8d059e5
fix(mgmt): decouple shim session TTL from the UAuth token's ~60s expi…
mikhailak Jul 27, 2026
b6d5fb9
chore(deps): bump brace-expansion to >=5.0.8 to clear CI audit high (…
mikhailak Jul 27, 2026
2e2ae34
fix(mgmt): whoami hits /auth/users/profile, not /users/profile (SHARK…
mikhailak Jul 27, 2026
50528d9
feat(mgmt): exchange the one-time login token for a durable session k…
mikhailak Jul 27, 2026
7c2c9c2
SHARK-3525 fix token_count understating real usage by 40-60%
mikhailak Jul 28, 2026
92c22f2
SHARK-3524 stop promising tier-2 decode, and stop fetching what we di…
mikhailak Jul 28, 2026
cb040c2
SHARK-3526 bound the balance tools instead of dumping every asset
mikhailak Jul 28, 2026
2f84804
SHARK-3527 make the tool contracts match what the tools actually do
mikhailak Jul 28, 2026
666b346
SHARK-3524 fix a cursor that pointed nowhere; reconcile the published…
mikhailak Jul 28, 2026
2499d66
SHARK-3526 restore the chain on every shaped asset (HIGH regression f…
mikhailak Jul 28, 2026
6bbc27c
SHARK-3527 make the strict-schema guard actually discriminate (HIGH, …
mikhailak Jul 28, 2026
44bf8ea
SHARK-3524 fix two HIGH scan defects: filtered misclassification and …
mikhailak Jul 28, 2026
c8ce01c
SHARK-3526/3525 stop asserting unpriced assets are worthless; flag es…
mikhailak Jul 28, 2026
26275cc
SHARK-3524/3525 remove point-in-time claims the code cannot keep
mikhailak Jul 28, 2026
7967000
SHARK-3527 close the remaining LOW findings: throwing timestamp, cont…
mikhailak Jul 28, 2026
e77c090
SHARK-3527 stop rpcCall's description overstating its local guard; re…
mikhailak Jul 28, 2026
27e8358
SHARK-3527 stop the two pass-2 output defects: doubled page, invented…
mikhailak Jul 28, 2026
2abf79c
SHARK-3527 stop two claims the code cannot keep: unpriced page scope,…
mikhailak Jul 28, 2026
2a01fe3
SHARK-3527 close the remaining LOWs and cover the two mutation survivors
mikhailak Jul 28, 2026
b7d8a2f
SHARK-3524 drop getChainStats: the AAPI method behind it no longer ex…
mikhailak Jul 28, 2026
ba12b56
SHARK-3524 make the Host allowlist fail closed, and cover the control…
mikhailak Jul 29, 2026
de4a876
SHARK-3524 stop the AAPI path leaking upstream prose the way the RPC …
mikhailak Jul 29, 2026
e814425
SHARK-3524 one denominator per sentence, and stop a clipped price ser…
mikhailak Jul 29, 2026
982d8bb
SHARK-3524 answer a throw on the request hot path instead of hanging …
mikhailak Jul 29, 2026
fa15fb3
SHARK-3524 drop a Sui denylist entry that names no method, and cover …
mikhailak Jul 29, 2026
63aa894
SHARK-3524 wire real coverage and mutation tooling so G4/G5 stop bein…
mikhailak Jul 29, 2026
2fe7443
SHARK-3524 make the failed-initialize test prove the claim in its own…
mikhailak Jul 29, 2026
06c1c21
fix(mgmt): report gateway numbers and dates truthfully in the read to…
mikhailak Jul 28, 2026
fe1faed
fix(mgmt): make the /confirm approval page self-describing and valida…
mikhailak Jul 28, 2026
d42da5f
fix(mgmt): make allowlist reads legible and pin the write-truthfulnes…
mikhailak Jul 28, 2026
80eb567
fix(mgmt): three defects found reviewing the audit fixes (SHARK-3522,…
mikhailak Jul 28, 2026
a7f3543
fix(mgmt): compare request vs reply on the ITEM allowlist writes (SHA…
mikhailak Jul 28, 2026
b2a14fa
fix(mgmt): migrate the last 3 gated call sites to the consent page (S…
mikhailak Jul 28, 2026
96e0891
fix(mgmt): stop the notification writes over-promising an absolute ga…
mikhailak Jul 28, 2026
a6cabf4
fix(mgmt): close the four LOW review findings (SHARK-3522, SHARK-3513…
mikhailak Jul 28, 2026
bf82d91
docs(mgmt): describe the consent page as it is now, not the audited s…
mikhailak Jul 28, 2026
8d73be7
fix(mgmt): do not overstate a SET mismatch as 'did NOT take effect' (…
mikhailak Jul 28, 2026
c050a68
fix(mgmt): stop asserting FAILURE for the one write shape that means …
mikhailak Jul 28, 2026
07619b2
fix(mgmt): reject an all-empty replace_allowlist map at preflight (SH…
mikhailak Jul 28, 2026
0b952cb
fix(mgmt): separate ABSENT from EMPTY in the blockchain allowlist rea…
mikhailak Jul 28, 2026
f17f9fd
fix(mgmt): compare request vs reply on the notification config write …
mikhailak Jul 28, 2026
0715af1
fix(mgmt): freeze/edit report the request as ACCEPTED, not as an obse…
mikhailak Jul 28, 2026
e1cb5e6
fix(mgmt): never store or render the premium API key in the consent p…
mikhailak Jul 28, 2026
ca7fd85
fix(mgmt): echo the consent-page description in the needs-approval te…
mikhailak Jul 28, 2026
5556668
fix(mgmt): stop the allowlist writes claiming scopes they never check…
mikhailak Jul 28, 2026
1f93ebd
docs(mgmt): note that the consent description is echoed to the model …
mikhailak Jul 28, 2026
f135f0f
test(mgmt): drive the real app instead of a copy of the auth layer (S…
mikhailak Jul 29, 2026
a7ca280
fix(mgmt): stop the notification writes reporting an unobserved state…
mikhailak Jul 29, 2026
008ca5f
fix(mgmt): make the two-token identity divergence loud and legible (S…
mikhailak Jul 29, 2026
d3f3439
test(mgmt): pin the cross-account guard and the surviving mutants (SH…
mikhailak Jul 29, 2026
6b74f13
fix(mgmt): guard createApiKey's reply read, hedge the delete claim (S…
mikhailak Jul 29, 2026
c3134e2
chore(mgmt): wire coverage and mutation tooling so G4/G5 stop being h…
mikhailak Jul 29, 2026
b2599fc
fix(mgmt): one vocabulary for what a write actually proves (SHARK-352…
mikhailak Jul 29, 2026
c021469
test(mgmt): pin the four guards that survived mutation, and stop the …
mikhailak Jul 29, 2026
777ce2b
test(SHARK-3524): bound the survival-test teardown so a regression fa…
mikhailak Jul 29, 2026
b2c41ab
chore(deps): collapse the brace-expansion overrides so the CI audit g…
mikhailak Jul 29, 2026
7fc5fd4
test(mgmt): pin approve()'s and live()'s OWN expiry guards (SHARK-3381)
mikhailak Jul 29, 2026
21e7aa3
fix(mgmt): make the mutation cap and the test typecheck real, not cla…
mikhailak Jul 29, 2026
7bcec14
Merge remote-tracking branch 'origin/main' into feature/SHARK-3524-au…
mikhailak Jul 29, 2026
46d5540
fix(mgmt): tell an agent which identifier the key tools want (SHARK-3…
mikhailak Jul 29, 2026
785e3d7
chore(mgmt): merge main (npm org rename, CODEOWNERS, brace-expansion …
mikhailak Jul 31, 2026
4af2afa
fix(mgmt): stop shipping internal tracker ids to clients (SHARK-3539)
mikhailak Jul 31, 2026
1e6791a
feat(mcp): declare the data-plane tool contracts, not just describe t…
mikhailak Jul 31, 2026
843133c
feat(mgmt): declare what every management tool does to the account (S…
mikhailak Jul 31, 2026
4c92b60
feat(mgmt): a key created here is usable here, immediately (SHARK-3539)
mikhailak Jul 31, 2026
a05162c
docs(mgmt): user stories as the acceptance checklist for MCP vs the c…
mikhailak Jul 31, 2026
2bbe254
feat(mgmt): say which account every result acted on, and let a caller…
mikhailak Jul 31, 2026
099f303
feat(mgmt): reveal any key's endpoint token, and stop dropping the en…
mikhailak Jul 31, 2026
a01390c
feat(mgmt,data): state the per-session key binding where a caller mee…
mikhailak Jul 31, 2026
3b063c8
docs(mgmt): correct the user-story checklist where it claimed our own…
mikhailak Jul 31, 2026
c0dbfff
feat(mgmt): act on a team account, or refuse, never on the wrong one …
mikhailak Jul 31, 2026
b67d791
feat(mgmt): refuse a tool the role cannot use, before a human is aske…
mikhailak Jul 31, 2026
07f700c
feat(mgmt): per-project spend without a per-key approval, and a way t…
mikhailak Jul 31, 2026
6b4963e
feat(mgmt,data): bound the session map, fail closed in production, cl…
mikhailak Jul 31, 2026
b0c4089
fix(mgmt): bind a human approval to the account it was granted for, n…
mikhailak Jul 31, 2026
477c0d5
fix(mgmt): keep the account statement on a result whose own argument …
mikhailak Jul 31, 2026
1649212
feat(mgmt): mint, list and revoke a Platform API key for a headless c…
mikhailak Aug 1, 2026
22f827d
feat(mgmt): ask for the second factor on the approval page, so a 2FA-…
mikhailak Aug 1, 2026
54457ae
test(mgmt): pin the account-scope routing table entry by entry (SHARK…
mikhailak Aug 1, 2026
d9f54d8
feat(mgmt): see every login on this account, and end the ones you do …
mikhailak Aug 1, 2026
ceb6f1c
feat(mgmt): see what can log in as you, and take a way in away (SHARK…
mikhailak Aug 1, 2026
2dbc561
refactor(mgmt): drop the synthetic-JWT wrapper that could never have …
mikhailak Aug 1, 2026
d9432ac
fix(mgmt): SHARK-3586 session routes refused under a team account
mikhailak Aug 1, 2026
2aa6dff
fix(mgmt): key the account-scope allowlist on method plus path (SHARK…
mikhailak Aug 2, 2026
bf1c955
feat(mgmt): create a team, invite by email, manage members and leave …
mikhailak Aug 2, 2026
cd310ae
fix(mgmt): an ADMIN cannot appoint an OWNER, and the tool no longer i…
mikhailak Aug 2, 2026
4ee19fc
feat(mgmt): complete the three notification-channel chains (SHARK-3579)
mikhailak Aug 2, 2026
9408115
test(mgmt): close the mutation survivors on the channel-activation ru…
mikhailak Aug 2, 2026
f5f7945
test(mgmt): pin the handover text the two start tools exist to produc…
mikhailak Aug 2, 2026
0331173
test(mgmt): pin the notif-config direction sentence and the chain des…
mikhailak Aug 2, 2026
ae15ccb
fix(mgmt): a bundle is a subscription too, so both are read and cance…
mikhailak Aug 2, 2026
3f4f002
fix(mgmt): the bundle cancel must not ask for a code the gateway igno…
mikhailak Aug 2, 2026
46a8429
test(mgmt): cover the bundle paths a complete reply never reaches (SH…
mikhailak Aug 2, 2026
7230232
fix(mgmt): card eligibility and the price list were read under names …
mikhailak Aug 2, 2026
ebcc8e7
docs(mgmt): record the two payment-read corrections in rows 4.2 and 4…
mikhailak Aug 2, 2026
0e35143
feat(mgmt): wrap the transaction ledger so an invoice lookup can prod…
mikhailak Aug 2, 2026
ed99898
docs(mgmt): row 4.5 said DONE while the tool it named could not be ca…
mikhailak Aug 2, 2026
d4c0c60
test(mgmt): pin the enum table and the degenerate rows the ledger dec…
mikhailak Aug 3, 2026
b2ccbd3
test(mgmt): assert the credit counters in BOTH spellings, not one eac…
mikhailak Aug 3, 2026
d0cf6fd
docs(mgmt): the user-story checklist described a slot rule and counts…
mikhailak Aug 3, 2026
74f50a6
docs(mgmt): the deploy runbook told the SRE we ship no RBAC and named…
mikhailak Aug 3, 2026
1ec3815
fix(mgmt): the invoice chain closed one document type of two, and an …
mikhailak Aug 3, 2026
d081a95
fix(mgmt): the read tool prescribed a repair that cannot work, and th…
mikhailak Aug 3, 2026
38ecd56
fix(mgmt): epoch units were assumed per call site, and production sen…
mikhailak Aug 3, 2026
b8c1e94
chore(deps): audit gate green again — three advisory floors moved und…
mikhailak Aug 3, 2026
1080bc7
fix(mgmt): "no Slack integration" is a state with a next step, not a …
mikhailak Aug 3, 2026
f4a018d
perf(mgmt): state the four cross-cutting contracts once instead of 75…
mikhailak Aug 3, 2026
77ccdfd
chore(deps): move both images and CI off Node 23, which is end-of-lif…
mikhailak Aug 3, 2026
6effcd4
fix(mcp): drop getChainStats and make the tool count unable to drift …
mikhailak Aug 4, 2026
4f9b7ed
perf(mgmt): SHARK-3600 register only the tool groups a session asked for
mikhailak Aug 4, 2026
0f6160c
fix(mgmt): SHARK-3600 measure the toolset catalogue once, and close t…
mikhailak Aug 4, 2026
76e7404
fix(mcp): the shipped torpc manifest advertised 11 tools against 16 r…
mikhailak Aug 5, 2026
464a24c
Merge remote-tracking branch 'origin/main' into integ/mcp-prod-readiness
mikhailak Aug 5, 2026
7be1ada
Merge branch 'feature/SHARK-3598-drop-getchainstats' into integ/mcp-p…
mikhailak Aug 5, 2026
cc0d349
Merge branch 'feature/SHARK-3600-mgmt-toolsets' into integ/mcp-prod-r…
mikhailak Aug 5, 2026
8eff7ff
Merge PR #25 (SHARK-3524 data plane) into SHARK-3373 mgmt branch
mikhailak Aug 5, 2026
ca7efbe
fix(SHARK-3558,3559,3561,3545): finish the src/http.ts merge port, re…
mikhailak Aug 5, 2026
8d229f2
docs(SHARK-3559): correct the blank-allowlist failure mode in DEPLOY.…
mikhailak Aug 5, 2026
3c15c7e
test(SHARK-3558,3559): make three assertions check what their failure…
mikhailak Aug 5, 2026
7283391
test(SHARK-3524,3598): keep one manifest gate, the one that checks th…
mikhailak Aug 5, 2026
14eb0c4
chore(SHARK-3524): raise engines.node to >=24 so the floor is a suppo…
mikhailak Aug 5, 2026
7524d05
chore(SHARK-3524): track the pre-commit hook that refuses staged conf…
mikhailak Aug 5, 2026
04c1c3f
test(SHARK-3524,SHARK-3373): type #25's tests for the tsconfig.test.j…
mikhailak Aug 5, 2026
327871b
docs(SHARK-3524,SHARK-3600): make every doc claim true of the merged …
mikhailak Aug 5, 2026
733cead
fix(SHARK-3560): the rpcCall description understated the txpool allow…
mikhailak Aug 5, 2026
5dddebe
fix(SHARK-3524,SHARK-3373): gpt-tokenizer was declared in both depend…
mikhailak Aug 5, 2026
a7edff9
fix(SHARK-3524): rpcCall admitted 21 methods that change state withou…
mikhailak Aug 5, 2026
53ad299
fix(SHARK-3524,SHARK-3373): cap a JSON-RPC batch, and spawn the real …
mikhailak Aug 5, 2026
d24e1c1
fix(SHARK-3373): DCR registrations evicted other people's OAuth clients
mikhailak Aug 5, 2026
93f5dc2
test(SHARK-3524): pin two boundaries that could be unwired with a gre…
mikhailak Aug 5, 2026
4fb3984
docs(SHARK-3524,SHARK-3600): three shipped claims the merged tree con…
mikhailak Aug 5, 2026
87b5a3c
test(SHARK-3524): poll for the boot-fault log instead of sleeping pas…
mikhailak Aug 5, 2026
3bd3b4a
docs(SHARK-3524,SHARK-3373): document the batch cap and the DCR bound…
mikhailak Aug 5, 2026
c2750ca
docs(SHARK-3524,SHARK-3373): review notes for the integration branch
mikhailak Aug 5, 2026
7c8ec13
docs(SHARK-3524): quote the coverage figures from the pushed commit
mikhailak Aug 5, 2026
1c55375
fix(SHARK-3596): the management plane silently dropped unknown argume…
mikhailak Aug 5, 2026
6cb40e2
refactor(SHARK-3393,SHARK-3560): rpcCall closes write paths and stops…
mikhailak Aug 5, 2026
e314dea
test(SHARK-3588): cover the session-store paths a full mutation run f…
mikhailak Aug 5, 2026
30288d1
test(SHARK-3588): the sweep tests were green for the wrong reason
mikhailak Aug 5, 2026
f71f30b
docs(SHARK-3393,SHARK-3596,SHARK-3588): bring REVIEW-READY.md up to w…
mikhailak Aug 5, 2026
6a7a9f4
test(SHARK-3588): cover the two deleteApiKey paths nothing reached
mikhailak Aug 5, 2026
43ea99d
test(SHARK-3588): pin the approval sentence exactly, not by substring
mikhailak Aug 5, 2026
74f890d
docs(SHARK-3588): record both mutation figures and what was deliberat…
mikhailak Aug 5, 2026
c2190a6
feat(SHARK-3606): make the running build identifiable on the wire
mikhailak Aug 6, 2026
2b0daae
fix(SHARK-3393): stop three claims that outlived the guard they descr…
mikhailak Aug 6, 2026
4fa5c3c
ci: run the coverage gates that the review notes were quoting
mikhailak Aug 6, 2026
83f1003
docs: record what production runs, and the payment risk acceptance
mikhailak Aug 6, 2026
3f7db9d
SHARK-3597: deliver session instructions and name the remedy in the 401
mikhailak Aug 4, 2026
0f2dcee
SHARK-3599: put tools/list on a measured token budget
mikhailak Aug 4, 2026
362f81b
SHARK-3599: gate the description budget in the encoding the ticket sp…
mikhailak Aug 4, 2026
92ef23e
fix(SHARK-3599,SHARK-3393): reconcile the token budget with the rever…
mikhailak Aug 6, 2026
c200faf
fix: close four findings from the code review on #28
mikhailak Aug 6, 2026
63667a8
feat(obs): SHARK-3607 — metrics, structured logs and a readiness spli…
mikhailak Aug 6, 2026
75fc502
docs: correct three claims about the deployment, and record that it s…
mikhailak Aug 6, 2026
e69a925
test(obs): SHARK-3607 — close the gaps the mutation gate found, and o…
mikhailak Aug 6, 2026
fca5e28
deps: clear every open advisory, and move the SDK so one of them can …
mikhailak Aug 6, 2026
e4e5a3e
test(obs): SHARK-3607 — take the boolean branch of the log serialiser
mikhailak Aug 6, 2026
6932513
fix(SHARK-3611): remove a switch that would have rejected every login
mikhailak Aug 6, 2026
cc2e6c4
docs(SHARK-3611): the ankrState question is closed, and the answer in…
mikhailak Aug 6, 2026
df6295c
feat(SHARK-3613): accept, validate and bind the RFC 8707 resource ind…
mikhailak Aug 6, 2026
fa9b890
feat(obs): SHARK-3607 — put the remaining request-path logs through t…
mikhailak Aug 6, 2026
98ada2f
feat(SHARK-3609): load a tool group into the live session instead of …
mikhailak Aug 6, 2026
09530ee
fix(SHARK-3612): name a key by its slot, and stop revealing the crede…
mikhailak Aug 6, 2026
40832a3
chore(deps): pin js-yaml >=4.3.1 so the audit gate stops hiding every…
mikhailak Aug 7, 2026
93d625f
Merge integ/mcp-prod-readiness into the observability branch
mikhailak Aug 7, 2026
73c172f
fix(obs): SHARK-3607 — report the build identity the wire reports, no…
mikhailak Aug 7, 2026
b753df6
test(e2e): check the DEPLOYED build, not only this checkout
mikhailak Aug 6, 2026
019e9d1
docs: put the reviewer in front of what is true on 2026-08-07
mikhailak Aug 7, 2026
f5cdf5f
Merge pull request #29 from w3tech/feature/SHARK-3607-observability
mikhailak Aug 7, 2026
4054514
Merge pull request #32 from w3tech/feature/mcp-live-e2e
mikhailak Aug 7, 2026
e595636
Merge pull request #33 from w3tech/docs/review-context
mikhailak Aug 7, 2026
67ae33a
docs: settle the SSE route timeout by measuring it, not by asking
mikhailak Aug 7, 2026
831c290
fix(SHARK-3619/3620/3622): stop the key-lifecycle writes describing a…
mikhailak Aug 7, 2026
33901fb
fix(SHARK-3622): state matchesRequest on both observed freeze paths, …
mikhailak Aug 7, 2026
2d2acac
chore: delete the draft manifests, and stop the docs pointing at them
mikhailak Aug 7, 2026
b82437a
test(SHARK-3622): kill two mutants the first pass left alive, one of …
mikhailak Aug 7, 2026
a68d095
docs: the deployment changed again, and one regression came with it
mikhailak Aug 7, 2026
3cc3dab
Merge pull request #34 from w3tech/feature/SHARK-3619-3622-mgmt-truth…
mikhailak Aug 7, 2026
43a12a1
docs: section 6 is empty, and the scrape outage is closed and verified
mikhailak Aug 7, 2026
7473272
fix(SHARK-3629): slot 0 is the account's Default project key, not the…
mikhailak Aug 7, 2026
d860d75
feat(SHARK-3629): serve the chain reads from the management endpoint,…
mikhailak Aug 7, 2026
1961d4f
perf(SHARK-3635): load the tokenizer when chain tools appear, not whe…
mikhailak Aug 7, 2026
9c41e37
Merge integ/mcp-prod-readiness into SHARK-3629/3635
mikhailak Aug 8, 2026
e7809bd
docs(SHARK-3629): record that tool-call metrics do not cover the mana…
mikhailak Aug 8, 2026
b625c48
fix(SHARK-3635): assert the module load, not the megabytes
mikhailak Aug 8, 2026
2475e74
docs(src): state the current decision, not the history of reaching it
mikhailak Aug 8, 2026
7ddfde5
docs: correct the deployment facts that stopped being true on 2026-08-07
mikhailak Aug 8, 2026
9c79f20
Merge pull request #36 from w3tech/feature/SHARK-3619-3622-mgmt-truth…
mikhailak Aug 9, 2026
7e0e79d
Merge remote-tracking branch 'origin/integ/mcp-prod-readiness' into i…
mikhailak Aug 9, 2026
ffcdafc
docs(src): fix six stale claims found by review, and sweep the merged…
mikhailak Aug 9, 2026
3f285d5
feat(SHARK-3637): count tool calls on the management plane too
mikhailak Aug 9, 2026
6f91418
docs: one deployment source of truth, and stop the three docs contrad…
mikhailak Aug 9, 2026
d48a6ff
Merge remote-tracking branch 'origin/integ/mcp-prod-readiness' into i…
mikhailak Aug 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Keep secrets and build/dev cruft out of the build context and image layers.
# The Dockerfile uses explicit COPY today; this is defense-in-depth so a future
# `COPY . .` can never bake a key or local env into an image layer.
# Both Dockerfiles use explicit COPY today; this is defense-in-depth so a future
# `COPY . .` can never bake the RS256 signing key or a local env into a layer.
.git
.gitignore
node_modules
Expand All @@ -13,6 +13,7 @@ deploy
# Secrets / local env — never in an image layer.
*.pem
*.key
*.crt
.env
.env.*

Expand Down
18 changes: 17 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
# version comes from package.json "packageManager" (pnpm@11.8.0)
- uses: actions/setup-node@v7
with:
node-version: 23
node-version: 24
cache: "pnpm"
- run: pnpm install --frozen-lockfile
- name: Audit (high+)
Expand All @@ -30,3 +30,19 @@ jobs:
run: pnpm build
- name: Test
run: pnpm test
# Coverage was measured by hand and quoted in REVIEW-READY.md while CI read
# neither number, so the thresholds constrained nothing and the next PR
# could erode them silently. Both scripts carry their own thresholds and
# exit non-zero below them (global 90/80/85, mgmt 80/75/80), so no
# threshold is restated here where it could drift from the script.
#
# Measured on the commit that added this step: global 98.65 lines /
# 88.61 branches / 95.11 functions, mgmt 99.02 / 88.91 / 96.17. Branch
# coverage moves by a few hundredths between runs because some branches are
# timing dependent (the session sweeper's interval, the child-process
# polls), so the margin above the branch thresholds is the real headroom:
# roughly 8 points on each, not a rounding error.
- name: Coverage (global)
run: pnpm test:coverage
- name: Coverage (management plane)
run: pnpm test:coverage:mgmt
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
# version comes from package.json "packageManager" (pnpm@11.8.0)
- uses: actions/setup-node@v7
with:
node-version: 23
node-version: 24
registry-url: https://registry.npmjs.org
cache: "pnpm"
- run: pnpm install --frozen-lockfile
Expand Down
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ dist
.DS_Store
.vscode

*.pem
*.key
*.crt
venv
Expand All @@ -16,4 +17,9 @@ output.json
*.sarif
.codacy/cli
.codacy-cli-bin
.codacy-cli-runner.sh
.codacy-cli-runner.sh
# Coverage + mutation testing artifacts (G4/G5)
coverage
reports
.stryker-tmp
.stryker-tmp-obs
50 changes: 50 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/usr/bin/env sh
# Refuse to commit unresolved conflict content.
#
# Why this hook exists: during the merge of the data plane into the management
# branch, a `git add -A` staged four files with their conflict markers still in
# them. In a normal tree that command is merely broad; in a conflicted merge it
# also CLEARS the unmerged flag, so git stops calling those files conflicted and
# a plain `git commit` would have recorded `<<<<<<<` into the history of a
# security-critical file. Nothing else in the battery would have caught it in
# time: prettier and eslint do not parse a conflicted file into a useful error,
# and the suite fails long after the commit exists.
#
# Two independent checks, because they fail differently:
# 1. staged CONTENT carrying markers -> the git add -A case above
# 2. an unresolved merge still open -> committing mid-merge by accident
#
# Deliberately greps the staged blob (`git show :file`), not the working tree:
# the working tree can be clean while the index holds the bad version.

fail=0

for f in $(git diff --cached --name-only --diff-filter=ACMR); do
case "$f" in
*.lock|pnpm-lock.yaml|package-lock.json) ;;
*)
if git show ":$f" 2>/dev/null | grep -qE '^(<<<<<<< |>>>>>>> |=======$)'; then
echo "conflict markers in staged content: $f"
fail=1
fi
;;
esac
done

if [ -f "$(git rev-parse --git-dir)/MERGE_HEAD" ]; then
unresolved=$(git diff --name-only --diff-filter=U)
if [ -n "$unresolved" ]; then
echo "a merge is in progress and these paths are still unresolved:"
echo "$unresolved" | sed 's/^/ /'
fail=1
fi
fi

if [ "$fail" != "0" ]; then
echo ""
echo "Refusing the commit. Resolve the paths above, stage them BY NAME"
echo "(never 'git add -A' during a merge — it marks conflicts resolved), then"
echo "re-check with:"
echo " git diff --name-only --diff-filter=U"
exit 1
fi
8 changes: 7 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
dist
node_modules
static
static/img
static/llms.txt
static/remote.html
pnpm-lock.yaml
.codacy
.codacy-cli-bin
.codacy-cli-runner.sh
codacy-cli.sh
reports
.stryker-tmp
.stryker-tmp-obs
coverage
Loading