Record verified KEY39 source acceptance and tested execution components
This commit is contained in:
parent
cdac98dfd4
commit
ea8a748702
21 changed files with 2408 additions and 0 deletions
|
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
"schema": "security-source-stage/v1",
|
||||
"native_execution": false,
|
||||
"formal_owner_review": false,
|
||||
"entries": [
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "src/secrets_engine/authorization.py",
|
||||
"target": "/home/worsch/secrets-engine/src/secrets_engine/authorization.py",
|
||||
"staged": "/tmp/secrets-canonical-go-stage/src/secrets_engine/authorization.py",
|
||||
"original_sha256": "0ec4c3f7304d68abd06a0d08dc459e4f1f7269da0e4258549662be9e57b39fd3",
|
||||
"staged_sha256": "d58e5fd01ca2470a5d11a6b4f7e9d262a0c1565637e07b35466faa30e4991d14"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "tests/test_go_canonical_parity.py",
|
||||
"target": "/home/worsch/secrets-engine/tests/test_go_canonical_parity.py",
|
||||
"staged": "/tmp/secrets-canonical-go-stage/tests/test_go_canonical_parity.py",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "9a1ce1b358a6ca1f1880d322790b992f686e602f1f1f6c2b5b2e375136650962"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "docs/canonical-request-digest-profile.md",
|
||||
"target": "/home/worsch/secrets-engine/docs/canonical-request-digest-profile.md",
|
||||
"staged": "/tmp/secrets-canonical-go-stage/docs/canonical-request-digest-profile.md",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "f17a5fdf7887229968a6d5e2f002e656cdbe1f54e2f9d5588d1a5741434a5576"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "workplans/SECRETS-WP-0013-task-scoped-openbao-execution.md",
|
||||
"target": "/home/worsch/secrets-engine/workplans/SECRETS-WP-0013-task-scoped-openbao-execution.md",
|
||||
"staged": "/tmp/secrets-canonical-go-stage/workplans/SECRETS-WP-0013-task-scoped-openbao-execution.md",
|
||||
"original_sha256": "231906182d8ba68f920520937c8bd3f26af50afb614bd2c7beb2cd6b2aa2391c",
|
||||
"staged_sha256": "fd9a1330ebe1b0601de10d545d04227c84cdec64266636d58d6c55822c0385e6"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "docs/evidence/2026-10-11-task-execution/canonical-source-preparation-record.json",
|
||||
"target": "/home/worsch/secrets-engine/docs/evidence/2026-10-11-task-execution/canonical-source-preparation-record.json",
|
||||
"staged": "/tmp/secrets-canonical-go-stage/docs/evidence/2026-10-11-task-execution/canonical-source-preparation-record.json",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "c29911e5908ca757d5572530741660438c3d9d1b8962b2ae605cac399ca550f7"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "docs/evidence/2026-10-11-task-execution/canonical-source-preparation-receipt.json",
|
||||
"target": "/home/worsch/secrets-engine/docs/evidence/2026-10-11-task-execution/canonical-source-preparation-receipt.json",
|
||||
"staged": "/tmp/secrets-canonical-go-stage-v2/canonical-source-preparation-receipt.json",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "7776fd99177e97a3dfc167e8207d1cdeedecc7bb62ed3f9a53c379946dceb49d"
|
||||
}
|
||||
],
|
||||
"revision": "r2-baseline-sixteen",
|
||||
"supersedes_manifest_sha256": "c15b3704d59a3441f2ce203f1b866b62d83a49f553b50afbaa9c6fcc06105876"
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
{
|
||||
"schema": "security-source-stage/v1",
|
||||
"native_execution": false,
|
||||
"formal_owner_review": false,
|
||||
"entries": [
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "src/secrets_engine/authorization.py",
|
||||
"target": "/home/worsch/secrets-engine/src/secrets_engine/authorization.py",
|
||||
"staged": "/tmp/secrets-canonical-go-stage-v3/src/secrets_engine/authorization.py",
|
||||
"original_sha256": "0ec4c3f7304d68abd06a0d08dc459e4f1f7269da0e4258549662be9e57b39fd3",
|
||||
"staged_sha256": "d58e5fd01ca2470a5d11a6b4f7e9d262a0c1565637e07b35466faa30e4991d14"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "tests/test_go_canonical_parity.py",
|
||||
"target": "/home/worsch/secrets-engine/tests/test_go_canonical_parity.py",
|
||||
"staged": "/tmp/secrets-canonical-go-stage-v3/tests/test_go_canonical_parity.py",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "9a1ce1b358a6ca1f1880d322790b992f686e602f1f1f6c2b5b2e375136650962"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "docs/canonical-request-digest-profile.md",
|
||||
"target": "/home/worsch/secrets-engine/docs/canonical-request-digest-profile.md",
|
||||
"staged": "/tmp/secrets-canonical-go-stage-v3/docs/canonical-request-digest-profile.md",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "f17a5fdf7887229968a6d5e2f002e656cdbe1f54e2f9d5588d1a5741434a5576"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "workplans/SECRETS-WP-0013-task-scoped-openbao-execution.md",
|
||||
"target": "/home/worsch/secrets-engine/workplans/SECRETS-WP-0013-task-scoped-openbao-execution.md",
|
||||
"staged": "/tmp/secrets-canonical-go-stage-v3/workplans/SECRETS-WP-0013-task-scoped-openbao-execution.md",
|
||||
"original_sha256": "231906182d8ba68f920520937c8bd3f26af50afb614bd2c7beb2cd6b2aa2391c",
|
||||
"staged_sha256": "fd9a1330ebe1b0601de10d545d04227c84cdec64266636d58d6c55822c0385e6"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "docs/evidence/2026-10-11-task-execution/canonical-source-preparation-record.json",
|
||||
"target": "/home/worsch/secrets-engine/docs/evidence/2026-10-11-task-execution/canonical-source-preparation-record.json",
|
||||
"staged": "/tmp/secrets-canonical-go-stage-v3/docs/evidence/2026-10-11-task-execution/canonical-source-preparation-record.json",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "c29911e5908ca757d5572530741660438c3d9d1b8962b2ae605cac399ca550f7"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "docs/evidence/2026-10-11-task-execution/canonical-source-preparation-receipt.json",
|
||||
"target": "/home/worsch/secrets-engine/docs/evidence/2026-10-11-task-execution/canonical-source-preparation-receipt.json",
|
||||
"staged": "/tmp/secrets-canonical-go-stage-v3/docs/evidence/2026-10-11-task-execution/canonical-source-preparation-receipt.json",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "0340490abfefbf38c005a97c3f51dec4daa0e7236c5160b53b39f2235dcfe888"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "tests/test_exec_owner_companions.py",
|
||||
"target": "/home/worsch/secrets-engine/tests/test_exec_owner_companions.py",
|
||||
"staged": "/tmp/secrets-canonical-go-stage-v3/tests/test_exec_owner_companions.py",
|
||||
"original_sha256": "9df9dec7b437dbbe1f15ae74efeb32a3e5516adb534671f27561a17492ff368f",
|
||||
"staged_sha256": "22628debdd7a803cd9faafe1a21a86678eb9c130cde8ea38fafd39672d23a937"
|
||||
}
|
||||
],
|
||||
"revision": "r3-existing-test-stub-contract",
|
||||
"supersedes_manifest_sha256": "6a11d679af63e5aa31a04fe6cb9591399aeb4187f7b04020173edb13b7b0db3c"
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
........................................................................ [ 11%]
|
||||
........................................................................ [ 22%]
|
||||
............s........................................................... [ 33%]
|
||||
........................................................................ [ 45%]
|
||||
........................................................................ [ 56%]
|
||||
........................................................................ [ 67%]
|
||||
........................................................................ [ 79%]
|
||||
........................................................................ [ 90%]
|
||||
............................................................. [100%]
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"schema": "security-source-stage/v1",
|
||||
"native_execution": false,
|
||||
"formal_owner_review": false,
|
||||
"entries": [
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "src/secrets_engine/authorization.py",
|
||||
"target": "/home/worsch/secrets-engine/src/secrets_engine/authorization.py",
|
||||
"staged": "/tmp/secrets-canonical-go-stage/src/secrets_engine/authorization.py",
|
||||
"original_sha256": "0ec4c3f7304d68abd06a0d08dc459e4f1f7269da0e4258549662be9e57b39fd3",
|
||||
"staged_sha256": "d58e5fd01ca2470a5d11a6b4f7e9d262a0c1565637e07b35466faa30e4991d14"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "tests/test_go_canonical_parity.py",
|
||||
"target": "/home/worsch/secrets-engine/tests/test_go_canonical_parity.py",
|
||||
"staged": "/tmp/secrets-canonical-go-stage/tests/test_go_canonical_parity.py",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "9a1ce1b358a6ca1f1880d322790b992f686e602f1f1f6c2b5b2e375136650962"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "docs/canonical-request-digest-profile.md",
|
||||
"target": "/home/worsch/secrets-engine/docs/canonical-request-digest-profile.md",
|
||||
"staged": "/tmp/secrets-canonical-go-stage/docs/canonical-request-digest-profile.md",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "f17a5fdf7887229968a6d5e2f002e656cdbe1f54e2f9d5588d1a5741434a5576"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "workplans/SECRETS-WP-0013-task-scoped-openbao-execution.md",
|
||||
"target": "/home/worsch/secrets-engine/workplans/SECRETS-WP-0013-task-scoped-openbao-execution.md",
|
||||
"staged": "/tmp/secrets-canonical-go-stage/workplans/SECRETS-WP-0013-task-scoped-openbao-execution.md",
|
||||
"original_sha256": "231906182d8ba68f920520937c8bd3f26af50afb614bd2c7beb2cd6b2aa2391c",
|
||||
"staged_sha256": "fd9a1330ebe1b0601de10d545d04227c84cdec64266636d58d6c55822c0385e6"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "docs/evidence/2026-10-11-task-execution/canonical-source-preparation-record.json",
|
||||
"target": "/home/worsch/secrets-engine/docs/evidence/2026-10-11-task-execution/canonical-source-preparation-record.json",
|
||||
"staged": "/tmp/secrets-canonical-go-stage/docs/evidence/2026-10-11-task-execution/canonical-source-preparation-record.json",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "c29911e5908ca757d5572530741660438c3d9d1b8962b2ae605cac399ca550f7"
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"path": "docs/evidence/2026-10-11-task-execution/canonical-source-preparation-receipt.json",
|
||||
"target": "/home/worsch/secrets-engine/docs/evidence/2026-10-11-task-execution/canonical-source-preparation-receipt.json",
|
||||
"staged": "/tmp/secrets-canonical-go-stage/docs/evidence/2026-10-11-task-execution/canonical-source-preparation-receipt.json",
|
||||
"original_sha256": null,
|
||||
"staged_sha256": "01b73fb2bf1da442fa83b0166038e67f77b419e1ee912d712588fb1b7c41bc1d"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
........................................................................ [ 11%]
|
||||
........................................................................ [ 22%]
|
||||
............s........................................................... [ 33%]
|
||||
....................................................................F... [ 45%]
|
||||
........................................................................ [ 56%]
|
||||
........................................................................ [ 67%]
|
||||
........................................................................ [ 79%]
|
||||
........................................................................ [ 90%]
|
||||
............................................................. [100%]
|
||||
=================================== FAILURES ===================================
|
||||
______________ test_each_lane_is_gated_separately_before_backend _______________
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-r...d_separa0/owner'), PosixPath('/tmp/secrets-canonical-root-unsandboxed/test_each_lane_is_gated_separa0/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x742ac41b6810>
|
||||
tmp_path = PosixPath('/tmp/secrets-canonical-root-unsandboxed/test_each_lane_is_gated_separa0')
|
||||
|
||||
def test_each_lane_is_gated_separately_before_backend(bound, monkeypatch, tmp_path):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane = validate_entry(_companion())
|
||||
table = {entry.id: entry, lane.id: lane}
|
||||
monkeypatch.setattr(cli, "get_entry", lambda _dir, cid: table[cid])
|
||||
gated = []
|
||||
def gate(cfg, e, action, evidence, *, fields=()):
|
||||
gated.append((e.id, action, fields))
|
||||
if e.id == "test-worker":
|
||||
raise DeliveryError("companion lane denied")
|
||||
return SimpleNamespace(status="approved")
|
||||
monkeypatch.setattr(cli, "_require_lane_approval", gate)
|
||||
monkeypatch.setattr(cli, "require_delivery_state", lambda *a: None)
|
||||
monkeypatch.setattr(cli, "_open_backend", lambda *a, **k: pytest.fail("no backend after a lane refusal"))
|
||||
command = data["delivery_config"]["exec_owner"]["command"]
|
||||
with pytest.raises(DeliveryError, match="companion lane denied"):
|
||||
> cli.cmd_exec(_cfg(tmp_path), SimpleNamespace(field=None, catalog=entry.id, command=command, mode="exec-env"))
|
||||
|
||||
../secrets-engine/tests/test_exec_owner_companions.py:165:
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
|
||||
cfg = Config(catalog_dir=PosixPath('/tmp/secrets-canonical-root-unsandboxed/test_each_lane_is_gated_separa0'), policy_dir=Po...authorization_policy_version='', authorization_min_approvals=1, pdp_url='', pdp_token_file=None, clock_trust_file=None)
|
||||
args = namespace(field=None, catalog='test-lane', command=['/tmp/secrets-canonical-root-unsandboxed/test_each_lane_is_gated_s...wner/dash', '/tmp/secrets-canonical-root-unsandboxed/test_each_lane_is_gated_separa0/owner/owner.sh'], mode='exec-env')
|
||||
|
||||
def cmd_exec(cfg: Config, args) -> int:
|
||||
from contextlib import ExitStack
|
||||
|
||||
from secrets_engine.exec_delivery import exec_with_secret
|
||||
from secrets_engine.exec_owner import resolve_companions, validate_delivery_target
|
||||
entry = get_entry(cfg.catalog_dir, args.catalog)
|
||||
field = args.field or (entry.fields[0] if entry.fields else "")
|
||||
session_detail: dict[str, object] = {}
|
||||
companion_sessions: dict[str, dict[str, object]] = {}
|
||||
# Refuse a substituted recipient before consuming approval or opening Bao.
|
||||
owner_digest = validate_delivery_target(entry, field, args.command, args.mode)
|
||||
companions = resolve_companions(entry, lambda cid: get_entry(cfg.catalog_dir, cid))
|
||||
command_name = args.command[0] if args.command else ""
|
||||
with ExitStack() as stack:
|
||||
evidence = stack.enter_context(_privileged_evidence(
|
||||
cfg,
|
||||
entry,
|
||||
"exec",
|
||||
detail={
|
||||
"command": command_name,
|
||||
"mode": args.mode,
|
||||
"field": field,
|
||||
"session": session_detail,
|
||||
"exec_owner_sha256": owner_digest,
|
||||
"companions": [lane.id for lane, _, _ in companions],
|
||||
},
|
||||
))
|
||||
# require approval + readiness before running.
|
||||
> decision = _require_lane_approval(
|
||||
cfg, entry, "exec", evidence, fields=(field,) if field else (),
|
||||
auth_args=args,
|
||||
)
|
||||
E TypeError: test_each_lane_is_gated_separately_before_backend.<locals>.gate() got an unexpected keyword argument 'auth_args'
|
||||
|
||||
/tmp/secrets-canonical-go-stage/src/secrets_engine/cli.py:588: TypeError
|
||||
=========================== short test summary info ============================
|
||||
FAILED ../../../tmp/secrets-canonical-go-stage/tests/test_exec_owner_companions.py::test_each_lane_is_gated_separately_before_backend
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"command": [
|
||||
"/home/worsch/secrets-engine/.venv/bin/python",
|
||||
"-m",
|
||||
"pytest",
|
||||
"-q",
|
||||
"tests/test_exec_owner.py::test_actual_bound_child_gets_only_selected_secret_and_fixed_environment",
|
||||
"tests/test_exec_owner.py::test_config_changed_during_fetch_does_not_launch",
|
||||
"tests/test_exec_owner.py::test_binding_changed_after_approval_refuses_before_fetch",
|
||||
"tests/test_exec_owner_companions.py::test_companion_value_reaches_bound_child_and_is_redacted",
|
||||
"tests/test_exec_owner_companions.py::test_companion_fetch_failure_starts_no_child",
|
||||
"tests/test_exec_owner_companions.py::test_each_lane_is_gated_separately_before_backend",
|
||||
"tests/test_exec_owner_companions.py::test_unresolvable_companion_refuses_before_any_gate",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[missing]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[extra]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[env]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[field]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[lane]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[consent]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[stage]",
|
||||
"tests/test_human_control.py::test_real_exec_handler_rejects_undeclared_claim_before_consume_backend_child",
|
||||
"tests/test_integration_companions.py::test_two_lanes_reach_one_bound_owner",
|
||||
"--basetemp=/tmp/secrets-canonical-baseline-sixteen-base"
|
||||
],
|
||||
"cwd": "/home/worsch/secrets-engine",
|
||||
"pythonpath": "/home/worsch/secrets-engine/src:/home/worsch/secrets-engine",
|
||||
"exit_code": 1,
|
||||
"original_code_sha256_before": "0ec4c3f7304d68abd06a0d08dc459e4f1f7269da0e4258549662be9e57b39fd3",
|
||||
"original_code_sha256_after": "0ec4c3f7304d68abd06a0d08dc459e4f1f7269da0e4258549662be9e57b39fd3",
|
||||
"tests": [
|
||||
"tests/test_exec_owner.py::test_actual_bound_child_gets_only_selected_secret_and_fixed_environment",
|
||||
"tests/test_exec_owner.py::test_config_changed_during_fetch_does_not_launch",
|
||||
"tests/test_exec_owner.py::test_binding_changed_after_approval_refuses_before_fetch",
|
||||
"tests/test_exec_owner_companions.py::test_companion_value_reaches_bound_child_and_is_redacted",
|
||||
"tests/test_exec_owner_companions.py::test_companion_fetch_failure_starts_no_child",
|
||||
"tests/test_exec_owner_companions.py::test_each_lane_is_gated_separately_before_backend",
|
||||
"tests/test_exec_owner_companions.py::test_unresolvable_companion_refuses_before_any_gate",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[missing]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[extra]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[env]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[field]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[lane]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[consent]",
|
||||
"tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[stage]",
|
||||
"tests/test_human_control.py::test_real_exec_handler_rejects_undeclared_claim_before_consume_backend_child",
|
||||
"tests/test_integration_companions.py::test_two_lanes_reach_one_bound_owner"
|
||||
],
|
||||
"output_path": "/tmp/secrets-canonical-baseline-sixteen-tests.txt"
|
||||
}
|
||||
|
|
@ -0,0 +1,558 @@
|
|||
FFFFFFFFFFFFFFFF [100%]
|
||||
=================================== FAILURES ===================================
|
||||
___ test_actual_bound_child_gets_only_selected_secret_and_fixed_environment ____
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...s_o0/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_actual_bound_child_gets_o0/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76d88f980>
|
||||
capsys = <_pytest.capture.CaptureFixture object at 0x73a76d88f800>
|
||||
|
||||
def test_actual_bound_child_gets_only_selected_secret_and_fixed_environment(bound, monkeypatch, capsys):
|
||||
data, private, _ = bound
|
||||
entry = validate_entry(data)
|
||||
for name in ["PARENT_CREDENTIAL", "BAO_TOKEN", "SECRETS_ENGINE_APPROVAL_CLIENT_SECRET_FILE", "PYTHONPATH"]:
|
||||
monkeypatch.setenv(name, "parent-sensitive-fixture")
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", lambda *a, **k: "synthetic-owner-value")
|
||||
> assert exec_delivery.exec_with_secret(object(), entry, "api_token", data["delivery_config"]["exec_owner"]["command"], mode="exec-env", expected_owner_digest=owner_digest(entry)) == 0
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
tests/test_exec_owner.py:55:
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
src/secrets_engine/exec_delivery.py:199: in exec_with_secret
|
||||
binding_digest = validate_delivery_target(entry, field, command, mode)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
src/secrets_engine/exec_owner.py:171: in validate_delivery_target
|
||||
_check_path(Path(binding["cwd"]), directory=True, private=True)
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
|
||||
path = PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_actual_bound_child_gets_o0/owner')
|
||||
directory = True, private = True
|
||||
|
||||
def _check_path(path: Path, *, directory: bool = False, private: bool = False) -> None:
|
||||
"""No symlink or untrusted writable ancestor; root-owned sticky /tmp is safe."""
|
||||
for candidate in [*reversed(path.parents), path]:
|
||||
info = candidate.lstat()
|
||||
leaf = candidate == path
|
||||
is_dir = not leaf or directory
|
||||
if not (stat.S_ISDIR(info.st_mode) if is_dir else stat.S_ISREG(info.st_mode)):
|
||||
raise DeliveryError("exec owner path is not a regular file/directory")
|
||||
if info.st_uid not in {0, os.getuid()}:
|
||||
> raise DeliveryError("exec owner path has an untrusted owner")
|
||||
E secrets_engine.errors.DeliveryError: exec owner path has an untrusted owner
|
||||
|
||||
src/secrets_engine/exec_owner.py:146: DeliveryError
|
||||
_______________ test_config_changed_during_fetch_does_not_launch _______________
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...fet0/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_config_changed_during_fet0/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76d62c080>
|
||||
|
||||
def test_config_changed_during_fetch_does_not_launch(bound, monkeypatch):
|
||||
data, _, script = bound
|
||||
entry = validate_entry(data)
|
||||
def fetch(*a, **k):
|
||||
script.write_text("changed during fetch")
|
||||
return "synthetic-owner-value"
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", fetch)
|
||||
monkeypatch.setattr(exec_delivery, "_spawn", lambda *a, **k: pytest.fail("must not launch"))
|
||||
> with pytest.raises(DeliveryError, match="digest"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'digest'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner.py:91: AssertionError
|
||||
___________ test_binding_changed_after_approval_refuses_before_fetch ___________
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...app0/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_binding_changed_after_app0/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76d62d820>
|
||||
|
||||
def test_binding_changed_after_approval_refuses_before_fetch(bound, monkeypatch):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(data)
|
||||
expected = owner_digest(entry)
|
||||
entry.delivery_config["exec_owner"]["environment"]["LANG"] = "C"
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", lambda *a, **k: pytest.fail("must not read"))
|
||||
> with pytest.raises(DeliveryError, match="after action admission"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'after action admission'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner.py:101: AssertionError
|
||||
___________ test_companion_value_reaches_bound_child_and_is_redacted ___________
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...s_b0/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_companion_value_reaches_b0/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76ccd4950>
|
||||
capsys = <_pytest.capture.CaptureFixture object at 0x73a76ccd44d0>
|
||||
|
||||
def test_companion_value_reaches_bound_child_and_is_redacted(bound, monkeypatch, capsys):
|
||||
data, _, script = bound
|
||||
script.write_text('''test "$API_TOKEN" = synthetic-owner-value || exit 10
|
||||
test "$WORKER_TOKEN" = synthetic-worker-value || exit 11
|
||||
read ignored && exit 15
|
||||
printf '%s %s\\n' "$API_TOKEN" "$WORKER_TOKEN"
|
||||
printf 'companion-child-ok\\n'
|
||||
''')
|
||||
import hashlib
|
||||
data["delivery_config"]["exec_owner"]["files"][str(script)]["sha256"] = hashlib.sha256(script.read_bytes()).hexdigest()
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane = validate_entry(_companion())
|
||||
companions = resolve_companions(entry, _lookup(lane))
|
||||
values = {"test-lane": "synthetic-owner-value", "test-worker": "synthetic-worker-value"}
|
||||
seen = []
|
||||
def fetch(client, e, field, **kwargs):
|
||||
seen.append((e.id, field))
|
||||
return values[e.id]
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", fetch)
|
||||
sessions = {}
|
||||
> rc = exec_delivery.exec_with_secret(
|
||||
object(), entry, "api_token", data["delivery_config"]["exec_owner"]["command"],
|
||||
mode="exec-env", expected_owner_digest=owner_digest(entry),
|
||||
companions=companions, companion_sessions=sessions,
|
||||
)
|
||||
|
||||
tests/test_exec_owner_companions.py:55:
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
src/secrets_engine/exec_delivery.py:199: in exec_with_secret
|
||||
binding_digest = validate_delivery_target(entry, field, command, mode)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
src/secrets_engine/exec_owner.py:171: in validate_delivery_target
|
||||
_check_path(Path(binding["cwd"]), directory=True, private=True)
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
|
||||
path = PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_companion_value_reaches_b0/owner')
|
||||
directory = True, private = True
|
||||
|
||||
def _check_path(path: Path, *, directory: bool = False, private: bool = False) -> None:
|
||||
"""No symlink or untrusted writable ancestor; root-owned sticky /tmp is safe."""
|
||||
for candidate in [*reversed(path.parents), path]:
|
||||
info = candidate.lstat()
|
||||
leaf = candidate == path
|
||||
is_dir = not leaf or directory
|
||||
if not (stat.S_ISDIR(info.st_mode) if is_dir else stat.S_ISREG(info.st_mode)):
|
||||
raise DeliveryError("exec owner path is not a regular file/directory")
|
||||
if info.st_uid not in {0, os.getuid()}:
|
||||
> raise DeliveryError("exec owner path has an untrusted owner")
|
||||
E secrets_engine.errors.DeliveryError: exec owner path has an untrusted owner
|
||||
|
||||
src/secrets_engine/exec_owner.py:146: DeliveryError
|
||||
_________________ test_companion_fetch_failure_starts_no_child _________________
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...e_s0/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_companion_fetch_failure_s0/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76d62c9e0>
|
||||
|
||||
def test_companion_fetch_failure_starts_no_child(bound, monkeypatch):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane = validate_entry(_companion())
|
||||
def fetch(client, e, field, **kwargs):
|
||||
if e.id == "test-worker":
|
||||
raise DeliveryError("scoped read failed for lane 'test-worker' (denied or absent)")
|
||||
return "synthetic-owner-value"
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", fetch)
|
||||
monkeypatch.setattr(exec_delivery, "_spawn", lambda *a, **k: pytest.fail("must not launch"))
|
||||
> with pytest.raises(DeliveryError, match="test-worker"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'test-worker'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner_companions.py:77: AssertionError
|
||||
______________ test_each_lane_is_gated_separately_before_backend _______________
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...ara0/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_each_lane_is_gated_separa0/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76d88f920>
|
||||
tmp_path = PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_each_lane_is_gated_separa0')
|
||||
|
||||
def test_each_lane_is_gated_separately_before_backend(bound, monkeypatch, tmp_path):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane = validate_entry(_companion())
|
||||
table = {entry.id: entry, lane.id: lane}
|
||||
monkeypatch.setattr(cli, "get_entry", lambda _dir, cid: table[cid])
|
||||
gated = []
|
||||
def gate(cfg, e, action, evidence, *, fields=()):
|
||||
gated.append((e.id, action, fields))
|
||||
if e.id == "test-worker":
|
||||
raise DeliveryError("companion lane denied")
|
||||
return SimpleNamespace(status="approved")
|
||||
monkeypatch.setattr(cli, "_require_lane_approval", gate)
|
||||
monkeypatch.setattr(cli, "require_delivery_state", lambda *a: None)
|
||||
monkeypatch.setattr(cli, "_open_backend", lambda *a, **k: pytest.fail("no backend after a lane refusal"))
|
||||
command = data["delivery_config"]["exec_owner"]["command"]
|
||||
> with pytest.raises(DeliveryError, match="companion lane denied"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'companion lane denied'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner_companions.py:164: AssertionError
|
||||
_____________ test_unresolvable_companion_refuses_before_any_gate ______________
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b..._re0/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_unresolvable_companion_re0/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76ccafe00>
|
||||
tmp_path = PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_unresolvable_companion_re0')
|
||||
|
||||
def test_unresolvable_companion_refuses_before_any_gate(bound, monkeypatch, tmp_path):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
def get(_dir, cid):
|
||||
if cid == entry.id:
|
||||
return entry
|
||||
raise KeyError(cid)
|
||||
monkeypatch.setattr(cli, "get_entry", get)
|
||||
monkeypatch.setattr(cli, "_require_lane_approval", lambda *a, **k: pytest.fail("no gate"))
|
||||
monkeypatch.setattr(cli, "_open_backend", lambda *a, **k: pytest.fail("no backend"))
|
||||
command = data["delivery_config"]["exec_owner"]["command"]
|
||||
> with pytest.raises(DeliveryError, match="unavailable"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'unavailable'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner_companions.py:180: AssertionError
|
||||
______ test_delivery_rechecks_companion_contract_before_any_read[missing] ______
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...ani0/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_delivery_rechecks_compani0/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76ce2cad0>
|
||||
change = 'missing'
|
||||
|
||||
@pytest.mark.parametrize("change", ["missing", "extra", "env", "field", "lane", "consent", "stage"])
|
||||
def test_delivery_rechecks_companion_contract_before_any_read(bound, monkeypatch, change):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane_data = _companion()
|
||||
if change == "consent":
|
||||
lane_data["delivery_config"] = {}
|
||||
elif change == "stage":
|
||||
lane_data.update(stage="build", path="build/team/worker")
|
||||
elif change == "lane":
|
||||
lane_data["id"] = "another-worker"
|
||||
lane = validate_entry(lane_data)
|
||||
companions = [(lane, "worker_token", "WORKER_TOKEN")]
|
||||
if change == "missing": companions = []
|
||||
elif change == "extra": companions *= 2
|
||||
elif change == "env": companions = [(lane, "worker_token", "API_TOKEN")]
|
||||
elif change == "field": companions = [(lane, "other_field", "WORKER_TOKEN")]
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", lambda *a, **k: pytest.fail("no read"))
|
||||
monkeypatch.setattr(exec_delivery, "_spawn", lambda *a, **k: pytest.fail("no child"))
|
||||
> with pytest.raises(DeliveryError, match="companion"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'companion'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner_companions.py:221: AssertionError
|
||||
_______ test_delivery_rechecks_companion_contract_before_any_read[extra] _______
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...ani1/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_delivery_rechecks_compani1/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76ce2cbc0>
|
||||
change = 'extra'
|
||||
|
||||
@pytest.mark.parametrize("change", ["missing", "extra", "env", "field", "lane", "consent", "stage"])
|
||||
def test_delivery_rechecks_companion_contract_before_any_read(bound, monkeypatch, change):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane_data = _companion()
|
||||
if change == "consent":
|
||||
lane_data["delivery_config"] = {}
|
||||
elif change == "stage":
|
||||
lane_data.update(stage="build", path="build/team/worker")
|
||||
elif change == "lane":
|
||||
lane_data["id"] = "another-worker"
|
||||
lane = validate_entry(lane_data)
|
||||
companions = [(lane, "worker_token", "WORKER_TOKEN")]
|
||||
if change == "missing": companions = []
|
||||
elif change == "extra": companions *= 2
|
||||
elif change == "env": companions = [(lane, "worker_token", "API_TOKEN")]
|
||||
elif change == "field": companions = [(lane, "other_field", "WORKER_TOKEN")]
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", lambda *a, **k: pytest.fail("no read"))
|
||||
monkeypatch.setattr(exec_delivery, "_spawn", lambda *a, **k: pytest.fail("no child"))
|
||||
> with pytest.raises(DeliveryError, match="companion"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'companion'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner_companions.py:221: AssertionError
|
||||
________ test_delivery_rechecks_companion_contract_before_any_read[env] ________
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...ani2/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_delivery_rechecks_compani2/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76cf27440>
|
||||
change = 'env'
|
||||
|
||||
@pytest.mark.parametrize("change", ["missing", "extra", "env", "field", "lane", "consent", "stage"])
|
||||
def test_delivery_rechecks_companion_contract_before_any_read(bound, monkeypatch, change):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane_data = _companion()
|
||||
if change == "consent":
|
||||
lane_data["delivery_config"] = {}
|
||||
elif change == "stage":
|
||||
lane_data.update(stage="build", path="build/team/worker")
|
||||
elif change == "lane":
|
||||
lane_data["id"] = "another-worker"
|
||||
lane = validate_entry(lane_data)
|
||||
companions = [(lane, "worker_token", "WORKER_TOKEN")]
|
||||
if change == "missing": companions = []
|
||||
elif change == "extra": companions *= 2
|
||||
elif change == "env": companions = [(lane, "worker_token", "API_TOKEN")]
|
||||
elif change == "field": companions = [(lane, "other_field", "WORKER_TOKEN")]
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", lambda *a, **k: pytest.fail("no read"))
|
||||
monkeypatch.setattr(exec_delivery, "_spawn", lambda *a, **k: pytest.fail("no child"))
|
||||
> with pytest.raises(DeliveryError, match="companion"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'companion'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner_companions.py:221: AssertionError
|
||||
_______ test_delivery_rechecks_companion_contract_before_any_read[field] _______
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...ani3/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_delivery_rechecks_compani3/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76cf271d0>
|
||||
change = 'field'
|
||||
|
||||
@pytest.mark.parametrize("change", ["missing", "extra", "env", "field", "lane", "consent", "stage"])
|
||||
def test_delivery_rechecks_companion_contract_before_any_read(bound, monkeypatch, change):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane_data = _companion()
|
||||
if change == "consent":
|
||||
lane_data["delivery_config"] = {}
|
||||
elif change == "stage":
|
||||
lane_data.update(stage="build", path="build/team/worker")
|
||||
elif change == "lane":
|
||||
lane_data["id"] = "another-worker"
|
||||
lane = validate_entry(lane_data)
|
||||
companions = [(lane, "worker_token", "WORKER_TOKEN")]
|
||||
if change == "missing": companions = []
|
||||
elif change == "extra": companions *= 2
|
||||
elif change == "env": companions = [(lane, "worker_token", "API_TOKEN")]
|
||||
elif change == "field": companions = [(lane, "other_field", "WORKER_TOKEN")]
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", lambda *a, **k: pytest.fail("no read"))
|
||||
monkeypatch.setattr(exec_delivery, "_spawn", lambda *a, **k: pytest.fail("no child"))
|
||||
> with pytest.raises(DeliveryError, match="companion"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'companion'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner_companions.py:221: AssertionError
|
||||
_______ test_delivery_rechecks_companion_contract_before_any_read[lane] ________
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...ani4/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_delivery_rechecks_compani4/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76ccd4f80>
|
||||
change = 'lane'
|
||||
|
||||
@pytest.mark.parametrize("change", ["missing", "extra", "env", "field", "lane", "consent", "stage"])
|
||||
def test_delivery_rechecks_companion_contract_before_any_read(bound, monkeypatch, change):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane_data = _companion()
|
||||
if change == "consent":
|
||||
lane_data["delivery_config"] = {}
|
||||
elif change == "stage":
|
||||
lane_data.update(stage="build", path="build/team/worker")
|
||||
elif change == "lane":
|
||||
lane_data["id"] = "another-worker"
|
||||
lane = validate_entry(lane_data)
|
||||
companions = [(lane, "worker_token", "WORKER_TOKEN")]
|
||||
if change == "missing": companions = []
|
||||
elif change == "extra": companions *= 2
|
||||
elif change == "env": companions = [(lane, "worker_token", "API_TOKEN")]
|
||||
elif change == "field": companions = [(lane, "other_field", "WORKER_TOKEN")]
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", lambda *a, **k: pytest.fail("no read"))
|
||||
monkeypatch.setattr(exec_delivery, "_spawn", lambda *a, **k: pytest.fail("no child"))
|
||||
> with pytest.raises(DeliveryError, match="companion"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'companion'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner_companions.py:221: AssertionError
|
||||
______ test_delivery_rechecks_companion_contract_before_any_read[consent] ______
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...ani5/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_delivery_rechecks_compani5/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76ccd5640>
|
||||
change = 'consent'
|
||||
|
||||
@pytest.mark.parametrize("change", ["missing", "extra", "env", "field", "lane", "consent", "stage"])
|
||||
def test_delivery_rechecks_companion_contract_before_any_read(bound, monkeypatch, change):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane_data = _companion()
|
||||
if change == "consent":
|
||||
lane_data["delivery_config"] = {}
|
||||
elif change == "stage":
|
||||
lane_data.update(stage="build", path="build/team/worker")
|
||||
elif change == "lane":
|
||||
lane_data["id"] = "another-worker"
|
||||
lane = validate_entry(lane_data)
|
||||
companions = [(lane, "worker_token", "WORKER_TOKEN")]
|
||||
if change == "missing": companions = []
|
||||
elif change == "extra": companions *= 2
|
||||
elif change == "env": companions = [(lane, "worker_token", "API_TOKEN")]
|
||||
elif change == "field": companions = [(lane, "other_field", "WORKER_TOKEN")]
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", lambda *a, **k: pytest.fail("no read"))
|
||||
monkeypatch.setattr(exec_delivery, "_spawn", lambda *a, **k: pytest.fail("no child"))
|
||||
> with pytest.raises(DeliveryError, match="companion"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'companion'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner_companions.py:221: AssertionError
|
||||
_______ test_delivery_rechecks_companion_contract_before_any_read[stage] _______
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...ani6/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_delivery_rechecks_compani6/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76ccd4b30>
|
||||
change = 'stage'
|
||||
|
||||
@pytest.mark.parametrize("change", ["missing", "extra", "env", "field", "lane", "consent", "stage"])
|
||||
def test_delivery_rechecks_companion_contract_before_any_read(bound, monkeypatch, change):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane_data = _companion()
|
||||
if change == "consent":
|
||||
lane_data["delivery_config"] = {}
|
||||
elif change == "stage":
|
||||
lane_data.update(stage="build", path="build/team/worker")
|
||||
elif change == "lane":
|
||||
lane_data["id"] = "another-worker"
|
||||
lane = validate_entry(lane_data)
|
||||
companions = [(lane, "worker_token", "WORKER_TOKEN")]
|
||||
if change == "missing": companions = []
|
||||
elif change == "extra": companions *= 2
|
||||
elif change == "env": companions = [(lane, "worker_token", "API_TOKEN")]
|
||||
elif change == "field": companions = [(lane, "other_field", "WORKER_TOKEN")]
|
||||
monkeypatch.setattr(exec_delivery, "_fetch_value", lambda *a, **k: pytest.fail("no read"))
|
||||
monkeypatch.setattr(exec_delivery, "_spawn", lambda *a, **k: pytest.fail("no child"))
|
||||
> with pytest.raises(DeliveryError, match="companion"):
|
||||
E AssertionError: Regex pattern did not match.
|
||||
E Expected regex: 'companion'
|
||||
E Actual message: 'exec owner path has an untrusted owner'
|
||||
|
||||
tests/test_exec_owner_companions.py:221: AssertionError
|
||||
_ test_real_exec_handler_rejects_undeclared_claim_before_consume_backend_child _
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'prod', ...}, PosixPath('/tmp/secrets-canonical-b...cts0/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_real_exec_handler_rejects0/owner/owner.sh'))
|
||||
tmp_path = PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_real_exec_handler_rejects0')
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x73a76ccd5040>
|
||||
|
||||
def test_real_exec_handler_rejects_undeclared_claim_before_consume_backend_child(bound, tmp_path, monkeypatch):
|
||||
raw, _, _ = bound
|
||||
raw["stage"] = "prod"
|
||||
raw["approval"].update(model="decision", authorization_id=AUTH_ID,
|
||||
purpose="contract-test", human_control=True)
|
||||
entry = validate_entry(raw)
|
||||
cfg = replace(_config(tmp_path), approval_url="https://approval.example",
|
||||
approval_token_file=_token(tmp_path), authorization_subject_id="user:alice",
|
||||
authorization_subject_type="Human")
|
||||
claim = _served(entry, action="exec")
|
||||
monkeypatch.setattr(cli, "get_entry", lambda *a: entry)
|
||||
monkeypatch.setattr(cli, "authorize_action", lambda *a, **k: authorize_action(*a, **k,
|
||||
opener=_opener(claim), pdp_opener=lambda *a, **k: pytest.fail("must not check")))
|
||||
for name in ("require_production_consume", "_open_backend"):
|
||||
monkeypatch.setattr(cli, name, lambda *a, **k: pytest.fail("must not consume or open backend"))
|
||||
with pytest.raises(DecisionError, match="human_control"):
|
||||
> cli.cmd_exec(cfg, SimpleNamespace(catalog=entry.id, field="api_token", mode="exec-env",
|
||||
command=raw["delivery_config"]["exec_owner"]["command"]))
|
||||
|
||||
tests/test_human_control.py:161:
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
src/secrets_engine/cli.py:570: in cmd_exec
|
||||
owner_digest = validate_delivery_target(entry, field, args.command, args.mode)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
src/secrets_engine/exec_owner.py:171: in validate_delivery_target
|
||||
_check_path(Path(binding["cwd"]), directory=True, private=True)
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
|
||||
path = PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_real_exec_handler_rejects0/owner')
|
||||
directory = True, private = True
|
||||
|
||||
def _check_path(path: Path, *, directory: bool = False, private: bool = False) -> None:
|
||||
"""No symlink or untrusted writable ancestor; root-owned sticky /tmp is safe."""
|
||||
for candidate in [*reversed(path.parents), path]:
|
||||
info = candidate.lstat()
|
||||
leaf = candidate == path
|
||||
is_dir = not leaf or directory
|
||||
if not (stat.S_ISDIR(info.st_mode) if is_dir else stat.S_ISREG(info.st_mode)):
|
||||
raise DeliveryError("exec owner path is not a regular file/directory")
|
||||
if info.st_uid not in {0, os.getuid()}:
|
||||
> raise DeliveryError("exec owner path has an untrusted owner")
|
||||
E secrets_engine.errors.DeliveryError: exec owner path has an untrusted owner
|
||||
|
||||
src/secrets_engine/exec_owner.py:146: DeliveryError
|
||||
_____________________ test_two_lanes_reach_one_bound_owner _____________________
|
||||
|
||||
bao_dev = OpenBaoClient(addr='http://127.0.0.1:50647', token='se-test-root', bao_bin='/home/worsch/.local/bin/bao')
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...und0/owner'), PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_two_lanes_reach_one_bound0/owner/owner.sh'))
|
||||
tmp_path = PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_two_lanes_reach_one_bound0')
|
||||
capsys = <_pytest.capture.CaptureFixture object at 0x73a76cf279e0>
|
||||
|
||||
def test_two_lanes_reach_one_bound_owner(bao_dev, bound, tmp_path, capsys):
|
||||
data, _, script = bound
|
||||
script.write_text('''test "$API_TOKEN" = primary-integration-value || exit 10
|
||||
test "$WORKER_TOKEN" = worker-integration-value || exit 11
|
||||
test -z "$BAO_TOKEN" || exit 12
|
||||
read ignored && exit 15
|
||||
printf '%s %s\\n' "$API_TOKEN" "$WORKER_TOKEN"
|
||||
printf 'two-lane-child-ok\\n'
|
||||
''')
|
||||
data["delivery_config"]["exec_owner"]["files"][str(script)]["sha256"] = hashlib.sha256(
|
||||
script.read_bytes()
|
||||
).hexdigest()
|
||||
entry = validate_entry(_with_companion(copy.deepcopy(data)))
|
||||
lane = validate_entry(_companion())
|
||||
_provision(bao_dev, entry, "api_token", "primary-integration-value", tmp_path)
|
||||
_provision(bao_dev, lane, "worker_token", "worker-integration-value", tmp_path)
|
||||
|
||||
sessions, primary_session = {}, {}
|
||||
> rc = exec_with_secret(
|
||||
bao_dev, entry, "api_token", data["delivery_config"]["exec_owner"]["command"],
|
||||
mode="exec-env", session_evidence=primary_session,
|
||||
expected_owner_digest=owner_digest(entry),
|
||||
companions=resolve_companions(entry, _lookup(lane)), companion_sessions=sessions,
|
||||
)
|
||||
|
||||
tests/test_integration_companions.py:47:
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
src/secrets_engine/exec_delivery.py:199: in exec_with_secret
|
||||
binding_digest = validate_delivery_target(entry, field, command, mode)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
src/secrets_engine/exec_owner.py:171: in validate_delivery_target
|
||||
_check_path(Path(binding["cwd"]), directory=True, private=True)
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
|
||||
path = PosixPath('/tmp/secrets-canonical-baseline-sixteen-base/test_two_lanes_reach_one_bound0/owner')
|
||||
directory = True, private = True
|
||||
|
||||
def _check_path(path: Path, *, directory: bool = False, private: bool = False) -> None:
|
||||
"""No symlink or untrusted writable ancestor; root-owned sticky /tmp is safe."""
|
||||
for candidate in [*reversed(path.parents), path]:
|
||||
info = candidate.lstat()
|
||||
leaf = candidate == path
|
||||
is_dir = not leaf or directory
|
||||
if not (stat.S_ISDIR(info.st_mode) if is_dir else stat.S_ISREG(info.st_mode)):
|
||||
raise DeliveryError("exec owner path is not a regular file/directory")
|
||||
if info.st_uid not in {0, os.getuid()}:
|
||||
> raise DeliveryError("exec owner path has an untrusted owner")
|
||||
E secrets_engine.errors.DeliveryError: exec owner path has an untrusted owner
|
||||
|
||||
src/secrets_engine/exec_owner.py:146: DeliveryError
|
||||
=============================== warnings summary ===============================
|
||||
.venv/lib/python3.12/site-packages/_pytest/cacheprovider.py:469
|
||||
/home/worsch/secrets-engine/.venv/lib/python3.12/site-packages/_pytest/cacheprovider.py:469: PytestCacheWarning: cache could not write path /home/worsch/secrets-engine/.pytest_cache/v/cache/nodeids: [Errno 30] Read-only file system: '/home/worsch/secrets-engine/.pytest_cache/v/cache/nodeids'
|
||||
config.cache.set("cache/nodeids", sorted(self.cached_nodeids))
|
||||
|
||||
.venv/lib/python3.12/site-packages/_pytest/cacheprovider.py:423
|
||||
/home/worsch/secrets-engine/.venv/lib/python3.12/site-packages/_pytest/cacheprovider.py:423: PytestCacheWarning: cache could not write path /home/worsch/secrets-engine/.pytest_cache/v/cache/lastfailed: [Errno 30] Read-only file system: '/home/worsch/secrets-engine/.pytest_cache/v/cache/lastfailed'
|
||||
config.cache.set("cache/lastfailed", self.lastfailed)
|
||||
|
||||
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
|
||||
=========================== short test summary info ============================
|
||||
FAILED tests/test_exec_owner.py::test_actual_bound_child_gets_only_selected_secret_and_fixed_environment
|
||||
FAILED tests/test_exec_owner.py::test_config_changed_during_fetch_does_not_launch
|
||||
FAILED tests/test_exec_owner.py::test_binding_changed_after_approval_refuses_before_fetch
|
||||
FAILED tests/test_exec_owner_companions.py::test_companion_value_reaches_bound_child_and_is_redacted
|
||||
FAILED tests/test_exec_owner_companions.py::test_companion_fetch_failure_starts_no_child
|
||||
FAILED tests/test_exec_owner_companions.py::test_each_lane_is_gated_separately_before_backend
|
||||
FAILED tests/test_exec_owner_companions.py::test_unresolvable_companion_refuses_before_any_gate
|
||||
FAILED tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[missing]
|
||||
FAILED tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[extra]
|
||||
FAILED tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[env]
|
||||
FAILED tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[field]
|
||||
FAILED tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[lane]
|
||||
FAILED tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[consent]
|
||||
FAILED tests/test_exec_owner_companions.py::test_delivery_rechecks_companion_contract_before_any_read[stage]
|
||||
FAILED tests/test_human_control.py::test_real_exec_handler_rejects_undeclared_claim_before_consume_backend_child
|
||||
FAILED tests/test_integration_companions.py::test_two_lanes_reach_one_bound_owner
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
F [100%]
|
||||
=================================== FAILURES ===================================
|
||||
______________ test_each_lane_is_gated_separately_before_backend _______________
|
||||
|
||||
bound = ({'id': 'test-lane', 'org': 'coulomb', 'repo': 'team-repo', 'stage': 'test', ...}, PosixPath('/tmp/secrets-canonical-b...para0/owner'), PosixPath('/tmp/secrets-canonical-baseline-unsandboxed/test_each_lane_is_gated_separa0/owner/owner.sh'))
|
||||
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x702646f9f440>
|
||||
tmp_path = PosixPath('/tmp/secrets-canonical-baseline-unsandboxed/test_each_lane_is_gated_separa0')
|
||||
|
||||
def test_each_lane_is_gated_separately_before_backend(bound, monkeypatch, tmp_path):
|
||||
data, _, _ = bound
|
||||
entry = validate_entry(_with_companion(data))
|
||||
lane = validate_entry(_companion())
|
||||
table = {entry.id: entry, lane.id: lane}
|
||||
monkeypatch.setattr(cli, "get_entry", lambda _dir, cid: table[cid])
|
||||
gated = []
|
||||
def gate(cfg, e, action, evidence, *, fields=()):
|
||||
gated.append((e.id, action, fields))
|
||||
if e.id == "test-worker":
|
||||
raise DeliveryError("companion lane denied")
|
||||
return SimpleNamespace(status="approved")
|
||||
monkeypatch.setattr(cli, "_require_lane_approval", gate)
|
||||
monkeypatch.setattr(cli, "require_delivery_state", lambda *a: None)
|
||||
monkeypatch.setattr(cli, "_open_backend", lambda *a, **k: pytest.fail("no backend after a lane refusal"))
|
||||
command = data["delivery_config"]["exec_owner"]["command"]
|
||||
with pytest.raises(DeliveryError, match="companion lane denied"):
|
||||
> cli.cmd_exec(_cfg(tmp_path), SimpleNamespace(field=None, catalog=entry.id, command=command, mode="exec-env"))
|
||||
|
||||
tests/test_exec_owner_companions.py:165:
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
|
||||
cfg = Config(catalog_dir=PosixPath('/tmp/secrets-canonical-baseline-unsandboxed/test_each_lane_is_gated_separa0'), policy_di...authorization_policy_version='', authorization_min_approvals=1, pdp_url='', pdp_token_file=None, clock_trust_file=None)
|
||||
args = namespace(field=None, catalog='test-lane', command=['/tmp/secrets-canonical-baseline-unsandboxed/test_each_lane_is_gat.../dash', '/tmp/secrets-canonical-baseline-unsandboxed/test_each_lane_is_gated_separa0/owner/owner.sh'], mode='exec-env')
|
||||
|
||||
def cmd_exec(cfg: Config, args) -> int:
|
||||
from contextlib import ExitStack
|
||||
|
||||
from secrets_engine.exec_delivery import exec_with_secret
|
||||
from secrets_engine.exec_owner import resolve_companions, validate_delivery_target
|
||||
entry = get_entry(cfg.catalog_dir, args.catalog)
|
||||
field = args.field or (entry.fields[0] if entry.fields else "")
|
||||
session_detail: dict[str, object] = {}
|
||||
companion_sessions: dict[str, dict[str, object]] = {}
|
||||
# Refuse a substituted recipient before consuming approval or opening Bao.
|
||||
owner_digest = validate_delivery_target(entry, field, args.command, args.mode)
|
||||
companions = resolve_companions(entry, lambda cid: get_entry(cfg.catalog_dir, cid))
|
||||
command_name = args.command[0] if args.command else ""
|
||||
with ExitStack() as stack:
|
||||
evidence = stack.enter_context(_privileged_evidence(
|
||||
cfg,
|
||||
entry,
|
||||
"exec",
|
||||
detail={
|
||||
"command": command_name,
|
||||
"mode": args.mode,
|
||||
"field": field,
|
||||
"session": session_detail,
|
||||
"exec_owner_sha256": owner_digest,
|
||||
"companions": [lane.id for lane, _, _ in companions],
|
||||
},
|
||||
))
|
||||
# require approval + readiness before running.
|
||||
> decision = _require_lane_approval(
|
||||
cfg, entry, "exec", evidence, fields=(field,) if field else (),
|
||||
auth_args=args,
|
||||
)
|
||||
E TypeError: test_each_lane_is_gated_separately_before_backend.<locals>.gate() got an unexpected keyword argument 'auth_args'
|
||||
|
||||
src/secrets_engine/cli.py:588: TypeError
|
||||
=========================== short test summary info ============================
|
||||
FAILED tests/test_exec_owner_companions.py::test_each_lane_is_gated_separately_before_backend
|
||||
|
|
@ -0,0 +1,244 @@
|
|||
{
|
||||
"schema": "execute-ccr-accepted-intent-technical-assessment/v1",
|
||||
"date": "2026-10-11",
|
||||
"assessor": "NetKingdom source/canon technical reviewer",
|
||||
"review_kind": "Independent technical assessment using same inherited model; not different-model review and not formal foreign-owner acceptance",
|
||||
"scope": "Read-only exact local source/doctrine comparison; no policy activation, identity authentication or native action",
|
||||
"conclusion": "Accepted doctrine does not impose a universal human initiating principal or User/Tenant membership PIP gate for the first execute-ccr pilot. An authenticated admitted service caller, exact operation-specific human-control approval and successful consumption are architecturally compatible, but alone do not supply the complete operational entitlement.",
|
||||
"reasoning": [
|
||||
"Accepted v0.8 requires per-task bounded authority attributable to represented principal, Engine/conduit routes, caller reconstructability, verified input and successful approval consume with approval-free PDP canonical correspondence. Its words do not universally require the represented principal to be human.",
|
||||
"GH016 regulates the human APPROVER of a declared human-control approval. It expressly permits service-to-service approvals and does not decide which acts require human approval. A human approver does not authenticate or become the initiating caller.",
|
||||
"GH013 separates channel/store isolation, act scope and principal membership. Registration tenant is admissible for channel isolation but is not membership evidence. This conditional restriction does not itself impose membership on every metadata act.",
|
||||
"Platform proposed source already describes service:secrets-engine independently matched to caller subject and explicitly separates founder owner bootstrap from consumer permission. Secrets approval consumer uses its own fixed admitted service subject; issuer authentication is distinct from authorization.",
|
||||
"Access24c1f56 introduces a proposed human/directory/MFA/User+Tenant projection ceiling. The current package owner_admission=false denies all executions. It is a stricter proposed design choice, not proof of a universal accepted requirement. It cannot be silently enabled or bypassed. Existing lifecyclev2 apply authorization cannot stand in for execute-ccr."
|
||||
],
|
||||
"faithful_service_pilot_remaining_gates": [
|
||||
"Prepare and independently owner-review exact service-task policy/source successor; preserve proposed human variant and hard-refusal history. Do not toggle owner_admission or borrow legacy apply.",
|
||||
"Authenticate the actual service transport and bind its admitted native principal to PDP secrets-engine/type service using a published owner mapping. TokenReview system correspondence alone does not authenticate arbitrary CheckRequest.subject. Verify separate CCR38/OpenBao service provenance; decoded claims and role-only metadata are insufficient.",
|
||||
"Compile exact metadata CCR, catalogue, immutable owner source/body/target ordered plan, operation ID, budget/deadline into canonical request before approval issue. Bind service caller and any represented caller explicitly; never infer a human delegation from an approver signature.",
|
||||
"Obtain declared human-control approval from verified human principal through admitted approval surface; validate live served claim, PDP package/version, full submitted/enriched request and approval-free digest joins, then authenticated consume correspondence before any protected login/effect.",
|
||||
"Platform independently validates same sources/request/approval and durably admits the consumed attempt once; journal reserve/applying/terminal states and independently authenticated consume confirmation prevent replay. Founder owner envelope alone is insufficient.",
|
||||
"Separately owner/founder-admit execution grant, exact unexecuted disposable metadata CCR, route/source/target plan and ephemeral owner-held task token. Enforce actual body equality and native scope, readback, revoke, temporary cleanup, bounded expiry and unknown/no-retry recovery.",
|
||||
"Run required actual positive/negative/interruption/native owner proofs before pilot acceptance. Source assessment grants no native readiness or steady-state lifecycle adoption."
|
||||
],
|
||||
"named_human_route_applies_when": [
|
||||
"The selected operation actually claims to act on behalf of a named human rather than the admitted service as its principal; then owner-authenticated initiating identity/delegation correspondence is necessary and cannot be manufactured from cfg/environment/approval approver.",
|
||||
"An accepted operation-specific policy explicitly depends on principal human membership, MFA or directory provenance; then consume the authoritative required identity/User/Tenant facts with bounded freshness. Registration/store-isolation tenant cannot satisfy that requirement.",
|
||||
"Owners deliberately choose the currently proposed human-initiator variant as pilot contract; its missing initiating audience/client/provider/representation/PIP integration becomes a real contract gate, while remaining a chosen scope rather than universal doctrine."
|
||||
],
|
||||
"unresolved_authority_facts": [
|
||||
"No current live service-to-PDP initiating-principal mapping/authentication was proved by this read-only review.",
|
||||
"Exact execute-ccr policy grant/activation, callable executor, owner compiler, consume-confirmation integration, durable ledger, task-grant CCR and disposable native action remain unproved or proposed.",
|
||||
"Human-control approval, founder owner bootstrap and consumer PDP permission are distinct artifacts; none substitutes for the others.",
|
||||
"Any actual human represented principal and delegated operation require explicit review; existing approval tenant exact equality proves store isolation only."
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"role": "accepted_standard",
|
||||
"path": "/home/worsch/net-kingdom/canon/standards/security-layer-model_v0.8.md",
|
||||
"sha256": "3d8298560069ef471fba28d2b1245fb2309328f231dad1a667cdf0ce5a5a7c8b",
|
||||
"source_status": "accepted v0.8; proposed v0.9 excluded",
|
||||
"line_evidence": [
|
||||
{
|
||||
"start_line": 294,
|
||||
"end_line": 296,
|
||||
"quote": "1. **No standing credential.** An agent holds no long-lived credential of its\n own. Authority is issued per task, time-bounded under \u00a79.7, and attributable\n to the principal on whose behalf it acts."
|
||||
},
|
||||
{
|
||||
"start_line": 306,
|
||||
"end_line": 308,
|
||||
"quote": "4. **Every agent action is reconstructable as the caller's action**, bounded by\n \u00a79.6 \u2014 the archive shows the actions it received, not that it received all of\n them."
|
||||
},
|
||||
{
|
||||
"start_line": 1108,
|
||||
"end_line": 1111,
|
||||
"quote": " **The PEP MUST obtain a successful consume before the protected side\n effect.** Holding a claim with `valid_now: true`, or an ALLOW rendered\n against that claim, is not authority to act; the consume is. In-flight\n duplicate ALLOWs are expected and the CAS serializes use \u2014 a later"
|
||||
},
|
||||
{
|
||||
"start_line": 1125,
|
||||
"end_line": 1131,
|
||||
"quote": " **The correspondence is a digest, and it is the PDP's to define.** A consumer\n on this path MUST verify that the approval's recorded PDP digest equals the\n digest the PDP publishes **for the request with the approval evidence\n excluded** \u2014 `binding.approval_binding_digest` in `access-engine` \u2014 and MUST\n NOT use a claim that carries no such digest. Recomputing the approval engine's\n native binding from a `CheckRequest` is not a permitted fallback: it requires\n translating between two vocabularies, no mapping is published, and a wrong"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"role": "resolved_doctrine",
|
||||
"path": "/home/worsch/gate-house/decisions/decisions.md",
|
||||
"sha256": "d239605ee5fed841a49545d9d6a78de0d65e4ca4610989e5bd0adfc8232aebfc",
|
||||
"source_status": "GH013 and GH016 resolved owner doctrine",
|
||||
"line_evidence": [
|
||||
{
|
||||
"start_line": 2055,
|
||||
"end_line": 2059,
|
||||
"quote": "1. **Store isolation** \u2014 *did this caller arrive through a channel this store serves.* A\n property of the **channel**. This is what `approval-engine`'s exact-match gate tests,\n and it is what a registration-supplied tenant **is** adequate for: admission means\n arrived through a registered channel, the approver client is static and\n deployment-owned, and dynamic client registration is excluded."
|
||||
},
|
||||
{
|
||||
"start_line": 2060,
|
||||
"end_line": 2072,
|
||||
"quote": "2. **Act scope** \u2014 *which scope is this act being entered into.* A property of the\n **act**. `informed-decision`'s binding slice needs this, and it resolved the point by\n finding that its own `binding.target` already commits it \u2014 so the ruling required no\n new field, only a statement that `binding.target` is the act-scope and MUST NOT be\n derived from the token's `tenant` claim.\n3. **Principal membership** \u2014 *is this person a member of this zone.* A property of the\n **principal**. This is the one a registration-supplied tenant cannot carry, and the\n one \u00a71 reserves to the directory.\n\n`approval-engine` committed to the consequence without being asked: a registration-\nsupplied tenant is admissible for (1) and **not** for any doctrine turning on (3), and it\nasked to be held to that as *\"the point at which a sound check silently becomes an unsound\none\"*. Held. Note `GH-DEC-2026-016` \u00a75 is the first place it bites."
|
||||
},
|
||||
{
|
||||
"start_line": 2578,
|
||||
"end_line": 2580,
|
||||
"quote": "### 1. Where an approval discharges a human-in-the-loop control, the approver MUST be a human principal\n\n**And `approval-engine` MUST refuse a non-human bind at issue, rather than record it.**"
|
||||
},
|
||||
{
|
||||
"start_line": 2605,
|
||||
"end_line": 2611,
|
||||
"quote": "**Service-to-service approvals are legitimate** and this ruling does not disturb them.\nThe requirement attaches where an approval is **declared** as discharging a human-in-the-\nloop or dual-control requirement.\n\n**Declared at issue, never inferred.** A human approver who happens to be present is not\na declaration, and an approval MUST NOT be retroactively read as human-discharging\nbecause its entries turn out to be human. This is the shape `approval-engine` itself"
|
||||
},
|
||||
{
|
||||
"start_line": 2637,
|
||||
"end_line": 2648,
|
||||
"quote": "Not ruled: what makes a principal *human* \u2014 that is `key-cape`'s and the identity\nlayer's, and note it interacts with `GH-DEC-2026-013` \u00a75. A principal-type claim is\nsubject to A-16 like any other: if `human` is reachable by two routes \u2014 asserted by the\ndirectory about the person, or supplied by a registration about the client \u2014 the record\nmust say which, and a human-in-the-loop control MUST NOT be discharged on a\nregistration-supplied claim. Refusing a service principal while accepting an unverified\nassertion of humanity would move the defect rather than close it.\n\nNot ruled: which acts require human approval. That is doctrine, it is Gate House's, and\nit is not settled here \u2014 this record says what a *declared* human control requires, not\nwhere such controls are mandatory.\n"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"role": "identity_contract",
|
||||
"path": "/home/worsch/key-cape/docs/tenant-claim-contract.md",
|
||||
"sha256": "a7ce4f59c39f6b953a0ebb0592329e20e7830e64d7297abd05df72b758a23483",
|
||||
"source_status": "Identity owner contract; conditional membership distinction",
|
||||
"line_evidence": [
|
||||
{
|
||||
"start_line": 21,
|
||||
"end_line": 24,
|
||||
"quote": "| Service (`client_credentials`) | The client's `tenant` field. Required by config validation \u2014 a `client_credentials` client without `serviceSubject` and `tenant` fails startup validation. | In `config/service-clients.example.yaml`: `tenant:platform` for the platform approval clients, `codex-railiance-platform` and `secrets-engine-openbao` (operator correction, 2026-09-27). |\n| Human (`authorization_code`) | The directory user's tenant, falling back to the legacy workload default when unset. | Directory value, else `tenant:coulomb`. |\n\n`tenant`, `tenant_hint`, `audience` and `resource` request parameters cannot"
|
||||
},
|
||||
{
|
||||
"start_line": 212,
|
||||
"end_line": 227,
|
||||
"quote": "> Their tenant comparison is **store isolation**. It answers *does this caller\n> belong to the store this engine serves*, not *is this human a member of the\n> platform zone*. For that question a registration-supplied tenant is admissible:\n> admission means arriving through a channel the platform registered, and the\n> approver client is static and deployment-owned.\n>\n> **A registration-supplied tenant is not admissible for any doctrine that turns\n> on the approver's own membership.** \"An approver must be a member of the\n> platform zone\" is a fact about the person, and this claim cannot carry it. No\n> such doctrine exists today. If one is issued, it needs a directory-sourced\n> claim \u2014 and an exact-match check does not become that claim merely by matching.\n\nThat is the same conclusion as GH-DEC-2026-013 \u00a71 reached independently from the\nconsuming side, and it is the practical reason `tenant_source` exists: a consumer\nwhose check means *store isolation* can accept `registration`, and a consumer\nwhose check means *membership* must require `directory`. The claim does not know"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"role": "platform_design",
|
||||
"path": "/home/worsch/railiance-platform/docs/credential-lane-designs/secrets-engine-task-execution-entitlement.md",
|
||||
"sha256": "180b979d18b3f145993575899fac8681fc9865b8c218638bb62b068ba5337bf4",
|
||||
"source_status": "Proposed owner design; not native permission",
|
||||
"line_evidence": [
|
||||
{
|
||||
"start_line": 3,
|
||||
"end_line": 6,
|
||||
"quote": "Prepared under RPF-WP-0035-T11; implementation belongs to RPF-WP-0035-T12.\nThis is a proposed source design, not an installed endpoint, approved CCR,\nfounder disposition or native acceptance. CCR-2026-0038 stays login-self-only.\nNo service default changes and no standing service administrative ACL."
|
||||
},
|
||||
{
|
||||
"start_line": 45,
|
||||
"end_line": 50,
|
||||
"quote": "Envelope fields: unique `operation_id`; `action=execute-ccr`; platform realm and\nstage; service principal `service:secrets-engine` of type service; consumer catalogue\nrevision/hash; exact CCR id/content SHA256; all authoritative generated source/body\nSHA256s; ordered endpoint/method/payload digests; exact canonical CheckRequest and\nits digest; served approval id/claim binding; PDP DecisionEnvelope id/package/version,\nnot-before/expiry; successful consume binding; owner admission/source revision."
|
||||
},
|
||||
{
|
||||
"start_line": 58,
|
||||
"end_line": 65,
|
||||
"quote": "`apply` decision. Service identity and caller subject are independently matched;\na caller assertion of `service:secrets-engine`, a decoded JWT or a successful\nhuman OIDC login is insufficient. Authenticate against CCR38's exact native role\nand independently verify lookup creation path, role, effective token/identity\npolicies and service entity provenance. If the existing metadata does not bind\nsubject adequately, use KeyCape signature/issuer/audience/expiry validation plus\nowner-correlated native role login; do not label role-only metadata a trusted subject.\n"
|
||||
},
|
||||
{
|
||||
"start_line": 72,
|
||||
"end_line": 74,
|
||||
"quote": " The founder's independently approved owner envelope is separate bootstrap\n authority; it grants no consumer lifecycle action by itself.\n2. Platform durably reserves `(approval_id, request_digest, operation_id)` with a"
|
||||
},
|
||||
{
|
||||
"start_line": 81,
|
||||
"end_line": 91,
|
||||
"quote": " the served claim/PDP and verifies consume with approval-engine's authenticated\n replay/verification contract. If this is unavailable, it refuses execution.\n4. Bind the authenticated service identity after successful consume. Authenticate\n once; refusal or timeout burns this admission. Platform atomically transitions\n the same reservation to `consume-confirmed`, then `applying` before any effect.\n A racing second call cannot acquire the state. Consume idempotency is not permission\n to execute twice. Repeated calls return the recorded terminal receipt only.\n5. Inside the founder owner envelope, mint an **owner-held ephemeral task token**\n with only exact target paths. Apply exactly the pinned typed plan, compare\n value-free native readback, revoke the task token, remove only this operation's\n temporary grant role/policy after revoke, and finalize the durable receipt."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"role": "approval_consumer",
|
||||
"path": "/home/worsch/secrets-engine/src/secrets_engine/approval_auth.py",
|
||||
"sha256": "6f3b033e7928e1c527bc19f5a1e01bf243540769a8646bd8cd47268da25637b5",
|
||||
"source_status": "Existing approved consumer identity source; independent of native OpenBao identity",
|
||||
"line_evidence": [
|
||||
{
|
||||
"start_line": 28,
|
||||
"end_line": 46,
|
||||
"quote": "\n@dataclass(frozen=True)\nclass KeyCapeApprovalAuthConfig(KeyCapeServiceAuthConfig):\n client_id: str = \"secrets-engine-approval\"\n audience: str = \"approval-engine\"\n tenant: str = \"tenant:platform\"\n scope: str = \"approval:read\"\n max_future_iat_seconds: int = field(default=30, init=False)\n\n def __post_init__(self) -> None:\n # Deliberately do not relax the separate OpenBao profile's validator.\n if (\n self.client_id != \"secrets-engine-approval\"\n or self.audience != \"approval-engine\"\n or self.subject != \"service:secrets-engine\"\n or self.tenant != \"tenant:platform\"\n or self.required_role != \"secrets-engine\"\n or self.scope not in {\"approval:read\", \"approval:consume\"}\n or self.max_future_iat_seconds != 30"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"role": "descriptor",
|
||||
"path": "/home/worsch/secrets-engine/src/secrets_engine/execution_contract.py",
|
||||
"sha256": "75323911c229cb8b49d5116706a329c3f9ec2efdbeab6bfac8dbf5b92729f14a",
|
||||
"source_status": "Source-only proposed descriptor; shape not execution authority",
|
||||
"line_evidence": [
|
||||
{
|
||||
"start_line": 1,
|
||||
"end_line": 6,
|
||||
"quote": "\"\"\"Closed, immutable metadata descriptor; shape is never execution authority.\n\nThis source-only compiler input cannot grant an action, authenticate a principal,\nprove owner source authenticity or open a backend. Those integration gates remain\noutside this type. Existing actions cannot borrow the new descriptor.\n\"\"\""
|
||||
},
|
||||
{
|
||||
"start_line": 145,
|
||||
"end_line": 157,
|
||||
"quote": " raise DecisionError('execution_contract requires execute-ccr action')\n return\n if type(contract) is not ExecutionContract:\n raise DecisionError('execute-ccr requires typed execution_contract')\n value = contract.as_dict()\n if request['resource']['attributes']['stage'] != 'prod':\n raise DecisionError('execute-ccr requires prod stage')\n if request['tenant'] != 'tenant:platform':\n raise DecisionError('execute-ccr requires platform tenant')\n if value['catalog_sha256'] != catalog_target_digest(request['context']['catalog_target']):\n raise DecisionError('execution_contract catalog target does not match')\n request['context']['execution_contract'] = value\n request['context']['human_control'] = True"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"role": "existing_lifecycle",
|
||||
"path": "/home/worsch/access-engine/examples/secrets-engine/policy_package.md",
|
||||
"sha256": "657fa9312c9dcabee059ec31c89ee13396fe9aa54d852edc9e6559a74bbc139a",
|
||||
"source_status": "Existing lifecycle v2; twelve actions and service subject; execute-ccr not included",
|
||||
"line_evidence": [
|
||||
{
|
||||
"start_line": 289,
|
||||
"end_line": 315,
|
||||
"quote": "known_subjects := {\"secrets-engine\"}\n\nknown_tenant := \"tenant:platform\"\n\n# Read through object.get: an absent `tenant` makes a bare `input.tenant !=`\n# comparison undefined, which drops the branch and reports `no_matching_rule`\n# instead of the real cause. Defaulting to \"\" keeps the ladder truthful.\nrequest_tenant := object.get(input, \"tenant\", \"\")\n\ndecision := {\"effect\": \"allow\", \"reason\": \"catalog_lane_policy_matched\"} if {\n allowed\n} else := {\"effect\": \"deny\", \"reason\": first_denial} if {\n true\n}\n\nwell_formed if {\n request_tenant == known_tenant\n input.resource.system == \"secrets-engine\"\n input.resource.type == \"secret-catalog-lane\"\n input.action in valid_actions\n input.subject.type == \"service\"\n input.subject.id in known_subjects\n}\n\nallowed if {\n well_formed\n not input.action in dual_control_actions"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"role": "proposed_human_variant",
|
||||
"path": "/home/worsch/access-engine/examples/secrets-engine-task-execution/policy_package.md",
|
||||
"sha256": "a790ecfbc8906c5a30e3eb066f391330d73d19b8cd46814d1d9778f24774d9e7",
|
||||
"source_status": "Proposed hard-denying human-initiator policy source from24c1f56f00e55468a58d89611b160dd6469ed667",
|
||||
"line_evidence": [
|
||||
{
|
||||
"start_line": 1,
|
||||
"end_line": 6,
|
||||
"quote": "---\nid: secrets-engine.task-execution\nname: Secrets exact task execution\nnamespace: secrets-engine:secret-catalog-lane\nversion: v1\nstatus: proposed"
|
||||
},
|
||||
{
|
||||
"start_line": 20,
|
||||
"end_line": 26,
|
||||
"quote": "\nSource only. The owner-admission constant is false because no authenticated\ninitiating-principal projection or User/Tenant membership provider has been\nadmitted. Request flags, even `verified=true`, cannot change that constant.\nActivating this package today denies every request. It does not replace lifecycle\nv2. Any successor that changes owner_admission requires review of the actual\nserver injection boundary and authoritative providers, not a values switch."
|
||||
},
|
||||
{
|
||||
"start_line": 34,
|
||||
"end_line": 36,
|
||||
"quote": "owner_admission := false\n\ndefault decision := {\"effect\": \"deny\", \"reason\": \"initiating_provider_unadmitted\"}"
|
||||
},
|
||||
{
|
||||
"start_line": 81,
|
||||
"end_line": 100,
|
||||
"quote": " p := input.context.task_execution_projection\n p.version == \"proposed-task-execution-projection/v1\"\n p.principal_type == \"human\"\n p.subject != \"\"\n p.tenant == input.tenant\n p.tenant_source == \"directory\"\n p.mfa == true\n p.transport_principal == \"system:serviceaccount:secrets-engine:secrets-engine\"\n p.execution_contract_digest == concat(\"\", [\"sha256:\", crypto.sha256(json.marshal(c))])\n p.resource_id == input.resource.id\n p.membership_source == \"user-engine\"\n p.tenant_state_source == \"tenant-engine\"\n p.member_active == true\n p.tenant_active == true\n p.not_after_ns > time.now_ns()\n p.not_after_ns <= time.parse_rfc3339_ns(c.operation_deadline)\n input.context.approval.kind == \"approval-claim\"\n input.context.approval.binding.human_control == true\n}\n"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"role": "proposed_provider_variant",
|
||||
"path": "/home/worsch/access-engine/docs/task-execution-initiating-provider-contract.md",
|
||||
"sha256": "1d17da2129ba1edc84c129ac4d8129f66675ce3d07f0047aa632c451d2edb81a",
|
||||
"source_status": "Proposed provider ceiling; no runtime grant",
|
||||
"line_evidence": [
|
||||
{
|
||||
"start_line": 3,
|
||||
"end_line": 5,
|
||||
"quote": "Prepared for Secrets SECRETS-WP-0013-T01 and Platform RPF-WP-0035-T12.\nThis is a proposed Access source contract. It adopts no new identity protocol,\nissuer/client/key, runtime provider, source standard or native entitlement."
|
||||
},
|
||||
{
|
||||
"start_line": 45,
|
||||
"end_line": 58,
|
||||
"quote": " parallel identity engine or caller-authored membership provider is introduced.\n* Approval Engine supplies the served approval claim and authenticated consumption\n facts. Its human approver can differ from the initiating human: a successful\n approval is not initiating identity. Existing claim/PDP canonical correspondence\n and later independent consume confirmation remain mandatory.\n\nKeyCape explicitly states registration-supplied tenant is store isolation, not\nhuman membership. The source verifier therefore requires directory provenance,\nexact tenant:platform, verified MFA within 300 seconds and a currently valid\nRS256 token. This strict proposed ceiling currently refuses registration-only\nhumans; changing that requirement requires owner-reviewed doctrine, not relabeling\nregistration as directory. Cryptographic verification alone still grants nothing:\nUser/Tenant membership, representation and exact operation are separate facts.\n"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"native_executed": false,
|
||||
"credentials_read": false,
|
||||
"foreign_formal_owner_approval": false,
|
||||
"new_standard_decision": false,
|
||||
"runtime_permission_granted": false
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
# execute-ccr accepted-source assessment — 2026-10-11
|
||||
|
||||
Accepted doctrine does not universally require a human initiating principal or User/Tenant membership gate. A service pilot is architecturally compatible with exact human-control approval and authenticated consume, subject to the complete execution contract. Human approver and initiating caller are distinct; founder bootstrap grants no consumer permission.
|
||||
|
||||
The current human-initiator task policy is proposed and hard-denying. A service pilot needs a reviewed exact source/policy successor, authenticated service-to-PDP subject mapping, exact source/body/request/approval binding, independent consume confirmation, durable one-attempt admission, bounded owner-held task entitlement and native readback/revocation/cleanup evidence. Legacy apply cannot substitute.
|
||||
|
||||
A named-human route is required if the operation actually claims human representation or a chosen/accepted operation policy requires human identity or membership. Such evidence cannot be inferred from approval or registration tenant.
|
||||
|
||||
The adjacent JSON freezes source hashes, line quotations, remaining gates and limitations. This is same-inherited-model independent technical assessment, not different-model review, formal foreign-owner acceptance, native readiness or a new standard decision. No native operations or credential reads occurred.
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"memo_id": "infd-20261011-key39-source-design-r1",
|
||||
"version": 1,
|
||||
"review_memo_id": "review-62626f54-0212-4684-9b45-0a7222d61957",
|
||||
"intake_state": "ready",
|
||||
"stale": false,
|
||||
"review_path_verified": true,
|
||||
"human_dispositions": 1
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"status": "confirmed_founder_acceptance",
|
||||
"normalized_outcome": {
|
||||
"memo_id": "infd-20261011-key39-source-design-r1",
|
||||
"request_identity_origin": "fixed_authenticated_request_route",
|
||||
"review": {
|
||||
"memo_id": "review-62626f54-0212-4684-9b45-0a7222d61957",
|
||||
"intake_state": "ready",
|
||||
"stale": false
|
||||
},
|
||||
"dispositions": [
|
||||
{
|
||||
"submission_state": "confirmed",
|
||||
"disposition": {
|
||||
"id": "disp-870f9c1b-0444-4216-ae7f-f5463d590e36",
|
||||
"at": "2026-10-11T17:19:01Z",
|
||||
"memo_id": "review-62626f54-0212-4684-9b45-0a7222d61957",
|
||||
"memo_version": 1,
|
||||
"verb": "accept",
|
||||
"approval_id": "ca118afc-d746-4454-a5b9-9b387b120cd9",
|
||||
"actor": {
|
||||
"kind": "person",
|
||||
"sub": "uid=platform-root,ou=people,dc=netkingdom,dc=local"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"observed_at": "2026-10-11T17:30:47.080081+00:00"
|
||||
},
|
||||
"scope": "KEY39 source-design only; no credential access or attended execution authority",
|
||||
"native_key39_action_performed": false,
|
||||
"source_command_sha256": "36e20813596f3ddbb86e01fd0b838867ece2f4916c5880305cf12cd61b567f89",
|
||||
"source_inventory_sha256": "aea196db9e513900d5e7165455d6e9c3dc68749a606dc219ec340ac595642cc0"
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"memo_id": "infd-20261011-key39-source-design-r1", "artifacts": {"lifecycle-commands.json": "36e20813596f3ddbb86e01fd0b838867ece2f4916c5880305cf12cd61b567f89", "source-inventory.json": "aea196db9e513900d5e7165455d6e9c3dc68749a606dc219ec340ac595642cc0", "submit_reviewed_source.py": "8e8846f79989db25900717399b3b5f8fed2510521f5a5dabd35483d0f2bb9f3f", "build_packet.py": "ad4886e5946eafd88a7d3578e2c363d6174223391b792dbd052f23defb9a9267", "preflight.py": "0e19d2ff049efbe1556e11a4f27ddbe9fb2e892155b7a36dbdfa37832ac4c572", "correlation.py": "7d03880678f60b6aabf5c5d27cc56fb66cfa27030f329f04dcee7c3f878649e6"}, "authoring_program_sha256": "0c7ec02f9bae5d231e62baf7419ebc6a72b8ece93c3b36414e4ea29336df0867", "readiness_sha256": "d65157553e99051078d21ddcb48643420d7f187bd84b20c3a76174dbdf46ac29", "status": "submission_unverified", "do_not_blindly_replay": true}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"memo_id": "infd-20261011-key39-source-design-r1",
|
||||
"artifacts": {
|
||||
"lifecycle-commands.json": "36e20813596f3ddbb86e01fd0b838867ece2f4916c5880305cf12cd61b567f89",
|
||||
"source-inventory.json": "aea196db9e513900d5e7165455d6e9c3dc68749a606dc219ec340ac595642cc0",
|
||||
"submit_reviewed_source.py": "8e8846f79989db25900717399b3b5f8fed2510521f5a5dabd35483d0f2bb9f3f",
|
||||
"build_packet.py": "ad4886e5946eafd88a7d3578e2c363d6174223391b792dbd052f23defb9a9267",
|
||||
"preflight.py": "0e19d2ff049efbe1556e11a4f27ddbe9fb2e892155b7a36dbdfa37832ac4c572",
|
||||
"correlation.py": "7d03880678f60b6aabf5c5d27cc56fb66cfa27030f329f04dcee7c3f878649e6"
|
||||
},
|
||||
"authoring_program_sha256": "0c7ec02f9bae5d231e62baf7419ebc6a72b8ece93c3b36414e4ea29336df0867",
|
||||
"readiness_sha256": "d65157553e99051078d21ddcb48643420d7f187bd84b20c3a76174dbdf46ac29",
|
||||
"version": 1,
|
||||
"review_memo_id": "review-62626f54-0212-4684-9b45-0a7222d61957",
|
||||
"queue_status": "pending",
|
||||
"human_dispositions": 0,
|
||||
"native_key39_action_performed": false,
|
||||
"register_event_id": "00c69fdd-dada-465c-93d2-10e1290bf67b",
|
||||
"publication_event_id": "3d0e05ba-bae2-4ff1-af42-af94ea36bc5c",
|
||||
"review_event_id": "d699b583-6dcf-4b85-9bb0-80b8aa380b79",
|
||||
"status": "authored_and_queued"
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
import json,pathlib,subprocess
|
||||
memo='infd-20261011-key39-source-design-r1'
|
||||
review='review-62626f54-0212-4684-9b45-0a7222d61957'
|
||||
remote='''import json,signal,urllib.request
|
||||
from api.services.memo_dispatch import ORIGIN,NoRedirect,token_file
|
||||
class Refused(Exception):pass
|
||||
def expire(*args):raise Refused()
|
||||
signal.signal(signal.SIGALRM,expire);signal.setitimer(signal.ITIMER_REAL,20)
|
||||
try:
|
||||
opener=urllib.request.build_opener(urllib.request.ProxyHandler({}),NoRedirect())
|
||||
request=urllib.request.Request(ORIGIN+'/v1/decisions/'+memo+'/outcomes?version=1',headers={'Authorization':'Bearer '+token_file('/var/run/secrets/state-hub/informed-decision/lifecycle-token')})
|
||||
with opener.open(request,timeout=15) as response:
|
||||
raw=response.read(1024*1024+1)
|
||||
if response.status!=200 or len(raw)>1024*1024:raise Refused()
|
||||
data=json.loads(raw)
|
||||
r=data['review']
|
||||
if r.get('memo_id')!=review or r.get('stale') is not False:raise Refused()
|
||||
state=r.get('intake_state')
|
||||
if state not in ['not_submitted','creating','created','ready']:raise Refused()
|
||||
ready=state=='ready' and r.get('path')=='/review?memo_id='+review
|
||||
print(json.dumps({'memo_id':memo,'version':1,'review_memo_id':review,'intake_state':state,'stale':False,'review_path_verified':ready,'human_dispositions':len(data['dispositions'])}))
|
||||
except BaseException:
|
||||
print(json.dumps({'memo_id':memo,'status':'read_unverified'}));raise SystemExit(1) from None
|
||||
finally:signal.setitimer(signal.ITIMER_REAL,0)
|
||||
'''
|
||||
program='memo='+repr(memo)+'\nreview='+repr(review)+'\n'+remote
|
||||
try:
|
||||
run=subprocess.run(['ssh','railiance01','kubectl -n state-hub exec -i deployment/state-hub-memo-dispatch -c dispatcher -- python -'],input=program,text=True,capture_output=True,timeout=35)
|
||||
result=json.loads(run.stdout)
|
||||
if run.returncode or result.get('memo_id')!=memo or result.get('review_memo_id')!=review:raise ValueError()
|
||||
except Exception:result={'memo_id':memo,'status':'read_unverified'}
|
||||
pathlib.Path('/tmp/key39-current-authoring-outcome.json').write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result))
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
import json,subprocess,pathlib,hashlib
|
||||
program="import json,re,urllib.request\nfrom datetime import datetime,timezone\nfrom api.services.memo_dispatch import ORIGIN,NoRedirect,token_file\nident='infd-20261011-key39-source-design-r1';expected='review-62626f54-0212-4684-9b45-0a7222d61957'\ntry:\n request=urllib.request.Request(ORIGIN+'/v1/decisions/'+ident+'/outcomes?version=1',headers={'Authorization':'Bearer '+token_file('/var/run/secrets/state-hub/informed-decision/lifecycle-token')})\n import signal\n signal.signal(signal.SIGALRM,lambda *args: (_ for _ in ()).throw(TimeoutError()))\n signal.setitimer(signal.ITIMER_REAL,25)\n opener=urllib.request.build_opener(urllib.request.ProxyHandler({}),NoRedirect())\n with opener.open(request,timeout=20) as response:\n raw=response.read(1024*1024+1)\n if response.code!=200 or len(raw)>1024*1024:raise ValueError('response_refused')\n value=json.loads(raw);review=value['review'];rows=value['dispositions']\n if not isinstance(review,dict) or review.get('memo_id')!=expected or review.get('stale') is not False or review.get('intake_state')!='ready' or not isinstance(rows,list):raise ValueError('review_refused')\n if len(rows)!=1:print(json.dumps({'status':'approval_pending','disposition_count':len(rows)}));raise SystemExit(3)\n row=rows[0];d=row['disposition'];founder={'kind':'person','sub':'uid=platform-root,ou=people,dc=netkingdom,dc=local'}\n if row.get('submission_state')!='confirmed' or d.get('verb')!='accept':print(json.dumps({'status':'approval_not_confirmed_accept'}));raise SystemExit(3)\n if d.get('actor')!=founder or d.get('memo_version')!=1 or d.get('memo_id')!=expected or not re.fullmatch('[a-f0-9-]{36}',d.get('approval_id','')) or not re.fullmatch('disp-[a-f0-9-]{36}',d.get('id','')):raise ValueError('founder_refused')\n accepted=datetime.fromisoformat(d['at'].replace('Z','+00:00'));now=datetime.now(timezone.utc)\n if accepted.tzinfo is None or accepted>now:raise ValueError('time_refused')\n normalized={'memo_id':ident,'request_identity_origin':'fixed_authenticated_request_route','review':{'memo_id':expected,'intake_state':'ready','stale':False},'dispositions':[{'submission_state':'confirmed','disposition':{k:d[k] for k in ['id','at','memo_id','memo_version','verb','approval_id','actor']}}],'observed_at':now.isoformat()}\n print(json.dumps({'status':'confirmed_founder_acceptance','normalized_outcome':normalized}),flush=True)\nexcept SystemExit:raise\nexcept Exception:print(json.dumps({'status':'native_readback_unverified'}),flush=True);raise SystemExit(1) from None\n"
|
||||
run=subprocess.run(['ssh','railiance01','kubectl -n state-hub exec -i deployment/state-hub-memo-dispatch -c dispatcher -- python -'],input=program,text=True,capture_output=True,timeout=35)
|
||||
try:result=json.loads(run.stdout)
|
||||
except Exception:raise SystemExit('Read unverified; protected transport suppressed')
|
||||
if run.returncode or result.get('status')!='confirmed_founder_acceptance':
|
||||
print(json.dumps({'status':result.get('status','unverified'),'native_key39_action_performed':False}));raise SystemExit(3)
|
||||
result['scope']='KEY39 source-design only; no credential access or attended execution authority'
|
||||
result['native_key39_action_performed']=False
|
||||
base=pathlib.Path('/home/worsch/the-custodian/docs/evidence/2026-10-10-security-consolidation/key39-source-design-publication')
|
||||
result['source_command_sha256']=hashlib.sha256((base/'reviewed-v3/lifecycle-commands.json').read_bytes()).hexdigest()
|
||||
result['source_inventory_sha256']=hashlib.sha256((base/'reviewed-v3/source-inventory.json').read_bytes()).hexdigest()
|
||||
target=base/'founder-source-disposition-readback-r1.json'
|
||||
with target.open('x') as f:json.dump(result,f,indent=2);f.write('\n')
|
||||
print(json.dumps(result))
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"manifest_sha256": "a093ecbb2cf4bf780ba5aca38c051183a550793a4ec2f464a6d466529bca5944",
|
||||
"source_checkout_hashes_verified": 12,
|
||||
"root_source_clone_packages_passed": [
|
||||
"internal/taskexecution",
|
||||
"internal/policy",
|
||||
"pkg/api"
|
||||
],
|
||||
"maker_test_events": 133,
|
||||
"runtime_admission": false,
|
||||
"scope": "Authenticated input preparation and structural candidate characterization only; full canonical/PDP/approval/consume/executor joins remain unimplemented.",
|
||||
"old_human_projection": "Original nanosecond shape explicitly refused; unchanged human policy hard closed; descriptor-only fixture preserves parity."
|
||||
}
|
||||
|
|
@ -0,0 +1,997 @@
|
|||
{
|
||||
"observed_at": "2026-10-11T17:52:34.950119+00:00",
|
||||
"scope": "same13 owner repositories; top-level authoritative workplan files, statuses proposed/ready/active/blocked/backlog; done/cancel tasks excluded; residuals counted separately",
|
||||
"repos": {
|
||||
"railiance-platform": {
|
||||
"open_plans": 10,
|
||||
"nonresidual_plans": 9,
|
||||
"residual_plans": 1,
|
||||
"unfinished_tasks": 31,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "RPF-WP-0015",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "RPF-WP-0015-T02",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0015-T03",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/railiance-platform/workplans/RPF-WP-0015-audit-core-custody-and-recovery-coordination.md",
|
||||
"sha256": "c1f694f78d38b1a6b643adf2969c1467ab11c5303e63bb9c3dafde37866d64d8"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0027",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "RPF-WP-0027-T03",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0027-T06",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/railiance-platform/workplans/RPF-WP-0027-keycape-live-secret-exposure-recovery.md",
|
||||
"sha256": "34cce4706d4a55ad850249ca511187d2d25936b189b484e0085dea3cc22ff1c4"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0035",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 8,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "RPF-WP-0035-T02",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0035-T03",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0035-T07",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0035-T06",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0035-T08",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0035-T09",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0035-T10",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0035-T12",
|
||||
"status": "progress"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/railiance-platform/workplans/RPF-WP-0035-credential-lane-implementation.md",
|
||||
"sha256": "f6b45e5d4674cf7c10c776fd6245926ebb12411d0e715d9dfaa825a0387657f1"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0036",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 3,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "RPF-WP-0036-T03",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0036-T04",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0036-T06",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/railiance-platform/workplans/RPF-WP-0036-platform-service-assurance.md",
|
||||
"sha256": "fccc981bd687dab33fe3a1ab15f4668d581acf18f86236d0cd66de02220f5b26"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0038",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "RPF-WP-0038-T04",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/railiance-platform/workplans/RPF-WP-0038-forgejo-scaleway-primary-coverage.md",
|
||||
"sha256": "7aa80be92e2b8681fa30fa999e9696d6a2b1da8b02c40a2c981ef28ff841b8f9"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0043",
|
||||
"status": "blocked",
|
||||
"flavor": "planning",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "RPF-WP-0043-T03",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0043-T04",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/railiance-platform/workplans/RPF-WP-0043-policy-nexus-argocd-onboarding.md",
|
||||
"sha256": "51ba2a570e148c39a2c9623f3ce232b156a0200d46a41816cd22d5bc37b9fa08"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0044",
|
||||
"status": "blocked",
|
||||
"flavor": "planning",
|
||||
"unfinished_tasks": 6,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "RPF-WP-0044-T03",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0044-T04",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0044-T05",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0044-T06",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0044-T07",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0044-T08",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/railiance-platform/workplans/RPF-WP-0044-argocd-phase-b-adopt-existing-applications.md",
|
||||
"sha256": "115e0b1d8c410bdc9f1bd3b4553ce620ae65c1e548c080147217e50b0addaf8e"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0048",
|
||||
"status": "blocked",
|
||||
"flavor": null,
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "RPF-WP-0048-T02",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/railiance-platform/workplans/RPF-WP-0048-activity-core-gitops-adoption.md",
|
||||
"sha256": "d42a1be1d5b7e187ce6b3416a27f6a6299bd51d3f622f96af0396e14d949dcd2"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0053",
|
||||
"status": "proposed",
|
||||
"flavor": null,
|
||||
"unfinished_tasks": 5,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "RPF-WP-0053-T01",
|
||||
"status": "progress"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0053-T02",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0053-T03",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0053-T04",
|
||||
"status": "todo"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0053-T05",
|
||||
"status": "progress"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/railiance-platform/workplans/RPF-WP-0053-coulomb-paired-backup-admission.md",
|
||||
"sha256": "b53773c830dd3886a232a5a575a01ba2e1c75afe259cbe6c753096ee6f5e5449"
|
||||
},
|
||||
{
|
||||
"id": "RPF-WP-0055",
|
||||
"status": "backlog",
|
||||
"flavor": "residual",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "RPF-WP-0055-T01",
|
||||
"status": "todo"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/railiance-platform/workplans/RPF-WP-0055-keycape-client-secret-rotation-residual.md",
|
||||
"sha256": "a551c122dd32ba8ef8579c4c3af97217aa48b61a0939b4db0dcd652e22511b79"
|
||||
}
|
||||
]
|
||||
},
|
||||
"net-kingdom": {
|
||||
"open_plans": 7,
|
||||
"nonresidual_plans": 7,
|
||||
"residual_plans": 0,
|
||||
"unfinished_tasks": 17,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "NK-WP-0011",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 8,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "NK-WP-0011-T02",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0011-T03",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0011-T04",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0011-T05",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0011-T06",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0011-T07",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0011-T08",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0011-T09",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/net-kingdom/workplans/NK-WP-0011-enterprise-federation-saml.md",
|
||||
"sha256": "8961529cbfccdccfe81c50f5a79de9d61bcc10bc63e37820297c2f7a0414d6b9"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0022",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "NK-WP-0022-T08",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/net-kingdom/workplans/NK-WP-0022-railiance01-identity-cutover-and-coulombcore-retirement.md",
|
||||
"sha256": "ea4c280081425b0a4d3ba3eec780db2a18aff0c37d73b1c3fbcd07a1a50962e6"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0027",
|
||||
"status": "blocked",
|
||||
"flavor": "planning",
|
||||
"unfinished_tasks": 3,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "NK-WP-0027-T02",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0027-T03",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0027-T06",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/net-kingdom/workplans/NK-WP-0027-reef-placement-reconciliation.md",
|
||||
"sha256": "72a1e333b01859a09be2e840b444ecd8543d0016bbc520977f9b89420f3d4ff1"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0031",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "NK-WP-0031-T04",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/net-kingdom/workplans/NK-WP-0031-deterministic-posture-feedback.md",
|
||||
"sha256": "64f0a4294d86c01c17ec4e3eb7395b5861e05717ff77cab5999c250d27d5467a"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0035",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "NK-WP-0035-T04",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/net-kingdom/workplans/NK-WP-0035-emission-cadence-security-profile.md",
|
||||
"sha256": "a6537be4a4aaaac5f399eb929089ca8915bc61db81e0c911dfa289d5101bcea8"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0040",
|
||||
"status": "blocked",
|
||||
"flavor": "planning",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "NK-WP-0040-T02",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/net-kingdom/workplans/NK-WP-0040-execution-attribution-receipt.md",
|
||||
"sha256": "e06fc550bbb0bf28390bbf0a70f4aafdf5e5f4263d95acc8bc440c0f9935f8f7"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0048",
|
||||
"status": "active",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "NK-WP-0048-T06",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "NK-WP-0048-T07",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/net-kingdom/workplans/NK-WP-0048-security-case-types.md",
|
||||
"sha256": "c5f0e3bce81ae662d04158689ee250a54af36e17c5bac32858ba889795597001"
|
||||
}
|
||||
]
|
||||
},
|
||||
"access-engine": {
|
||||
"open_plans": 4,
|
||||
"nonresidual_plans": 4,
|
||||
"residual_plans": 0,
|
||||
"unfinished_tasks": 14,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "FLEX-WP-ADHOC-2026-10-03",
|
||||
"status": "blocked",
|
||||
"flavor": null,
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "FLEX-WP-ADHOC-2026-10-03-T02",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/access-engine/workplans/ADHOC-2026-10-03.md",
|
||||
"sha256": "5bb023f1e6064cf6ef6626c9d182a51be838e1c09f79404141ec773aaed26952"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0020",
|
||||
"status": "blocked",
|
||||
"flavor": "planning",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "FLEX-WP-0020-T11",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/access-engine/workplans/FLEX-WP-0020-repository-identity-migration.md",
|
||||
"sha256": "7e1c1a3b888e93cdce274dac8d2b3b6149980ff10ad2b6fe2f3f100f05ed586f"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0031",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 4,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "FLEX-WP-0031-T02",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0031-T06",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0031-T04",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0031-T08",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/access-engine/workplans/FLEX-WP-0031-decision-record-emission.md",
|
||||
"sha256": "24d228f33a1a76f266ecf8ca9d403d885717df08ba08714eda928a7b1f3007ad"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0036",
|
||||
"status": "active",
|
||||
"flavor": null,
|
||||
"unfinished_tasks": 8,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "FLEX-WP-0036-T01",
|
||||
"status": "progress"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0036-T02",
|
||||
"status": "progress"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0036-T03",
|
||||
"status": "todo"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0036-T04",
|
||||
"status": "progress"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0036-T05",
|
||||
"status": "todo"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0036-T06",
|
||||
"status": "todo"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0036-T07",
|
||||
"status": "todo"
|
||||
},
|
||||
{
|
||||
"id": "FLEX-WP-0036-T08",
|
||||
"status": "todo"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/access-engine/workplans/FLEX-WP-0036-runtime-rename-access-engine.md",
|
||||
"sha256": "46090a45d9178da213515acdaca8e03a6967e3300d08936dc5ce31dd8bb3a889"
|
||||
}
|
||||
]
|
||||
},
|
||||
"secrets-engine": {
|
||||
"open_plans": 5,
|
||||
"nonresidual_plans": 5,
|
||||
"residual_plans": 0,
|
||||
"unfinished_tasks": 7,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "SECRETS-WP-0006",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "SECRETS-WP-0006-T05",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "SECRETS-WP-0006-T06",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/secrets-engine/workplans/SECRETS-WP-0006-catalog-lane-adoption.md",
|
||||
"sha256": "a5d6169fe080f1faac341a43a4c98b4a4dd85e2332740f7c1dd170322a1ddd7a"
|
||||
},
|
||||
{
|
||||
"id": "SECRETS-WP-0007",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "SECRETS-WP-0007-T07",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/secrets-engine/workplans/SECRETS-WP-0007-production-lifecycle-hardening.md",
|
||||
"sha256": "f15969e76d7e5b59abad2d2395bb3a6f2b73a63ee523b1a55647b308ff7f8f1a"
|
||||
},
|
||||
{
|
||||
"id": "SECRETS-WP-0008",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "SECRETS-WP-0008-T06",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/secrets-engine/workplans/SECRETS-WP-0008-layer-model-lifecycle-conformance.md",
|
||||
"sha256": "5f26109e3b5ca3657fa9d027b83d7feeeb876e9fe6b2a4713b569d95826e2d10"
|
||||
},
|
||||
{
|
||||
"id": "SECRETS-WP-0009",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "SECRETS-WP-0009-T03",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/secrets-engine/workplans/SECRETS-WP-0009-glas-claude-native-delivery.md",
|
||||
"sha256": "9f97a7bc3724fdac82dacc6821d57a57061c7b1243792aedf814c3bd3173bbdc"
|
||||
},
|
||||
{
|
||||
"id": "SECRETS-WP-0013",
|
||||
"status": "proposed",
|
||||
"flavor": "planning",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "SECRETS-WP-0013-T01",
|
||||
"status": "progress"
|
||||
},
|
||||
{
|
||||
"id": "SECRETS-WP-0013-T03",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/secrets-engine/workplans/SECRETS-WP-0013-task-scoped-openbao-execution.md",
|
||||
"sha256": "fd9a1330ebe1b0601de10d545d04227c84cdec64266636d58d6c55822c0385e6"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ops-mason": {
|
||||
"open_plans": 5,
|
||||
"nonresidual_plans": 5,
|
||||
"residual_plans": 0,
|
||||
"unfinished_tasks": 8,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "MASON-WP-0004",
|
||||
"status": "blocked",
|
||||
"flavor": "planning",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "MASON-WP-0004-T03",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "MASON-WP-0004-T04",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/ops-mason/workplans/MASON-WP-0004-credential-inventory-descriptions.md",
|
||||
"sha256": "618d725ca72407f549c85b79fe77c310ce5070d6cdc5b53251b0017779c451a9"
|
||||
},
|
||||
{
|
||||
"id": "MASON-WP-0005",
|
||||
"status": "blocked",
|
||||
"flavor": "planning",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "MASON-WP-0005-T05",
|
||||
"status": "progress"
|
||||
},
|
||||
{
|
||||
"id": "MASON-WP-0005-T06",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/ops-mason/workplans/MASON-WP-0005-fluid-telegram-operator-credential-lane.md",
|
||||
"sha256": "955492213e46e1dacbecfec08f49718f13bd3a34cde701bdf82f3b5cf09bba7e"
|
||||
},
|
||||
{
|
||||
"id": "MASON-WP-0006",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "MASON-WP-0006-T06",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/ops-mason/workplans/MASON-WP-0006-readiness-tier-check.md",
|
||||
"sha256": "c0de2cd64c3cafba1904ade39bb156ee45ee3d6712340efa9f44dd80ec6da104"
|
||||
},
|
||||
{
|
||||
"id": "MASON-WP-0009",
|
||||
"status": "blocked",
|
||||
"flavor": "planning",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "MASON-WP-0009-T05",
|
||||
"status": "progress"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/ops-mason/workplans/MASON-WP-0009-keycape-secrets-engine-openbao-client-custody.md",
|
||||
"sha256": "9bea9cb4f2619c42a6cf3a7cf1fb14edc8539d702c437939b397ad9ebe1ce7d6"
|
||||
},
|
||||
{
|
||||
"id": "MASON-WP-0010",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "MASON-WP-0010-T03",
|
||||
"status": "progress"
|
||||
},
|
||||
{
|
||||
"id": "MASON-WP-0010-T04",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/ops-mason/workplans/MASON-WP-0010-security-case-materialization.md",
|
||||
"sha256": "3d61801217d9c251b35c557b1144b891079f32174c9031e5d638cd1a4312834c"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ops-warden": {
|
||||
"open_plans": 5,
|
||||
"nonresidual_plans": 5,
|
||||
"residual_plans": 0,
|
||||
"unfinished_tasks": 8,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "WARDEN-WP-0027",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WARDEN-WP-0027-T02",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/ops-warden/workplans/WARDEN-WP-0027-credential-governance-lockdown.md",
|
||||
"sha256": "28fce258d135801524441220bf647c06f0fcbce3f200d93a30876ce3fb2dba69"
|
||||
},
|
||||
{
|
||||
"id": "WARDEN-WP-0034",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WARDEN-WP-0034-T05",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/ops-warden/workplans/WARDEN-WP-0034-layer-model-v07-conformance.md",
|
||||
"sha256": "b8f119a0b39c0577f95144d5c51ca7eb467286fabf1ab4245cfc8b9c329c4cfc"
|
||||
},
|
||||
{
|
||||
"id": "WARDEN-WP-0037",
|
||||
"status": "blocked",
|
||||
"flavor": "planning",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WARDEN-WP-0037-T03",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/ops-warden/workplans/WARDEN-WP-0037-whynot-design-forgejo-npm-lane.md",
|
||||
"sha256": "c71c66d03b830cfa90bea9ebd17ec4d2ccd8ffdd0ac69fe663c131d0e9a49884"
|
||||
},
|
||||
{
|
||||
"id": "WARDEN-WP-0040",
|
||||
"status": "blocked",
|
||||
"flavor": "planning",
|
||||
"unfinished_tasks": 3,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WARDEN-WP-0040-T01",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "WARDEN-WP-0040-T02",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "WARDEN-WP-0040-T03",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/ops-warden/workplans/WARDEN-WP-0040-unknown-zone-fail-closed-adoption.md",
|
||||
"sha256": "5135ee5aff97bfe863849cdf3fbe03f65755d5a9d6c473992cf4bbf8febddb8d"
|
||||
},
|
||||
{
|
||||
"id": "WARDEN-WP-0044",
|
||||
"status": "active",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WARDEN-WP-0044-T03",
|
||||
"status": "progress"
|
||||
},
|
||||
{
|
||||
"id": "WARDEN-WP-0044-T04",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/ops-warden/workplans/WARDEN-WP-0044-security-case-follow-through.md",
|
||||
"sha256": "c0029545bd2d8c015ae0cac87f6d53a2e5ee935b7bf5d5e1b81bf1ff5dbdc4f8"
|
||||
}
|
||||
]
|
||||
},
|
||||
"key-cape": {
|
||||
"open_plans": 2,
|
||||
"nonresidual_plans": 2,
|
||||
"residual_plans": 0,
|
||||
"unfinished_tasks": 3,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "KEY-WP-0038",
|
||||
"status": "active",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "KEY-WP-0038-T02",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "KEY-WP-0038-T03",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/key-cape/workplans/KEY-WP-0038-forgejo-oidc-client.md",
|
||||
"sha256": "849c943455aa3c56a3eb99045a7345f1939c9a4be3043b6c3b096ec74ba15579"
|
||||
},
|
||||
{
|
||||
"id": "KEY-WP-0039",
|
||||
"status": "active",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "KEY-WP-0039-T02",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/key-cape/workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
|
||||
"sha256": "89127c3ce8cf2f9f7f904f60855b19335407650b824f58e17211c4ae18e6ffe3"
|
||||
}
|
||||
]
|
||||
},
|
||||
"user-engine": {
|
||||
"open_plans": 5,
|
||||
"nonresidual_plans": 5,
|
||||
"residual_plans": 0,
|
||||
"unfinished_tasks": 7,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "USER-WP-0026",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "USER-WP-0026-T03",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/user-engine/workplans/USER-WP-0026-account-recovery.md",
|
||||
"sha256": "6665c1e7690f8d9dd170ec452e90ac9f00062793614e28f66dea19f29f995c47"
|
||||
},
|
||||
{
|
||||
"id": "USER-WP-0027",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "USER-WP-0027-T04",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "USER-WP-0027-T06",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/user-engine/workplans/USER-WP-0027-account-journey-clarity.md",
|
||||
"sha256": "6808a9e1a595b16e8b843995981084ad054a280036d24cb8a310fdc9947d235f"
|
||||
},
|
||||
{
|
||||
"id": "USER-WP-0028",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "USER-WP-0028-T02",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "USER-WP-0028-T03",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/user-engine/workplans/USER-WP-0028-user-journey-acceptance.md",
|
||||
"sha256": "1b0a047010ad05bc83c834b78baa61c987ee195394e29f8b42089a87c8169021"
|
||||
},
|
||||
{
|
||||
"id": "USER-WP-0035",
|
||||
"status": "blocked",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "USER-WP-0035-T02",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/user-engine/workplans/USER-WP-0035-onboarding-handoff-findings.md",
|
||||
"sha256": "1b59a99ef4b9743b02646b6201ade9ed0e4f504f3d3c571890f18d39be6994b2"
|
||||
},
|
||||
{
|
||||
"id": "USER-WP-0037",
|
||||
"status": "blocked",
|
||||
"flavor": null,
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "USER-WP-0037-T03",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/user-engine/workplans/USER-WP-0037-hub-authority-lookup.md",
|
||||
"sha256": "8bc3be393c62955f21c7dac527cb9f3438d47e38b03c645912a9e4fe4721208b"
|
||||
}
|
||||
]
|
||||
},
|
||||
"tenant-engine": {
|
||||
"open_plans": 1,
|
||||
"nonresidual_plans": 0,
|
||||
"residual_plans": 1,
|
||||
"unfinished_tasks": 2,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "TEN-WP-0012",
|
||||
"status": "blocked",
|
||||
"flavor": "residual",
|
||||
"unfinished_tasks": 2,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "TEN-WP-0012-T01",
|
||||
"status": "wait"
|
||||
},
|
||||
{
|
||||
"id": "TEN-WP-0012-T02",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/tenant-engine/workplans/TEN-WP-0012-external-conformance-waits.md",
|
||||
"sha256": "3b99a97f0f252c39e78e8bbd4677178ae1ffdf3d9a0d376a04b086bb556dcb66"
|
||||
}
|
||||
]
|
||||
},
|
||||
"gate-house": {
|
||||
"open_plans": 1,
|
||||
"nonresidual_plans": 1,
|
||||
"residual_plans": 0,
|
||||
"unfinished_tasks": 1,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "GH-WP-0004",
|
||||
"status": "active",
|
||||
"flavor": "implementation",
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "GH-WP-0004-T06",
|
||||
"status": "progress"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/gate-house/workplans/GH-WP-0004-section-11-layer-declarations.md",
|
||||
"sha256": "003ac427c24dc5692bc09fc3f4ed50d151165cff5b6ec2f91c547942af72c501"
|
||||
}
|
||||
]
|
||||
},
|
||||
"kings-guard": {
|
||||
"open_plans": 1,
|
||||
"nonresidual_plans": 1,
|
||||
"residual_plans": 0,
|
||||
"unfinished_tasks": 1,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "KG-WP-0005",
|
||||
"status": "blocked",
|
||||
"flavor": null,
|
||||
"unfinished_tasks": 1,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "KG-WP-0005-T03",
|
||||
"status": "wait"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/kings-guard/workplans/KG-WP-0005-qonto-source-cadence-admission.md",
|
||||
"sha256": "48664a90f53745e185bfb01fcd8b28ef9c22edc0ee2829ab95471a72c07d4ad8"
|
||||
}
|
||||
]
|
||||
},
|
||||
"policy-nexus": {
|
||||
"open_plans": 0,
|
||||
"nonresidual_plans": 0,
|
||||
"residual_plans": 0,
|
||||
"unfinished_tasks": 0,
|
||||
"workplans": []
|
||||
},
|
||||
"informed-decision": {
|
||||
"open_plans": 1,
|
||||
"nonresidual_plans": 1,
|
||||
"residual_plans": 0,
|
||||
"unfinished_tasks": 4,
|
||||
"workplans": [
|
||||
{
|
||||
"id": "INFD-WP-0008",
|
||||
"status": "backlog",
|
||||
"flavor": null,
|
||||
"unfinished_tasks": 4,
|
||||
"tasks": [
|
||||
{
|
||||
"id": "INFD-WP-0008-T01",
|
||||
"status": "todo"
|
||||
},
|
||||
{
|
||||
"id": "INFD-WP-0008-T02",
|
||||
"status": "todo"
|
||||
},
|
||||
{
|
||||
"id": "INFD-WP-0008-T03",
|
||||
"status": "todo"
|
||||
},
|
||||
{
|
||||
"id": "INFD-WP-0008-T04",
|
||||
"status": "todo"
|
||||
}
|
||||
],
|
||||
"file": "/home/worsch/informed-decision/workplans/INFD-WP-0008-lifecycle-expansion-contracts.md",
|
||||
"sha256": "078afd7df6210c61c6c076b96bb7786bfb3f0594fea4e7bf9650ba291011dced"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"totals": {
|
||||
"open_plans": 47,
|
||||
"nonresidual_plans": 45,
|
||||
"residual_plans": 2,
|
||||
"unfinished_tasks": 103
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"workplan_id": null,
|
||||
"id": "daa549ba-db22-4611-92a5-52729e50ba2d",
|
||||
"topic_id": null,
|
||||
"task_id": null,
|
||||
"decision_id": null,
|
||||
"event_type": "note",
|
||||
"summary": "Security source wave: verified actual founder KEY39 source acceptance ca118afc-d746-4454-a5b9-9b387b120cd9 (source-only); recorded Key21c6646. Applied Platform typed-plan compiler5ae7064 and proposed named coding custody9460f6f/qualifiedassessment30d2290. Applied Secrets Go-compatible canonical repair3ffb6a1 after636pass/1skip finalsource suite and unchanged baseline failure reconciliation. Access independentreviews077eb0a and hard-closed serviceinput/sourcepredicatebc92f95 preserve refused human nanosecond projection. Corrected universal humaninitiator criticalpath against nine pinned accepted/source records. Actual13repo inventory47open45nonresidual+2residual/103unfinished. No new native credential/probe/rollout authority or workplan closure; cross-owner pilot full approval/PDP/consume/journal/entitlement integration and KEY39 attended execution remain.",
|
||||
"detail": null,
|
||||
"author": "codex",
|
||||
"session_id": null,
|
||||
"created_at": "2026-10-11T17:53:12.064686Z",
|
||||
"workstream_id": null
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"observed_at": "2026-10-11T17:35:01.905611+00:00",
|
||||
"component_manifest_sha256": "41cda74ab32384c789ea8a760475671aadad4e5121335c8f60567ff53d66665b",
|
||||
"staged_source_tests_passed": 40,
|
||||
"actual_checkout_tests_passed": 40,
|
||||
"native_execution": false,
|
||||
"qualified_owner_receipt_sha256": "c6363b84ab7fc1d3b29ff12287e0d2998ed5d40fb27713c4e8a48574837f0bc7",
|
||||
"independent_technical_receipt_sha256": "f08558e8208f3d5ba4943ce70aa6ad7985136697f50af4971c17c98fa109fd29",
|
||||
"remaining": "Actual admitted CCR and catalog, authenticated service mapping, canonical PDP/approval bindings, durable consume/journal integration, protected owner grant and native execution decision."
|
||||
}
|
||||
|
|
@ -5,6 +5,16 @@ autonomous completion in build mode. Root and three workers reviewed thirteen
|
|||
repos; existing unrelated dirty files were preserved. This report is coordination
|
||||
evidence, not a new canon ruling or live-action grant.
|
||||
|
||||
Current checkpoint (11 October): **47 open plans / 103 unfinished tasks** across
|
||||
the same thirteen repos. CUST76 and the bounded collaboration review are finished;
|
||||
implementation continues under the named owner plans. KEY39 source design is now
|
||||
accepted in Informed Decision. Canonical digest repair, typed plan compilation and
|
||||
a closed service-input candidate are committed. The service pilot can progress
|
||||
separately from the human-login track; full execution integration and native proof
|
||||
remain. Earlier dated holds below are history; the final checkpoint sections and
|
||||
[source-wave inventory](evidence/2026-10-10-security-consolidation/source-wave-checkpoint-2026-10-11.json)
|
||||
record the current source state.
|
||||
|
||||
## Intended collaboration
|
||||
|
||||
| Owner | Product and responsibility | Boundary and collaborating owners |
|
||||
|
|
@ -863,3 +873,60 @@ purpose rejected by the actual provider's400-character limit. The helper also
|
|||
needs exact authoring/envelope/queue identity correlation and refusal of blocked
|
||||
queue results. The immutable changes-requested receipt is retained. The owner
|
||||
source-design memo is committed; posting remains unexecuted.
|
||||
|
||||
|
||||
### KEY39 source acceptance and service-pilot scope correction
|
||||
|
||||
The earlier posting holds above are historical. Root committed the repaired V3
|
||||
helper at `cdac98d` after preserving both rejected versions and independently
|
||||
checking the exact six-document packet. One actual submission through the already
|
||||
admitted State Hub identity created `infd-20261011-key39-source-design-r1`, version1,
|
||||
and review `review-62626f54-0212-4684-9b45-0a7222d61957`. Authenticated readback
|
||||
confirmed the founder's source acceptance at2026-10-11T17:19:01Z, approval
|
||||
`ca118afc-d746-4454-a5b9-9b387b120cd9`. The original submission uncertainty record
|
||||
is preserved alongside confirmation. This accepts the source design; credentials,
|
||||
SSH and the attended native probe require a separate exact execution decision.
|
||||
|
||||
An independent technical assessment pins nine accepted/source records. It corrects
|
||||
my earlier universal human-initiator dependency: accepted doctrine permits an
|
||||
authenticated service principal with exact human-control approval. Membership and
|
||||
named-human representation are required when the operation policy depends on them.
|
||||
The proposed, hard-closed human variant at Access `24c1f56` remains a separate
|
||||
option. It is not accepted doctrine or a prerequisite for every service task.
|
||||
This assessment used the same inherited model; the recommended independent
|
||||
assessment by another capable model has not been performed.
|
||||
|
||||
Platform's source-only typed plan compiler now derives six fixed calls and exact
|
||||
body hashes from pinned owner source; root passed40 checks before and after
|
||||
application. The qualified Platform component receipt and independent technical
|
||||
review preserve the actual café<&> cross-runtime digest counterexample. The
|
||||
compiler is unintegrated: a real admitted CCR/catalogue, authenticated service
|
||||
mapping, all approval/PDP bindings, durable consume/journal, owner grant and native
|
||||
execution decision remain necessary. Source components do not close these plans.
|
||||
|
||||
|
||||
Secrets `3ffb6a1` fixes the cross-runtime canonical request/approval-free digest
|
||||
mismatch without changing catalogue fingerprints or old served approvals. The
|
||||
independent review passed149 focused plus21 additional checks; final staged source
|
||||
passed636 tests with1 skipped outside the sandbox. Root reproduced the exact
|
||||
Go-oracle parity tests against the actual applied checkout. The sixteen sandbox
|
||||
ownership failures and existing missing-auth_args test stub were reproduced on
|
||||
unchanged source; original failures, correction and final source evidence remain
|
||||
recorded. The test correction retains denial-before-backend coverage.
|
||||
|
||||
The separate service source component now prepares a fixed TokenReview caller
|
||||
mapping and a hard-closed policy candidate. Root passed all three affected Go
|
||||
packages against the exact source clone and verified all12 applied file hashes.
|
||||
The candidate is structural characterization; served claim provenance, human
|
||||
approver validation, exact canonical PDP joins, consume, durable journal and native
|
||||
entitlement are unfinished. The original human nanosecond projection is explicitly
|
||||
refused by the safe numeric wire profile and preserved as a counterexample; the
|
||||
old human policy remains unchanged and closed.
|
||||
|
||||
KeyCape `21c6646` records source acceptance while retaining the attended execution
|
||||
wait. Platform `9460f6f` prepares a proposed named coding-client custody packet,
|
||||
correcting its standing tenant table to the current tenant:platform source. Its
|
||||
new coordinates are candidates, not an admitted catalogue/CCR/grant. The qualified
|
||||
source assessment identifies missing producer checks for exact coding subject,
|
||||
tenant, type, roles and900s maximum lifetime. Native custody, version agreement,
|
||||
issuer/ESO wiring and founder-contained delivery are still required.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue