specguard-mcp 0.1.27 → 0.1.29
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/README.md +44 -9
- package/dist/src/config.d.ts +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/server.d.ts +10 -5
- package/dist/src/server.js +10 -5
- package/dist/src/server.js.map +1 -1
- package/dist/src/tools/create-repository-api-key.d.ts +1 -1
- package/dist/src/tools/create-repository-api-key.js +1 -1
- package/dist/src/tools/get-server-version.d.ts +5 -4
- package/dist/src/tools/get-server-version.js +5 -4
- package/dist/src/tools/get-server-version.js.map +1 -1
- package/dist/src/tools/index.d.ts +11 -11
- package/dist/src/tools/index.js +11 -11
- package/dist/src/tools/list-repository-api-keys.d.ts +1 -1
- package/dist/src/tools/list-repository-api-keys.js +1 -1
- package/dist/src/tools/registrable-repositories.d.ts +1 -1
- package/dist/src/tools/registrable-repositories.js +1 -1
- package/dist/src/tools/remove-repository.d.ts +1 -1
- package/dist/src/tools/remove-repository.js +1 -1
- package/dist/src/tools/rename-repository.d.ts +1 -1
- package/dist/src/tools/rename-repository.js +1 -1
- package/dist/src/tools/repository-overview.js +13 -2
- package/dist/src/tools/repository-overview.js.map +1 -1
- package/dist/src/tools/revoke-repository-api-key.d.ts +1 -1
- package/dist/src/tools/revoke-repository-api-key.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -328,7 +328,17 @@ newest refusal is newer than the newest *accepted* run, and true when nothing ha
|
|
|
328
328
|
accepted, so a repository refused once and quiet since still answers `true`. Read it with
|
|
329
329
|
`last_rejection_at` and judge recency yourself. Each retained rejection carries the endpoint's own
|
|
330
330
|
reasons and, where the client reported one, the client
|
|
331
|
-
version that sent it
|
|
331
|
+
version that sent it, plus `served_by` — the build of the SpecGuard deployment that refused it,
|
|
332
|
+
stamped on the row at write time. That stamp answers a question the deployment's live version read
|
|
333
|
+
cannot: `get_server_version` reports which build is answering *now*, while retained refusals
|
|
334
|
+
outlive deploys, so for a past row the two routinely disagree — read `served_by` for which build
|
|
335
|
+
refused *that row*, never the live route. The row's two nulls mean *different* things and must not
|
|
336
|
+
be read as each other: a null `reported_client` means the client sent no `User-Agent` (the row
|
|
337
|
+
knows, and the client said nothing); a null `served_by` means the row carries no build identity, so
|
|
338
|
+
the platform cannot name which build answered it — the write path can land on that null in more
|
|
339
|
+
than one way (for example a row retained from before the stamp existed, a build whose VERSION file
|
|
340
|
+
is missing or unreadable, a column stored blank), so the null says only that no build is named,
|
|
341
|
+
never which way it got there. A `latest_run` from days ago beside a live rejection stream is a suite
|
|
332
342
|
SpecGuard *stopped accepting*, not a suite nobody ran. `credential_health` covers the break that one
|
|
333
343
|
structurally **cannot** see: a rejected key resolves no repository and writes no rejection row, so an
|
|
334
344
|
authentication-broken pipeline is invisible to every rejection figure — it names any key that was
|
|
@@ -348,7 +358,25 @@ ranking for the whole set. Where **no** bound sits beside a list, it is everythi
|
|
|
348
358
|
a finding and not a disclosure someone forgot.
|
|
349
359
|
|
|
350
360
|
Figures are `null` where CI did not report them. A `null` means *not measured*; it is never a zero,
|
|
351
|
-
because a zero would read as a measurement that was taken.
|
|
361
|
+
because a zero would read as a measurement that was taken. That rule is about nulls and does not
|
|
362
|
+
run backwards: a non-null figure is not thereby a measurement — a run that reported zero tests
|
|
363
|
+
serves a real `total_specs: 0` beside `suite_size_measured: false`, so it is that boolean, never
|
|
364
|
+
the nullness, that says whether the row measured a suite.
|
|
365
|
+
|
|
366
|
+
Three more keys ride **every** response, with no parameter to pass, and together they decide whether
|
|
367
|
+
two history rows may be *differenced at all* — which is what the history is for. `suite_size_measured`
|
|
368
|
+
is served on `latest_run` and on every `history[]` row, from the same predicate at both sites so one
|
|
369
|
+
run cannot disagree with itself: `false` means that run reported **no** tests, so its `total_specs`
|
|
370
|
+
is a *report*, not a measurement — never difference across a row where it is false. `shard_count`
|
|
371
|
+
and `timed_shard_count` ride every `history[]` row and are the two denominators: difference
|
|
372
|
+
`total_specs` only across rows of *equal* `shard_count`, because that count is a sum over the shards
|
|
373
|
+
**recorded**; difference `duration_seconds` only across rows of *equal* `timed_shard_count`, because
|
|
374
|
+
that figure is a max over the shards that **reported**. Ignore the second and a run whose four
|
|
375
|
+
shards all reported, differenced against a run whose two slowest were cancelled — identical
|
|
376
|
+
`shard_count`, identical `suite_size_measured`, only `timed_shard_count` differing — reads as a 70%
|
|
377
|
+
speedup produced entirely by telemetry loss. A half-reported run is the **ordinary** state, not an
|
|
378
|
+
exotic one: every sharded run passes through it while its shards are still arriving, and a job
|
|
379
|
+
cancelled after two of four shards leaves a half-sized row in the history permanently.
|
|
352
380
|
|
|
353
381
|
### `get_server_version`
|
|
354
382
|
|
|
@@ -667,8 +695,9 @@ nor `credential_health` (findings only — a never-presented replacement is neit
|
|
|
667
695
|
presented-revoked) can answer this.
|
|
668
696
|
|
|
669
697
|
**This is the id source for every row this session did not mint.** The mint response carries the
|
|
670
|
-
id of the key IT minted (SPGD-993); a key minted in the web panel, or in
|
|
671
|
-
no other bridge-learnable id — list here to name a `key_id` for
|
|
698
|
+
id of the key IT minted, in its `api_key` block (SPGD-993); a key minted in the web panel, or in
|
|
699
|
+
an earlier session, has no other bridge-learnable id — list here to name a `key_id` for
|
|
700
|
+
`revoke_repository_api_key`.
|
|
672
701
|
|
|
673
702
|
`token_hint` is a hint, never the token — the plaintext existed for exactly one response at mint
|
|
674
703
|
time and nothing persisted it. There is no regenerate: rotation is mint-and-replace
|
|
@@ -984,9 +1013,12 @@ The toolset fills in as more of SpecGuard lands. Adding one is two mechanical ed
|
|
|
984
1013
|
There is no third — no third *wiring* edit, at least: every tool also earns a `### ` section above,
|
|
985
1014
|
and every argument earns a row in that section's table, since this README ships as the package's
|
|
986
1015
|
published documentation, and `test/readme.test.ts` derives that obligation from the registry so a
|
|
987
|
-
missing section or an undocumented parameter fails the suite
|
|
988
|
-
|
|
989
|
-
|
|
1016
|
+
missing section or an undocumented parameter fails the suite — as does a response key the tool's
|
|
1017
|
+
description names that the section never mentions. A tool that genuinely takes no
|
|
1018
|
+
arguments still earns the section, and is named in that file's `ARGUMENT_LESS_TOOLS` — a
|
|
1019
|
+
deliberate line to add, rather than a floor relaxed for everyone. The set tracks the property,
|
|
1020
|
+
not arrival order: an `inputSchema` that declares no `properties`, the shape
|
|
1021
|
+
`registrable_repositories` has.
|
|
990
1022
|
`src/server.ts` iterates that array and contains no per-tool code — no `switch`, no hard-coded name — and everything a tool
|
|
991
1023
|
touches the world with (config, subprocesses, `fetch`) is injected, so a new tool is testable
|
|
992
1024
|
without a live deployment for free. The property tests in `test/tools/registry.test.ts` run over
|
|
@@ -994,8 +1026,11 @@ whatever the registry holds, so a tool added later is checked by tests written t
|
|
|
994
1026
|
|
|
995
1027
|
**Only wrap capabilities that exist.** A tool in `tools/list` is a promise an agent acts on; one that
|
|
996
1028
|
discovers cleanly and fails on use is worse than one that is absent, because the agent has already
|
|
997
|
-
committed to a plan by the time it finds out.
|
|
998
|
-
|
|
1029
|
+
committed to a plan by the time it finds out. Anything whose backing endpoint has not shipped stays
|
|
1030
|
+
out — `/check-intent` is in that state today: the platform's `config/routes.rb` carries it as a
|
|
1031
|
+
comment and nothing more, so there is nothing for a tool to wrap. Duplicate clustering once sat under
|
|
1032
|
+
this same rule; the endpoint it needed shipped, and `near_duplicate_clusters` moved inside. What
|
|
1033
|
+
moved was the platform, not the bar.
|
|
999
1034
|
|
|
1000
1035
|
Transport is chosen in `bin/specguard-mcp.ts` and nowhere else — stdio today, so an HTTP/SSE
|
|
1001
1036
|
entrypoint is a sibling of that file rather than a change to the server.
|
package/dist/src/config.d.ts
CHANGED
|
@@ -320,7 +320,7 @@ export declare function requireUserOrAgentApiConfig(config: Config): Credentiall
|
|
|
320
320
|
*
|
|
321
321
|
* The fourth sibling, and the first whose answer carries no key and no
|
|
322
322
|
* `Credential`: the server's root-level `GET /version` (SPGD-1197, specguard
|
|
323
|
-
*
|
|
323
|
+
* 08ab408) answers unauthenticated BY DESIGN — the platform's own doctrine
|
|
324
324
|
* places it outside the credential seam, at the root where the no-account
|
|
325
325
|
* reads (`/up`, the schema mirror) already live. Demanding a key here would
|
|
326
326
|
* invent a requirement the deployment does not have, and the
|
package/dist/src/config.js
CHANGED
|
@@ -188,7 +188,7 @@ export function requireUserOrAgentApiConfig(config) {
|
|
|
188
188
|
*
|
|
189
189
|
* The fourth sibling, and the first whose answer carries no key and no
|
|
190
190
|
* `Credential`: the server's root-level `GET /version` (SPGD-1197, specguard
|
|
191
|
-
*
|
|
191
|
+
* 08ab408) answers unauthenticated BY DESIGN — the platform's own doctrine
|
|
192
192
|
* places it outside the credential seam, at the root where the no-account
|
|
193
193
|
* reads (`/up`, the schema mirror) already live. Demanding a key here would
|
|
194
194
|
* invent a requirement the deployment does not have, and the
|
package/dist/src/server.d.ts
CHANGED
|
@@ -33,11 +33,16 @@ export declare function createServer(options?: CreateServerOptions): Server;
|
|
|
33
33
|
* The literal this replaced was written at bootstrap and never revisited: the
|
|
34
34
|
* release bot bumps `package.json` alone, so every initialize handshake after
|
|
35
35
|
* the first release told every client the bridge was still the bootstrap
|
|
36
|
-
* version. Nothing caught the drift
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
36
|
+
* version. Nothing caught the drift in that bootstrap era: then, every reader
|
|
37
|
+
* cell of the constant relayed the stale literal unchecked, and no test named
|
|
38
|
+
* it. That era is over. Whatever a reader cell does with `SERVER_VERSION`, it
|
|
39
|
+
* now sees the tracked value — and the suite now names the constant too. The
|
|
40
|
+
* per-request User-Agent (`requestUserAgent()` in
|
|
41
|
+
* `src/support/specguard-api.ts`) stamps `specguard-mcp/<version>` onto every
|
|
42
|
+
* outbound call, and the transport tests assert that header against this very
|
|
43
|
+
* constant. The manifest-walk change kept `SERVER_VERSION` a const export and
|
|
44
|
+
* left every reader cell's access to it untouched; the ONLY change is that
|
|
45
|
+
* its value now tracks the release instead of the bootstrap.
|
|
41
46
|
*
|
|
42
47
|
* `SERVER_VERSION`'s module-scope initialization is the single read: the walk
|
|
43
48
|
* runs once at import, and every later reader cell sees the cached result.
|
package/dist/src/server.js
CHANGED
|
@@ -120,11 +120,16 @@ function indexByName(tools) {
|
|
|
120
120
|
* The literal this replaced was written at bootstrap and never revisited: the
|
|
121
121
|
* release bot bumps `package.json` alone, so every initialize handshake after
|
|
122
122
|
* the first release told every client the bridge was still the bootstrap
|
|
123
|
-
* version. Nothing caught the drift
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
123
|
+
* version. Nothing caught the drift in that bootstrap era: then, every reader
|
|
124
|
+
* cell of the constant relayed the stale literal unchecked, and no test named
|
|
125
|
+
* it. That era is over. Whatever a reader cell does with `SERVER_VERSION`, it
|
|
126
|
+
* now sees the tracked value — and the suite now names the constant too. The
|
|
127
|
+
* per-request User-Agent (`requestUserAgent()` in
|
|
128
|
+
* `src/support/specguard-api.ts`) stamps `specguard-mcp/<version>` onto every
|
|
129
|
+
* outbound call, and the transport tests assert that header against this very
|
|
130
|
+
* constant. The manifest-walk change kept `SERVER_VERSION` a const export and
|
|
131
|
+
* left every reader cell's access to it untouched; the ONLY change is that
|
|
132
|
+
* its value now tracks the release instead of the bootstrap.
|
|
128
133
|
*
|
|
129
134
|
* `SERVER_VERSION`'s module-scope initialization is the single read: the walk
|
|
130
135
|
* runs once at import, and every later reader cell sees the cached result.
|
package/dist/src/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ToolDefinition } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* `POST /api/v1/repositories/:repository_id/api_keys` as a tool — shipped in
|
|
4
|
-
* the platform (`specguard/config/routes.rb
|
|
4
|
+
* the platform (`specguard/config/routes.rb`,
|
|
5
5
|
* `user_repository_api_keys_controller#create`, SPGD-754).
|
|
6
6
|
*
|
|
7
7
|
* == Reveal-once, again
|
|
@@ -2,7 +2,7 @@ import { postJsonObject, requireUserOrAgentApiConfig } from "../support/specguar
|
|
|
2
2
|
import { optionalString, requireString } from "./args.js";
|
|
3
3
|
/**
|
|
4
4
|
* `POST /api/v1/repositories/:repository_id/api_keys` as a tool — shipped in
|
|
5
|
-
* the platform (`specguard/config/routes.rb
|
|
5
|
+
* the platform (`specguard/config/routes.rb`,
|
|
6
6
|
* `user_repository_api_keys_controller#create`, SPGD-754).
|
|
7
7
|
*
|
|
8
8
|
* == Reveal-once, again
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { ToolDefinition } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* `GET /version` as a tool — the server's OWN identity, askable at last
|
|
4
|
-
* (shipped: SPGD-1197, specguard `
|
|
5
|
-
* design — `config/routes.rb`
|
|
6
|
-
*
|
|
7
|
-
* is the platform's deliberate
|
|
4
|
+
* (shipped: SPGD-1197, specguard `08ab408`; first served by release 0.1.46,
|
|
5
|
+
* `d434c2a` — root-level and unauthenticated by design — `config/routes.rb`
|
|
6
|
+
* mounts it beside `/up` and the schema mirror, exactly because the credential
|
|
7
|
+
* seam under `api/` fails closed and this read is the platform's deliberate
|
|
8
|
+
* no-account exception at the root).
|
|
8
9
|
*
|
|
9
10
|
* == What it answers, and the one distinction the whole tool exists to carry
|
|
10
11
|
*
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { getJsonObject, requireEndpointApiConfig } from "../support/specguard-api.js";
|
|
2
2
|
/**
|
|
3
3
|
* `GET /version` as a tool — the server's OWN identity, askable at last
|
|
4
|
-
* (shipped: SPGD-1197, specguard `
|
|
5
|
-
* design — `config/routes.rb`
|
|
6
|
-
*
|
|
7
|
-
* is the platform's deliberate
|
|
4
|
+
* (shipped: SPGD-1197, specguard `08ab408`; first served by release 0.1.46,
|
|
5
|
+
* `d434c2a` — root-level and unauthenticated by design — `config/routes.rb`
|
|
6
|
+
* mounts it beside `/up` and the schema mirror, exactly because the credential
|
|
7
|
+
* seam under `api/` fails closed and this read is the platform's deliberate
|
|
8
|
+
* no-account exception at the root).
|
|
8
9
|
*
|
|
9
10
|
* == What it answers, and the one distinction the whole tool exists to carry
|
|
10
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-server-version.js","sourceRoot":"","sources":["../../../src/tools/get-server-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAGtF
|
|
1
|
+
{"version":3,"file":"get-server-version.js","sourceRoot":"","sources":["../../../src/tools/get-server-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAGtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,gBAAgB,GAAmB;IACvC,IAAI,EAAE,oBAAoB;IAC1B,KAAK,EAAE,gBAAgB;IACvB,WAAW,EACT,+FAA+F;QAC/F,iGAAiG;QACjG,4FAA4F;QAC5F,2FAA2F;QAC3F,8FAA8F;QAC9F,+FAA+F;QAC/F,iGAAiG;QACjG,0FAA0F;QAC1F,gGAAgG;QAChG,+FAA+F;QAC/F,8FAA8F;QAC9F,iGAAiG;QACjG,gGAAgG;QAChG,gGAAgG;QAChG,iGAAiG;QACjG,+FAA+F;QAC/F,gDAAgD;IAClD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,4EAA4E;QAC5E,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;QAC1E,mDAAmD;QACnD,oBAAoB,EAAE,KAAK;KAC5B;IAED,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO;QACtB,MAAM,GAAG,GAAG,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAEvE,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACrC,UAAU,EAAE,MAAM;SACnB,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -36,12 +36,12 @@ import type { ToolDefinition } from "./types.js";
|
|
|
36
36
|
* == What is deliberately absent
|
|
37
37
|
*
|
|
38
38
|
* `/check-intent` is NOT here and must not be added until its backing endpoint
|
|
39
|
-
* exists — `specguard/config/routes.rb
|
|
40
|
-
* is the evidence this forbid rests on. A tool advertised in
|
|
41
|
-
* promise an agent will act on: wrapping an endpoint that
|
|
42
|
-
* produce a server that discovers cleanly and fails on
|
|
43
|
-
* not offering the tool, because the agent has
|
|
44
|
-
* the time it finds out.
|
|
39
|
+
* exists — `specguard/config/routes.rb` carries `/check-intent` as a comment
|
|
40
|
+
* only, which is the evidence this forbid rests on. A tool advertised in
|
|
41
|
+
* `tools/list` is a promise an agent will act on: wrapping an endpoint that
|
|
42
|
+
* does not exist would produce a server that discovers cleanly and fails on
|
|
43
|
+
* use, which is worse than not offering the tool, because the agent has
|
|
44
|
+
* already committed to a plan by the time it finds out.
|
|
45
45
|
*
|
|
46
46
|
* == The first tool that WRITES
|
|
47
47
|
*
|
|
@@ -67,7 +67,7 @@ import type { ToolDefinition } from "./types.js";
|
|
|
67
67
|
* == The read half of the registration gate
|
|
68
68
|
*
|
|
69
69
|
* - `registrable_repositories` wraps `GET /api/v1/repositories/registrable`
|
|
70
|
-
* (shipped: `specguard/config/routes.rb
|
|
70
|
+
* (shipped: `specguard/config/routes.rb`,
|
|
71
71
|
* `Api::V1::UserRepositoriesController#registrable`).
|
|
72
72
|
*
|
|
73
73
|
* `list_repositories` says what IS registered; this says what COULD be — the
|
|
@@ -107,9 +107,9 @@ import type { ToolDefinition } from "./types.js";
|
|
|
107
107
|
* did not mint.
|
|
108
108
|
*
|
|
109
109
|
* The standing rule itself is unchanged and still binding — which still keeps
|
|
110
|
-
* out `/check-intent`: it has no backing endpoint (`routes.rb
|
|
111
|
-
* as a comment only). A tool advertised in `tools/list`
|
|
112
|
-
* agent will act on.
|
|
110
|
+
* out `/check-intent`: it has no backing endpoint (`specguard/config/routes.rb`
|
|
111
|
+
* mounts `/check-intent` as a comment only). A tool advertised in `tools/list`
|
|
112
|
+
* remains a promise an agent will act on.
|
|
113
113
|
*
|
|
114
114
|
* == Near-duplicate clusters: the forbid that retired
|
|
115
115
|
*
|
|
@@ -184,7 +184,7 @@ import type { ToolDefinition } from "./types.js";
|
|
|
184
184
|
* == The first tool that needs NO credential
|
|
185
185
|
*
|
|
186
186
|
* - `get_server_version` wraps the server's root-level `GET /version`
|
|
187
|
-
* (shipped: SPGD-1197, specguard `
|
|
187
|
+
* (shipped: SPGD-1197, specguard `08ab408`).
|
|
188
188
|
*
|
|
189
189
|
* The platform's own doctrine placed this read OUTSIDE the credential seam
|
|
190
190
|
* rather than inside with an exception: every controller under `api/` must
|
package/dist/src/tools/index.js
CHANGED
|
@@ -54,12 +54,12 @@ import updateRepositoryMemberPermissions from "./update-repository-member-permis
|
|
|
54
54
|
* == What is deliberately absent
|
|
55
55
|
*
|
|
56
56
|
* `/check-intent` is NOT here and must not be added until its backing endpoint
|
|
57
|
-
* exists — `specguard/config/routes.rb
|
|
58
|
-
* is the evidence this forbid rests on. A tool advertised in
|
|
59
|
-
* promise an agent will act on: wrapping an endpoint that
|
|
60
|
-
* produce a server that discovers cleanly and fails on
|
|
61
|
-
* not offering the tool, because the agent has
|
|
62
|
-
* the time it finds out.
|
|
57
|
+
* exists — `specguard/config/routes.rb` carries `/check-intent` as a comment
|
|
58
|
+
* only, which is the evidence this forbid rests on. A tool advertised in
|
|
59
|
+
* `tools/list` is a promise an agent will act on: wrapping an endpoint that
|
|
60
|
+
* does not exist would produce a server that discovers cleanly and fails on
|
|
61
|
+
* use, which is worse than not offering the tool, because the agent has
|
|
62
|
+
* already committed to a plan by the time it finds out.
|
|
63
63
|
*
|
|
64
64
|
* == The first tool that WRITES
|
|
65
65
|
*
|
|
@@ -85,7 +85,7 @@ import updateRepositoryMemberPermissions from "./update-repository-member-permis
|
|
|
85
85
|
* == The read half of the registration gate
|
|
86
86
|
*
|
|
87
87
|
* - `registrable_repositories` wraps `GET /api/v1/repositories/registrable`
|
|
88
|
-
* (shipped: `specguard/config/routes.rb
|
|
88
|
+
* (shipped: `specguard/config/routes.rb`,
|
|
89
89
|
* `Api::V1::UserRepositoriesController#registrable`).
|
|
90
90
|
*
|
|
91
91
|
* `list_repositories` says what IS registered; this says what COULD be — the
|
|
@@ -125,9 +125,9 @@ import updateRepositoryMemberPermissions from "./update-repository-member-permis
|
|
|
125
125
|
* did not mint.
|
|
126
126
|
*
|
|
127
127
|
* The standing rule itself is unchanged and still binding — which still keeps
|
|
128
|
-
* out `/check-intent`: it has no backing endpoint (`routes.rb
|
|
129
|
-
* as a comment only). A tool advertised in `tools/list`
|
|
130
|
-
* agent will act on.
|
|
128
|
+
* out `/check-intent`: it has no backing endpoint (`specguard/config/routes.rb`
|
|
129
|
+
* mounts `/check-intent` as a comment only). A tool advertised in `tools/list`
|
|
130
|
+
* remains a promise an agent will act on.
|
|
131
131
|
*
|
|
132
132
|
* == Near-duplicate clusters: the forbid that retired
|
|
133
133
|
*
|
|
@@ -202,7 +202,7 @@ import updateRepositoryMemberPermissions from "./update-repository-member-permis
|
|
|
202
202
|
* == The first tool that needs NO credential
|
|
203
203
|
*
|
|
204
204
|
* - `get_server_version` wraps the server's root-level `GET /version`
|
|
205
|
-
* (shipped: SPGD-1197, specguard `
|
|
205
|
+
* (shipped: SPGD-1197, specguard `08ab408`).
|
|
206
206
|
*
|
|
207
207
|
* The platform's own doctrine placed this read OUTSIDE the credential seam
|
|
208
208
|
* rather than inside with an exception: every controller under `api/` must
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ToolDefinition } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* `GET /api/v1/repositories/:repository_id/api_keys` as a tool — shipped in
|
|
4
|
-
* the platform (`specguard/config/routes.rb
|
|
4
|
+
* the platform (`specguard/config/routes.rb`,
|
|
5
5
|
* `Api::V1::UserRepositoryApiKeysController#index`, SPGD-993).
|
|
6
6
|
*
|
|
7
7
|
* == The verify step of the rotation this bridge otherwise cannot see
|
|
@@ -2,7 +2,7 @@ import { getJsonObject, requireUserOrAgentApiConfig } from "../support/specguard
|
|
|
2
2
|
import { requireString } from "./args.js";
|
|
3
3
|
/**
|
|
4
4
|
* `GET /api/v1/repositories/:repository_id/api_keys` as a tool — shipped in
|
|
5
|
-
* the platform (`specguard/config/routes.rb
|
|
5
|
+
* the platform (`specguard/config/routes.rb`,
|
|
6
6
|
* `Api::V1::UserRepositoryApiKeysController#index`, SPGD-993).
|
|
7
7
|
*
|
|
8
8
|
* == The verify step of the rotation this bridge otherwise cannot see
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ToolDefinition } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* `GET /api/v1/repositories/registrable` as a tool — shipped today in the
|
|
4
|
-
* platform (`specguard/config/routes.rb
|
|
4
|
+
* platform (`specguard/config/routes.rb`, served by
|
|
5
5
|
* `Api::V1::UserRepositoriesController#registrable`).
|
|
6
6
|
*
|
|
7
7
|
* == What it answers, and why `list_repositories` does not
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getJsonObject, requireUserApiConfig } from "../support/specguard-api.js";
|
|
2
2
|
/**
|
|
3
3
|
* `GET /api/v1/repositories/registrable` as a tool — shipped today in the
|
|
4
|
-
* platform (`specguard/config/routes.rb
|
|
4
|
+
* platform (`specguard/config/routes.rb`, served by
|
|
5
5
|
* `Api::V1::UserRepositoriesController#registrable`).
|
|
6
6
|
*
|
|
7
7
|
* == What it answers, and why `list_repositories` does not
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ToolDefinition } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* `DELETE /api/v1/repositories/:id` as a tool — shipped in the platform
|
|
4
|
-
* (`specguard/config/routes.rb
|
|
4
|
+
* (`specguard/config/routes.rb`, `Api::V1::UserRepositoriesController#destroy`,
|
|
5
5
|
* SPGD-754).
|
|
6
6
|
*
|
|
7
7
|
* == The destructive gesture in the whole surface
|
|
@@ -2,7 +2,7 @@ import { deleteJson, requireUserOrAgentApiConfig } from "../support/specguard-ap
|
|
|
2
2
|
import { requireString } from "./args.js";
|
|
3
3
|
/**
|
|
4
4
|
* `DELETE /api/v1/repositories/:id` as a tool — shipped in the platform
|
|
5
|
-
* (`specguard/config/routes.rb
|
|
5
|
+
* (`specguard/config/routes.rb`, `Api::V1::UserRepositoriesController#destroy`,
|
|
6
6
|
* SPGD-754).
|
|
7
7
|
*
|
|
8
8
|
* == The destructive gesture in the whole surface
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ToolDefinition } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* `PATCH /api/v1/repositories/:id` as a tool — shipped in the platform
|
|
4
|
-
* (`specguard/config/routes.rb
|
|
4
|
+
* (`specguard/config/routes.rb`, `Api::V1::UserRepositoriesController#update`,
|
|
5
5
|
* SPGD-878, PR #266).
|
|
6
6
|
*
|
|
7
7
|
* == Why this tool exists at all
|
|
@@ -2,7 +2,7 @@ import { patchJsonObject, requireUserApiConfig } from "../support/specguard-api.
|
|
|
2
2
|
import { requireString } from "./args.js";
|
|
3
3
|
/**
|
|
4
4
|
* `PATCH /api/v1/repositories/:id` as a tool — shipped in the platform
|
|
5
|
-
* (`specguard/config/routes.rb
|
|
5
|
+
* (`specguard/config/routes.rb`, `Api::V1::UserRepositoriesController#update`,
|
|
6
6
|
* SPGD-878, PR #266).
|
|
7
7
|
*
|
|
8
8
|
* == Why this tool exists at all
|
|
@@ -516,8 +516,19 @@ const getRepositoryOverview = {
|
|
|
516
516
|
"nothing has ever been accepted — so read it with `last_rejection_at` and judge recency " +
|
|
517
517
|
"yourself, because a repository refused once and quiet since still answers true. Each retained " +
|
|
518
518
|
"rejection carries the endpoint's own reasons and, where the client reported one, the client " +
|
|
519
|
-
"version that sent it
|
|
520
|
-
"
|
|
519
|
+
"version that sent it, plus `served_by` — the build of the SpecGuard deployment that refused it, " +
|
|
520
|
+
"stamped on the row at write time. That stamp answers a question the deployment's live version " +
|
|
521
|
+
"read cannot: `get_server_version` reports which build is answering NOW, while retained " +
|
|
522
|
+
"refusals outlive deploys, so for a past row the two routinely disagree — read `served_by` for " +
|
|
523
|
+
"WHICH BUILD REFUSED THAT ROW, never the live route. The row's two nulls mean DIFFERENT things " +
|
|
524
|
+
"and must not be read as each other: a null `reported_client` means the client sent no " +
|
|
525
|
+
"`User-Agent` (the row knows, and the client said nothing); a null `served_by` means the row " +
|
|
526
|
+
"carries no build identity, so the platform cannot name which build answered it — the write " +
|
|
527
|
+
"path can land on that null in more than one way (for example a row retained from before the " +
|
|
528
|
+
"stamp existed, a build whose VERSION file is missing or unreadable, a column stored blank), " +
|
|
529
|
+
"so the null says only that no build is named, never which way it got there. " +
|
|
530
|
+
"A `latest_run` from days ago beside a live rejection stream is a " +
|
|
531
|
+
"suite SpecGuard STOPPED ACCEPTING, not a suite nobody ran. " +
|
|
521
532
|
"`credential_health` covers the break that one structurally CANNOT see — a rejected key " +
|
|
522
533
|
"resolves no repository and writes no rejection row, so an authentication-broken pipeline is " +
|
|
523
534
|
"invisible to every rejection figure — by naming any key that was ROTATED and has not " +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-overview.js","sourceRoot":"","sources":["../../../src/tools/repository-overview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAidG;AACH,MAAM,qBAAqB,GAAmB;IAC5C,IAAI,EAAE,yBAAyB;IAE/B,KAAK,EAAE,mCAAmC;IAE1C,WAAW,EACT,2FAA2F;QAC3F,6FAA6F;QAC7F,yFAAyF;QACzF,+FAA+F;QAC/F,8FAA8F;QAC9F,gEAAgE;QAChE,gGAAgG;QAChG,wFAAwF;QACxF,6FAA6F;QAC7F,4BAA4B;QAC5B,gFAAgF;QAChF,yFAAyF;QACzF,4FAA4F;QAC5F,qFAAqF;QACrF,yFAAyF;QACzF,yDAAyD;QACzD,4FAA4F;QAC5F,6FAA6F;QAC7F,kCAAkC;QAClC,6FAA6F;QAC7F,0FAA0F;QAC1F,wFAAwF;QACxF,yFAAyF;QACzF,4FAA4F;QAC5F,4DAA4D;QAC5D,+FAA+F;QAC/F,2FAA2F;QAC3F,gGAAgG;QAChG,wEAAwE;QACxE,6FAA6F;QAC7F,gGAAgG;QAChG,4EAA4E;QAC5E,+FAA+F;QAC/F,6FAA6F;QAC7F,0FAA0F;QAC1F,oFAAoF;QACpF,iGAAiG;QACjG,8FAA8F;QAC9F,2FAA2F;QAC3F,qEAAqE;QACrE,2FAA2F;QAC3F,kFAAkF;QAClF,iGAAiG;QACjG,gGAAgG;QAChG,yFAAyF;QACzF,gGAAgG;QAChG,8FAA8F;QAC9F
|
|
1
|
+
{"version":3,"file":"repository-overview.js","sourceRoot":"","sources":["../../../src/tools/repository-overview.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ToolDefinition } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* `DELETE /api/v1/repositories/:repository_id/api_keys/:id` as a tool —
|
|
4
|
-
* shipped in the platform (`specguard/config/routes.rb
|
|
4
|
+
* shipped in the platform (`specguard/config/routes.rb`,
|
|
5
5
|
* `user_repository_api_keys_controller#destroy`, SPGD-754).
|
|
6
6
|
*
|
|
7
7
|
* == Replacement-mint-then-revoke is the rotation model
|
|
@@ -2,7 +2,7 @@ import { deleteJson, requireUserOrAgentApiConfig } from "../support/specguard-ap
|
|
|
2
2
|
import { requireString } from "./args.js";
|
|
3
3
|
/**
|
|
4
4
|
* `DELETE /api/v1/repositories/:repository_id/api_keys/:id` as a tool —
|
|
5
|
-
* shipped in the platform (`specguard/config/routes.rb
|
|
5
|
+
* shipped in the platform (`specguard/config/routes.rb`,
|
|
6
6
|
* `user_repository_api_keys_controller#destroy`, SPGD-754).
|
|
7
7
|
*
|
|
8
8
|
* == Replacement-mint-then-revoke is the rotation model
|