feat(shell): converge git signing and the ssm-get wrapper #960
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/infrastructure!960
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/pp94-gpgsign"
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?
The fleet-rollout half of
agentic-os#1137, plus the decisions onagentic-os#1307andagentic-os#1308. The authoring half landed inagentic-os#1306andagentic-os#1314.Why the role should own these settings
gpg.programwas unmanaged, so it was wired by hand, and hands wired it from inside native agent sessions.$HOMEthere is a temporary root that mirrors the real home, so the path recorded is purged while the setting outlives it. On kais-macbook-pro the value named a session root from 2026-08-06. Signing was dead for months and silent about it, becausecommit.gpgsignwas off so nothing ever invoked the missing program.The role now spells the value from
ansible_facts['env'].HOME, which is the durable host home, so convergence cannot reproduce the defect the way a hand-rungit config --globalfrom a session does.Nice confirmation of the diagnosis:
just ansible-syncalready refuses to run inside a session shadow, and its refusal names this exact failure mode. This change puts the same reasoning behind the setting the shadow guard could not reach.What changed
gpg.programat~/.local/bin/gpg-ssm, orgpg-ssm.cmdoff Windows, viacommunity.general.git_config.commit.gpgsigntrue offhostclass_server, so workstations sign and the server class does not (agentic-os#1307, Kai's call). Container and CI seats see neither setting and stay unsigned by design.ssm-getjoins the symlinked wrappers, now that agentic-os ships it asscripts/ssm-getrather than a shell function (agentic-os#1308).docs/ansible-guardrails.mdgains agit signingsection carrying the reasoning and the per-host verification.docs/ansible-host-roles.mdanddocs/FEATURES.mdpoint at it.Verification
just ansible-lint- 0 failures, 0 warnings, production profileuv run pre-commit run --all-files- cleanansible-doc community.general.git_configconfirms thename/scope/valuespellingNot verified here, and worth naming:
just ansible-sync check tags=shellrefuses to run from a session shadow, so the converge itself has not been exercised. Running it from a terminal outside an agent session is the remaining step, and the per-host check isgit log -1 --format='%G? %GK'on a fresh commit returningGplus the shared keyid.kais-macbook-pro is already in the target state by hand, and the commits in this PR are signed through that path.