feat: declare the ssm value provider #1053
No reviewers
Labels
No labels
burndown-2026-06
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agentic-os!1053
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/declare-ssm-provider"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
umbra v0.139.0 stopped shipping store-backed resolvers:
env,fileandliteralare built in, anything else is declared by the consumer as an exec contract (umbra#286, closing umbra#283). aosguard namesssmin two guardfiles, so it declares it.The address is appended as the final argument, so this resolves
value ssm "/forgejo/coilyco-ops/api-token"by running the same GetParameter the generated code used to make throughaws-sdk-go-v2. Only stdout is read, so the token never reaches argv or the audit row.The aws CLI is already installed in dev-base (
install-common.sh), which is what this depends on instead of a linked SDK.What changes
.specgen/guardfiles/aosguard/forgejo.kdlprovider ssm.specgen/guardfiles/aosguard/actions.kdlprovider ssm.specgen/guardfiles/specverb.lockdocker/dev-base/full/DockerfileSPECGEN_VERSION0.138.0 -> 0.139.0The driver bump rides along because the driver and the lock have to agree on the framework version.
Verified end to end, not just at build
ops aws s3 ls s3://prod-tfstate-bucketonarg0matching*tfstate*test_check_yaml_strict.pyskipped:ruamelmissing in this environment, unrelated)ops forgejo repo get coilyco-flight-deck umbraauthenticates successfully - the bot token resolving through the declared provider rather than a linked SDK. That is the whole chain: guardfile -> exec provider -> aws CLI -> SSM -> Forgejo API.One behaviour change worth naming
Credential resolution is now the aws CLI's rather than the SDK's, so the old
~/.aws/credentialsSSO-shadow retry is gone. If a stale static key ever shadows an SSO profile again, it surfaces as an aws CLI error instead of a silent fallback. That trade was made deliberately in umbra#286 to keep vendor knowledge out of a policy-free engine.umbra v0.139.0 stopped shipping store-backed resolvers: env, file and literal are built in, anything else is declared by the consumer as an exec contract (umbra#286, closes umbra#283). aosguard names `ssm` in two guardfiles, so it declares it. provider ssm { exec aws ssm get-parameter --with-decryption --output text \ --query "Parameter.Value" --name } The address is appended as the final argument, so this resolves `value ssm "/forgejo/coilyco-ops/api-token"` by running the same GetParameter the generated code used to make through aws-sdk-go-v2. Only stdout is read, so the token never reaches argv or the audit row. The aws CLI is already installed in dev-base (install-common.sh), which is what this now depends on instead of a linked SDK. Dropping the SDK removes 42 aws-sdk entries from the frozen dependency graph; the lock now pins umbra v0.139.0 with none. SPECGEN_VERSION follows to 0.139.0, since the driver and the lock have to agree. Verified end to end, not just at build: aosguard builds, the aws guardfile still denies `s3 ls s3://prod-tfstate-bucket` on arg0, 509 tests pass, and a live `ops forgejo repo get` authenticates - the token resolving through the declared provider rather than a linked SDK. One behaviour change worth naming: credential resolution is now the aws CLI's rather than the SDK's, so the old ~/.aws/credentials SSO-shadow retry is gone. If a stale static key ever shadows an SSO profile again, it surfaces as an aws CLI error instead of a silent fallback. Co-authored-by: Kai Siren <coilysiren@gmail.com> Co-authored-by: Claude <noreply@anthropic.com>Closing as already landed.
All four files this touches are byte-identical between
mainand this branch's head:.specgen/guardfiles/aosguard/actions.kdl-mainalready has theprovider ssmblock.specgen/guardfiles/aosguard/forgejo.kdl- same.specgen/guardfiles/specverb.lock-mainis oncliGuard v0.139.0with zeroaws-sdk-go-v2lines remainingdocker/dev-base/full/Dockerfile-mainalready pinsSPECGEN_VERSION=0.139.0Forgejo reports this as mergeable because the merge base is stale, not because there is anything to apply. The merge would be a no-op.
Branch left in place, so this is reopenable.