chore: ingest jamfplatform-go-sdk v1.0.0 - #378
Merged
Merged
Conversation
Specs and the Go module both, at one tag. The ingest target only ever copied api/ and re-derived the manifests, so go.mod had drifted to v0.20.1 while the committed specs came from v0.22.2 — harmless, since the CLI drives the gateway through the SDK's transport rather than its generated methods, but the two now name the same revision and CLAUDE.md records the second step. One spec moved. ai_governance_policies_api.json goes to build v2121, which adds an ETag/If-Match optimistic-concurrency protocol to the policies API. Only the read half is reachable from here: the platform emitter renders query parameters only, so a declared in: header parameter yields no flag and no error, and ai-policies patch/apply stay unconditional. Recorded as the one real capability gap this ingest opens, with the reason the SDK's own generator had to grow header parameters to close it. Also declared at v2121 and diagnostic only: ApiError.httpStatus required (this API's envelope was recorded here as lacking it — a spec gap, not a second shape), 422 SCHEMA_VERSION_UNKNOWN, four 400s, x-preview at the root. The new 409 POLICY_IN_USE on delete reaches --help verbatim and contradicts the last probe, which found archiving a referenced policy answering 204 with no guard; noted as a declaration rather than a fact. pro_api.json goes 700 -> 701 operations: v2121 restored GET /v1/mdm/commands, the second reversed v1942 withdrawal. It reaches no command, deduplicateVersionedOps keeping the already-published v2, so the refusal table is unchanged and the shipped binary still refuses 59. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
daniel-maclaughlin
approved these changes
Sep 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Specs and the Go module both, at one tag.
The go.mod half
make sync-platform-specs-from-sdkonly ever copiedapi/and re-derived the manifests — nothing bumps the SDK as a Go dependency.go.modhad drifted to v0.20.1 while the committed specs came from v0.22.2. Harmless in practice, because the CLI drives the gateway through the SDK's transport rather than its generated methods, so a spec ahead of the library costs nothing until a hand-written call site wants a method the pinned version lacks. Both now name the same revision, and CLAUDE.md records the second step so the next ingest is two commands rather than one.One spec moved
ai_governance_policies_api.json→ build v2121, which adds an ETag/If-Match optimistic-concurrency protocol to the policies API:PolicyDetail.version, anETagon the detail GET,If-Matchon PATCH,409 POLICY_VERSION_CONFLICT. All of it enforced on the wire.Only the read half is reachable from here, and that is the one real capability gap this ingest opens. The platform emitter renders query parameters only, so a declared
in: headerparameter produces no flag and no error — the same silence that correctly costs audit'sX-Environment-Ida flag. Soplatform ai-policies patchandapplysend noIf-Matchand are always unconditional; a concurrent draft edit still silently wins last-writer. Closing it means teachinggenerator/platform/emitter.goheader parameters, which is deliberately not in this PR. Worth knowing the SDK had to grow the same concept for the same reason: its generator never inspected a parameter'sIn, so anIf-Matchentry would have been emitted as a query key the server ignores, turning a conditional update into an unconditional one with nothing failing anywhere.Also declared at v2121, all diagnostic only (nothing in the CLI reads a response declaration):
ApiError.httpStatusrequired. CLAUDE.md had this API's envelope as{traceId, errors}without it, unlike the gateway's — that was a spec gap rather than a second envelope shape, and the wire has always sent it. Note corrected.422 SCHEMA_VERSION_UNKNOWNon the tool-schema read, which CLAUDE.md recorded as this surface's one undeclared status.400 BadRequeston four reads;x-preview: true/x-preview-ownersat the root, plusJamf-Preview: trueon every 2xx.One declaration to distrust.
409 POLICY_IN_USEondeleteis new, and it reachesai-policies delete --helpverbatim — the only generated-code change in the drop. It contradicts the 2026-08-30 full-surface probe, which found archiving a blueprint-referenced policy answering a clean 204 and leaving the blueprint pointing at a policy nothing can read. Nothing has re-probed it. Wrong in the safe direction (it warns about a refusal that may not happen), but recorded as a declaration rather than a fact.One Pro operation arrived
pro_api.jsongoes 476/700 → 477/701: v2121 restoredGET /v1/mdm/commands(device-actions:read), the second reversed v1942 withdrawal after v2082's/v3/computers-inventory, and a verbatim revert of the pre-v1942 entry with no schema change.It reaches no command.
deduplicateVersionedOpskeepsGET /v2/mdm/commands, which the gateway already published, so the refusal table did not move and the shipped binary still refuses 59.POST /v2/mdm/commandsstays unpublished. Recorded anyway because the spec is wrong about the v1 path in both directions — it is a two-parameter point lookup rather than a list, both parameters are marked optional, and sending neither answers 400 while sending both answers 500, each with an emptyerrorsarray and no attribution.Verification
make test,go vet ./...,make lint(0 issues), and all four CI-safe guards:verify-generated,verify-gateway-coverage,verify-classic-schemas,verify-platform-specs.🤖 Generated with Claude Code