Repository navigation
Conversation
|
Converted to draft while I ensure this works for msb as well. |
f7938b9 to
89a09d3
Compare
|
AI-assisted review (OpenCode), advisory — needs a human to confirm before it drives a change. Reviewed at head The CF CLI install is done well: exact 1. That one entry covers every cloud.gov subdomain — control plane, UAA/login, logs, and every deployed tenant application route on a shared But the concrete surface is enumerable from the kit's own files:
That's ~5-6 exact hosts plus a logs endpoint, versus one wildcard. In a file whose entire job is the egress boundary for untrusted agent code, enumerating them is what least privilege means here. If the wildcard is genuinely required for app routes the operator deploys, it would help to say which and why in the spec comment, rather than leaving the breadth asserted. 2. The token guard is shape-based, so the fail-closed claim is narrower than the PR states ( The guard refuses Assert the positive instead: validate the value is the expected acq placeholder shape and refuse everything else. That inverts it from blocklisting one token shape to allowlisting the one you expect. Nit, unrelated to the kit: the Process question: @mogul's only comment here (2026-09-09) says "Converted to draft while I ensure this works for msb as well," but the PR currently reports as not-draft with no follow-up. Is the msb verification done, or did it come out of draft incidentally? Verified clean, recording affirmatively: no listening port, no server process, no UNVERIFIED: the actual shape of acq's injected Method: static analysis at head |
|
AI-assisted adversarial review (nexus-agents Critical: the auth mechanism has no working input (all 5 voters, independently derived)
The complementary path is also broken: if a non-JWT placeholder does reach So: real token → startup fails closed. Placeholder → CLI can't parse it. No value threads both. This is the kit's entire value proposition, and nothing in the default High:
|
|
Addressed the review feedback and pushed commit |
|
AI-assisted re-review (OpenCode), advisory — needs a human to confirm before it drives a change. Reviewed fix commit 1. The critical defect (no value threads both the guard and real auth) is still open — the fix moved to a different placeholder shape, not a working one
I live-tested msb's actual placeholder shape rather than assuming it: created a real sandbox with msb's real placeholder is the literal, unexpanded string
So on msb — the kit's own declared backend — the script exits 1 during 2. The wildcard narrowing (
|
|
Re-review requested for the cloud.gov acq kit updates. Summary:
Verification:
Blocked locally:
AI assistance: OpenCode Agent assisted with this update; human review required before merge. |
Add an sbx cloud.gov acq mixin kit that installs the pinned Cloud Foundry CLI, allow-lists cloud.gov and Cloud Foundry docs egress, and configures CF auth through acq secret placeholders. Tracks deferred msb wildcard parity in #407. Co-authored-by: OpenCode Agent <[email protected]>
Update the cloud.gov kit registry and docs after verifying that the quickstart msb wildcard fix translates per-kit **.cloud.gov to allow@*.cloud.gov. This depends on GSA-TTS/agentic-coding-quickstart#451 for msb runtime support. Co-authored-by: OpenCode Agent <[email protected]>
Tighten CF token placeholder handling, use an msb-compatible cloud.gov wildcard, and update verification/docs to reflect the supported auth path. Co-authored-by: OpenCode Agent <[email protected]>
Accept synthetic msb-style backend placeholders while rejecting raw bearer/JWT-like token material before writing CF CLI auth state. Replace wildcard cloud.gov egress with exact control-plane and documentation hosts, and extend offline verification for placeholder and allow-list assumptions. Co-authored-by: OpenCode Agent <[email protected]>
c2b09db to
d16c1a8
Compare
|
AI-assisted re-review (OpenCode), advisory — needs a human to confirm before it drives a change. Reviewed head Two of three prior findings are resolved. The critical one is still open, and I can now show it end-to-end on current software. Resolved — the egress findings (my items 2 and 3 from the 2026-09-30 round)The wildcard is gone, replaced with exact hosts: # Exact cloud.gov control-plane and documentation hosts. Avoid wildcard
# semantics so sbx and msb translate the same least-privilege egress shape.
- api.fr.cloud.gov:443
- uaa.fr.cloud.gov:443
- login.fr.cloud.gov:443
- doppler.fr.cloud.gov:443
- log-cache.fr.cloud.gov:443
- cloud.gov:443
- www.cloud.gov:443
- docs.cloud.gov:443
…13 hosts, zero wildcardsThis resolves both prior findings at once rather than trading one for the other, which is what the single-character
The README's Backend Parity section also no longer carries the claim I measured as false ("sbx accepts it as a cloud.gov subdomain wildcard … including API, login/UAA"). The replacement text is accurate: "Both sbx and msb receive the same exact host list." One limit I want to be straight about: I could not re-verify the sbx side this round. Still open (critical) — the auth guard rejects the placeholder msb actually injectsThe guard now accepts two more shapes: acq_placeholder_?*|sbx-cs-?*|MSB_PLACEHOLDER?*|\<MSB_PLACEHOLDER*\>)msb does not emit either of them. Measured on msb 0.7.7 (my prior round was 0.7.4, so I re-measured rather than citing it): Unchanged from 0.7.4, and still what quickstart documents — Then I ran this PR's own
For completeness, the full pattern set against the real value and the shapes that do match: The pattern across three roundsEach round has fixed the specific string and left the method unchanged — the guard is written against an assumed placeholder shape and not checked against what the backend produces. That is now three different never-matching patterns ( Two ways out, and I'd suggest the second:
Either way the fix wants a test that asserts the guard against a measured placeholder rather than a literal in the test file, or round four is likely. Verification method, and one trap worth knowingLive msb sandbox ( A trap I hit: my first Sandbox removed after the measurement. NetThe egress work is done and done correctly — the enumerated-host approach is what both prior rounds were asking for, and the README is accurate now. The auth guard is still non-functional on msb, and it is the kit's central mechanism. I'd recommend Happy to verify a next pass the same way — live sandbox, in-guest, both backends once |
basiliskus
left a comment
There was a problem hiding this comment.
Verdict: request changes — 48b71a03582c43f3d0884b6b0764bf9810983a13
The prior auth-placeholder finding remains open. Current quickstart documents and implements the msb guest placeholder as literal $MSB_<env>, so this kit receives $MSB_CF_OAUTH_TOKEN. The startup guard at integrations/isolation/acq-kits/cloud-gov/files/home/cloud-gov-configure-cf-auth.sh:27 accepts MSB_PLACEHOLDER... forms instead, and the real msb shape falls through to the refusal at line 35. I reproduced that exact value against this script: it printed "not a recognized backend placeholder" and exited 1. Because this is a startup command and the kit declares msb support, a correctly provisioned msb sandbox cannot start with the documented secret binding.
Please accept the actual $MSB_... placeholder shape and cover $MSB_CF_OAUTH_TOKEN in the offline guard test, or move placeholder recognition to an authoritative backend-aware interface.
Minor: integrations/isolation/acq-kits/README.md:23 says the exact-host kit allows app-route domains, but the kit deliberately excludes app routes. Please make the catalog description match the implemented boundary.
Assisted-by: OpenCode [usai/gpt-5.6-sol-latest-guardrails-defaultv2] skill:change-review
Accept the documented msb guest-secret placeholder in the cloud.gov auth guard and cover it in offline verification. Align kit documentation with the implemented domain boundary. Co-authored-by: OpenCode Agent <[email protected]>
|
AI-assisted re-review (OpenCode), advisory — needs a human to confirm before it drives a change. Reviewed head The blocker is fixed. I can show it on the real value this time. Resolved — the guard now accepts what msb actually injects
Then I ran this PR's actual auth script, unmodified, inside that guest against that real value: Startup no longer aborts on msb. The negative half still holds, measured in the same guest: Removing the two tests that asserted Offline verifier, in a network-off container at this head:
Nit (non-blocking): the allow-list arm admits shell metacharacters
I chased this to a conclusion rather than flagging it on appearance, and it is not exploitable as written. The value is only ever compared in env CF_OAUTH_TOKEN= cf api https://api.fr.cloud.govI grepped the whole kit; no other code path consumes the variable. So this is defense-in-depth, not a defect. If you want it tighter, Nit: the new test asserts a shape msb does not emitMSB_PLACEHOLDER='$'MSB_SECRET_PLACEHOLDERmsb emits This is the same method that produced the first three rounds: the guard's positive arm is written against an assumed shape and the test encodes that assumption as a literal. It now matches reality, so it is no longer a blocker — but the structural point from my last round stands, and if a backend ever changes its placeholder format this breaks again silently. UNVERIFIED
Sandbox removed after measurement ( NetThe finding I raised three times is genuinely closed, verified against the real injected value rather than a literal. The egress work was already correct. All 7 checks pass at this head and the PR is mergeable. No blocking findings remain from me. The two nits above are optional and neither needs a new round. |
basiliskus
left a comment
There was a problem hiding this comment.
Verdict: approve — e2a3091b081eff1609f803f36d0bcb9b29611870
The prior startup blocker is resolved at integrations/isolation/acq-kits/cloud-gov/files/home/cloud-gov-configure-cf-auth.sh:28: the quoted case pattern matches the documented literal $MSB_<env> prefix. The replacement test at integrations/isolation/acq-kits/cloud-gov/scripts/verify:85 now exercises that real shape, while the bearer and JWT-like negative cases remain. Although the suffix accepts shell metacharacters, I found no evaluation or config-write path: the startup script only validates the value, and the documented/verification consumers pass its expansion inside a quoted HTTP-header argument.
The prior catalog issue is also resolved at integrations/isolation/acq-kits/README.md:23, which no longer advertises app-route access.
Assisted-by: OpenCode [usai/gpt-5.6-sol-latest-guardrails-defaultv2] skill:change-review
|
AI-assisted follow-up (OpenCode), advisory. New Blocker found after my previous comment cleared the auth guard. I had marked the sbx half UNVERIFIED for host reasons; that is now fixed on my side, and running the real path immediately surfaced something diff inspection did not.
MeasuredRead the ordering in that log: the zscaler cert is staged at create time, the cloud-gov install runs and fails, and the zscaler step that actually installs the CA into the trust store is only registered as a startup command — it has not run yet. CauseThe two kits disagree about phase:
url="https://github.com/cloudfoundry/cli/releases/download/v${CF_CLI_VERSION}/${asset}"
curl -fsSL "$url" -o "$work/cf-cli.tgz"On an intercepted network that chain terminates at the corporate root, which is not in the container trust store until the zscaler kit's This is the same trap the zscaler kit documents for itself, in its own README §"Why initFiles + startup, not files + install":
That kit solved its own ordering problem and recorded the reasoning in an ADR. cloud-gov then put a TLS fetch in the phase that runs first. ScopeI checked every kit with an cloud-gov is the only one. That is also why this has not been hit before. Why my offline verification missed it
Suggested fixes
I'd suggest 1. Option 2 trades a hard failure for a silent capability gap, which is the degraded-path shape worth avoiding. Unaffected by thisThe auth-guard fix I verified in my previous comment still stands — that was measured in an msb guest with no TLS fetch involved. The egress host list is also fine. This is specifically a create-time ordering defect on intercepted networks. Note on my own environment, for reproducibilityMy host also hit a Go 1.27 CA issue that is not related to this PR: golang/go#77865 made Sandboxes created for this measurement were removed ( |
Classify the legacy verifier, bypass acq's configured-kit prompt, and accept expected service-root HTTP responses. Co-authored-by: OpenCode Agent <[email protected]>
wz-gsa
left a comment
There was a problem hiding this comment.
Adversarial rereview of current head c625c0bcbe76b7b77a5ed4ecf3909e6a21626292: one create-time blocker remains. integrations/isolation/acq-kits/cloud-gov/spec.yaml runs the CF CLI HTTPS download during phase: install, while the companion CA kit installs the intercepting corporate CA during startup. On an intercepted host the TLS chain is not yet trusted; the existing live SBX reproduction in this PR recorded curl exit 60 and sandbox-create failure. This head still has the same phase ordering and curl -fsSL path. Please fix the ordering so CA trust is available before this fetch (or make the capability unavailable explicitly with a verified alternative), and add a regression covering create with the CA kit on an intercepted network. Offline kit validation and current-head required CI are green but do not run this live path. I did not execute PR code or credentials locally. AI-assisted static rereview (OpenCode); the earlier measured host evidence is cited as prior evidence, not a new live test. Re-review a corrected head before approval.
The CF CLI download ran in `phase: install` (create time), before the CA-trust kit's startup step trusted an intercepting proxy's CA. On sbx behind Zscaler, curl exited 60 and the whole sandbox create failed. - Run the fetch as a non-fatal, idempotent `phase: startup` command as the agent user, installing into ~/.local/bin, so it follows the CA kit in kit order. No root step executes the agent-writable script. - Allow release-assets.githubusercontent.com: github.com redirects the pinned release tarballs there. - verify: add ACQ_BACKEND=sbx|msb (passes --backend to acq, fails if the create log names a different backend), a fetch-ordering check, and CA_KIT for bundles with no CA kit. - Add an offline regression test that simulates an intercepted network (curl exits 60 until the CA is trusted), plus SHA-256 mismatch and non-fatal wrapper cases. - Docs: do not add a CA kit the bundle already has (sbx rejects duplicate kit names). Co-authored-by: OpenCode Agent <[email protected]>
wz-gsa
left a comment
There was a problem hiding this comment.
Fixed-head rereview of b40a3c4de32eff3aa87c5cd1fc7a76ec803736cd (full 11-file diff inspected; required checks pass). The prior TLS-order issue is addressed at the spec level: the CLI download moved from install to startup after the CA kit. Remaining changes needed: (1) integrations/isolation/acq-kits/cloud-gov/spec.yaml:69-90 swallows download failure and returns success, but its unconditional agent context says the sandbox has cf; state installation is attempted, require cf version before use, and do not treat successful sandbox startup as CLI readiness. (2) integrations/isolation/acq-kits/cloud-gov/files/home/cloud-gov-configure-cf-auth.sh:14-44 creates/chmods ~/.cf before checking the injected value. cloud-gov/README.md:112-117 overclaims that the prefix guard prevents raw-token exposure before writes; validate before side effects and describe prefix matching as a best-effort format check, not proof of backend substitution. (3) scripts/tests/test_cloud_gov_kit_ordering.py:79-97,119-140 stubs sha256sum to return the committed expected digest regardless of tarball bytes and writes a CA marker directly; these tests do not verify the production archive pin or composed CA-before-fetch startup. Use a real fixture-byte hash and changed-byte negative control, and either exercise ordered startup in a fixture or narrow the ADR/test claim pending the documented live SBX run. The installed binary remains agent-writable by design; do not claim post-install integrity. No PR code was run on the host. AI-assisted adversarial review (OpenCode); rereview the corrected head and live evidence.
…bx secret path Address review of b40a3c4. - agentContext/docs: the CF CLI install is best effort and non-fatal, so say it is attempted and require `cf version` before use; a started sandbox is not CLI readiness. - Auth script: check CF_OAUTH_TOKEN format before any filesystem change (no ~/.cf mkdir/chmod first). Docs call the prefix match a best-effort format check, not proof of backend substitution. - Tests: no sha256sum stub and no hand-written CA marker. Real fixture- byte SHA-256 with a changed-byte negative control; the zscaler kit's real startup command and the cloud-gov wrapper run in a fixture in both orders. Docs narrowed: tests do not prove acq orders startup commands, do not claim post-install integrity. Pinned digests re-checked by hand against the upstream v8.19.0 tarballs and GitHub's published digests. - verify: step 8 separates an expired token from a failed placeholder injection (host-token control after a 401/403, sandbox variable class never its value); a raw-token-shaped value fails even on a 2xx. - sbx: `acq secret set` cannot feed sbx's proxy for an arbitrary host (sbx set-custom takes no stdin), so the sandbox saw no CF_OAUTH_TOKEN. Docs and verify now give the sbx registration (`sbx secret set-custom ... --command`) and note its wider authority when not scoped with --sandbox. Co-authored-by: OpenCode Agent <[email protected]>
|
Corrected head
Live evidence on this head (sbx 0.50.1, behind Zscaler, One new finding from that work: on sbx, AI-assisted change (OpenCode). Please re-review the corrected head and the live evidence. |
wz-gsa
left a comment
There was a problem hiding this comment.
Fixed-head rereview at a652c13 against 7dd2ddc. Independent worker inspected the complete 11-file diff and prior reviews; I verified the findings in the current source. The previous readiness-claim, validation-before-writes, and sham hash/CA fixture findings are addressed.
Two P2 corrections remain:
- integrations/isolation/acq-kits/cloud-gov/scripts/verify:341-352: host_control claims it only obtains/sends a host token when cf targets cloud.gov, but cf api | grep -q uses an unanchored expression with wildcard dots. A suffix/lookalike endpoint can pass the check. Require the exact intended HTTPS API endpoint from successful, unambiguous target lookup; add exact/suffix/lookalike/failed-lookup fixtures proving rejected cases do not call cf oauth-token or transmit a token.
- scripts/verify:248-269 checks sbx credentials only when ACQ_BACKEND explicitly equals sbx. With the advertised default-backend mode, a correctly configured sbx user is checked against the unrelated acq store and receives the wrong setup instruction. Resolve/pin the effective backend before secret preconditions or explicitly require a backend for live verification. Test default-sbx, explicit-sbx and msb paths. The posted live run used explicit ACQ_BACKEND=sbx and does not establish the default case.
Also fix TROUBLESHOOTING.md:94, whose two trailing backslashes break the scoped-secret shell command continuation. Qualify README current-token-per-use claims where refresh behavior is unmeasured, and avoid diagnosing 401/403 solely as expiry/revocation; scope or authorization can also cause rejection.
Current head remains conflict-blocked with no check runs. Resolve source findings and conflicts, then obtain CI and rereview the new head. Author-reported 38/38 explicit-sbx live evidence is acknowledged, not independently rerun. AI-assisted static security/QA review; no PR code or credential operations executed on the host.
basiliskus
left a comment
There was a problem hiding this comment.
Verdict: request changes — a652c13c6fadacc59192d3cb4746d22ef9ca912e
Prior auth-placeholder, exact-egress, startup/readiness, validation-before-writes and fixture-hash/CA findings are resolved at this head. Remaining findings from the latest review are still present:
- Major —
integrations/isolation/acq-kits/cloud-gov/scripts/verify:248-269: UnsetACQ_BACKENDchecks the acq store even when create will use a persisted sbx default. Correctly registered sbx users fail before create and receive an ineffective acq setup instruction. Resolve/pin the effective backend before preconditions, or require an explicit backend for live verification. Synthetic stubs confirm unset invokesacq secret has, while explicit sbx invokessbx secret ls. - Minor —
integrations/isolation/acq-kits/cloud-gov/TROUBLESHOOTING.md:94: Replace the two trailing backslashes with one. The extracted scoped-secret snippet executes--commandseparately and exits 127 in a stub-only reproduction. - Minor —
integrations/isolation/acq-kits/cloud-gov/scripts/verify:405-406: Do not diagnose every rejected host control as expiry/revocation; authorization or scope can also produce rejection. Keep the diagnosis uncertain and align troubleshooting lines 58–61.
The host-control boundary finding also remains open; its evidence has been delivered privately rather than repeated here.
Validation gaps: Base 7dd2ddc034b6597e97f450fa716e7d47c9a38287; no current-head CI runs/statuses and GitHub reports merge conflicts. Offline checks passed 23 checks but skipped schema/ordering for unavailable Python dependencies. Shellcheck and unsafe-shell scan passed. Full tests, live sandbox/TLS/auth and upstream artifact checks were not run; the author's explicit-sbx live result does not establish default-backend behavior. Resolve conflicts, obtain CI, and re-review the corrected head.
Assisted-by: OpenCode [usai/gpt-6.1-sol-latest-guardrails-defaultv2] skill:change-review
…ndpoint - scripts/verify: send the host token only when `cf api` reports exactly https://api.fr.cloud.gov; reject lookalike, http, multiple and failed lookups. - scripts/verify: RUN_ACQ=1 requires ACQ_BACKEND=sbx|msb so the secret precondition is checked against the store of the backend that will run. - Refuse CLOUD_GOV_VERIFY_LIB_ONLY when executed rather than passing. - TROUBLESHOOTING: fix doubled backslash in the sbx scoped-secret command; do not diagnose every 401/403 as expiry. - README/ADR: qualify per-use token refresh as unmeasured. - Add stubbed tests for endpoint matching, backend preconditions and the executable bit. Co-authored-by: OpenCode Agent <[email protected]>
|
@wz-gsa @basiliskus: head Host-control boundary (wz-gsa P2-1, and the one basiliskus said was delivered privately)
Default-backend precondition (wz-gsa P2-2, basiliskus Major)
Docs
Also
Verification
Not verified
AI-assisted change (OpenCode); human review required before merge. |
Summary
Adds a new cloud.gov acq mixin kit for working with Cloud Foundry on cloud.gov.
The kit:
~/.local/bin) from pinned upstream release tarballs with committed SHA-256 checks. The step is best effort: it is non-fatal and idempotent, so a started sandbox does not guaranteecfis present (agents are told to runcf versionfirst);CF_OAUTH_TOKENvalue (known placeholder prefixes, no bearer/JWT shape) before any filesystem change. This is a best-effort check, not proof of backend substitution;Context
This supports cloud.gov application work from isolated acq sandboxes while keeping the Cloud Foundry token out of the kit and the workspace.
Why the CF CLI fetch runs at startup
The download is HTTPS. On a TLS-intercepting network (Zscaler) the CA-trust kit installs its CA in a
startupstep. Aphase: installfetch runs at create time, before that, so on sbxcurlexited 60 and the whole sandbox create failed. The fetch is now astartupcommand, which runs afterzscaler-ca-certificatein kit order (the global bundle lists it first; this rests on acq's documented ordering plus the live sbx check below, and the offline tests do not prove it). Seeintegrations/isolation/acq-kits/cloud-gov/docs/decisions/cloud-gov-cli-and-auth.md.Token binding differs by backend
cf oauth-token | acq secret set -g cloud-gov --host api.fr.cloud.gov --env CF_OAUTH_TOKEN.sbx secret set-customtakes no stdin, so acq stores the value but sbx's proxy never receives it and the sandbox sees noCF_OAUTH_TOKEN. Register it with sbx directly:sbx secret set-custom --host api.fr.cloud.gov --env CF_OAUTH_TOKEN --command "$(command -v cf) oauth-token".An earlier 401 in the authenticated probe was initially read as an expired token; it was in fact this missing sbx binding.
Verification
Offline:
make validate,make validate-kits, full pytest suite (749 passed),ruff,bash -n/sh -n, andscripts/scan_unsafe_shell.pyon the kit pass.scripts/verifyoffline: 25 passed, 0 failed.scripts/tests/test_cloud_gov_kit_ordering.pyuses nosha256sumstub and no hand-written CA marker: real fixture-byte SHA-256 with a changed-byte negative control; the zscaler kit's real startup command and the cloud-gov wrapper run in a fixture in both orders against acurlstub that exits 60 until the fixture trust bundle is rebuilt; the auth script is checked to make no filesystem change before validation. It does not prove acq orders startup commands, and does not claim post-install integrity (~/.local/bin/cfis agent-writable).linux_x86-64andlinux_arm64tarballs match the committed pins and GitHub's published digests.Live, sbx 0.50.1, behind Zscaler (
github.comis split-tunneled, but the*.githubusercontent.comrelease redirect hosts are intercepted):c625c0b:acq createfailed. The install-phase script exited 60 (unable to get local issuer certificate), thenfailed to apply kit to sandbox.RUN_ACQ=1 ACQ_BACKEND=sbx scripts/verifycreated the sandbox onacq(sbx),cf versionreported 8.19.0, all 10 cloud.gov/docs reachability checks passed, and the authenticated probe returned 200 with a placeholder-classCF_OAUTH_TOKEN(38 passed, 0 failed).--trust-host-cas). The authenticated path on msb was seen working during development but not re-run on this head.--commandsource failed on sbx 0.48.0 (verify command failed, cause not determined) and worked on 0.50.1.Security Impact
api.fr.cloud.gov,uaa.fr.cloud.gov,login.fr.cloud.gov,doppler.fr.cloud.gov,log-cache.fr.cloud.gov,cloud.gov,www.cloud.gov,docs.cloud.gov,docs.cloudfoundry.org,cli.cloudfoundry.org,github.com,objects.githubusercontent.com, andrelease-assets.githubusercontent.com(github.com redirects the pinned tarballs there). App routes and custom domains stay project-specific.~/.local/bin, so no root step executes an agent-writable script. The agent can replace that binary; the SHA-256 check covers the download only.--commandbinding authority: unless scoped with--sandbox <name>, the sbx custom secret is global. While the hostcfsession is valid, any sandbox's request toapi.fr.cloud.govis authorized as the user with a currently resolved token, a wider and longer-lived grant than a pasted short-lived token. The docs recommend--sandboxscoping and removing the secret when done. Docker marks sbx custom secrets experimental.Rollback
Revert this PR to remove the cloud-gov kit, registry entry, and Markdown Lint toolchain update.
AI Assistance
This PR was generated with assistance from OpenCode, an AI coding agent. Human review is required before merge.