WIP: feat(manifest): git-gate.signing opt-in (PRD chunk 2) #485
Draft
didericis-claude
wants to merge 1 commits from
signed-commits-manifest into prd-forge-subroles
pull from: signed-commits-manifest
merge into: didericis:prd-forge-subroles
didericis:main
didericis:fix/reproducible-build-inputs-499
didericis:host-control-server-2-secret
didericis:host-control-server-1-transport
didericis:prd-new-host-control-server
didericis:prd-egress-control-plane
didericis:prd-forge-subroles
didericis:prd-macos-container-ci-runner
didericis:refactor/control-plane-auth-provisioning-476
didericis:fix/db-off-data-plane-469
didericis:feat/encrypted-egress-secrets
didericis:spike/rootless-docker-macos
didericis:fix/ci-coverage-artifact-paths
didericis:claude-forward-host-credentials-rebased
didericis:fix-gateway-gitleaks-arch
didericis:fix/websocket-response-dlp-multitenant
didericis:orchestrator-agent-compose
didericis:orchestrator-gateway-ca
didericis:orchestrator-consolidated-launch
didericis:orchestrator-gateway-provision
didericis:orchestrator-gateway-network
didericis:orchestrator-client
didericis:orchestrator-gateway-net
didericis:orchestrator-gitgate-provision
didericis:orchestrator-registration
didericis:orchestrator-lifecycle
didericis:orchestrator-supervise-writers
didericis:orchestrator-supervise-multitenant
didericis:orchestrator-gitgate-multitenant
didericis:orchestrator-rename-gateway
didericis:orchestrator-slice8
didericis:orchestrator-slice7
didericis:orchestrator-slice6
didericis:prd-orchestrator
didericis:orchestrator-slice5
didericis:orchestrator-slice4
didericis:orchestrator-slice3
didericis:orchestrator-slice2
didericis:firecracker-backend
didericis:forge-native-integration
didericis:prd-smolmachines-linux
didericis:manifest-break-import-cycle
didericis:dlp-supervise-quality-fixes
didericis:table-drive-dlp-tests
didericis:fix-integration-test-failures
didericis:fix/macos-container-relative-dockerfile
didericis:prd-0054-install-script
didericis:commit-bottle-state
didericis:pr-211
didericis:move-codex-auth-to-contrib
didericis:feat/pipelock-skip-scan-extensions
didericis:prd-0049-named-labelled-agents
didericis:harden-git-gate-shell-rendering
No Reviewers
Labels
Clear labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Status/Needs Triage
Breaking change that won't be backward compatible
Something is not working
Documentation changes
Improve existing functionality
New functionality
This is security issue
Issue or pull request related to testing
Priority
Critical
1
The priority is critical
Priority
High
2
The priority is high
Priority
Low
4
The priority is low
Priority
Medium
3
The priority is medium
Status
Abandoned
3
Somebody has started to work on this but abandoned work
Status
Blocked
1
Something is blocking this issue or pull request
Status
Need More Info
2
Feedback is required to reproduce issue or to continue work
Awaiting initial classification
No Label
Milestone
No items
No Milestone
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: didericis/bot-bottle#485
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "signed-commits-manifest"
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?
Stacked on #480 (base branch
prd-forge-subroles). First implementation chunk of the signed-commits & audit-attribution PRD.What this lands (PRD chunk 2 — manifest surface)
A bottle opts into per-activation commit signing:
ManifestGitSigningvalue type (frozen;enabled: bool = False), parsed undergit-gate.signing. Unknown sub-keys and a non-boolenableddie with targeted errors.parse_git_gate_confignow returns(repos, user, signing).ManifestBottlegainsgit_signing; defaults to off, so bottles that omit the block are byte-for-byte unchanged.git-gate.signingon an agent is rejected by the existing agent-level non-userguard (same asgit-gate.repos).extends/runtime merges threadgit_signingwith an enable-wins overlay (a child enabling signing wins; omitting inherits the parent), mirroring thegit_usernon-empty-wins overlay.ManifestGitSigning.Tests
tests/unit/test_manifest_git_signing.py— parse (default off, enabled true/false, coexists with user+repos), validation (unknown sub-key, non-bool, non-mapping, allowed-key error namessigning), agent-level rejection, and extends overlay (inherit + enable-over-parent). Full unit suite green locally (pyright/pylint are CI dev-deps, not run here).Scope / what's next
This is the first stacked chunk. Deliberately just the manifest surface — nothing consumes
git_signingyet, so it is inert until the following chunks land (each as a further stacked PR per the PRD's ordered/mergeable steps):SSH_AUTH_SOCK, emitcommit.gpgsign/gpg.format=ssh/user.signingkeyacross the four backends.bottled_agent_activation/attributed_commitaudit tables.Happy to continue straight into chunk 3, or hold for review of this surface first.
🤖 Generated with Claude Code
@didericis-claude pause on this until the host controller and the audit event log gets implemented
Paused. Marked this WIP so it won't merge ahead of its dependencies.
Parking it rather than closing: the manifest surface here (
git-gate.signing) is inert and shouldn't drift, but it may want to shift to line up with whatever shape the host controller and audit event log land with — so I'll rebase/adjust it once those exist rather than lock it in now.Blocked on:
bottled_agent_activation/attributed_commitwrites are its responsibility.I'll hold all remaining chunks (3 signing pipeline, 4 gate signature check, 5 control-plane verification + audit, 6 docs) until both are in, then pick this back up. Ping me when they're ready.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.