Document v0.3 Mock acceptance and enforce local release gates
This commit is contained in:
@@ -30,4 +30,4 @@ go build -trimpath -buildvcs=false -o "$tmp/sip-go-agent" ./cmd/sip-go-agent
|
||||
|
||||
./scripts/mq-integration-local.sh
|
||||
|
||||
echo "P1 local F09 checks passed (business-module coverage only; see docs/evidence/f09-local-acceptance-v0.2.md); external SaaS/management, cloud, supplier, SIP, F06 deployment, and production acceptance remain unverified"
|
||||
echo "P1 local F09 v0.3 checks passed (business-module coverage only; see docs/evidence/f09-local-acceptance-v0.3.md); external SaaS/management, tombstone capacity, cloud, supplier, SIP, deployment, and production acceptance remain unverified"
|
||||
|
||||
@@ -56,10 +56,10 @@ def project_sha256(path):
|
||||
return hashlib.sha256((project / path).read_bytes()).hexdigest()
|
||||
|
||||
v01 = json.loads((project / "docs/contracts/local-contract-manifest-v0.1.json").read_text())
|
||||
v02 = json.loads((project / "docs/contracts/local-contract-manifest-v0.2.json").read_text())
|
||||
v03 = json.loads((project / "docs/contracts/local-contract-manifest-v0.3.json").read_text())
|
||||
topology = json.loads((project / "docs/contracts/mq-topology-v0.1-proposal.json").read_text())
|
||||
if (v01["manifest_version"], v02["manifest_version"], topology["contract_version"]) != (
|
||||
"local-contract-manifest.v0.1", "local-contract-manifest.v0.2", "project-saas-dispatcher.v0.1"
|
||||
if (v01["manifest_version"], v03["manifest_version"], topology["contract_version"]) != (
|
||||
"local-contract-manifest.v0.1", "local-contract-manifest.v0.3", "project-saas-dispatcher.v0.1"
|
||||
):
|
||||
raise SystemExit("unexpected project-local contract or queue topology version")
|
||||
|
||||
@@ -81,8 +81,8 @@ manifest = {
|
||||
"manifest_sha256": project_sha256("docs/contracts/local-contract-manifest-v0.1.json"),
|
||||
},
|
||||
"task_discovery": {
|
||||
"version": v02["manifest_version"],
|
||||
"manifest_sha256": project_sha256("docs/contracts/local-contract-manifest-v0.2.json"),
|
||||
"version": v03["manifest_version"],
|
||||
"manifest_sha256": project_sha256("docs/contracts/local-contract-manifest-v0.3.json"),
|
||||
},
|
||||
"mq_topology": {
|
||||
"version": topology["contract_version"],
|
||||
|
||||
@@ -61,13 +61,13 @@ assert manifest["binary"]["sha256"] == hashlib.sha256((release / "sip-go-agent")
|
||||
assert manifest["go_version"].startswith("go version go1.27.1 ")
|
||||
|
||||
v01 = json.loads((root / "docs/contracts/local-contract-manifest-v0.1.json").read_text())
|
||||
v02 = json.loads((root / "docs/contracts/local-contract-manifest-v0.2.json").read_text())
|
||||
v03 = json.loads((root / "docs/contracts/local-contract-manifest-v0.3.json").read_text())
|
||||
topology = json.loads((root / "docs/contracts/mq-topology-v0.1-proposal.json").read_text())
|
||||
assert v01["manifest_version"] == "local-contract-manifest.v0.1"
|
||||
assert v02["manifest_version"] == "local-contract-manifest.v0.2"
|
||||
assert v02["source"]["path"] == "docs/thirds/v0.2.md"
|
||||
assert "docs/contracts/task-discovery-v0.2-proposal.schema.json" in {item["path"] for item in v02["artifacts"]}
|
||||
assert all("task-discovery-v0.1" not in item["path"] for item in v02["artifacts"])
|
||||
assert v03["manifest_version"] == "local-contract-manifest.v0.3"
|
||||
assert v03["source"]["path"] == "docs/thirds/v0.3.md"
|
||||
assert "docs/contracts/task-discovery-v0.3-proposal.schema.json" in {item["path"] for item in v03["artifacts"]}
|
||||
assert all("task-discovery-v0.2" not in item["path"] for item in v03["artifacts"])
|
||||
assert topology["contract_version"] == "project-saas-dispatcher.v0.1"
|
||||
assert all(topology["queues"][kind]["owner"] == "saas" for kind in ("task", "control", "result"))
|
||||
assert all(topology["queues"][kind]["queue_name"].endswith(".v3") for kind in ("task", "control", "result"))
|
||||
@@ -77,8 +77,8 @@ expected_attestation = {
|
||||
"manifest_sha256": hashlib.sha256((root / "docs/contracts/local-contract-manifest-v0.1.json").read_bytes()).hexdigest(),
|
||||
},
|
||||
"task_discovery": {
|
||||
"version": v02["manifest_version"],
|
||||
"manifest_sha256": hashlib.sha256((root / "docs/contracts/local-contract-manifest-v0.2.json").read_bytes()).hexdigest(),
|
||||
"version": v03["manifest_version"],
|
||||
"manifest_sha256": hashlib.sha256((root / "docs/contracts/local-contract-manifest-v0.3.json").read_bytes()).hexdigest(),
|
||||
},
|
||||
"mq_topology": {
|
||||
"version": topology["contract_version"],
|
||||
@@ -88,7 +88,7 @@ expected_attestation = {
|
||||
}
|
||||
assert manifest["contract_attestation"] == expected_attestation
|
||||
print("local artifact SHA-256:", manifest["binary"]["sha256"])
|
||||
print("task discovery source SHA-256:", v02["source"]["sha256"])
|
||||
print("task discovery source SHA-256:", v03["source"]["sha256"])
|
||||
print("source dirty:", manifest["source_dirty"])
|
||||
print("production approved:", manifest["security"]["production_approval"])
|
||||
PY
|
||||
@@ -97,6 +97,20 @@ if "$WORK/release/sip-go-agent" dispatcher --help | grep -Eq -- '--tenant-key|--
|
||||
echo 'release exposes deprecated Dispatcher queue/tenant switches' >&2
|
||||
exit 1
|
||||
fi
|
||||
for mode in mixed real; do
|
||||
blocked_db="$WORK/blocked-$mode.sqlite"
|
||||
if SIP_GO_AGENT_MODE="$mode" DISPATCHER_DB="$blocked_db" RABBITMQ_URL='amqp://127.0.0.1:1/' \
|
||||
DISPATCHER_GRPC_LISTEN='' DISPATCHER_AGENT_ENDPOINTS_FILE='' \
|
||||
GO_SIP_OSS_ACCESS_KEY_ID='local-test-placeholder' GO_SIP_OSS_ACCESS_KEY_SECRET='local-test-placeholder' \
|
||||
"$WORK/release/sip-go-agent" dispatcher --config "$ROOT/deploys/config/dispatcher.json.example" > "$WORK/blocked-$mode.log" 2>&1; then
|
||||
echo "release accepted unapproved $mode execution" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -q 'isolated Mock only' "$WORK/blocked-$mode.log" || test -e "$blocked_db"; then
|
||||
echo "release reached resources before rejecting $mode execution" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
rm -- "$PACKAGE_RELEASE/sentinel"
|
||||
rmdir -- "$PACKAGE_RELEASE"
|
||||
"$ROOT/deploys/build-package.sh" "$PACKAGE_VERSION" > "$WORK/package.log" 2>&1 || {
|
||||
@@ -117,6 +131,6 @@ manifest = json.loads((package / "manifest.json").read_text())
|
||||
assert manifest["version"] == version
|
||||
assert manifest["scope"] == "local-development"
|
||||
assert manifest["security"]["production_approval"] is False
|
||||
assert manifest["contract_attestation"]["task_discovery"]["version"] == "local-contract-manifest.v0.2"
|
||||
assert manifest["contract_attestation"]["task_discovery"]["version"] == "local-contract-manifest.v0.3"
|
||||
PY
|
||||
echo 'F06 local release/package artifact and contract/queue gates passed; no deployment or dial attempted'
|
||||
|
||||
Reference in New Issue
Block a user