Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 272e4eb776 | |||
| 9c06702b32 | |||
| cd0983d943 | |||
| 99176b1edf |
@@ -252,6 +252,23 @@ cat > "$refs_file"
|
||||
|
||||
zero=0000000000000000000000000000000000000000
|
||||
|
||||
# AGit creates pull requests by pushing to refs/for/* (with refs/draft/*
|
||||
# and refs/for-review/* aliases). Those server-owned review refs are not
|
||||
# ordinary repository branches and leave the resulting PR without a
|
||||
# branch that the bottle can update later. Require the normal
|
||||
# push-branch-then-open-PR workflow instead. Deletion remains allowed so
|
||||
# operators can clean up refs created before this guard existed.
|
||||
while IFS=' ' read -r old new ref; do
|
||||
[ -z "$ref" ] && continue
|
||||
[ "$new" = "$zero" ] && continue
|
||||
case "$ref" in
|
||||
refs/for/*|refs/draft/*|refs/for-review/*)
|
||||
echo "git-gate: AGit review refs are disabled; push to refs/heads/<branch> and open the pull request from that branch" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done < "$refs_file"
|
||||
|
||||
supervise_gitleaks_allow() {
|
||||
log_opts=$1
|
||||
ref=$2
|
||||
|
||||
@@ -17,7 +17,7 @@ Each queued proposal tool call:
|
||||
4. On a decision within the window, returns the operator's
|
||||
`{status, notes}`. On timeout, returns `status: pending` **with the
|
||||
proposal id** and leaves the proposal queued — the flow is
|
||||
non-blocking past the grace window (PRD prd-new / issue #412).
|
||||
non-blocking past the grace window (PRD 0072 / issue #412).
|
||||
|
||||
`check-proposal` is the non-blocking companion: given a `proposal_id`
|
||||
returned by a `pending` response, it reports the current decision
|
||||
|
||||
@@ -17,7 +17,7 @@ instead would defeat that — the orchestrator holds that key, so it could forge
|
||||
`ControlPlaneProvisioning` is the one seam every backend launcher uses to get the
|
||||
orchestrator its key and the gateway its token, instead of re-deriving that
|
||||
wiring per backend (the bug class behind PR #471 — see
|
||||
`docs/prds/prd-new-control-plane-auth-provisioning.md`).
|
||||
`docs/prds/0079-control-plane-auth-provisioning.md`).
|
||||
|
||||
Stdlib-only: the HMAC lives in `orchestrator_auth`, the key file in `paths`.
|
||||
"""
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
# PRD 0001: Per-agent egress proxy via pipelock
|
||||
|
||||
- **Status:** Active
|
||||
- **Status:** Superseded by [PRD 0017](0017-egress-proxy-via-mitmproxy.md)
|
||||
and [PRD 0052](0052-egress-dlp-addon.md)
|
||||
- **Author:** didericis
|
||||
- **Created:** 2026-05-08
|
||||
|
||||
> **Superseded.** Pipelock was removed in issue #193. PRD 0017 moved
|
||||
> egress enforcement and credential injection to mitmproxy; PRD 0052 moved DLP
|
||||
> enforcement into the egress addon. The design below is retained as history.
|
||||
|
||||
## Summary
|
||||
|
||||
Run pipelock as a sidecar container on each bot-bottle agent's only
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
# PRD 0006: pipelock native TLS interception
|
||||
|
||||
- **Status:** Active
|
||||
- **Status:** Superseded by [PRD 0017](0017-egress-proxy-via-mitmproxy.md)
|
||||
and [PRD 0052](0052-egress-dlp-addon.md)
|
||||
- **Author:** didericis
|
||||
- **Created:** 2026-05-12
|
||||
|
||||
> **Superseded.** Pipelock was removed in issue #193. TLS interception now
|
||||
> belongs to the mitmproxy egress design in PRD 0017, with DLP implemented by
|
||||
> the egress addon in PRD 0052. The design below is retained as history.
|
||||
|
||||
## Summary
|
||||
|
||||
Turn on pipelock's built-in `tls_interception` so its DLP / URL /
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
# PRD 0015: pipelock block remediation
|
||||
|
||||
- **Status:** Active
|
||||
- **Status:** Superseded by [PRD 0017](0017-egress-proxy-via-mitmproxy.md)
|
||||
and [PRD 0052](0052-egress-dlp-addon.md)
|
||||
- **Author:** didericis
|
||||
- **Created:** 2026-05-25
|
||||
- **Parent:** PRD 0012
|
||||
- **Depends on:** PRD 0013
|
||||
|
||||
> **Superseded.** Pipelock and its restart-based allowlist remediation path
|
||||
> were removed in issue #193. Current egress enforcement is the mitmproxy
|
||||
> design from PRD 0017 with DLP in PRD 0052. The design below is retained as
|
||||
> history.
|
||||
|
||||
## Summary
|
||||
|
||||
Wires the **pipelock block** path (PRD 0012 *Stuck categories*) end-to-end. The supervisor, on approval of a `pipelock-block` proposal, writes the new pipelock allowlist to the host and restarts pipelock; the agent's in-flight outbound calls may drop and rely on retry. The TUI gains a proactive `pipelock edit <bottle>` verb for operator-initiated edits unrelated to a tool call. The pipelock audit log (format defined in PRD 0013) is filled in with real entries on every edit.
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
# PRD 0024: Consolidate per-bottle sidecars into a single bundle
|
||||
|
||||
- **Status:** Active
|
||||
- **Status:** Superseded by [PRD 0070](0070-per-host-orchestrator.md)
|
||||
- **Author:** didericis
|
||||
- **Created:** 2026-05-26
|
||||
|
||||
> **Superseded.** PRD 0070 replaced the per-bottle sidecar bundle with a
|
||||
> persistent per-host gateway and separate orchestrator control plane. The
|
||||
> design below is retained as history.
|
||||
|
||||
## Summary
|
||||
|
||||
Replace the four per-bottle sidecar containers in the Docker
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
# PRD 0037: Pipelock YAML Render Contract
|
||||
|
||||
- **Status:** Active
|
||||
- **Status:** Superseded by [PRD 0017](0017-egress-proxy-via-mitmproxy.md)
|
||||
and [PRD 0052](0052-egress-dlp-addon.md)
|
||||
- **Author:** didericis-codex
|
||||
- **Created:** 2026-06-02
|
||||
- **Issue:** #130
|
||||
|
||||
> **Superseded.** Pipelock and its YAML renderer were removed in issue #193.
|
||||
> Current egress configuration is consumed by the mitmproxy design from PRD
|
||||
> 0017 and its DLP addon from PRD 0052. The contract below is retained as
|
||||
> history.
|
||||
|
||||
## Summary
|
||||
|
||||
Lock down the contract between `pipelock_build_config` and
|
||||
|
||||
@@ -1,10 +1,17 @@
|
||||
# PRD 0067: SQLite local storage
|
||||
|
||||
- **Status:** Active
|
||||
- **Status:** Retargeted by [PRD 0070](0070-per-host-orchestrator.md) and
|
||||
issues #469/#471
|
||||
- **Author:** codex
|
||||
- **Created:** 2026-07-01
|
||||
- **Issue:** #319
|
||||
|
||||
> **Retargeted.** The SQLite storage and migration foundation remains in use,
|
||||
> but the writable data-plane database mount described below is no longer the
|
||||
> active ownership model. Issues #469/#471 removed `bot-bottle.db` from the
|
||||
> data plane; under PRD 0070 only the orchestrator control plane opens the
|
||||
> operational database, and gateway components reach state through RPC.
|
||||
|
||||
## Summary
|
||||
|
||||
Add a small stdlib SQLite storage layer for bot-bottle host runtime state,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# PRD 0069: Firecracker-native, Docker-free backend
|
||||
|
||||
- **Status:** Draft (partially superseded)
|
||||
- **Status:** Retargeted by [PRD 0070](0070-per-host-orchestrator.md)
|
||||
- **Author:** Claude
|
||||
- **Created:** 2026-07-12
|
||||
- **Issue:** #348
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# PRD 0070: Per-host orchestrator service
|
||||
|
||||
- **Status:** Draft
|
||||
- **Status:** Active
|
||||
- **Author:** Claude
|
||||
- **Created:** 2026-07-12
|
||||
- **Issue:** #351
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# PRD prd-new: Claude forward_host_credentials
|
||||
# PRD 0071: Claude forward_host_credentials
|
||||
|
||||
- **Status:** Draft
|
||||
- **Status:** Active
|
||||
- **Author:** claude
|
||||
- **Created:** 2026-07-01
|
||||
- **Issue:** #325
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# PRD prd-new: Non-blocking supervise (async approval + proposal polling)
|
||||
# PRD 0072: Non-blocking supervise (async approval + proposal polling)
|
||||
|
||||
- **Status:** Draft
|
||||
- **Status:** Active
|
||||
- **Author:** didericis
|
||||
- **Created:** 2026-07-18
|
||||
- **Issue:** #412
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# PRD prd-new: Consolidate infra backend for Docker
|
||||
# PRD 0073: Consolidate infra backend for Docker
|
||||
|
||||
- **Status:** Active
|
||||
- **Author:** Claude
|
||||
@@ -1,4 +1,4 @@
|
||||
# PRD prd-new: CI artifact-based coverage and local Firecracker candidate flow
|
||||
# PRD 0074: CI artifact-based coverage and local Firecracker candidate flow
|
||||
|
||||
- **Status:** Active
|
||||
- **Author:** Claude
|
||||
@@ -1,6 +1,6 @@
|
||||
# PRD prd-new: Containers inside a bottle
|
||||
# PRD 0075: Containers inside a bottle
|
||||
|
||||
- **Status:** Draft
|
||||
- **Status:** Active
|
||||
- **Author:** Claude
|
||||
- **Created:** 2026-07-21
|
||||
- **Issue:** #392
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# PRD prd-new: Modernize built-in agent images
|
||||
# PRD 0076: Modernize built-in agent images
|
||||
|
||||
- **Status:** Draft
|
||||
- **Status:** Active
|
||||
- **Author:** Codex
|
||||
- **Created:** 2026-07-21
|
||||
- **Issue:** #451
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# PRD prd-new: macOS (Apple Container) CI runner
|
||||
# PRD 0077: macOS (Apple Container) CI runner
|
||||
|
||||
- **Status:** Draft
|
||||
- **Status:** Active
|
||||
- **Author:** Claude
|
||||
- **Created:** 2026-07-25
|
||||
- **Issue:** #426
|
||||
@@ -1,6 +1,6 @@
|
||||
# PRD prd-new: Quick install script
|
||||
# PRD 0078: Quick install script
|
||||
|
||||
- **Status:** Draft
|
||||
- **Status:** Active
|
||||
- **Author:** claude
|
||||
- **Created:** 2026-07-25
|
||||
- **Issue:** #197
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# PRD prd-new: Per-service signing keys for control-plane auth
|
||||
# PRD 0079: Per-service signing keys for control-plane auth
|
||||
|
||||
- **Status:** Draft
|
||||
- **Status:** Active
|
||||
- **Author:** claude
|
||||
- **Created:** 2026-07-26
|
||||
- **Issue:** #476
|
||||
@@ -4,7 +4,7 @@ Spike branch: `spike/rootless-docker-macos` (`a4d8461`)
|
||||
|
||||
**Outcome:** the podman recommendation below shipped as the
|
||||
`nested_containers` bottle flag — see
|
||||
[`docs/prds/prd-new-nested-containers.md`](../prds/prd-new-nested-containers.md).
|
||||
[`docs/prds/0075-nested-containers.md`](../prds/0075-nested-containers.md).
|
||||
The `docker_access` name used throughout the spike text was renamed on the
|
||||
way in; it granted no access to anything on the host.
|
||||
|
||||
|
||||
@@ -181,6 +181,21 @@ class TestHookRender(unittest.TestCase):
|
||||
self.assertNotIn('log_opts="$new"', hook)
|
||||
self.assertNotIn('log_opts="$old..$new"', hook)
|
||||
|
||||
def test_agit_review_refs_are_rejected_before_scanning(self):
|
||||
hook = git_gate_render_hook()
|
||||
guard = "refs/for/*|refs/draft/*|refs/for-review/*"
|
||||
self.assertIn(guard, hook)
|
||||
self.assertIn(
|
||||
"AGit review refs are disabled; push to refs/heads/<branch>",
|
||||
hook,
|
||||
)
|
||||
self.assertLess(hook.index(guard), hook.index("# Phase 1: gitleaks"))
|
||||
# Ref deletion must remain possible for cleanup.
|
||||
self.assertLess(
|
||||
hook.index('[ "$new" = "$zero" ] && continue'),
|
||||
hook.index(guard),
|
||||
)
|
||||
|
||||
def test_forward_ssh_is_non_interactive_and_bounded(self):
|
||||
# No prompt (BatchMode) and a connect timeout, so an unreachable
|
||||
# upstream fails fast instead of hanging the receive-pack.
|
||||
|
||||
@@ -728,7 +728,7 @@ class TestResolvedRoutesPayload(unittest.TestCase):
|
||||
|
||||
|
||||
class TestNonBlockingSupervise(unittest.TestCase):
|
||||
"""PRD prd-new / issue #412: pending responses carry the proposal id, and
|
||||
"""PRD 0072 / issue #412: pending responses carry the proposal id, and
|
||||
`check-proposal` polls a queued proposal without blocking or re-proposing."""
|
||||
|
||||
_ROUTES = "routes:\n - host: example.com\n"
|
||||
|
||||
Reference in New Issue
Block a user