From b450e51c40ae7e52146a30b1ba6cb0612f4baeef Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 15:58:23 +0000 Subject: [PATCH] Add safe component editing and explicit legacy workspace transition Why: Preserve a single Dev entry and independent repository ownership while allowing active feature branches to migrate without losing source or Git state. Evidence: SELF 29 real Git/Go workspace tests and ordinary component evidence/lock tests passed; detailed RED/GREEN runs are recorded by make evidence in the task card. Impact: Add fixed cloning, selected-version baselines, development overlays, npm source resolution, and independently preserved legacy snapshots. No other active worktree is modified. Refs: Versioned dependencies U2/U5; R15; feature/dependency-workspace --- .task/feature-dependency-workspace.md | 859 ++++++++++++++++++++++++++ components.json | 8 +- components.lock.json | 7 +- scripts/check-evidence.py | 6 + scripts/check-worktree.py | 30 + scripts/evidence.py | 56 +- scripts/workspace.py | 6 + scripts/workspace/__init__.py | 1 + scripts/workspace/cli.py | 237 +++++++ scripts/workspace/common.py | 75 +++ scripts/workspace/git.py | 70 +++ scripts/workspace/go.py | 153 +++++ scripts/workspace/manifest.py | 94 +++ scripts/workspace/npm.py | 62 ++ scripts/workspace/state.py | 36 ++ scripts/workspace/transition.py | 249 ++++++++ scripts/workspace/transport.py | 32 +- tests/test_component_governance.py | 69 +++ tests/test_transport.py | 22 + tests/test_workspace.py | 574 +++++++++++++++++ 20 files changed, 2633 insertions(+), 13 deletions(-) create mode 100644 scripts/workspace.py create mode 100644 scripts/workspace/__init__.py create mode 100644 scripts/workspace/cli.py create mode 100644 scripts/workspace/common.py create mode 100644 scripts/workspace/git.py create mode 100644 scripts/workspace/go.py create mode 100644 scripts/workspace/manifest.py create mode 100644 scripts/workspace/npm.py create mode 100644 scripts/workspace/state.py create mode 100644 scripts/workspace/transition.py create mode 100644 tests/test_component_governance.py create mode 100644 tests/test_workspace.py diff --git a/.task/feature-dependency-workspace.md b/.task/feature-dependency-workspace.md index 68bd8630..384b2fe6 100644 --- a/.task/feature-dependency-workspace.md +++ b/.task/feature-dependency-workspace.md @@ -854,3 +854,862 @@ "receipt_sha256": "b96a0bc4604cac443368cd695a29e08c053c3756eec76a41982e6801bc90d302" } ``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:34:21.725090+00:00", + "command": "(cd .migration/Agent-System-Frontend && npm test && npm run build) && git -C .migration/Agent-System-Frontend diff --check", + "command_sha256": "d4827adcf257c5dc919f5eec3beb38c62aff4e67c390c578e842eef8b6e98a79", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5aae47ebca20ad1f3add3b080212cca7e1c6edf9", + "status": "?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "6e29f940455d20332825e3228c054680781d2dd2c63f289d38f11e1117cf1822", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "6cf903115fe8358bf1939e036da3dcf343b9c86b81405567526aae55aaf248d5", + "scripts/workspace/manifest.py": "840c02103309e25a25fc01bc7a87ad960a8fd8f456c38631b04b20482bfbe7f4", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "f492ecc15b12a97f8d2ac71f2602bef7f38f902fe585cf27659dd4ce25584a5d", + "tests/test_workspace.py": "a4d28fe97df93645f6d10359d151bc69896202b3a64b10d29ff4f585f7eba492" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n" + }, + "after": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5aae47ebca20ad1f3add3b080212cca7e1c6edf9", + "status": "?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "6e29f940455d20332825e3228c054680781d2dd2c63f289d38f11e1117cf1822", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "15c178e0097202ae4421bc731451ef246dd2b765804e1f325e7f74525775541a", + "scripts/workspace/manifest.py": "840c02103309e25a25fc01bc7a87ad960a8fd8f456c38631b04b20482bfbe7f4", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "ce75598ef0cb41882effb0265e60a3d78c223c172ff6bb884bcf046e1ccf9efd", + "tests/test_workspace.py": "f1dee9a525431c723253e66787246362ed78b94f8ea9e5bf2a579e1d3bd59876" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "\n> agent-system-frontend@0.1.0 test\n> vitest run && npm run test:packages\n\n\n RUN v4.1.11 /home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-Frontend\n\n(node:2419889) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2419886) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2419885) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2419894) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2419963) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2420083) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2420072) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2420095) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2419891) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2420466) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:2419883) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.\n(Use `node --trace-warnings ...` to show where the warning was created)\n\n Test Files 33 passed (33)\n Tests 260 passed (260)\n Start at 15:34:22\n Duration 834ms (transform 5.32s, setup 0ms, import 8.83s, tests 1.05s, environment 4ms)\n\n\n> agent-system-frontend@0.1.0 test:packages\n> node --test scripts/test-packages.mjs\n\nnpm warn deprecated uuid@10.0.0: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).\n\nadded 178 packages in 2s\n\n> agent-system-frontend@0.1.0 build\n> tsc -b && vite build\n\nvite v6.4.3 building for production...\ntransforming...\n✓ 1015 modules transformed.\nrendering chunks...\ncomputing gzip size...\ndist/index.html 0.40 kB │ gzip: 0.27 kB\ndist/assets/index-DDAYwyEj.css 92.40 kB │ gzip: 15.95 kB\ndist/assets/jszip.min-D3vpNajS.js 0.12 kB │ gzip: 0.12 kB\ndist/assets/docx-preview-zvE_Eg6a.js 77.41 kB │ gzip: 21.29 kB\ndist/assets/jszip.min-C8r-wjLF.js 97.26 kB │ gzip: 30.16 kB\ndist/assets/index-CQuQ2tsO.js 213.14 kB │ gzip: 70.03 kB\ndist/assets/xlsx-CkFp8p6R.js 429.53 kB │ gzip: 143.07 kB\ndist/assets/index-BEPFMu8n.js 558.63 kB │ gzip: 174.18 kB\ndist/assets/pptx-preview.es-DejDD6gK.js 1,255.23 kB │ gzip: 401.46 kB\n\n(!) Some chunks are larger than 500 kB after minification. Consider:\n- Using dynamic import() to code-split the application\n- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks\n- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.\n✓ built in 7.64s\n✔ the application builds from packed dependencies without UI or Core source siblings (14193.694039ms)\nℹ tests 1\nℹ suites 0\nℹ pass 1\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 14254.085849\n\n> agent-system-frontend@0.1.0 build\n> tsc -b && vite build\n\nvite v6.4.3 building for production...\ntransforming...\n✓ 1015 modules transformed.\nrendering chunks...\ncomputing gzip size...\ndist/index.html 0.40 kB │ gzip: 0.27 kB\ndist/assets/index-DDAYwyEj.css 92.40 kB │ gzip: 15.95 kB\ndist/assets/jszip.min-D3vpNajS.js 0.12 kB │ gzip: 0.12 kB\ndist/assets/docx-preview-zvE_Eg6a.js 77.41 kB │ gzip: 21.29 kB\ndist/assets/jszip.min-C8r-wjLF.js 97.26 kB │ gzip: 30.16 kB\ndist/assets/index-CQuQ2tsO.js 213.14 kB │ gzip: 70.03 kB\ndist/assets/xlsx-CkFp8p6R.js 429.53 kB │ gzip: 143.07 kB\ndist/assets/index-BEPFMu8n.js 558.63 kB │ gzip: 174.18 kB\ndist/assets/pptx-preview.es-DejDD6gK.js 1,255.23 kB │ gzip: 401.46 kB\n\n(!) Some chunks are larger than 500 kB after minification. Consider:\n- Using dynamic import() to code-split the application\n- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks\n- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.\n✓ built in 8.22s\n", + "output_sha256": "4a1a95babbc8f6a57b64a966957a184e067fda18d0bb809c75cd85f7c7a07057", + "receipt_sha256": "881d9cbede9cd4f9844911370a84dc2e34b1070913e2163bcba35295e1e995b0" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:35:56.349657+00:00", + "command": "cat /tmp/dependency-integrate-go-layer-01a1345f.py && python3 /tmp/dependency-integrate-go-layer-01a1345f.py", + "command_sha256": "6ee695996189cd009134fd80f1792033d2d3b2d15dc32439ac1c137797a4eb15", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5aae47ebca20ad1f3add3b080212cca7e1c6edf9", + "status": " M .task/feature-dependency-workspace.md\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "66d8c88ff8a61ac6b8ca612c56ea4acad3a3f796e7292385900aa1682150beb3", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "6e29f940455d20332825e3228c054680781d2dd2c63f289d38f11e1117cf1822", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "15c178e0097202ae4421bc731451ef246dd2b765804e1f325e7f74525775541a", + "scripts/workspace/manifest.py": "840c02103309e25a25fc01bc7a87ad960a8fd8f456c38631b04b20482bfbe7f4", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "ce75598ef0cb41882effb0265e60a3d78c223c172ff6bb884bcf046e1ccf9efd", + "tests/test_workspace.py": "196c70bf7840a70d6dd0a6c866b2e8ea08b8f9569fac7c74fa9a11747c7f2f14" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n" + }, + "after": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5aae47ebca20ad1f3add3b080212cca7e1c6edf9", + "status": " M .task/feature-dependency-workspace.md\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "66d8c88ff8a61ac6b8ca612c56ea4acad3a3f796e7292385900aa1682150beb3", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "6e29f940455d20332825e3228c054680781d2dd2c63f289d38f11e1117cf1822", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "15c178e0097202ae4421bc731451ef246dd2b765804e1f325e7f74525775541a", + "scripts/workspace/manifest.py": "840c02103309e25a25fc01bc7a87ad960a8fd8f456c38631b04b20482bfbe7f4", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "ce75598ef0cb41882effb0265e60a3d78c223c172ff6bb884bcf046e1ccf9efd", + "tests/test_workspace.py": "196c70bf7840a70d6dd0a6c866b2e8ea08b8f9569fac7c74fa9a11747c7f2f14" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "import importlib.util\nimport json\nfrom pathlib import Path\nimport subprocess\n\nroot=Path('/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace')\nspec=importlib.util.spec_from_file_location('transport',root/'scripts/workspace/transport.py')\ntransport=importlib.util.module_from_spec(spec); spec.loader.exec_module(transport)\ndata=json.loads((root/'.migration/provider-versions.json').read_text())\nfor name,manifest in [('Agent-Native','Agent-Native-owned-files.json'),('Agent-Intent','Agent-Intent-owned-files.json'),('Agent-Command','Agent-Command-owned-files.json'),('Agent-Squad','Agent-Squad-root-owned-files.json')]:\n repo=root/'.migration'/name\n files=json.loads((Path('/tmp/dependency-u3-01a1345f')/manifest).read_text())\n if any(Path(p).is_absolute() or '..' in Path(p).parts for p in files): raise RuntimeError('invalid owned path')\n subprocess.run(['git','-C',str(repo),'diff','--check'],check=True)\n subprocess.run(['go','test','-mod=readonly','-count=1','./...'],cwd=repo,env=transport.environment(root),check=True)\n subprocess.run(['git','-C',str(repo),'add','--',*files],check=True)\n subprocess.run(['git','-C',str(repo),'commit','-F','/tmp/dependency-provider-commit-01a1345f.txt','--',*files],check=True)\n subprocess.run(['git','-C',str(repo),'push','origin','HEAD:refs/heads/feature/versioned-dependencies'],check=True)\n sha=subprocess.check_output(['git','-C',str(repo),'rev-parse','HEAD'],text=True).strip()\n module='git-ssh.u1680832.nyat.app/weichen/'+name+'.git'\n selected=json.loads(subprocess.check_output(['go','list','-m','-json',module+'@'+sha],env=transport.environment(root),text=True))\n data['refs'][name]=sha; data['versions'][name]=selected['Version']\n (root/'.migration/provider-versions.json').write_text(json.dumps(data,indent=2)+'\\n')\n print(json.dumps({'repo':name,'committed_sha':sha,'version':selected['Version']}),flush=True)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/adapters/native\t0.197s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/adapters/pitransport\t0.038s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/catalogcheck\t0.003s\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/cmd/agent-native\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/conformance\t0.052s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/exec\t0.153s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/rpc\t0.005s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime\t1.276s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/agentspec\t0.005s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/checkpoint\t0.004s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/codeorch\t0.089s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/ext\t0.025s\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/ext/pkg\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/filestate\t0.023s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/gates\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/guardrails\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/hooks\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/llm\t0.266s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/mcp\t13.250s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/memory\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/policy\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/promptx\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/reminders\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/resources\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/session\t0.010s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/skills\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/subagent\t0.004s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/telemetry\t0.004s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/tools\t11.281s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/schema\t0.003s\n[feature/versioned-dependencies 6ddd3da] Enable canonical versioned Go module consumption\n 76 files changed, 169 insertions(+), 180 deletions(-)\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Agent-Native/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git\n * [new branch] HEAD -> feature/versioned-dependencies\n{\"repo\": \"Agent-Native\", \"committed_sha\": \"6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e\", \"version\": \"v0.0.0-20261013153610-6ddd3da8df5c\"}\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/catalogcheck\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/cmd/intentctl\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/conformance\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/examples\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/intent\t0.005s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/schema\t0.002s\n[feature/versioned-dependencies 3a8468c] Enable canonical versioned Go module consumption\n 12 files changed, 34 insertions(+), 37 deletions(-)\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Agent-Intent/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Agent-Intent.git\n * [new branch] HEAD -> feature/versioned-dependencies\n{\"repo\": \"Agent-Intent\", \"committed_sha\": \"3a8468c83a80fa8ed17d9df347fd2565ddb95ebe\", \"version\": \"v0.0.0-20261013153611-3a8468c83a80\"}\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Command.git\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Command.git/conformance\t0.003s\n[feature/versioned-dependencies 1aa532f] Enable canonical versioned Go module consumption\n 4 files changed, 7 insertions(+), 3 deletions(-)\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Agent-Command/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Agent-Command.git\n * [new branch] HEAD -> feature/versioned-dependencies\n{\"repo\": \"Agent-Command\", \"committed_sha\": \"1aa532f45e55380c6721b3b68074e415e0caff78\", \"version\": \"v0.0.0-20261013153614-1aa532f45e55\"}\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/schema\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/squad\t1.024s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/store\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/textextract\t0.002s\n[feature/versioned-dependencies d2fea7e] Enable canonical versioned Go module consumption\n 14 files changed, 36 insertions(+), 40 deletions(-)\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Agent-Squad/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Agent-Squad.git\n * [new branch] HEAD -> feature/versioned-dependencies\n{\"repo\": \"Agent-Squad\", \"committed_sha\": \"d2fea7e17310d9e267c28a1e39328704e83df0b1\", \"version\": \"v0.0.0-20261013153617-d2fea7e17310\"}\n", + "output_sha256": "bbb3a987971b940bac42a70ea06c8ec835ac1dc8e7b4860ac59080e8c8410240", + "receipt_sha256": "acfd73935c219b7d26aa92d715efcf1a52b88b76fcaa4c859a4aa2ff8439ab94" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:48:16.124692+00:00", + "command": "python3 -m unittest discover -s tests -p test_component_governance.py -v", + "command_sha256": "3f069e0251ec89048b48766d9813ff136de15ade8316cae467a4e02202ebaa3b", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .task/feature-dependency-workspace.md\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_component_governance.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "7f1d5d20962cccac068a3be434c1dcfccf24eab7607dcea6c92724cdfb8dbcb7", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "de057a0003eb2bd93c95990613032345cc229556385d3c8571ac993ef2351231", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "15c178e0097202ae4421bc731451ef246dd2b765804e1f325e7f74525775541a", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "ce75598ef0cb41882effb0265e60a3d78c223c172ff6bb884bcf046e1ccf9efd", + "tests/test_component_governance.py": "eb7b63294a31eb7f533fea8e5e250995d510bb9fc44682d7c102fbabbf359bd0", + "tests/test_dependency_ci.py": "18fc6e8eea386ccc4dee78f59e9e9443eacca1fe7626754f5cae8cab84daf56e", + "tests/test_workspace.py": "2688304a5b2471c1f984b232b3983d0bde4834057cf1bafae6281eb041e9c880" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n" + }, + "after": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .task/feature-dependency-workspace.md\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_component_governance.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "7f1d5d20962cccac068a3be434c1dcfccf24eab7607dcea6c92724cdfb8dbcb7", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "de057a0003eb2bd93c95990613032345cc229556385d3c8571ac993ef2351231", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "15c178e0097202ae4421bc731451ef246dd2b765804e1f325e7f74525775541a", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "ce75598ef0cb41882effb0265e60a3d78c223c172ff6bb884bcf046e1ccf9efd", + "tests/test_component_governance.py": "eb7b63294a31eb7f533fea8e5e250995d510bb9fc44682d7c102fbabbf359bd0", + "tests/test_dependency_ci.py": "18fc6e8eea386ccc4dee78f59e9e9443eacca1fe7626754f5cae8cab84daf56e", + "tests/test_workspace.py": "2688304a5b2471c1f984b232b3983d0bde4834057cf1bafae6281eb041e9c880" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n" + }, + "after_error": null, + "exit_code": 1, + "output": "test_before_sync_rejects_component_git_lock (test_component_governance.ComponentGovernanceTests.test_before_sync_rejects_component_git_lock) ... FAIL\ntest_evidence_captures_ignored_component_revision_and_dirty_bytes (test_component_governance.ComponentGovernanceTests.test_evidence_captures_ignored_component_revision_and_dirty_bytes) ... FAIL\ntest_receipts_reject_component_path_escape (test_component_governance.ComponentGovernanceTests.test_receipts_reject_component_path_escape) ... FAIL\n\n======================================================================\nFAIL: test_before_sync_rejects_component_git_lock (test_component_governance.ComponentGovernanceTests.test_before_sync_rejects_component_git_lock)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_component_governance.py\", line 59, in test_before_sync_rejects_component_git_lock\n self.assertNotEqual(result.returncode,0,'a hidden component writer must block synchronization')\n ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 0 == 0 : a hidden component writer must block synchronization\n\n======================================================================\nFAIL: test_evidence_captures_ignored_component_revision_and_dirty_bytes (test_component_governance.ComponentGovernanceTests.test_evidence_captures_ignored_component_revision_and_dirty_bytes)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_component_governance.py\", line 49, in test_evidence_captures_ignored_component_revision_and_dirty_bytes\n self.assertIn('components',first,'receipts must identify ordinary ignored component checkouts')\n ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 'components' not found in {'head': '97b4d8550d1cb105f3415fb67992b0adb3b34402', 'branch': 'master', 'target_branch': 'main', 'target_head': None, 'status': '', 'tracked_diff_sha256': 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'untracked': {}, 'submodules': ''} : receipts must identify ordinary ignored component checkouts\n\n======================================================================\nFAIL: test_receipts_reject_component_path_escape (test_component_governance.ComponentGovernanceTests.test_receipts_reject_component_path_escape)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_component_governance.py\", line 66, in test_receipts_reject_component_path_escape\n with self.assertRaises(Exception):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^\nAssertionError: Exception not raised\n\n----------------------------------------------------------------------\nRan 3 tests in 0.168s\n\nFAILED (failures=3)\n", + "output_sha256": "aa5e6ba2f1e4e8499eb921d9db2dca46f170e18b9b7d7f22fc1947b8bf3eebc4", + "receipt_sha256": "212dbd926bde66cb984ab8f6a25dd06f3857a7f8c59d29bc65f5d655fe7b071b" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:48:14.596999+00:00", + "command": "python3 -m unittest tests.test_dependency_ci -v", + "command_sha256": "3480a10b30eb1d260477375a9aa8e3997c54e926582802dba99000f05bd22ece", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .task/feature-dependency-workspace.md\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "7f1d5d20962cccac068a3be434c1dcfccf24eab7607dcea6c92724cdfb8dbcb7", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "de057a0003eb2bd93c95990613032345cc229556385d3c8571ac993ef2351231", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "15c178e0097202ae4421bc731451ef246dd2b765804e1f325e7f74525775541a", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "ce75598ef0cb41882effb0265e60a3d78c223c172ff6bb884bcf046e1ccf9efd", + "tests/test_dependency_ci.py": "18fc6e8eea386ccc4dee78f59e9e9443eacca1fe7626754f5cae8cab84daf56e", + "tests/test_workspace.py": "2688304a5b2471c1f984b232b3983d0bde4834057cf1bafae6281eb041e9c880" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n" + }, + "after": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .task/feature-dependency-workspace.md\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_component_governance.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "469b15c3fb5e6135f894ce474f04965709534e846766b0fd52d7090456ab9f34", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "de057a0003eb2bd93c95990613032345cc229556385d3c8571ac993ef2351231", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "15c178e0097202ae4421bc731451ef246dd2b765804e1f325e7f74525775541a", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "ce75598ef0cb41882effb0265e60a3d78c223c172ff6bb884bcf046e1ccf9efd", + "tests/test_component_governance.py": "eb7b63294a31eb7f533fea8e5e250995d510bb9fc44682d7c102fbabbf359bd0", + "tests/test_dependency_ci.py": "18fc6e8eea386ccc4dee78f59e9e9443eacca1fe7626754f5cae8cab84daf56e", + "tests/test_workspace.py": "2688304a5b2471c1f984b232b3983d0bde4834057cf1bafae6281eb041e9c880" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n" + }, + "after_error": null, + "exit_code": 1, + "output": "test_candidate_cannot_read_checkout_credentials (tests.test_ci_credentials.CheckoutTests.test_candidate_cannot_read_checkout_credentials) ... ok\ntest_candidate_submodule_update_commands_are_rejected (tests.test_ci_credentials.CheckoutTests.test_candidate_submodule_update_commands_are_rejected) ... ok\ntest_credential_destination_confined_to_injected_server (tests.test_ci_credentials.CheckoutTests.test_credential_destination_confined_to_injected_server) ... ok\ntest_external_or_unlisted_urls_are_rejected_before_component_fetch (tests.test_ci_credentials.CheckoutTests.test_external_or_unlisted_urls_are_rejected_before_component_fetch) ... ok\ntest_inherited_template_hook_does_not_execute_with_credentials (tests.test_ci_credentials.CheckoutTests.test_inherited_template_hook_does_not_execute_with_credentials) ... ok\ntest_nested_external_url_is_rejected_before_authenticated_fetch (tests.test_ci_credentials.CheckoutTests.test_nested_external_url_is_rejected_before_authenticated_fetch) ... ok\ntest_rdm_pin_fetch_is_three_shas_on_the_allowlist (tests.test_ci_credentials.CheckoutTests.test_rdm_pin_fetch_is_three_shas_on_the_allowlist) ... ok\ntest_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials (tests.test_ci_credentials.CheckoutTests.test_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials) ... ok\ntest_redirects_do_not_forward_credential_or_fetch_unlisted_target (tests.test_ci_credentials.CheckoutTests.test_redirects_do_not_forward_credential_or_fetch_unlisted_target) ... ok\ntest_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... FAIL\ntest_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... FAIL\ntest_go_prefetch_uses_only_registered_private_repo_and_local_toolchain (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_uses_only_registered_private_repo_and_local_toolchain) ... FAIL\ntest_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... FAIL\ntest_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... FAIL\ntest_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... FAIL\ntest_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... FAIL\n\n======================================================================\nFAIL: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 156, in test_component_checkout_removes_tokens_before_candidate_executes\n self.assertEqual(candidate.returncode, 0, candidate.stderr)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 1 != 0 : Traceback (most recent call last):\n File \"/tmp/tmpiaxat_t6/checkout/probe.py\", line 5, in \n assert not any(secret in source for secret in ('synthetic-root-token-not-a-real-secret', 'synthetic-component-token-not-a-real-secret') for source in sources), 'credential readable by candidate'\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: credential readable by candidate\n\n\n======================================================================\nFAIL: test_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 145, in test_external_npm_git_source_rejected_before_authenticated_request\n result = self.run_phase(\"Prefetch npm packages without lifecycle scripts\")\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 39, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name)],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 19, in phase\n raise AssertionError(f\"Workflow has no executable phase: {name}\")\nAssertionError: Workflow has no executable phase: Prefetch npm packages without lifecycle scripts\n\n======================================================================\nFAIL: test_go_prefetch_uses_only_registered_private_repo_and_local_toolchain (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_uses_only_registered_private_repo_and_local_toolchain)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 90, in test_go_prefetch_uses_only_registered_private_repo_and_local_toolchain\n result = self.run_phase(\"Prefetch Go modules without executing candidate code\",\n extra={\"GOTOOLCHAIN\": \"auto\", \"GIT_TRACE\": \"1\"})\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 39, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name)],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 19, in phase\n raise AssertionError(f\"Workflow has no executable phase: {name}\")\nAssertionError: Workflow has no executable phase: Prefetch Go modules without executing candidate code\n\n======================================================================\nFAIL: test_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 129, in test_npm_git_package_installs_committed_output_without_prepare\n result = self.run_phase(\"Prefetch npm packages without lifecycle scripts\")\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 39, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name)],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 19, in phase\n raise AssertionError(f\"Workflow has no executable phase: {name}\")\nAssertionError: Workflow has no executable phase: Prefetch npm packages without lifecycle scripts\n\n======================================================================\nFAIL: test_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 69, in test_registered_application_lock_materializes_fixed_source\n self.assertTrue((self.checkout / \".workspace/Agent-System-Backend/.git\").exists(),\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n \"versioned application source was not materialized\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: False is not true : versioned application source was not materialized\n\n======================================================================\nFAIL: test_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 110, in test_unregistered_go_module_rejected_before_authenticated_request\n result = self.run_phase(\"Prefetch Go modules without executing candidate code\")\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 39, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name)],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 19, in phase\n raise AssertionError(f\"Workflow has no executable phase: {name}\")\nAssertionError: Workflow has no executable phase: Prefetch Go modules without executing candidate code\n\n======================================================================\nFAIL: test_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 81, in test_unregistered_source_lock_is_rejected_before_component_fetch\n self.assertNotEqual(result.returncode, 0, \"untrusted manifest was accepted\")\n ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 0 == 0 : untrusted manifest was accepted\n\n----------------------------------------------------------------------\nRan 16 tests in 9.243s\n\nFAILED (failures=7)\n", + "output_sha256": "c35b3efe21a6166e4ccacd213c390d63b2bdc64b70cedef59155bc460cbbb1f9", + "receipt_sha256": "a521e0cf28b8171eebaf0e963625dc6eb7a0a2df6e56a39965302ef490405b2c" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:49:26.495257+00:00", + "command": "python3 -m unittest discover -s tests -p test_component_governance.py -v && python3 -m unittest discover -s tests -p test_evidence.py -v", + "command_sha256": "dd7c4fd8ebe63bb2952317270e3e889ae4be9af1748f43adc24cbc8af3ce52da", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .task/feature-dependency-workspace.md\n M scripts/check-evidence.py\n M scripts/check-worktree.py\n M scripts/evidence.py\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_component_governance.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "3338f666dd85f1dc91b6d1adb68e25826a99e436c2db2791c7f824ae2b58d0fc", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "de057a0003eb2bd93c95990613032345cc229556385d3c8571ac993ef2351231", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "15c178e0097202ae4421bc731451ef246dd2b765804e1f325e7f74525775541a", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "ce75598ef0cb41882effb0265e60a3d78c223c172ff6bb884bcf046e1ccf9efd", + "tests/test_component_governance.py": "eb7b63294a31eb7f533fea8e5e250995d510bb9fc44682d7c102fbabbf359bd0", + "tests/test_dependency_ci.py": "18fc6e8eea386ccc4dee78f59e9e9443eacca1fe7626754f5cae8cab84daf56e", + "tests/test_workspace.py": "2688304a5b2471c1f984b232b3983d0bde4834057cf1bafae6281eb041e9c880" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n", + "components": { + "manifest_sha256": "d25af56f9f19850e6a96c1389895b5db568be3d90733ce8ef9bcf02704274c9b", + "components": { + "Logging-System": { + "state": "missing" + }, + "Error-Code-System": { + "state": "missing" + }, + "Agent-System-Core": { + "state": "missing" + }, + "Agent-System-UI": { + "state": "missing" + }, + "Agent-System-Frontend": { + "state": "missing" + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "state": "missing" + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7692e8cd56b1bd2d8337d28d19af56b622cd144c538cde29450deda04abf336c", + "state_sha256": null + } + }, + "after": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .task/feature-dependency-workspace.md\n M scripts/check-evidence.py\n M scripts/check-worktree.py\n M scripts/evidence.py\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_component_governance.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "3338f666dd85f1dc91b6d1adb68e25826a99e436c2db2791c7f824ae2b58d0fc", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "de057a0003eb2bd93c95990613032345cc229556385d3c8571ac993ef2351231", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "15c178e0097202ae4421bc731451ef246dd2b765804e1f325e7f74525775541a", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "ce75598ef0cb41882effb0265e60a3d78c223c172ff6bb884bcf046e1ccf9efd", + "tests/test_component_governance.py": "eb7b63294a31eb7f533fea8e5e250995d510bb9fc44682d7c102fbabbf359bd0", + "tests/test_dependency_ci.py": "18fc6e8eea386ccc4dee78f59e9e9443eacca1fe7626754f5cae8cab84daf56e", + "tests/test_workspace.py": "2688304a5b2471c1f984b232b3983d0bde4834057cf1bafae6281eb041e9c880" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n", + "components": { + "manifest_sha256": "d25af56f9f19850e6a96c1389895b5db568be3d90733ce8ef9bcf02704274c9b", + "components": { + "Logging-System": { + "state": "missing" + }, + "Error-Code-System": { + "state": "missing" + }, + "Agent-System-Core": { + "state": "missing" + }, + "Agent-System-UI": { + "state": "missing" + }, + "Agent-System-Frontend": { + "state": "missing" + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "state": "missing" + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7692e8cd56b1bd2d8337d28d19af56b622cd144c538cde29450deda04abf336c", + "state_sha256": null + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_before_sync_rejects_component_git_lock (test_component_governance.ComponentGovernanceTests.test_before_sync_rejects_component_git_lock) ... ok\ntest_evidence_captures_ignored_component_revision_and_dirty_bytes (test_component_governance.ComponentGovernanceTests.test_evidence_captures_ignored_component_revision_and_dirty_bytes) ... ok\ntest_receipts_reject_component_path_escape (test_component_governance.ComponentGovernanceTests.test_receipts_reject_component_path_escape) ... ok\n\n----------------------------------------------------------------------\nRan 3 tests in 0.274s\n\nOK\ntest_after_snapshot_failure_keeps_command_exit_and_output (test_evidence.EvidenceTests.test_after_snapshot_failure_keeps_command_exit_and_output) ... ok\ntest_all_persisted_and_displayed_text_is_sanitized (test_evidence.EvidenceTests.test_all_persisted_and_displayed_text_is_sanitized) ... ok\ntest_authorization_forms_are_redacted_in_capture_console_and_import (test_evidence.EvidenceTests.test_authorization_forms_are_redacted_in_capture_console_and_import) ... ok\ntest_authorization_forms_are_redacted_on_direct_card_capture (test_evidence.EvidenceTests.test_authorization_forms_are_redacted_on_direct_card_capture) ... ok\ntest_before_after_heads_do_not_relabel_changed_command (test_evidence.EvidenceTests.test_before_after_heads_do_not_relabel_changed_command) ... ok\ntest_capture_does_not_overwrite_an_existing_receipt (test_evidence.EvidenceTests.test_capture_does_not_overwrite_an_existing_receipt) ... ok\ntest_capture_without_card_and_import_without_rerun (test_evidence.EvidenceTests.test_capture_without_card_and_import_without_rerun) ... ok\ntest_child_failure_code_is_preserved (test_evidence.EvidenceTests.test_child_failure_code_is_preserved) ... ok\ntest_command_line_token_arguments_are_redacted (test_evidence.EvidenceTests.test_command_line_token_arguments_are_redacted) ... ok\ntest_dirty_and_untracked_contents_have_object_digests (test_evidence.EvidenceTests.test_dirty_and_untracked_contents_have_object_digests) ... ok\ntest_failed_child_exit_survives_receipt_write_failure (test_evidence.EvidenceTests.test_failed_child_exit_survives_receipt_write_failure) ... ok\ntest_full_output_is_preserved_not_only_tail (test_evidence.EvidenceTests.test_full_output_is_preserved_not_only_tail) ... ok\ntest_import_missing_card_fails_without_losing_receipt (test_evidence.EvidenceTests.test_import_missing_card_fails_without_losing_receipt) ... ok\ntest_import_rejects_unredacted_authorization_with_valid_checksums (test_evidence.EvidenceTests.test_import_rejects_unredacted_authorization_with_valid_checksums) ... ok\ntest_import_retry_is_idempotent (test_evidence.EvidenceTests.test_import_retry_is_idempotent) ... ok\ntest_invalid_field_types_and_forged_source_are_rejected (test_evidence.EvidenceTests.test_invalid_field_types_and_forged_source_are_rejected) ... ok\ntest_known_secret_environment_value_is_redacted_without_label (test_evidence.EvidenceTests.test_known_secret_environment_value_is_redacted_without_label) ... ok\ntest_linked_worktree_import_preserves_source_identity (test_evidence.EvidenceTests.test_linked_worktree_import_preserves_source_identity) ... ok\ntest_missing_card_does_not_execute (test_evidence.EvidenceTests.test_missing_card_does_not_execute) ... ok\ntest_missing_required_snapshot_fields_are_rejected (test_evidence.EvidenceTests.test_missing_required_snapshot_fields_are_rejected) ... ok\ntest_nested_cwd_records_untracked_files_from_repository_root (test_evidence.EvidenceTests.test_nested_cwd_records_untracked_files_from_repository_root) ... ok\ntest_output_digest_checked_even_if_receipt_digest_recomputed (test_evidence.EvidenceTests.test_output_digest_checked_even_if_receipt_digest_recomputed) ... ok\ntest_pipeline_failure_is_recorded_and_returned (test_evidence.EvidenceTests.test_pipeline_failure_is_recorded_and_returned) ... ok\ntest_quoted_credentials_with_spaces_are_fully_redacted (test_evidence.EvidenceTests.test_quoted_credentials_with_spaces_are_fully_redacted) ... ok\ntest_receipt_write_failure_cannot_claim_success (test_evidence.EvidenceTests.test_receipt_write_failure_cannot_claim_success) ... ok\ntest_recorder_environment_does_not_leak_into_nested_commands (test_evidence.EvidenceTests.test_recorder_environment_does_not_leak_into_nested_commands) ... ok\ntest_source_cannot_be_promoted_by_environment (test_evidence.EvidenceTests.test_source_cannot_be_promoted_by_environment) ... ok\ntest_tamper_is_rejected_before_card_append (test_evidence.EvidenceTests.test_tamper_is_rejected_before_card_append) ... ok\ntest_unrelated_repo_cannot_import (test_evidence.EvidenceTests.test_unrelated_repo_cannot_import) ... ok\ntest_validate_precheck_checks_result_and_current_base (test_evidence.EvidenceTests.test_validate_precheck_checks_result_and_current_base) ... ok\ntest_validate_precheck_rejects_successful_arbitrary_command (test_evidence.EvidenceTests.test_validate_precheck_rejects_successful_arbitrary_command) ... ok\n\n----------------------------------------------------------------------\nRan 31 tests in 5.406s\n\nOK\n", + "output_sha256": "3bb27316dcec6338e553da6a95416db25b5dc153c7f6b0229bbbad142d7b3c80", + "receipt_sha256": "10dc69e049228aa41705071a714a2ffc7fc551bff5bbbacea40195cb661a4fd7" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:54:35.454766+00:00", + "command": "python3 -m unittest discover -s tests -p test_transport.py -v", + "command_sha256": "117a7baccc23a6e0d68c02dfcd72b8b7648a0ca4f0b31df3b6026487a2c0dc38", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .gitea/workflows/ci.yaml\n M .task/feature-dependency-workspace.md\n M scripts/check-evidence.py\n M scripts/check-worktree.py\n M scripts/evidence.py\n M tests/test_transport.py\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_component_governance.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "5fe4c9fbd5787e42ba8094ba1726af596589bc9eb907d5be832c3841775dd45f", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "aa34950bf8dce02d7266bae4d214bbd00298a47d12b6926a8768b229cadd8578", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "d48cfdca50324c70215ee4c477a6d11b802ccf798e78dd446880c8de877b90b8", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "b94045163c3631bd5264f6364a87130cee9f66ce42d782f52f59f34916cce229", + "tests/test_component_governance.py": "eb7b63294a31eb7f533fea8e5e250995d510bb9fc44682d7c102fbabbf359bd0", + "tests/test_dependency_ci.py": "18fc6e8eea386ccc4dee78f59e9e9443eacca1fe7626754f5cae8cab84daf56e", + "tests/test_workspace.py": "5294bfd43617d11b6aed091b0eb6d4e6370876418bc00169e68394f4e0b8698d" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n", + "components": { + "manifest_sha256": "d25af56f9f19850e6a96c1389895b5db568be3d90733ce8ef9bcf02704274c9b", + "components": { + "Logging-System": { + "state": "missing" + }, + "Error-Code-System": { + "state": "missing" + }, + "Agent-System-Core": { + "state": "missing" + }, + "Agent-System-UI": { + "state": "missing" + }, + "Agent-System-Frontend": { + "state": "missing" + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "state": "missing" + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7692e8cd56b1bd2d8337d28d19af56b622cd144c538cde29450deda04abf336c", + "state_sha256": null + } + }, + "after": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .gitea/workflows/ci.yaml\n M .task/feature-dependency-workspace.md\n M scripts/check-evidence.py\n M scripts/check-worktree.py\n M scripts/evidence.py\n M tests/test_transport.py\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_component_governance.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "5fe4c9fbd5787e42ba8094ba1726af596589bc9eb907d5be832c3841775dd45f", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "aa34950bf8dce02d7266bae4d214bbd00298a47d12b6926a8768b229cadd8578", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "d48cfdca50324c70215ee4c477a6d11b802ccf798e78dd446880c8de877b90b8", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "b94045163c3631bd5264f6364a87130cee9f66ce42d782f52f59f34916cce229", + "tests/test_component_governance.py": "eb7b63294a31eb7f533fea8e5e250995d510bb9fc44682d7c102fbabbf359bd0", + "tests/test_dependency_ci.py": "18fc6e8eea386ccc4dee78f59e9e9443eacca1fe7626754f5cae8cab84daf56e", + "tests/test_workspace.py": "5294bfd43617d11b6aed091b0eb6d4e6370876418bc00169e68394f4e0b8698d" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n", + "components": { + "manifest_sha256": "d25af56f9f19850e6a96c1389895b5db568be3d90733ce8ef9bcf02704274c9b", + "components": { + "Logging-System": { + "state": "missing" + }, + "Error-Code-System": { + "state": "missing" + }, + "Agent-System-Core": { + "state": "missing" + }, + "Agent-System-UI": { + "state": "missing" + }, + "Agent-System-Frontend": { + "state": "missing" + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "state": "missing" + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7692e8cd56b1bd2d8337d28d19af56b622cd144c538cde29450deda04abf336c", + "state_sha256": null + } + }, + "after_error": null, + "exit_code": 1, + "output": "test_credentials_in_transport_url_are_rejected (test_transport.TransportTests.test_credentials_in_transport_url_are_rejected) ... ok\ntest_remote_revision_download_without_global_git_change (test_transport.TransportTests.test_remote_revision_download_without_global_git_change) ... ok\ntest_verified_local_mirror_mapping_survives_without_authentication (test_transport.TransportTests.test_verified_local_mirror_mapping_survives_without_authentication) ... FAIL\n\n======================================================================\nFAIL: test_verified_local_mirror_mapping_survives_without_authentication (test_transport.TransportTests.test_verified_local_mirror_mapping_survives_without_authentication)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_transport.py\", line 77, in test_verified_local_mirror_mapping_survives_without_authentication\n self.assertIn((f'url.{target.as_uri()}.insteadOf','https://example.test/provider'),pairs)\n ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: ('url.file:///tmp/tmp0w8_5duj/mirrors/Provider.git.insteadOf', 'https://example.test/provider') not found in [('url.ssh://git@example.test:31411/.insteadOf', 'https://example.test/')]\n\n----------------------------------------------------------------------\nRan 3 tests in 0.169s\n\nFAILED (failures=1)\n", + "output_sha256": "2ac34bba88accf7f6ba7b591b705914c92b6a321b60f3e1057f1f8eec607c61b", + "receipt_sha256": "49c46dacbc237fdacc432d37d52fbeedddf0470b67cf0942c7cdbf3096e05e99" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:55:06.682358+00:00", + "command": "python3 -m unittest discover -s tests -p test_transport.py -v", + "command_sha256": "117a7baccc23a6e0d68c02dfcd72b8b7648a0ca4f0b31df3b6026487a2c0dc38", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .gitea/workflows/ci.yaml\n M .task/feature-dependency-workspace.md\n M scripts/check-evidence.py\n M scripts/check-worktree.py\n M scripts/evidence.py\n M scripts/workspace/transport.py\n M tests/test_transport.py\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_component_governance.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "854f9c6b7c182e09b3542c0a4e3936b70493bc191f17ec384df3b387da4b3824", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "aa34950bf8dce02d7266bae4d214bbd00298a47d12b6926a8768b229cadd8578", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "d48cfdca50324c70215ee4c477a6d11b802ccf798e78dd446880c8de877b90b8", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "b94045163c3631bd5264f6364a87130cee9f66ce42d782f52f59f34916cce229", + "tests/test_component_governance.py": "eb7b63294a31eb7f533fea8e5e250995d510bb9fc44682d7c102fbabbf359bd0", + "tests/test_dependency_ci.py": "8e1fe3eb6b10ba80a6b230b5835a00679d12418494b6e0e0181855b0254ae394", + "tests/test_workspace.py": "5294bfd43617d11b6aed091b0eb6d4e6370876418bc00169e68394f4e0b8698d" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n", + "components": { + "manifest_sha256": "d25af56f9f19850e6a96c1389895b5db568be3d90733ce8ef9bcf02704274c9b", + "components": { + "Logging-System": { + "state": "missing" + }, + "Error-Code-System": { + "state": "missing" + }, + "Agent-System-Core": { + "state": "missing" + }, + "Agent-System-UI": { + "state": "missing" + }, + "Agent-System-Frontend": { + "state": "missing" + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "state": "missing" + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7692e8cd56b1bd2d8337d28d19af56b622cd144c538cde29450deda04abf336c", + "state_sha256": null + } + }, + "after": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .gitea/workflows/ci.yaml\n M .task/feature-dependency-workspace.md\n M scripts/check-evidence.py\n M scripts/check-worktree.py\n M scripts/evidence.py\n M scripts/workspace/transport.py\n M tests/test_transport.py\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_component_governance.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "854f9c6b7c182e09b3542c0a4e3936b70493bc191f17ec384df3b387da4b3824", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "aa34950bf8dce02d7266bae4d214bbd00298a47d12b6926a8768b229cadd8578", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "d48cfdca50324c70215ee4c477a6d11b802ccf798e78dd446880c8de877b90b8", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "b94045163c3631bd5264f6364a87130cee9f66ce42d782f52f59f34916cce229", + "tests/test_component_governance.py": "eb7b63294a31eb7f533fea8e5e250995d510bb9fc44682d7c102fbabbf359bd0", + "tests/test_dependency_ci.py": "8e1fe3eb6b10ba80a6b230b5835a00679d12418494b6e0e0181855b0254ae394", + "tests/test_workspace.py": "5294bfd43617d11b6aed091b0eb6d4e6370876418bc00169e68394f4e0b8698d" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n", + "components": { + "manifest_sha256": "d25af56f9f19850e6a96c1389895b5db568be3d90733ce8ef9bcf02704274c9b", + "components": { + "Logging-System": { + "state": "missing" + }, + "Error-Code-System": { + "state": "missing" + }, + "Agent-System-Core": { + "state": "missing" + }, + "Agent-System-UI": { + "state": "missing" + }, + "Agent-System-Frontend": { + "state": "missing" + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "state": "missing" + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7692e8cd56b1bd2d8337d28d19af56b622cd144c538cde29450deda04abf336c", + "state_sha256": null + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_credentials_in_transport_url_are_rejected (test_transport.TransportTests.test_credentials_in_transport_url_are_rejected) ... ok\ntest_remote_revision_download_without_global_git_change (test_transport.TransportTests.test_remote_revision_download_without_global_git_change) ... ok\ntest_verified_local_mirror_mapping_survives_without_authentication (test_transport.TransportTests.test_verified_local_mirror_mapping_survives_without_authentication) ... ok\n\n----------------------------------------------------------------------\nRan 3 tests in 0.176s\n\nOK\n", + "output_sha256": "78e82d57b422392e5bc6a9704ea45cb46e1dff1af991b2c998385dde77ea50e9", + "receipt_sha256": "c2f5869c7e571c5a7e88cbb9156a307a9e204799327773abcd389d9a5949b779" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:56:26.863063+00:00", + "command": "python3 -m unittest discover -s tests -p test_workspace.py -v && python3 -m unittest discover -s tests -p test_component_governance.py -v", + "command_sha256": "d6426eb14f50ddff30c8dc86e077756e876df1822ecd50a954c482018840fc35", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .gitea/workflows/ci.yaml\n M .task/feature-dependency-workspace.md\n M components.json\n M components.lock.json\n M scripts/check-evidence.py\n M scripts/check-worktree.py\n M scripts/evidence.py\n M scripts/workspace/transport.py\n M tests/test_transport.py\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_component_governance.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "aaaf9af6a478794f190e6b79b806b948215516eef44d0f5f4293fbca82ff2327", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "aa34950bf8dce02d7266bae4d214bbd00298a47d12b6926a8768b229cadd8578", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "d48cfdca50324c70215ee4c477a6d11b802ccf798e78dd446880c8de877b90b8", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "b94045163c3631bd5264f6364a87130cee9f66ce42d782f52f59f34916cce229", + "tests/test_component_governance.py": "eb7b63294a31eb7f533fea8e5e250995d510bb9fc44682d7c102fbabbf359bd0", + "tests/test_dependency_ci.py": "8e1fe3eb6b10ba80a6b230b5835a00679d12418494b6e0e0181855b0254ae394", + "tests/test_workspace.py": "5294bfd43617d11b6aed091b0eb6d4e6370876418bc00169e68394f4e0b8698d" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n", + "components": { + "manifest_sha256": "c8cddfff753bee796e6a75f9c22b5392f4b2cfeee340dadc61ff82e71238318b", + "components": { + "Logging-System": { + "state": "missing" + }, + "Error-Code-System": { + "state": "missing" + }, + "Agent-System-Core": { + "state": "missing" + }, + "Agent-System-UI": { + "state": "missing" + }, + "Agent-System-Frontend": { + "state": "missing" + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "state": "missing" + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": null + } + }, + "after": { + "head": "f71058cb7e7c8c97d5d002a317501e87ef7e7b5e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5efbeebbdc09f8c2484613230a29c882c54652f0", + "status": " M .gitea/workflows/ci.yaml\n M .task/feature-dependency-workspace.md\n M components.json\n M components.lock.json\n M scripts/check-evidence.py\n M scripts/check-worktree.py\n M scripts/evidence.py\n M scripts/workspace/transport.py\n M tests/test_transport.py\n?? scripts/workspace.py\n?? scripts/workspace/__init__.py\n?? scripts/workspace/cli.py\n?? scripts/workspace/common.py\n?? scripts/workspace/git.py\n?? scripts/workspace/go.py\n?? scripts/workspace/manifest.py\n?? scripts/workspace/npm.py\n?? scripts/workspace/state.py\n?? scripts/workspace/transition.py\n?? tests/test_component_governance.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "aaaf9af6a478794f190e6b79b806b948215516eef44d0f5f4293fbca82ff2327", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "aa34950bf8dce02d7266bae4d214bbd00298a47d12b6926a8768b229cadd8578", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "00c12ad29f13d8640def2b3df9e06b11126a377230b6086329924f2f27914aa6", + "scripts/workspace/go.py": "d48cfdca50324c70215ee4c477a6d11b802ccf798e78dd446880c8de877b90b8", + "scripts/workspace/manifest.py": "2897ff4a760da798548d2d08dc965e8b72f93b78c946202de81d44dbea2e0181", + "scripts/workspace/npm.py": "614dc78f70ec87e983487c38fb7f9458bd43c5ba9ec31009cabbc4663c7266bf", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "b94045163c3631bd5264f6364a87130cee9f66ce42d782f52f59f34916cce229", + "tests/test_component_governance.py": "eb7b63294a31eb7f533fea8e5e250995d510bb9fc44682d7c102fbabbf359bd0", + "tests/test_dependency_ci.py": "8e1fe3eb6b10ba80a6b230b5835a00679d12418494b6e0e0181855b0254ae394", + "tests/test_workspace.py": "5294bfd43617d11b6aed091b0eb6d4e6370876418bc00169e68394f4e0b8698d" + }, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (heads/main)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n 5d5fc9891c0eb8994545ccb8b740535d9b99fb0e modules/backend (v0.4.0)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (heads/main)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (remotes/origin/feature/delivery-mechanism-5-ged2af3e)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-squad/deps/agent-native (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-squad/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/agent-squad/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/backend/deps/agent-system-core (v0.4.0)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (a3ee67b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (49b5d8b)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 5773e74086791731059730bd3726dc8c9cd1381f modules/core (v0.3.0-16-g5773e74)\n 047d362c72ec2c095ec14e1d2f2d152f94471faf modules/documents (remotes/origin/feature/project-member-access-1-g047d362)\n eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b modules/frontend (v0.4.0)\n 2c4322ef56df64ad72f65907d25b048a74bb5ffc modules/ui (v0.4.0)\n", + "components": { + "manifest_sha256": "c8cddfff753bee796e6a75f9c22b5392f4b2cfeee340dadc61ff82e71238318b", + "components": { + "Logging-System": { + "state": "missing" + }, + "Error-Code-System": { + "state": "missing" + }, + "Agent-System-Core": { + "state": "missing" + }, + "Agent-System-UI": { + "state": "missing" + }, + "Agent-System-Frontend": { + "state": "missing" + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "state": "missing" + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": null + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_actual_go_version_baseline_overlay_and_unlink_restore_version_consumption (test_workspace.WorkspaceTests.test_actual_go_version_baseline_overlay_and_unlink_restore_version_consumption) ... ok\ntest_conflicting_duplicate_nested_component_stops_before_cloning (test_workspace.WorkspaceTests.test_conflicting_duplicate_nested_component_stops_before_cloning) ... ok\ntest_edit_registers_branch_and_prepare_preserves_work (test_workspace.WorkspaceTests.test_edit_registers_branch_and_prepare_preserves_work) ... ok\ntest_equivalent_recursive_nested_sources_share_an_independent_component (test_workspace.WorkspaceTests.test_equivalent_recursive_nested_sources_share_an_independent_component) ... ok\ntest_existing_fixed_checkout_is_not_switched_after_lock_change (test_workspace.WorkspaceTests.test_existing_fixed_checkout_is_not_switched_after_lock_change) ... ok\ntest_fresh_library_edit_resolves_fixed_consumer_and_preserves_consumer_manifest (test_workspace.WorkspaceTests.test_fresh_library_edit_resolves_fixed_consumer_and_preserves_consumer_manifest) ... ok\ntest_git_operation_is_reported_and_not_removed (test_workspace.WorkspaceTests.test_git_operation_is_reported_and_not_removed) ... ok\ntest_ignored_unique_files_and_shared_worktrees_block_branch_changes (test_workspace.WorkspaceTests.test_ignored_unique_files_and_shared_worktrees_block_branch_changes) ... ok\ntest_library_baseline_resolves_transitive_selected_module (test_workspace.WorkspaceTests.test_library_baseline_resolves_transitive_selected_module) ... ok\ntest_library_legacy_baseline_uses_gitlink_not_current_head (test_workspace.WorkspaceTests.test_library_legacy_baseline_uses_gitlink_not_current_head) ... ok\ntest_missing_fixed_source_never_falls_back_to_remote_main (test_workspace.WorkspaceTests.test_missing_fixed_source_never_falls_back_to_remote_main) ... ok\ntest_npm_library_edit_uses_consumer_lock_git_sha_not_remote_main (test_workspace.WorkspaceTests.test_npm_library_edit_uses_consumer_lock_git_sha_not_remote_main) ... ok\ntest_npm_library_rejects_wrong_lock_origin_and_competing_manual_lock (test_workspace.WorkspaceTests.test_npm_library_rejects_wrong_lock_origin_and_competing_manual_lock) ... ok\ntest_partial_initialization_is_retained_and_retry_is_safe (test_workspace.WorkspaceTests.test_partial_initialization_is_retained_and_retry_is_safe) ... ok\ntest_prepare_pins_fixed_commit_and_reuses_without_advancing (test_workspace.WorkspaceTests.test_prepare_pins_fixed_commit_and_reuses_without_advancing) ... ok\ntest_private_git_metadata_symlink_is_not_adopted (test_workspace.WorkspaceTests.test_private_git_metadata_symlink_is_not_adopted) ... ok\ntest_rejects_mismatched_origin_dirty_and_git_lock_without_changes (test_workspace.WorkspaceTests.test_rejects_mismatched_origin_dirty_and_git_lock_without_changes) ... ok\ntest_rejects_paths_and_symlink_escape (test_workspace.WorkspaceTests.test_rejects_paths_and_symlink_escape) ... ok\ntest_rejects_unknown_component_and_bad_branch_without_source_creation (test_workspace.WorkspaceTests.test_rejects_unknown_component_and_bad_branch_without_source_creation) ... ok\ntest_status_does_not_expose_credentials_from_an_unmatched_actual_origin (test_workspace.WorkspaceTests.test_status_does_not_expose_credentials_from_an_unmatched_actual_origin) ... ok\ntest_status_reports_dirty_and_verify_rejects_it (test_workspace.WorkspaceTests.test_status_reports_dirty_and_verify_rejects_it) ... ok\ntest_transition_known_nested_repositories_preserves_external_worktree_and_runs_go (test_workspace.WorkspaceTests.test_transition_known_nested_repositories_preserves_external_worktree_and_runs_go) ... ok\ntest_transition_preserves_committed_symlink_deletion_and_file_type_change (test_workspace.WorkspaceTests.test_transition_preserves_committed_symlink_deletion_and_file_type_change) ... ok\ntest_transition_preserves_staged_blob_internal_symlink_and_reflog_commit (test_workspace.WorkspaceTests.test_transition_preserves_staged_blob_internal_symlink_and_reflog_commit) ... ok\ntest_transition_refuses_initialized_nested_repository (test_workspace.WorkspaceTests.test_transition_refuses_initialized_nested_repository) ... ok\ntest_transition_rejects_external_symlinks_preserving_both_locations (test_workspace.WorkspaceTests.test_transition_rejects_external_symlinks_preserving_both_locations) ... ok\ntest_transition_report_is_readonly_apply_preserves_unique_commits_refs_and_files (test_workspace.WorkspaceTests.test_transition_report_is_readonly_apply_preserves_unique_commits_refs_and_files) ... ok\ntest_unlink_refuses_manual_overlay_changes_without_changing_registration (test_workspace.WorkspaceTests.test_unlink_refuses_manual_overlay_changes_without_changing_registration) ... ok\ntest_workspace_operation_lock_and_user_go_work_are_preserved (test_workspace.WorkspaceTests.test_workspace_operation_lock_and_user_go_work_are_preserved) ... ok\n\n----------------------------------------------------------------------\nRan 29 tests in 6.310s\n\nOK\ntest_before_sync_rejects_component_git_lock (test_component_governance.ComponentGovernanceTests.test_before_sync_rejects_component_git_lock) ... ok\ntest_evidence_captures_ignored_component_revision_and_dirty_bytes (test_component_governance.ComponentGovernanceTests.test_evidence_captures_ignored_component_revision_and_dirty_bytes) ... ok\ntest_receipts_reject_component_path_escape (test_component_governance.ComponentGovernanceTests.test_receipts_reject_component_path_escape) ... ok\n\n----------------------------------------------------------------------\nRan 3 tests in 0.170s\n\nOK\n", + "output_sha256": "841d84077f3e2747eb7d104d7fc98ac88f31aa738f0719573d3c7720ce2d03f7", + "receipt_sha256": "f013e83d58733e5a62144940ce51659f8413b22691bcf567158bdc5cf7af26b8" +} +``` diff --git a/components.json b/components.json index c2973a6e..7090f737 100644 --- a/components.json +++ b/components.json @@ -53,7 +53,8 @@ "legacy_path": "modules/ui", "role": "npm-library", "modules": [], - "target": "main" + "target": "main", + "package_name": "@agent-system/ui" }, { "id": "Agent-System-Frontend", @@ -140,6 +141,11 @@ "path": "git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/cmd/agent-squad", "legacy": "agent-squad/cmd/agent-squad", "directory": "cmd/agent-squad" + }, + { + "path": "git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/a2a", + "legacy": "agent-squad/adapters/a2a", + "directory": "adapters/a2a" } ], "target": "main" diff --git a/components.lock.json b/components.lock.json index e67a9c21..f83ab838 100644 --- a/components.lock.json +++ b/components.lock.json @@ -1,14 +1,11 @@ { "schema": 1, "components": { - "Agent-System-UI": { - "commit": "2c4322ef56df64ad72f65907d25b048a74bb5ffc" - }, "Agent-System-Frontend": { - "commit": "eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b" + "commit": "ad53e90a8542143104ddc7f759c8f8e7b7001924" }, "Agent-System-Backend": { - "commit": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e" + "commit": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c" }, "Development-Guidelines": { "commit": "2f5b19872be2a4597838a4131ad75d1be089ee5e" diff --git a/scripts/check-evidence.py b/scripts/check-evidence.py index df609348..8891c208 100644 --- a/scripts/check-evidence.py +++ b/scripts/check-evidence.py @@ -43,6 +43,12 @@ def card_path(path): def check_snapshot(snapshot): evidence.validate_snapshot(snapshot) stale = check_head(snapshot["head"]) + current = evidence.component_snapshot(Path(subprocess.check_output(['git', 'rev-parse', '--show-toplevel'], text=True).strip())) + if current is not None and snapshot.get('components') != current: + raise ValueError('recorded ordinary component/source-lock objects differ from the current objects') + for item in snapshot.get('components', {}).get('components', {}).values(): + if item.get('status') or item.get('untracked'): + raise ValueError('recorded ordinary component includes uncommitted changes') for line in snapshot["status"].splitlines(): if len(line) < 4 or line[2] != " ": raise ValueError("invalid recorded worktree status") diff --git a/scripts/check-worktree.py b/scripts/check-worktree.py index a9503cc4..e0c8ff8b 100644 --- a/scripts/check-worktree.py +++ b/scripts/check-worktree.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 """Fail closed before task synchronization, verification, or worktree disposal.""" import os +import json from pathlib import Path import subprocess import sys @@ -103,6 +104,34 @@ def materialize(repo): materialize(child) +def ordinary_components(repo, mode, removal_roots=()): + manifest = repo / 'components.json' + if not manifest.exists(): + return + document = json.loads(manifest.read_text()) + if document.get('schema') != 1 or not isinstance(document.get('components'), list): + raise RuntimeError('invalid component manifest') + for item in document['components']: + name = item.get('id') + relative = item.get('path') + if not isinstance(name, str) or relative != '.workspace/' + name: + raise RuntimeError('invalid component identity/path') + child = repo / relative + if child.resolve() != child.absolute() or repo not in child.resolve().parents: + raise RuntimeError('component path escapes its owner') + if not child.exists(): + continue + if not (child / '.git').exists() or Path(text(child, 'rev-parse', '--show-toplevel')).resolve() != child: + raise RuntimeError('component has borrowed or missing Git identity') + check_operations(child) + if mode == 'finish': + check_clean(child, ignored=True) + check_component_worktrees(child, removal_roots) + head = text(child, 'rev-parse', 'HEAD') + if local_work_outside(child, head): + raise RuntimeError('component has unpreserved local refs; preserve its source before removal') + + def local_work_outside(child, expected): """2026-10-05 修复:pinned-history 检查此前用 --all --reflog,把 refs/remotes 也 计入——pin 在 feature 顶端的子仓因 origin/main 不在 pin 历史内而永远无法 finish @@ -165,6 +194,7 @@ def main(): materialize(repo) else: check_children(repo, mode, removal_roots) + ordinary_components(repo, mode, removal_roots) print(f"[worktree] {mode}: recursive component checks passed") diff --git a/scripts/evidence.py b/scripts/evidence.py index 644ec39d..997ae01d 100644 --- a/scripts/evidence.py +++ b/scripts/evidence.py @@ -82,6 +82,52 @@ def common_dir(): return str(Path(git_text("rev-parse", "--git-common-dir")).resolve()) +def component_snapshot(root): + """Record ignored ordinary checkouts without resolving or changing versions.""" + manifest = root / 'components.json' + if not manifest.exists(): + return None + try: + config = json.loads(manifest.read_text()) + if config.get('schema') != 1 or not isinstance(config.get('components'), list): + raise EvidenceError('Invalid component manifest') + result = {'manifest_sha256': digest(manifest.read_bytes()), 'components': {}} + lock = root / 'components.lock.json' + result['lock_sha256'] = digest(lock.read_bytes()) if lock.exists() else None + state = root / '.workspace/state.json' + result['state_sha256'] = digest(state.read_bytes()) if state.exists() else None + for item in config['components']: + name, relative = item.get('id'), item.get('path') + if not isinstance(name, str) or not isinstance(relative, str) or relative != '.workspace/' + name: + raise EvidenceError('Invalid component identity/path') + path = root / relative + if path.resolve() != path.absolute() or root.resolve() not in path.resolve().parents: + raise EvidenceError('Component path escapes its owner') + if not path.exists(): + result['components'][name] = {'state': 'missing'} + continue + if not (path / '.git').exists(): + raise EvidenceError('Component source has no Git identity') + if Path(git_text('-C', str(path), 'rev-parse', '--show-toplevel')).resolve() != path.resolve(): + raise EvidenceError('Component Git identity is borrowed') + untracked = {} + for raw in git('-C', str(path), 'ls-files', '--others', '--exclude-standard', '-z').split(b'\0'): + if raw: + filename = os.fsdecode(raw) + entry = path / filename + untracked[filename] = digest(os.fsencode(os.readlink(entry))) if entry.is_symlink() else (digest(entry.read_bytes()) if entry.is_file() else None) + result['components'][name] = { + 'head': git_text('-C', str(path), 'rev-parse', 'HEAD'), + 'branch': git_text('-C', str(path), 'branch', '--show-current'), + 'status': git('-C', str(path), 'status', '--porcelain', '--untracked-files=all').decode('utf-8', 'replace'), + 'tracked_diff_sha256': digest(git('-C', str(path), 'diff', '--binary', 'HEAD', '--')), + 'untracked': untracked, + } + return result + except (OSError, ValueError, TypeError, AttributeError) as error: + raise EvidenceError('Component object could not be recorded') from error + + def snapshot(): untracked = {} root = Path(git_text("rev-parse", "--show-toplevel")) @@ -98,7 +144,7 @@ def snapshot(): else: untracked[name] = None target = os.environ.get("TASK_TARGET_BRANCH", "main") - return { + result = { "head": git_text("rev-parse", "HEAD"), "branch": git_text("rev-parse", "--abbrev-ref", "HEAD"), "target_branch": target, @@ -109,6 +155,10 @@ def snapshot(): "untracked": untracked, "submodules": git("submodule", "status", "--recursive").decode("utf-8", "replace"), } + components = component_snapshot(root) + if components is not None: + result['components'] = components + return result def create_receipt(command, output, exit_code, before, after, *, timestamp=None, @@ -135,8 +185,10 @@ def validate_snapshot(value): raise EvidenceError("Invalid receipt object snapshot") expected = {"head", "branch", "target_branch", "target_head", "status", "tracked_diff_sha256", "submodules", "untracked"} - if set(value) != expected: + if set(value) not in (expected, expected | {'components'}): raise EvidenceError("Invalid receipt object fields") + if 'components' in value and (not isinstance(value['components'], dict) or not isinstance(value['components'].get('components'), dict)): + raise EvidenceError('Invalid component snapshot') for key in ("head", "branch", "target_branch", "status", "tracked_diff_sha256", "submodules"): if not isinstance(value.get(key), str): raise EvidenceError("Invalid receipt object field: " + key) diff --git a/scripts/workspace.py b/scripts/workspace.py new file mode 100644 index 00000000..c8f5d31a --- /dev/null +++ b/scripts/workspace.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 +"""Public entry point for fixed sources and local component development.""" +from workspace.cli import main + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/workspace/__init__.py b/scripts/workspace/__init__.py new file mode 100644 index 00000000..1d52de48 --- /dev/null +++ b/scripts/workspace/__init__.py @@ -0,0 +1 @@ +"""Safe, local component source workspaces; language manifests own dependencies.""" diff --git a/scripts/workspace/cli.py b/scripts/workspace/cli.py new file mode 100644 index 00000000..bd60de3e --- /dev/null +++ b/scripts/workspace/cli.py @@ -0,0 +1,237 @@ +import argparse +import json +import os +from pathlib import Path +import subprocess +import sys + +from .common import WorkspaceError, safe_path, write_json +from .git import Git +from .go import Go +from .manifest import Manifest, validate_branch +from .npm import Npm +from .state import State +from .transition import Transition + + +def process_environment(root): + try: + from .transport import environment + except ModuleNotFoundError as error: + if error.name != "workspace.transport": + raise + result = os.environ.copy() + result.update({"GOWORK": "off", "GOTOOLCHAIN": "local"}) + else: + result = environment(root) + # Read-only reporting does not refresh another owner's Git index. + result["GIT_OPTIONAL_LOCKS"] = "0" + for name in ("GIT_DIR", "GIT_WORK_TREE", "GIT_INDEX_FILE", "GIT_COMMON_DIR"): + result.pop(name, None) + return result + + +class Workspace: + def __init__(self, root): + self.root = root.resolve() + self.manifest = Manifest(self.root) + self.state = State(self.root) + self.env = process_environment(self.root) + self.git = Git(self.env) + self.go = Go(self) + self.npm = Npm(self) + self.transition = Transition(self) + + def baseline(self, component): + name = component["id"] + if component["role"] == "go-library": + resolved = self.go.resolve(component) + if resolved: + return resolved + elif component["role"] == "npm-library": + resolved = self.npm.resolve(component) + if resolved: + return resolved + elif name in self.manifest.lock: + return self.manifest.lock[name]["commit"], {"kind": "source-lock"} + legacy = self.git.gitlink(self.root, component.get("legacy_path")) + if legacy: + return legacy, {"kind": "legacy-gitlink", "path": component.get("legacy_path")} + raise WorkspaceError(f"no fixed version source for {name}; latest main is not a fallback") + + def record(self, component, commit, source): + record = {"path": component["path"], "origin": component["repo"], "baseline": commit, + "source": source, "owner_root": str(self.root), "mode": "preparing", "linked": False} + self.state.data["components"][component["id"]] = record + return record + + def prepare_one(self, component): + name = component["id"] + path = safe_path(self.root, component["path"]) + commit, source = self.baseline(component) + record = self.state.data["components"].get(name) + if record and (record["path"] != component["path"] or record["origin"] != component["repo"]): + raise WorkspaceError(f"registered component identity changed: {name}") + if path.exists(): + editable = record and record.get("mode") in ("editable", "linked") + partial = record and record.get("mode") == "preparing" + actual = self.git.safe(path, component["repo"], clean=not (editable or partial)) + if editable: + if record["baseline"] != commit: + raise WorkspaceError(f"version changed while {name} is editable; owner must synchronize explicitly") + if actual["branch"] != record.get("branch"): + raise WorkspaceError(f"registered edit branch changed: {name}") + return record + if partial: + if any(entry.name != ".git" for entry in path.iterdir()): + raise WorkspaceError(f"partial clone contains files: {name}; preserve them for its owner") + else: + if actual["branch"] or actual["head"] != commit: + raise WorkspaceError(f"existing checkout differs from fixed source: {name}; no automatic checkout") + if record is None: + record = self.record(component, commit, source) + record.update({"mode": "versioned", "baseline": commit, "source": source}) + self.state.save() + return record + elif record and record.get("mode") != "preparing": + raise WorkspaceError(f"registered source is missing: {name}; owner must resolve it") + if record is None: + record = self.record(component, commit, source) + record.update({"baseline": commit, "source": source, "mode": "preparing"}) + self.state.save() + try: + if not path.exists(): + self.git.call(self.root, "clone", "--no-checkout", "--", component["repo"], str(path)) + self.git.call(path, "fetch", "--no-tags", "origin", commit) + self.git.call(path, "checkout", "--detach", commit) + self.git.safe(path, component["repo"]) + record.update({"mode": "versioned", "branch": None}) + record.pop("error", None) + self.state.save() + return record + except Exception as error: + record["error"] = str(error) + self.state.save() + raise + + def edit(self, component, branch): + self.go.check_owned() + if component["role"] in ("go-library", "npm-library"): + for consumer in self.manifest.select(): + if consumer["role"] == "application" and (consumer.get("modules") or component["role"] == "npm-library"): + path = safe_path(self.root, consumer["path"]) + if path.exists(): + self.git.safe(path, consumer["repo"], clean=False) + else: + self.prepare_one(consumer) + name = component["id"] + record = self.prepare_one(component) + path = safe_path(self.root, component["path"]) + branch = branch or "feature/workspace-" + name.lower() + validate_branch(branch) + if record.get("mode") in ("editable", "linked"): + if record.get("branch") != branch: + raise WorkspaceError(f"component already belongs to {record.get('branch')}; no branch replacement") + self.git.safe(path, component["repo"], clean=False) + else: + self.git.safe(path, component["repo"]) + if self.git.call(path, "show-ref", "--verify", "--quiet", "refs/heads/" + branch, check=False).returncode == 0: + raise WorkspaceError(f"branch already exists: {branch}; owner must choose its checkout") + self.git.call(path, "checkout", "-b", branch, record["baseline"]) + record.update({"mode": "editable", "branch": branch}) + self.state.save() + record["linked"] = bool(self.go.modules(component)) + if record["linked"]: + record["mode"] = "linked" + self.go.update() + self.state.save() + + def unlink(self, component): + self.go.check_owned() + record = self.state.data["components"].get(component["id"]) + if record is None: + raise WorkspaceError(f"component is not registered: {component['id']}") + self.git.safe(safe_path(self.root, component["path"]), component["repo"], clean=False) + record["linked"] = False + if record.get("mode") == "linked": + record["mode"] = "editable" + self.go.update() + self.state.save() + + def status(self, components): + result = {"schema": 1, "root": str(self.root), "components": {}, + "go_work": self.state.data.get("go_work")} + for component in components: + name = component["id"] + record = self.state.data["components"].get(name) + entry = {"path": component["path"], "repo": component["repo"], "role": component["role"], + "declared": self.manifest.lock.get(name), "registered": record} + path = safe_path(self.root, component["path"]) + if path.exists(): + try: + entry["actual"] = self.git.inspect(path) + except WorkspaceError as error: + entry["error"] = str(error) + result["components"][name] = entry + return result + + def verify(self, components): + self.go.check_owned() + for component in components: + record = self.state.data["components"].get(component["id"]) + if not record or record.get("linked"): + raise WorkspaceError(f"fixed source missing or development overlay active: {component['id']}") + actual = self.git.safe(safe_path(self.root, component["path"]), component["repo"]) + baseline, _ = self.baseline(component) + if actual["head"] != baseline or actual["branch"]: + raise WorkspaceError(f"fixed source differs from declared version: {component['id']}") + + def snapshot(self): + write_json(safe_path(self.root, ".workspace/resolved.json"), self.status(self.manifest.select())) + + +def main(argv=None): + parser = argparse.ArgumentParser(description="Fixed component sources and explicit local editing") + parser.add_argument("--root", type=Path, default=Path(__file__).resolve().parents[2]) + parser.add_argument("command", choices=("prepare", "edit", "unlink", "status", "verify", "transition")) + parser.add_argument("--name") + parser.add_argument("--branch") + parser.add_argument("--apply", action="store_true") + args = parser.parse_args(argv) + try: + if args.branch: + validate_branch(args.branch) + if args.command in ("edit", "unlink") and not args.name: + raise WorkspaceError("--name is required for component editing/unlinking") + if args.apply and args.command != "transition": + raise WorkspaceError("--apply is only valid for transition") + workspace = Workspace(args.root) + components = workspace.manifest.select(args.name, fixed=args.command in ("prepare", "verify")) + if args.command == "status": + result = workspace.status(components) + elif args.command == "transition" and not args.apply: + result = {"schema": 1, "components": {component["id"]: {"legacy": workspace.transition.inspect(component)} for component in components}} + elif args.command == "verify": + workspace.verify(components) + result = workspace.status(components) + else: + with workspace.state.operation(): + # Read state again under the operation lock: another process may have + # finished between initial inspection and lock acquisition. + workspace.state = State(workspace.root) + if args.command == "transition": + workspace.transition.apply_all(components, args.branch) + for component in components: + if args.command == "prepare": + workspace.prepare_one(component) + elif args.command == "edit": + workspace.edit(component, args.branch) + elif args.command == "unlink": + workspace.unlink(component) + workspace.snapshot() + result = workspace.status(components) + print(json.dumps(result, indent=2, sort_keys=True)) + return 0 + except (WorkspaceError, OSError, ValueError, subprocess.TimeoutExpired) as error: + print(f"workspace: {error}", file=sys.stderr) + return 1 diff --git a/scripts/workspace/common.py b/scripts/workspace/common.py new file mode 100644 index 00000000..4bd363fd --- /dev/null +++ b/scripts/workspace/common.py @@ -0,0 +1,75 @@ +import hashlib +import json +import os +from pathlib import Path, PurePosixPath +import subprocess +import tempfile + + +class WorkspaceError(Exception): + pass + + +def run(args, cwd, env=None, check=True): + result = subprocess.run(args, cwd=cwd, env=env, text=True, capture_output=True, + timeout=180) + if check and result.returncode: + raise WorkspaceError(f"{args[0]} failed ({result.returncode}): {result.stderr.strip() or result.stdout.strip()}") + return result + + +def relative_path(value, allow_dot=False): + if not isinstance(value, str) or not value or "\\" in value or any(ord(c) < 32 for c in value): + raise WorkspaceError("invalid relative path") + path = PurePosixPath(value) + if path.is_absolute() or ".." in path.parts or (value == "." and not allow_dot): + raise WorkspaceError(f"unsafe relative path: {value}") + return path + + +def safe_path(root, value, allow_dot=False): + relative_path(value, allow_dot) + path = root / value + # Refuse symlink path components even when a link currently points inside root. + # This avoids creating a second apparent owner and later retargeting escapes. + current = root + for part in PurePosixPath(value).parts: + current /= part + if current.is_symlink(): + raise WorkspaceError(f"symlink path is not owned by this workspace: {value}") + if not path.resolve().is_relative_to(root.resolve()): + raise WorkspaceError(f"path escapes workspace: {value}") + return path + + +def read_json(path): + if path.is_symlink(): + raise WorkspaceError(f"refusing symlink metadata: {path}") + try: + return json.loads(path.read_text()) + except (OSError, ValueError) as error: + raise WorkspaceError(f"cannot read {path.name}: {error}") from error + + +def atomic_write(path, content): + if path.is_symlink(): + raise WorkspaceError(f"refusing symlink output: {path}") + path.parent.mkdir(parents=True, exist_ok=True) + descriptor, temporary = tempfile.mkstemp(prefix="." + path.name + "-", dir=path.parent) + try: + with os.fdopen(descriptor, "w") as stream: + stream.write(content) + stream.flush() + os.fsync(stream.fileno()) + os.replace(temporary, path) + finally: + if os.path.exists(temporary): + os.unlink(temporary) + + +def write_json(path, value): + atomic_write(path, json.dumps(value, indent=2, sort_keys=True) + "\n") + + +def digest(path): + return hashlib.sha256(path.read_bytes()).hexdigest() diff --git a/scripts/workspace/git.py b/scripts/workspace/git.py new file mode 100644 index 00000000..2a4decd9 --- /dev/null +++ b/scripts/workspace/git.py @@ -0,0 +1,70 @@ +from pathlib import Path +from urllib.parse import urlsplit, urlunsplit + +from .common import WorkspaceError, run + + +def display_origin(value): + parsed = urlsplit(value) + netloc = parsed.netloc + if parsed.username and (parsed.scheme != "ssh" or parsed.username != "git" or parsed.password): + netloc = "@" + netloc.rsplit("@", 1)[-1] + return urlunsplit((parsed.scheme, netloc, parsed.path, + "" if parsed.query else "", "" if parsed.fragment else "")) + + +class Git: + def __init__(self, env): + self.env = env + + def call(self, path, *args, check=True): + return run(["git", "-c", "gc.auto=0", "-c", "core.hooksPath=/dev/null", "-c", "core.fsmonitor=false", *args], path, self.env, check) + + def text(self, path, *args, check=True): + return self.call(path, *args, check=check).stdout.strip() + + def inspect(self, path): + if not (path / ".git").exists(): + raise WorkspaceError(f"existing path is not an independent Git checkout: {path}") + top = Path(self.text(path, "rev-parse", "--show-toplevel")) + if top.resolve() != path.resolve(): + raise WorkspaceError("component path is not a Git root") + gitdir = Path(self.text(path, "rev-parse", "--absolute-git-dir")) + common = Path(self.text(path, "rev-parse", "--path-format=absolute", "--git-common-dir")) + locks = sorted(str(file) for directory in {gitdir, common} for file in directory.rglob("*.lock")) + operations = [name for name in ("MERGE_HEAD", "CHERRY_PICK_HEAD", "REVERT_HEAD", "rebase-merge", "rebase-apply", "BISECT_LOG") + if (gitdir / name).exists()] + changes = self.text(path, "status", "--porcelain=v1", "--untracked-files=all") + ignored = self.text(path, "ls-files", "--others", "--ignored", "--exclude-standard") + head = self.text(path, "rev-parse", "--verify", "HEAD", check=False) + branch = self.text(path, "symbolic-ref", "--quiet", "--short", "HEAD", check=False) + worktrees = self.text(path, "worktree", "list", "--porcelain") + return {"head": head or None, "branch": branch or None, + "origin": display_origin(self.text(path, "remote", "get-url", "origin", check=False)), + "dirty": bool(changes or ignored), "changes": changes.splitlines(), "ignored": ignored.splitlines(), + "locks": locks, "operations": operations, + "worktrees": [line[9:] for line in worktrees.splitlines() if line.startswith("worktree ")], + "git_dir": str(gitdir), "common_dir": str(common)} + + def safe(self, path, origin=None, clean=True, independent=True): + actual = self.inspect(path) + if origin is not None and actual["origin"] != origin: + raise WorkspaceError(f"origin mismatch at {path}") + if actual["locks"] or actual["operations"]: + raise WorkspaceError(f"Git operation/lock in progress at {path}") + if independent and (actual["git_dir"] != actual["common_dir"] or len(actual["worktrees"]) != 1): + raise WorkspaceError(f"shared Git worktree ownership at {path}; owner must resolve it") + if independent and ((path / ".git").is_symlink() or not (path / ".git").is_dir() + or Path(actual["git_dir"]).resolve() != (path / ".git").resolve()): + raise WorkspaceError(f"component Git metadata is owned outside its checkout: {path}") + if clean and actual["dirty"]: + raise WorkspaceError(f"dirty or ignored unique files at {path}; owner must save them") + return actual + + def gitlink(self, root, legacy): + if not legacy: + return None + result = self.text(root, "ls-tree", "HEAD", "--", legacy, check=False) + if result.startswith("160000 commit "): + return result.split()[2] + return None diff --git a/scripts/workspace/go.py b/scripts/workspace/go.py new file mode 100644 index 00000000..f4d547cc --- /dev/null +++ b/scripts/workspace/go.py @@ -0,0 +1,153 @@ +import json +from pathlib import Path +import shutil +import tempfile + +from .common import WorkspaceError, atomic_write, digest, run, safe_path +from .manifest import SHA + + +class Go: + def __init__(self, workspace): + self.workspace = workspace + + def call(self, path, *args): + result = run(["go", *args], path, self.workspace.env) + try: + return json.loads(result.stdout) + except ValueError as error: + raise WorkspaceError("Go returned invalid module metadata") from error + + def modules(self, component): + result = [] + base = safe_path(self.workspace.root, component["path"]) + for module in component.get("modules", []): + directory = safe_path(base, module.get("directory", "."), allow_dot=True) + if (directory / "go.mod").is_file(): + document = self.call(directory, "mod", "edit", "-json") + if document["Module"]["Path"] not in (module["path"], module.get("legacy")): + raise WorkspaceError(f"module identity mismatch at {directory}") + result.append((module, directory, document)) + return result + + def resolve(self, component): + selected = [] + consumers = sorted(self.workspace.manifest.select(), key=lambda c: ("backend" not in c["id"].lower(), c["id"])) + for consumer in consumers: + if consumer["role"] != "application": + continue + for consumer_module, directory, document in self.modules(consumer): + if document["Module"]["Path"] != consumer_module["path"]: + # An old short-name graph still belongs to the old gitlinks. + continue + # Package management can update go.sum even when source merely + # needs inspection. Resolve an identical isolated manifest so + # both editable and historical consumers stay untouched. + with tempfile.TemporaryDirectory(prefix="workspace-go-resolve-") as temporary: + isolated = Path(temporary) + shutil.copy2(directory / "go.mod", isolated / "go.mod") + if (directory / "go.sum").exists(): + shutil.copy2(directory / "go.sum", isolated / "go.sum") + output = run(["go", "list", "-mod=mod", "-m", "-json", "all"], isolated, self.workspace.env).stdout + graph = {} + decoder = json.JSONDecoder() + while output.strip(): + metadata, end = decoder.raw_decode(output.lstrip()) + output = output.lstrip()[end:] + graph[metadata["Path"]] = metadata + for module in component.get("modules", []): + metadata = graph.get(module["path"]) + if not metadata: + continue + if metadata.get("Replace"): + raise WorkspaceError(f"local replacement cannot establish version baseline: {module['path']}") + version = metadata.get("Version") + if not version: + raise WorkspaceError("Go module has no fixed selected version") + download = self.call(isolated, "mod", "download", "-json", module["path"] + "@" + version) + origin = download.get("Origin") or {} + commit = origin.get("Hash", "") + if origin.get("VCS") != "git" or not SHA.fullmatch(commit): + raise WorkspaceError(f"Go module has no verifiable Origin.Hash: {module['path']}") + if origin.get("URL") != component["repo"]: + # Canonical discovery uses HTTPS; transport maps that + # exact registered source to SSH, without a new identity. + canonical = "https://" + module["path"].split(".git", 1)[0] + ".git" + if origin.get("URL") != canonical: + raise WorkspaceError(f"Go Origin URL does not match approved repository: {module['path']}") + selected.append((commit, {"kind": "go-module", "module": module["path"], + "version": version, "consumer": consumer["id"], "origin": origin})) + if not selected: + return None + if len({entry[0] for entry in selected}) != 1: + raise WorkspaceError(f"consumer/submodule versions select different commits for {component['id']}; owner must choose compatible versions") + commit, source = selected[0] + source = dict(source, consumers=sorted({entry[1]["consumer"] for entry in selected}), + selections=[entry[1] for entry in selected]) + return commit, source + + def check_owned(self): + path = safe_path(self.workspace.root, "go.work") + recorded = self.workspace.state.data.get("go_work") + if path.exists() and (not recorded or digest(path) != recorded.get("sha256")): + raise WorkspaceError("go.work is not the registered generated overlay; preserve manual changes") + if recorded and not path.exists(): + raise WorkspaceError("registered go.work is missing; owner must resolve overlay state") + + def update(self): + self.check_owned() + paths = set() + linked_modules = set() + cached = {} + + def modules(component): + if component["id"] not in cached: + cached[component["id"]] = self.modules(component) + return cached[component["id"]] + + for name, entry in self.workspace.state.data["components"].items(): + if entry.get("linked"): + for _, directory, document in modules(self.workspace.manifest.components[name]): + paths.add(directory) + linked_modules.add(document["Module"]["Path"]) + for consumer in entry.get("source", {}).get("consumers", []): + for _, directory, document in modules(self.workspace.manifest.components[consumer]): + paths.add(directory) + linked_modules.add(document["Module"]["Path"]) + if linked_modules: + # Include only consuming modules, including transitive local consumers. + changed = True + while changed: + changed = False + for component in self.workspace.manifest.select(): + for _, directory, document in modules(component): + required = {item["Path"] for item in document.get("Require") or []} + if required & linked_modules and directory not in paths: + paths.add(directory) + linked_modules.add(document["Module"]["Path"]) + changed = True + path = safe_path(self.workspace.root, "go.work") + if not paths: + if path.exists(): + path.unlink() + self.workspace.state.data.pop("go_work", None) + return + version = run(["go", "env", "GOVERSION"], self.workspace.root, self.workspace.env).stdout.strip().removeprefix("go") + content = "go " + version + "\n\nuse (\n" + "".join("\t" + json.dumps("./" + str(item.relative_to(self.workspace.root))) + "\n" for item in sorted(paths)) + ")\n" + documents = [(directory, document) for rows in cached.values() for _, directory, document in rows if directory in paths] + directories = {document["Module"]["Path"]: directory for directory, document in documents} + aliases = {entry["Old"]["Path"] for _, document in documents for entry in document.get("Replace") or [] + if not entry["New"].get("Version") and entry["Old"]["Path"] in directories} + versions = {(entry["Path"], entry["Version"]) for _, document in documents for entry in document.get("Require") or [] + if entry["Path"] in aliases} + versions.update((entry["Old"]["Path"], entry["Old"]["Version"]) for _, document in documents + for entry in document.get("Replace") or [] + if entry["Old"]["Path"] in aliases and entry["Old"].get("Version")) + # Historical modules can replace the same library with different nested + # paths. Exact-version local overrides reconcile those paths while Go + # forbids an all-version replacement of a workspace main module. + if versions: + content += "\nreplace (\n" + "".join("\t" + name + " " + selected + " => " + json.dumps("./" + str(directories[name].relative_to(self.workspace.root))) + "\n" + for name, selected in sorted(versions)) + ")\n" + atomic_write(path, content) + self.workspace.state.data["go_work"] = {"sha256": digest(path), "paths": [str(item.relative_to(self.workspace.root)) for item in sorted(paths)]} diff --git a/scripts/workspace/manifest.py b/scripts/workspace/manifest.py new file mode 100644 index 00000000..62e831cf --- /dev/null +++ b/scripts/workspace/manifest.py @@ -0,0 +1,94 @@ +import re +from urllib.parse import urlsplit + +from .common import WorkspaceError, read_json, relative_path, safe_path + +ROLES = {"application", "go-library", "npm-library", "documentation", "guidelines"} +FIXED_ROLES = {"application", "documentation", "guidelines"} +SHA = re.compile(r"[0-9a-f]{40}\Z") +IDENTIFIER = re.compile(r"[A-Za-z0-9][A-Za-z0-9_-]*\Z") + + +def validate_repo(repo): + if not isinstance(repo, str) or not repo or repo.startswith("-") or any(c.isspace() for c in repo): + raise WorkspaceError("invalid component repository") + if "://" in repo: + parsed = urlsplit(repo) + if parsed.scheme not in {"ssh", "https", "file"} or parsed.password or parsed.query or parsed.fragment: + raise WorkspaceError("repository must be a credential-free approved Git URL") + if parsed.scheme == "https" and parsed.username: + raise WorkspaceError("repository credentials are forbidden") + if parsed.scheme == "ssh" and parsed.username not in (None, "git"): + raise WorkspaceError("unsupported SSH repository identity") + elif not repo.startswith("/"): + raise WorkspaceError("repository must be an absolute local path or approved URL") + + +class Manifest: + def __init__(self, root): + self.root = root + document = read_json(root / "components.json") + if not isinstance(document, dict) or document.get("schema") != 1 or not isinstance(document.get("components"), list): + raise WorkspaceError("unsupported components schema") + self.components = {} + modules = set() + for component in document["components"]: + if not isinstance(component, dict): + raise WorkspaceError("invalid component record") + name = component.get("id") + if not isinstance(name, str) or not IDENTIFIER.fullmatch(name) or name in self.components: + raise WorkspaceError("invalid or duplicate component id") + if component.get("path") != ".workspace/" + name: + raise WorkspaceError(f"component path must be .workspace/{name}") + safe_path(root, component["path"]) + if component.get("legacy_path"): + safe_path(root, component["legacy_path"]) + if component.get("role") not in ROLES: + raise WorkspaceError(f"invalid component role: {name}") + package = component.get("package_name") + if package is not None and (component["role"] != "npm-library" or not isinstance(package, str) + or not re.fullmatch(r"(?:@[a-z0-9][a-z0-9._-]*/)?[a-z0-9][a-z0-9._-]*", package)): + raise WorkspaceError(f"invalid npm package mapping: {name}") + validate_repo(component.get("repo")) + target = component.get("target", "main") + validate_ref(target) + entries = component.get("modules", []) + if not isinstance(entries, list): + raise WorkspaceError("modules must be a list") + for module in entries: + if not isinstance(module, dict) or not isinstance(module.get("path"), str) or not module["path"]: + raise WorkspaceError("invalid module mapping") + if module["path"] in modules or any(c.isspace() for c in module["path"]): + raise WorkspaceError("duplicate or invalid module identity") + relative_path(module.get("directory", "."), allow_dot=True) + modules.add(module["path"]) + self.components[name] = component + lock = read_json(root / "components.lock.json") + if not isinstance(lock, dict) or lock.get("schema") != 1 or not isinstance(lock.get("components"), dict): + raise WorkspaceError("unsupported component lock schema") + self.lock = lock["components"] + for name, value in self.lock.items(): + if name not in self.components or not isinstance(value, dict) or not SHA.fullmatch(str(value.get("commit", ""))): + raise WorkspaceError(f"invalid locked component: {name}") + if self.components[name]["role"] in ("go-library", "npm-library"): + raise WorkspaceError(f"language library {name} cannot have a competing source lock") + + def select(self, name=None, fixed=False): + if name: + if name not in self.components: + raise WorkspaceError(f"unknown component: {name}") + return [self.components[name]] + return [entry for entry in self.components.values() if not fixed or entry["role"] in FIXED_ROLES] + + +def validate_ref(ref): + if not isinstance(ref, str) or not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9._/-]*", ref): + raise WorkspaceError("invalid branch/ref name") + if any(token in ref for token in ("..", "//", "/.", ".lock")) or ref.endswith(("/", ".")): + raise WorkspaceError("invalid branch/ref name") + + +def validate_branch(branch): + validate_ref(branch) + if not branch.startswith(("feature/", "fix/", "chore/", "codex/")): + raise WorkspaceError("editing requires a named task branch") diff --git a/scripts/workspace/npm.py b/scripts/workspace/npm.py new file mode 100644 index 00000000..523edd11 --- /dev/null +++ b/scripts/workspace/npm.py @@ -0,0 +1,62 @@ +"""Resolve editable npm source from a consumer's Git package lock, without npm hooks.""" +from pathlib import Path +from urllib.parse import unquote, urlsplit, urlunsplit + +from .common import WorkspaceError, read_json, safe_path +from .manifest import SHA, validate_repo + + +def repository_identity(value): + value = value.removeprefix("git+") + parsed = urlsplit(value) + if parsed.scheme == "file": + if parsed.netloc not in ("", "localhost"): + raise WorkspaceError("npm Git origin must be local or approved") + return str(Path(unquote(parsed.path)).resolve()) + validate_repo(value) + return value + + +class Npm: + def __init__(self, workspace): + self.workspace = workspace + + def resolve(self, component): + package = component.get("package_name") + if not package: + return None + selected = [] + consumers = sorted(self.workspace.manifest.select(), key=lambda entry: ("frontend" not in entry["id"].lower(), entry["id"])) + for consumer in consumers: + if consumer["role"] != "application": + continue + root = safe_path(self.workspace.root, consumer["path"]) + path = safe_path(root, "package-lock.json") + if not path.exists(): + continue + lock = read_json(path) + if not isinstance(lock, dict) or lock.get("lockfileVersion") not in (2, 3) or not isinstance(lock.get("packages"), dict): + raise WorkspaceError(f"unsupported npm lock for {consumer['id']}") + for location, entry in lock["packages"].items(): + if location != "node_modules/" + package and not location.endswith("/node_modules/" + package): + continue + if not isinstance(entry, dict) or entry.get("link"): + raise WorkspaceError(f"local npm link cannot establish version baseline: {package}") + resolved = entry.get("resolved", "") + if not isinstance(resolved, str) or not resolved.startswith("git+"): + raise WorkspaceError(f"npm source needs a fixed approved Git origin: {package}") + parsed = urlsplit(resolved) + if not SHA.fullmatch(parsed.fragment): + raise WorkspaceError(f"npm Git source must pin a full commit: {package}") + origin = urlunsplit((parsed.scheme, parsed.netloc, parsed.path, parsed.query, "")) + if repository_identity(origin) != repository_identity(component["repo"]): + raise WorkspaceError(f"npm Git origin mismatch: {package}") + selected.append((parsed.fragment, {"kind": "npm-lock", "package": package, + "version": entry.get("version"), "resolved": resolved, + "consumer": consumer["id"], "lock_path": str(path.relative_to(self.workspace.root))})) + if not selected: + return None + if len({entry[0] for entry in selected}) != 1: + raise WorkspaceError(f"consumers select conflicting npm Git commits for {package}; owner must choose compatible versions") + commit, source = selected[0] + return commit, dict(source, selections=[entry[1] for entry in selected]) diff --git a/scripts/workspace/state.py b/scripts/workspace/state.py new file mode 100644 index 00000000..0ca9433f --- /dev/null +++ b/scripts/workspace/state.py @@ -0,0 +1,36 @@ +from contextlib import contextmanager +import os + +from .common import WorkspaceError, read_json, safe_path, write_json + + +class State: + def __init__(self, root): + self.root = root + self.area = safe_path(root, ".workspace") + self.path = safe_path(root, ".workspace/state.json") + self.data = read_json(self.path) if self.path.exists() else {"schema": 1, "components": {}} + if not isinstance(self.data, dict) or self.data.get("schema") != 1 or not isinstance(self.data.get("components"), dict): + raise WorkspaceError("unsupported workspace state") + for name, entry in self.data["components"].items(): + if not isinstance(entry, dict) or entry.get("owner_root") != str(root): + raise WorkspaceError(f"workspace owner mismatch: {name}") + safe_path(root, entry.get("path", "")) + + def save(self): + write_json(self.path, self.data) + + @contextmanager + def operation(self): + self.area.mkdir(exist_ok=True) + path = safe_path(self.root, ".workspace/.operation.lock") + try: + descriptor = os.open(path, os.O_CREAT | os.O_EXCL | os.O_WRONLY, 0o600) + except FileExistsError as error: + raise WorkspaceError("workspace has another writer (.operation.lock); preserve the owner lock") from error + try: + with os.fdopen(descriptor, "w") as stream: + stream.write(str(os.getpid()) + "\n") + yield + finally: + path.unlink() diff --git a/scripts/workspace/transition.py b/scripts/workspace/transition.py new file mode 100644 index 00000000..453745f8 --- /dev/null +++ b/scripts/workspace/transition.py @@ -0,0 +1,249 @@ +import hashlib +import os +import shutil + +from .common import WorkspaceError, safe_path +from .manifest import validate_branch + + +def files_snapshot(path, excluded=()): + """Hash files without following links or opening another repository's metadata.""" + files = {} + for current, directories, names in os.walk(path, followlinks=False): + directories[:] = [name for name in directories if name != ".git" + and str((type(path)(current) / name).relative_to(path)) not in excluded] + for name in directories + names: + file = type(path)(current) / name + if name == ".git": + continue + relative = str(file.relative_to(path)) + if file.is_symlink(): + files[relative] = {"link": os.readlink(file)} + elif file.is_file(): + files[relative] = {"sha256": hashlib.sha256(file.read_bytes()).hexdigest(), + "mode": file.stat().st_mode & 0o777} + return files + + +class Transition: + def __init__(self, workspace): + self.workspace = workspace + + def inspect(self, component): + root = self.workspace.root + legacy_name = component.get("legacy_path") + legacy = safe_path(root, legacy_name) if legacy_name else None + if not legacy or not (legacy / ".git").exists(): + return {"path": legacy_name, "gitlink": self.workspace.git.gitlink(root, legacy_name)} + return self.inspect_at(legacy, self.workspace.git.gitlink(root, legacy_name)) + + def inspect_at(self, legacy, pin=None): + root = self.workspace.root + result = {"path": str(legacy.relative_to(root)), "gitlink": pin} + if (legacy / ".git").exists(): + result.update(self.workspace.git.inspect(legacy)) + result["refs"] = self.workspace.git.text(legacy, "show-ref", check=False).splitlines() + result["reflog_commits"] = sorted(set(self.workspace.git.text(legacy, "reflog", "--all", "--format=%H", check=False).splitlines())) + index = type(root)(result["git_dir"]) / "index" + result["index_sha256"] = hashlib.sha256(index.read_bytes()).hexdigest() if index.exists() else None + result["index_entries"] = self.workspace.git.text(legacy, "ls-files", "--stage", "-z") + gitlinks = {} + for row in result["index_entries"].split("\0"): + if not row: + continue + metadata, relative = row.split("\t", 1) + mode, commit, stage = metadata.split() + if mode == "160000" and stage == "0": + gitlinks[relative] = commit + nested = [] + for current, directories, names in os.walk(legacy, followlinks=False): + if current == str(legacy): + directories[:] = [name for name in directories if name != ".git"] + continue + if ".git" in directories or ".git" in names: + path = type(legacy)(current) + relative = str(path.relative_to(legacy)) + child = self.inspect_at(path, gitlinks.get(relative)) + matches = [entry["id"] for entry in self.workspace.manifest.select() + if entry["repo"] == child.get("origin")] + nested.append({"path": relative, "id": matches[0] if len(matches) == 1 else None, + "tracked": relative in gitlinks, "snapshot": child}) + directories[:] = [] + result["nested"] = nested + result["files"] = files_snapshot(legacy, {entry["path"] for entry in nested}) + return result + + def validate_files(self, legacy, snapshot): + for relative, entry in snapshot.items(): + file = legacy / relative + if "link" in entry and (os.path.isabs(entry["link"]) or not file.resolve().is_relative_to(legacy.resolve())): + raise WorkspaceError(f"legacy symlink escapes component: {relative}; owner must resolve it") + + def content_identity(self, snapshot): + return snapshot["head"], snapshot["files"], snapshot["index_entries"] + + def preserve_refs(self, path, snapshots): + workspace = self.workspace + for snapshot in snapshots: + legacy = safe_path(workspace.root, snapshot["path"]) + namespace = hashlib.sha256(snapshot["path"].encode()).hexdigest()[:24] + workspace.git.call(path, "fetch", "--no-tags", "--", str(legacy), "+refs/*:refs/migration/sources/" + namespace + "/*") + for commit in snapshot["reflog_commits"]: + if workspace.git.call(path, "cat-file", "-e", commit, check=False).returncode: + workspace.git.call(path, "fetch", "--no-tags", "--", str(legacy), commit) + workspace.git.call(path, "update-ref", "refs/migration/reflog/" + commit, commit) + + def apply_all(self, components, branch): + """Resolve the whole nested ownership plan before creating any clone.""" + workspace = self.workspace + workspace.go.check_owned() + groups = {} + + def add(component, snapshot): + name = component["id"] + legacy = safe_path(workspace.root, snapshot["path"]) + if not snapshot.get("head"): + raise WorkspaceError(f"legacy checkout is unavailable: {name}") + workspace.git.safe(legacy, component["repo"], clean=False, independent=False) + self.validate_files(legacy, snapshot["files"]) + gitdir = type(legacy)(snapshot["git_dir"]) + if (gitdir / "objects/info/alternates").exists(): + raise WorkspaceError(f"legacy object store borrows another repository: {name}; owner must make it independent") + previous = groups.setdefault(name, []) + if previous: + if self.content_identity(previous[0]) != self.content_identity(snapshot): + raise WorkspaceError(f"conflicting duplicate logical component {name}: {previous[0]['path']} and {snapshot['path']}; owner must choose or reconcile them") + old_refs = dict(row.split(" ", 1)[::-1] for old in previous for row in old["refs"]) + new_refs = dict(row.split(" ", 1)[::-1] for row in snapshot["refs"]) + if any(old_refs[ref] != new_refs[ref] for ref in old_refs.keys() & new_refs.keys()): + raise WorkspaceError(f"conflicting duplicate refs for {name}; owner must reconcile them") + if any(old["path"] == snapshot["path"] for old in previous): + return + previous.append(snapshot) + for nested in snapshot.get("nested", []): + if not nested["tracked"] or nested["id"] is None: + raise WorkspaceError(f"unknown nested repository ownership at {snapshot['path']}/{nested['path']}; register its origin and Git ownership first") + add(workspace.manifest.components[nested["id"]], nested["snapshot"]) + + for component in components: + snapshot = self.inspect(component) + # Default transition also lists uninitialized components; a named + # unavailable checkout still reports a precise failure to its owner. + add(component, snapshot) + for name, snapshots in groups.items(): + component = workspace.manifest.components[name] + path = safe_path(workspace.root, component["path"]) + if path.exists(): + record = workspace.state.data["components"].get(name) + actual = workspace.git.safe(path, component["repo"], clean=False) + if not record or record.get("source", {}).get("kind") != "legacy-copy" or actual["branch"] != record.get("branch"): + raise WorkspaceError(f"migration destination has another owner: {name}; inspect its registered branch") + if actual["head"] != snapshots[0]["head"] or files_snapshot(path) != snapshots[0]["files"] or workspace.git.text(path, "ls-files", "--stage", "-z") != snapshots[0]["index_entries"]: + raise WorkspaceError(f"conflicting duplicate destination for {name}; preserve both scenes for the owner") + for name, snapshots in groups.items(): + component = workspace.manifest.components[name] + path = safe_path(workspace.root, component["path"]) + if path.exists(): + self.preserve_refs(path, snapshots) + record = workspace.state.data["components"][name] + record["legacy_snapshots"] = snapshots + workspace.state.save() + else: + self.copy_one(component, branch, snapshots) + for snapshots in groups.values(): + for snapshot in snapshots: + legacy = safe_path(workspace.root, snapshot["path"]) + if self.inspect_at(legacy, snapshot["gitlink"]) != snapshot: + raise WorkspaceError("legacy checkout changed during migration; independent copies retained for owner review") + for name in groups: + record = workspace.state.data["components"][name] + record["linked"] = bool(workspace.go.modules(workspace.manifest.components[name])) + if record["linked"]: + record["mode"] = "linked" + workspace.go.update() + workspace.state.save() + + def copy_one(self, component, branch, snapshots): + workspace = self.workspace + name = component["id"] + snapshot = snapshots[0] + legacy = safe_path(workspace.root, snapshot["path"]) + excluded = {entry["path"] for entry in snapshot.get("nested", [])} + gitdir = type(legacy)(snapshot["git_dir"]) + path = safe_path(workspace.root, component["path"]) + if path.exists(): + raise WorkspaceError(f"migration destination already exists: {name}; inspect its owner before retrying") + branch = branch or snapshot.get("branch") + if not branch or not branch.startswith(("feature/", "fix/", "chore/", "codex/")): + branch = "feature/migration-" + name.lower() + validate_branch(branch) + mappings = [{"id": nested["id"], "legacy_path": nested["snapshot"]["path"], + "workspace_path": workspace.manifest.components[nested["id"]]["path"]} + for nested in snapshot.get("nested", [])] + record = workspace.record(component, snapshot["head"], {"kind": "legacy-copy", "gitlink": snapshot["gitlink"], "nested_components": mappings}) + record.update({"mode": "migrating", "legacy_snapshot": snapshot, "legacy_snapshots": snapshots}) + workspace.state.save() + try: + # Local clone copies the complete object store without hardlinks/alternates. + # It never shares the submodule's Git common directory with the new root. + workspace.git.call(workspace.root, "clone", "--no-hardlinks", "--no-checkout", "--", str(legacy), str(path)) + workspace.git.call(path, "remote", "set-url", "origin", component["repo"]) + workspace.git.call(path, "fetch", "--no-tags", "--", str(legacy), "+refs/*:refs/migration/*") + self.preserve_refs(path, snapshots) + workspace.git.call(path, "checkout", "--detach", snapshot["head"]) + if workspace.git.call(path, "show-ref", "--verify", "--quiet", "refs/heads/" + branch, check=False).returncode == 0: + if workspace.git.text(path, "rev-parse", "refs/heads/" + branch) != snapshot["head"]: + raise WorkspaceError("migration branch conflict; original and partial clone retained") + workspace.git.call(path, "checkout", branch) + else: + workspace.git.call(path, "checkout", "-b", branch) + # Keep deletions as well as tracked, untracked, and ignored file content. + for filename in workspace.git.text(legacy, "diff", "--name-only", "-z", "--diff-filter=D", "HEAD").split("\0"): + if not filename: + continue + relative = type(path)(filename) + parent = safe_path(path, str(relative.parent), allow_dot=True) + file = parent / relative.name + if file.is_file() or file.is_symlink(): + file.unlink() + for current, directories, names in os.walk(legacy, followlinks=False): + directories[:] = [entry for entry in directories if entry != ".git" + and str((type(legacy)(current) / entry).relative_to(legacy)) not in excluded] + relative = type(legacy)(current).relative_to(legacy) + destination = path / relative + destination.mkdir(parents=True, exist_ok=True) + for filename in directories + names: + if filename == ".git": + continue + source = type(legacy)(current) / filename + target = destination / filename + if source.is_symlink(): + if target.is_symlink() and os.readlink(target) == os.readlink(source): + continue + if target.exists() or target.is_symlink(): + if target.is_dir() and not target.is_symlink(): + raise WorkspaceError(f"migration symlink conflicts with directory: {filename}") + target.unlink() + target.symlink_to(os.readlink(source), target_is_directory=source.is_dir()) + elif source.is_file(): + if target.is_symlink(): + target.unlink() + shutil.copy2(source, target) + # The clone copied all local objects, including staged blobs which + # are absent from HEAD. Preserve the index and split-index companions + # independently so staging is not silently flattened into file copies. + for index in list(gitdir.glob("sharedindex.*")) + [gitdir / "index"]: + if index.is_file(): + shutil.copy2(index, path / ".git" / index.name) + if self.inspect_at(legacy, snapshot["gitlink"]) != snapshot: + raise WorkspaceError("legacy checkout changed during migration; partial clone preserved for owner") + if files_snapshot(path) != snapshot["files"]: + raise WorkspaceError("migration file snapshot differs; original and partial clone preserved for owner") + workspace.git.safe(path, component["repo"], clean=False) + record.update({"mode": "editable", "branch": branch, "linked": False}) + record.pop("error", None) + workspace.state.save() + except Exception as error: + record["error"] = str(error) + workspace.state.save() + raise diff --git a/scripts/workspace/transport.py b/scripts/workspace/transport.py index ab8cd22d..721f3456 100644 --- a/scripts/workspace/transport.py +++ b/scripts/workspace/transport.py @@ -2,7 +2,7 @@ import json import os from pathlib import Path -from urllib.parse import urlsplit +from urllib.parse import urlsplit, unquote def _url(value): @@ -35,15 +35,37 @@ def environment(root=None): if not isinstance(rewrites, list): raise ValueError('invalid Git transport mappings') if rewrites: + inherited = [] + marker = env.get('CI_DEPENDENCY_MIRRORS') + if marker: + mirrors = Path(marker) + if not mirrors.is_absolute() or not mirrors.is_dir() or mirrors.is_symlink(): + raise ValueError('invalid CI dependency mirror identity') + mirrors = mirrors.resolve() + try: + count = int(env.get('GIT_CONFIG_COUNT', '0')) + except ValueError as error: + raise ValueError('invalid process Git configuration') from error + for i in range(count): + key, value = env.get(f'GIT_CONFIG_KEY_{i}', ''), env.get(f'GIT_CONFIG_VALUE_{i}', '') + if (key, value) in {('protocol.file.allow', 'always'), ('core.hooksPath', '/dev/null'), ('credential.helper', '')}: + inherited.append((key, value)) + elif key.startswith('url.file://') and key.endswith('.insteadOf'): + target = Path(unquote(urlsplit(key[4:-10]).path)).resolve() + if mirrors not in target.parents or not target.is_dir(): + raise ValueError('CI mirror source escapes its registered directory') + inherited.append((key, _url(value))) # Do not inherit temporary authentication configuration into candidate code. for key in list(env): if key == 'GIT_CONFIG_COUNT' or key.startswith(('GIT_CONFIG_KEY_', 'GIT_CONFIG_VALUE_')): del env[key] - for i, rewrite in enumerate(rewrites): + entries = list(inherited) + for rewrite in rewrites: if not isinstance(rewrite, dict) or set(rewrite) != {'from', 'to'}: raise ValueError('invalid Git transport mapping') source, target = _url(rewrite['from']), _url(rewrite['to']) - env[f'GIT_CONFIG_KEY_{i}'] = f'url.{target}.insteadOf' - env[f'GIT_CONFIG_VALUE_{i}'] = source - env['GIT_CONFIG_COUNT'] = str(len(rewrites)) + entries.append((f'url.{target}.insteadOf', source)) + for i, (key, value) in enumerate(entries): + env[f'GIT_CONFIG_KEY_{i}'], env[f'GIT_CONFIG_VALUE_{i}'] = key, value + env['GIT_CONFIG_COUNT'] = str(len(entries)) return env diff --git a/tests/test_component_governance.py b/tests/test_component_governance.py new file mode 100644 index 00000000..120a02db --- /dev/null +++ b/tests/test_component_governance.py @@ -0,0 +1,69 @@ +import importlib.util +import json +import os +from pathlib import Path +import subprocess +import tempfile +import unittest + +SCRIPTS = Path(__file__).resolve().parents[1] / 'scripts' + +class ComponentGovernanceTests(unittest.TestCase): + def setUp(self): + self.temp = tempfile.TemporaryDirectory() + self.addCleanup(self.temp.cleanup) + self.root = Path(self.temp.name) + self.run_git(self.root, 'init', '-q') + self.run_git(self.root, 'config', 'user.name', 'Fixture') + self.run_git(self.root, 'config', 'user.email', 'fixture@example.test') + self.child = self.root / '.workspace/Provider' + self.child.mkdir(parents=True) + self.run_git(self.child, 'init', '-q') + self.run_git(self.child, 'config', 'user.name', 'Fixture') + self.run_git(self.child, 'config', 'user.email', 'fixture@example.test') + (self.child/'value').write_text('one') + self.run_git(self.child, 'add', 'value') + self.run_git(self.child, 'commit', '-qm', 'Add value') + (self.root/'.gitignore').write_text('.workspace/\n') + (self.root/'components.json').write_text(json.dumps({'schema':1,'components':[{ + 'id':'Provider','repo':self.child.as_uri(),'path':'.workspace/Provider', + 'role':'documentation','modules':[],'target':'main'}]})) + self.run_git(self.root, 'add', '.gitignore', 'components.json') + self.run_git(self.root, 'commit', '-qm', 'Add component mapping') + self.old = Path.cwd() + os.chdir(self.root) + self.addCleanup(os.chdir,self.old) + + def run_git(self,root,*args): + return subprocess.check_output(['git','-C',str(root),*args],stderr=subprocess.STDOUT,text=True) + + def snapshot(self): + spec=importlib.util.spec_from_file_location('component_evidence',SCRIPTS/'evidence.py') + module=importlib.util.module_from_spec(spec); spec.loader.exec_module(module) + return module.snapshot() + + def test_evidence_captures_ignored_component_revision_and_dirty_bytes(self): + first=self.snapshot() + (self.child/'value').write_text('two') + second=self.snapshot() + self.assertIn('components',first,'receipts must identify ordinary ignored component checkouts') + self.assertNotEqual(first['components'],second['components']) + self.run_git(self.child,'commit','-qam','Change value') + third=self.snapshot() + self.assertNotEqual(second['components'],third['components']) + self.assertEqual(first['head'],third['head']) + + def test_before_sync_rejects_component_git_lock(self): + (self.child/'.git/index.lock').write_text('active owner') + result=subprocess.run(['python3',str(SCRIPTS/'check-worktree.py'),'before-sync'],cwd=self.root,capture_output=True,text=True) + self.assertNotEqual(result.returncode,0,'a hidden component writer must block synchronization') + self.assertTrue((self.child/'.git/index.lock').exists()) + + def test_receipts_reject_component_path_escape(self): + data=json.loads((self.root/'components.json').read_text()) + data['components'][0]['path']='../outside' + (self.root/'components.json').write_text(json.dumps(data)) + with self.assertRaises(Exception): + self.snapshot() + +if __name__=='__main__': unittest.main() diff --git a/tests/test_transport.py b/tests/test_transport.py index 5c497746..fce6160f 100644 --- a/tests/test_transport.py +++ b/tests/test_transport.py @@ -5,6 +5,7 @@ from pathlib import Path import subprocess import tempfile import unittest +from unittest.mock import patch SCRIPT = Path(__file__).resolve().parents[1] / 'scripts/workspace/transport.py' @@ -56,5 +57,26 @@ class TransportTests(unittest.TestCase): with self.assertRaises(ValueError): transport.environment(root) + def test_verified_local_mirror_mapping_survives_without_authentication(self): + transport = self.load() + with tempfile.TemporaryDirectory() as td: + root = Path(td) + mirror = root / 'mirrors' + mirror.mkdir() + target = mirror / 'Provider.git' + target.mkdir() + (root / 'components.json').write_text(json.dumps({'transport': {'git_rewrites': [ + {'from':'https://example.test/', 'to':'ssh://git@example.test:31411/'}]}})) + inherited = {'CI_DEPENDENCY_MIRRORS':str(mirror), 'GIT_CONFIG_COUNT':'3', + 'GIT_CONFIG_KEY_0':f'url.{target.as_uri()}.insteadOf','GIT_CONFIG_VALUE_0':'https://example.test/provider', + 'GIT_CONFIG_KEY_1':'protocol.file.allow','GIT_CONFIG_VALUE_1':'always', + 'GIT_CONFIG_KEY_2':'http.https://example.test/.extraheader','GIT_CONFIG_VALUE_2':'AUTHORIZATION: token fake-private'} + with patch.dict(os.environ,inherited): + env=transport.environment(root) + pairs=[(env[f'GIT_CONFIG_KEY_{i}'],env[f'GIT_CONFIG_VALUE_{i}']) for i in range(int(env['GIT_CONFIG_COUNT']))] + self.assertIn((f'url.{target.as_uri()}.insteadOf','https://example.test/provider'),pairs) + self.assertIn(('protocol.file.allow','always'),pairs) + self.assertFalse(any('extraheader' in key or 'fake-private' in value for key,value in pairs)) + if __name__ == '__main__': unittest.main() diff --git a/tests/test_workspace.py b/tests/test_workspace.py new file mode 100644 index 00000000..5ac119c8 --- /dev/null +++ b/tests/test_workspace.py @@ -0,0 +1,574 @@ +"""Workspace behavior against disposable real Git repositories and Go modules.""" +import hashlib +import json +import os +from pathlib import Path +import shutil +import subprocess +import sys +import tempfile +import unittest +import zipfile + +SOURCE = Path(__file__).resolve().parents[1] + + +class WorkspaceTests(unittest.TestCase): + def setUp(self): + self.tmp = tempfile.TemporaryDirectory(prefix="workspace-test-") + self.addCleanup(self.tmp.cleanup) + self.base = Path(self.tmp.name) + self.root = self.base / "project" + self.root.mkdir() + self.env = os.environ.copy() + for key in list(self.env): + if key.startswith("GIT_CONFIG_") or key in ("GIT_DIR", "GIT_WORK_TREE", "GIT_INDEX_FILE", "GOWORK"): + self.env.pop(key, None) + self.env.update({"GIT_CONFIG_NOSYSTEM": "1", "GIT_CONFIG_GLOBAL": "/dev/null", + "GIT_ALLOW_PROTOCOL": "file", "GIT_TERMINAL_PROMPT": "0", + "GIT_AUTHOR_NAME": "Workspace Test", "GIT_AUTHOR_EMAIL": "test@example.invalid", + "GIT_COMMITTER_NAME": "Workspace Test", "GIT_COMMITTER_EMAIL": "test@example.invalid", + "GOTOOLCHAIN": "local", "GOPROXY": "off", "GOSUMDB": "off"}) + self.git(self.root, "init", "--initial-branch=main") + (self.root / ".gitignore").write_text(".workspace/\ngo.work\ngo.work.sum\n") + self.git(self.root, "add", ".gitignore") + self.git(self.root, "commit", "-m", "Create project") + self.remote, self.author, self.first = self.component("App") + self.manifest = {"schema": 1, "components": [self.entry("App", self.remote)]} + self.lock = {"schema": 1, "components": {"App": {"commit": self.first}}} + self.save_manifest() + + def command(self, cwd, *args, check=True, env=None, separate_stderr=False): + result = subprocess.run(args, cwd=cwd, env=env or self.env, text=True, + stdout=subprocess.PIPE, stderr=subprocess.PIPE if separate_stderr else subprocess.STDOUT, timeout=60) + if check: + self.assertEqual(result.returncode, 0, result.stdout + (result.stderr or "")) + return result + + def git(self, cwd, *args, **kwargs): + return self.command(cwd, "git", *args, **kwargs) + + def cli(self, *args, check=True, env=None): + return self.command(self.root, sys.executable, str(SOURCE / "scripts/workspace.py"), + "--root", str(self.root), *args, check=check, env=env) + + def component(self, name, files=None): + remote = self.base / (name + ".git") + author = self.base / (name + "-author") + self.git(self.base, "init", "--bare", "--initial-branch=main", str(remote)) + self.git(remote, "config", "gc.auto", "0") + self.git(remote, "config", "receive.autogc", "false") + self.git(self.base, "init", "--initial-branch=main", str(author)) + for name, value in (files or {"content": "first\n", ".gitignore": "private/\n"}).items(): + path = author / name + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(value) + self.git(author, "add", ".") + self.git(author, "commit", "-m", "First component") + self.git(author, "remote", "add", "origin", str(remote)) + self.git(author, "push", "-u", "origin", "main") + return remote, author, self.git(author, "rev-parse", "HEAD").stdout.strip() + + def entry(self, name, remote, role="application", modules=None): + return {"id": name, "repo": str(remote), "path": ".workspace/" + name, + "legacy_path": "modules/" + name, "role": role, + "modules": modules or [], "target": "main"} + + def save_manifest(self): + (self.root / "components.json").write_text(json.dumps(self.manifest)) + (self.root / "components.lock.json").write_text(json.dumps(self.lock)) + + def state(self): + return json.loads((self.root / ".workspace/state.json").read_text()) + + def test_prepare_pins_fixed_commit_and_reuses_without_advancing(self): + (self.author / "content").write_text("latest\n") + self.git(self.author, "commit", "-am", "Advance remote") + self.git(self.author, "push", "origin", "main") + self.cli("prepare") + clone = self.root / ".workspace/App" + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), self.first) + self.assertEqual((clone / "content").read_text(), "first\n") + self.cli("prepare") + self.assertEqual(self.state()["components"]["App"]["baseline"], self.first) + self.assertTrue((self.root / ".workspace/resolved.json").is_file()) + + def test_edit_registers_branch_and_prepare_preserves_work(self): + self.cli("edit", "--name", "App", "--branch", "feature/change") + clone = self.root / ".workspace/App" + (clone / "content").write_text("my change\n") + self.git(clone, "commit", "-am", "Local work") + self.cli("prepare") + self.assertEqual(self.git(clone, "branch", "--show-current").stdout.strip(), "feature/change") + self.assertEqual((clone / "content").read_text(), "my change\n") + self.cli("unlink", "--name", "App") + self.assertTrue(clone.is_dir()) + + def test_rejects_unknown_component_and_bad_branch_without_source_creation(self): + result = self.cli("edit", "--name", "missing", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertIn("unknown component", result.stdout.lower()) + result = self.cli("edit", "--name", "App", "--branch", "feature/../../escape", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertFalse((self.root / ".workspace/App").exists()) + + def test_rejects_paths_and_symlink_escape(self): + for path in ("../escape", "/tmp/escape", ".workspace/../escape"): + with self.subTest(path=path): + self.manifest["components"][0]["path"] = path + self.save_manifest() + result = self.cli("prepare", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertFalse((self.base / "escape").exists()) + self.manifest["components"][0]["path"] = ".workspace/App" + self.save_manifest() + (self.root / ".workspace").symlink_to(self.author, target_is_directory=True) + result = self.cli("prepare", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertFalse((self.author / "App").exists()) + + def test_rejects_mismatched_origin_dirty_and_git_lock_without_changes(self): + self.cli("prepare") + clone = self.root / ".workspace/App" + self.git(clone, "remote", "set-url", "origin", str(self.base / "wrong.git")) + self.assertNotEqual(self.cli("prepare", check=False).returncode, 0) + self.git(clone, "remote", "set-url", "origin", str(self.remote)) + (clone / "unique").write_text("unsaved\n") + self.assertNotEqual(self.cli("edit", "--name", "App", check=False).returncode, 0) + self.assertEqual((clone / "unique").read_text(), "unsaved\n") + (clone / "unique").unlink() + lock = clone / ".git/index.lock" + lock.write_text("owned by another operation\n") + self.assertNotEqual(self.cli("edit", "--name", "App", check=False).returncode, 0) + self.assertEqual(lock.read_text(), "owned by another operation\n") + + def test_ignored_unique_files_and_shared_worktrees_block_branch_changes(self): + self.cli("prepare") + clone = self.root / ".workspace/App" + (clone / "private").mkdir() + (clone / "private/key").write_text("unique\n") + self.assertNotEqual(self.cli("edit", "--name", "App", check=False).returncode, 0) + shutil.rmtree(clone / "private") + external = self.base / "other-owner" + self.git(clone, "worktree", "add", "-b", "feature/other", str(external)) + result = self.cli("edit", "--name", "App", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertEqual(self.git(external, "branch", "--show-current").stdout.strip(), "feature/other") + + def test_workspace_operation_lock_and_user_go_work_are_preserved(self): + area = self.root / ".workspace" + area.mkdir() + lock = area / ".operation.lock" + lock.write_text("other writer\n") + result = self.cli("prepare", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertEqual(lock.read_text(), "other writer\n") + lock.unlink() + (self.root / "go.work").write_text("go 1.27\n// manual\n") + result = self.cli("edit", "--name", "App", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertEqual((self.root / "go.work").read_text(), "go 1.27\n// manual\n") + + def test_partial_initialization_is_retained_and_retry_is_safe(self): + self.lock["components"]["App"]["commit"] = "a" * 40 + self.save_manifest() + result = self.cli("prepare", check=False) + self.assertNotEqual(result.returncode, 0) + clone = self.root / ".workspace/App" + self.assertTrue((clone / ".git").exists(), result.stdout) + self.assertFalse((self.root / ".workspace/.operation.lock").exists()) + self.lock["components"]["App"]["commit"] = self.first + self.save_manifest() + self.cli("prepare") + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), self.first) + + def legacy(self): + self.git(self.root, "submodule", "add", str(self.remote), "modules/App") + self.git(self.root, "commit", "-am", "Pin legacy component") + return self.root / "modules/App" + + def fingerprint(self, path): + files = {} + for file in path.rglob("*"): + if ".git" not in file.relative_to(path).parts and file.is_file(): + files[str(file.relative_to(path))] = hashlib.sha256(file.read_bytes()).hexdigest() + return (self.git(path, "show-ref").stdout, self.git(path, "status", "--porcelain=v1").stdout, files) + + def test_transition_report_is_readonly_apply_preserves_unique_commits_refs_and_files(self): + legacy = self.legacy() + self.git(legacy, "checkout", "-b", "feature/legacy") + (legacy / "content").write_text("unpublished commit\n") + self.git(legacy, "commit", "-am", "Unpublished") + unique_head = self.git(legacy, "rev-parse", "HEAD").stdout.strip() + self.git(legacy, "branch", "feature/other-ref") + (legacy / "content").write_text("uncommitted\n") + (legacy / "unique").write_text("untracked\n") + (legacy / "private").mkdir() + (legacy / "private/data").write_text("ignored\n") + before = self.fingerprint(legacy) + report = json.loads(self.cli("transition", "--name", "App").stdout) + self.assertEqual(report["components"]["App"]["legacy"]["head"], unique_head) + self.assertFalse((self.root / ".workspace").exists()) + self.cli("transition", "--name", "App", "--apply") + clone = self.root / ".workspace/App" + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), unique_head) + self.assertEqual(self.git(clone, "remote", "get-url", "origin").stdout.strip(), str(self.remote)) + self.assertEqual((clone / "content").read_text(), "uncommitted\n") + self.assertEqual((clone / "unique").read_text(), "untracked\n") + self.assertEqual((clone / "private/data").read_text(), "ignored\n") + self.assertEqual(self.git(clone, "rev-parse", "refs/migration/heads/feature/other-ref").stdout.strip(), unique_head) + self.assertEqual(self.fingerprint(legacy), before) + self.assertFalse((clone / ".git/objects/info/alternates").exists()) + + def test_transition_rejects_external_symlinks_preserving_both_locations(self): + legacy = self.legacy() + outside = self.base / "outside" + outside.write_text("owner data\n") + (legacy / "escape").symlink_to(outside) + before = self.fingerprint(legacy) + result = self.cli("transition", "--name", "App", "--apply", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertEqual(outside.read_text(), "owner data\n") + self.assertEqual(self.fingerprint(legacy), before) + self.assertFalse((self.root / ".workspace/App").exists()) + + def test_library_legacy_baseline_uses_gitlink_not_current_head(self): + legacy = self.legacy() + (legacy / "content").write_text("local newer commit\n") + self.git(legacy, "commit", "-am", "Local advance") + self.manifest["components"][0]["role"] = "go-library" + self.lock["components"] = {} + self.save_manifest() + self.cli("edit", "--name", "App") + self.assertEqual(self.git(self.root / ".workspace/App", "rev-parse", "HEAD").stdout.strip(), self.first) + self.assertEqual((legacy / "content").read_text(), "local newer commit\n") + + def test_status_reports_dirty_and_verify_rejects_it(self): + self.cli("prepare") + clone = self.root / ".workspace/App" + (clone / "content").write_text("unsaved\n") + result = json.loads(self.cli("status").stdout) + self.assertTrue(result["components"]["App"]["actual"]["dirty"]) + self.assertNotEqual(self.cli("verify", check=False).returncode, 0) + self.assertEqual((clone / "content").read_text(), "unsaved\n") + + def test_transition_preserves_staged_blob_internal_symlink_and_reflog_commit(self): + legacy = self.legacy() + (legacy / "content").write_text("orphan commit\n") + self.git(legacy, "commit", "-am", "Reflog-only work") + orphan = self.git(legacy, "rev-parse", "HEAD").stdout.strip() + self.git(legacy, "checkout", "--detach", self.first) + (legacy / "content").write_text("staged value\n") + self.git(legacy, "add", "content") + (legacy / "content").write_text("working value\n") + (legacy / "link").symlink_to("content") + before = self.fingerprint(legacy) + self.cli("transition", "--name", "App", "--apply") + clone = self.root / ".workspace/App" + self.assertEqual(self.git(clone, "show", ":content").stdout, "staged value\n") + self.assertEqual((clone / "content").read_text(), "working value\n") + self.assertTrue((clone / "link").is_symlink()) + self.assertEqual(os.readlink(clone / "link"), "content") + self.assertEqual(self.git(clone, "rev-parse", "refs/migration/reflog/" + orphan).stdout.strip(), orphan) + self.assertEqual(self.fingerprint(legacy), before) + + def test_transition_refuses_initialized_nested_repository(self): + legacy = self.legacy() + nested = legacy / "child" + nested.mkdir() + self.git(nested, "init", "--initial-branch=main") + (nested / "unique").write_text("owned by nested repository\n") + result = self.cli("transition", "--name", "App", "--apply", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertIn("nested repository", result.stdout) + self.assertFalse((self.root / ".workspace/App").exists()) + self.assertEqual((nested / "unique").read_text(), "owned by nested repository\n") + + def nested_legacy(self): + legacy = self.legacy() + errors_remote, _, _ = self.component("Errors", { + "go.mod": "module example.invalid/errors\n\ngo 1.27\n", + "value.go": 'package errors\nfunc Value() string { return "errors" }\n', + ".gitignore": "private/\n"}) + logging_remote, _, _ = self.component("Logging", { + "go.mod": "module example.invalid/logging\n\ngo 1.27\n", + "value.go": 'package logging\nfunc Value() string { return "logging" }\n'}) + self.git(legacy, "submodule", "add", str(errors_remote), "deps/errors") + self.git(legacy, "submodule", "add", str(logging_remote), "deps/logging") + (legacy / "go.mod").write_text("module example.invalid/native\n\ngo 1.27\n\nrequire (\n example.invalid/errors v0.0.0\n example.invalid/logging v0.0.0\n)\nreplace example.invalid/errors => ./deps/errors\nreplace example.invalid/logging => ./deps/logging\n") + (legacy / "main.go").write_text('package main\nimport ("fmt"; errors "example.invalid/errors"; logging "example.invalid/logging")\nfunc main() { fmt.Print(errors.Value()+":"+logging.Value()) }\n') + self.git(legacy, "add", ".") + self.git(legacy, "commit", "-m", "Add registered nested dependencies") + self.manifest["components"][0]["modules"] = [{"path": "example.invalid/native", "directory": "."}] + self.manifest["components"] += [ + self.entry("Errors", errors_remote, "go-library", [{"path": "example.invalid/errors", "directory": "."}]), + self.entry("Logging", logging_remote, "go-library", [{"path": "example.invalid/logging", "directory": "."}])] + self.save_manifest() + return legacy, legacy / "deps/errors", legacy / "deps/logging" + + def test_transition_known_nested_repositories_preserves_external_worktree_and_runs_go(self): + legacy, errors, logging = self.nested_legacy() + self.git(errors, "checkout", "-b", "feature/nested") + (errors / "value.go").write_text('package errors\nfunc Value() string { return "committed" }\n') + self.git(errors, "commit", "-am", "Unpushed nested commit") + errors_head = self.git(errors, "rev-parse", "HEAD").stdout.strip() + (errors / "value.go").write_text('package errors\nfunc Value() string { return "staged" }\n') + self.git(errors, "add", "value.go") + (errors / "value.go").write_text('package errors\nfunc Value() string { return "working" }\n') + (errors / "private").mkdir() + (errors / "private/unique").write_text("nested ignored data\n") + external = self.base / "nested-dependent-worktree" + self.git(errors, "worktree", "add", "-b", "feature/external", str(external)) + before = {str(path): self.fingerprint(path) for path in (legacy, errors, logging, external)} + self.cli("transition", "--name", "App", "--apply") + clone = self.root / ".workspace/Errors" + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), errors_head) + self.assertIn('return "staged"', self.git(clone, "show", ":value.go").stdout) + self.assertEqual((clone / "private/unique").read_text(), "nested ignored data\n") + self.assertTrue((clone / ".git").is_dir()) + self.assertFalse((clone / ".git/objects/info/alternates").exists()) + self.assertFalse((self.root / ".workspace/App/deps/errors/.git").exists()) + self.assertEqual(self.command(self.root / ".workspace/App", "go", "run", ".").stdout, "working:logging") + for path in (legacy, errors, logging, external): + self.assertEqual(self.fingerprint(path), before[str(path)]) + self.assertTrue(Path(self.git(external, "rev-parse", "--absolute-git-dir").stdout.strip()).exists()) + mapping = self.state()["components"]["App"]["source"]["nested_components"] + self.assertEqual({item["id"] for item in mapping}, {"Errors", "Logging"}) + + def test_conflicting_duplicate_nested_component_stops_before_cloning(self): + legacy, errors, logging = self.nested_legacy() + remote = next(item["repo"] for item in self.manifest["components"] if item["id"] == "Errors") + self.git(legacy, "submodule", "add", remote, "deps/duplicate-errors") + self.git(legacy, "commit", "-am", "Add duplicate logical dependency") + duplicate = legacy / "deps/duplicate-errors" + (duplicate / "value.go").write_text("conflicting unsaved source\n") + before = self.fingerprint(legacy) + result = self.cli("transition", "--name", "App", "--apply", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertIn("conflicting duplicate", result.stdout) + self.assertIn("Errors", result.stdout) + self.assertFalse((self.root / ".workspace/App").exists()) + self.assertFalse((self.root / ".workspace/Errors").exists()) + self.assertEqual(self.fingerprint(legacy), before) + + def test_equivalent_recursive_nested_sources_share_an_independent_component(self): + legacy, errors, logging = self.nested_legacy() + remote = next(item["repo"] for item in self.manifest["components"] if item["id"] == "Errors") + self.git(logging, "submodule", "add", remote, "deps/errors") + (logging / "go.mod").write_text("module example.invalid/logging\n\ngo 1.27\n\nrequire example.invalid/errors v0.0.0\nreplace example.invalid/errors => ./deps/errors\n") + (logging / "value.go").write_text('package logging\nimport errors "example.invalid/errors"\nfunc Value() string { return "logging:"+errors.Value() }\n') + self.git(logging, "add", ".") + self.git(logging, "commit", "-m", "Add recursive registered dependency") + self.git(legacy, "add", "deps/logging") + self.git(legacy, "commit", "-m", "Pin recursive logging candidate") + duplicate = logging / "deps/errors" + before = {str(path): self.fingerprint(path) for path in (legacy, errors, logging, duplicate)} + self.cli("transition", "--name", "App", "--apply") + self.assertEqual(len(self.state()["components"]["Errors"]["legacy_snapshots"]), 2) + self.assertEqual(self.command(self.root / ".workspace/App", "go", "run", ".").stdout, "errors:logging:errors") + for path in (legacy, errors, logging, duplicate): + self.assertEqual(self.fingerprint(path), before[str(path)]) + + def npm_fixture(self): + remote, author, head = self.component("UI", {"package.json": '{"name":"@agent-system/ui","version":"0.0.0"}\n'}) + (author / "package.json").write_text('{"name":"@agent-system/ui","version":"0.0.1"}\n') + self.git(author, "commit", "-am", "Advance UI remote beyond consumer lock") + self.git(author, "push", "origin", "main") + (self.author / "package-lock.json").write_text(json.dumps({"name": "frontend", "lockfileVersion": 3, + "packages": {"": {"dependencies": {"@agent-system/ui": "git+file://" + str(remote) + "#" + head}}, + "node_modules/@agent-system/ui": {"version": "0.0.0", "resolved": "git+file://" + str(remote) + "#" + head}}})) + self.git(self.author, "add", "package-lock.json") + self.git(self.author, "commit", "-m", "Lock UI package") + self.git(self.author, "push", "origin", "main") + self.lock["components"]["App"]["commit"] = self.git(self.author, "rev-parse", "HEAD").stdout.strip() + entry = self.entry("UI", remote, "npm-library") + entry["package_name"] = "@agent-system/ui" + self.manifest["components"].append(entry) + self.save_manifest() + return remote, author, head + + def test_npm_library_edit_uses_consumer_lock_git_sha_not_remote_main(self): + _, _, head = self.npm_fixture() + self.cli("edit", "--name", "UI") + clone = self.root / ".workspace/UI" + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), head) + self.assertEqual(json.loads((clone / "package.json").read_text())["version"], "0.0.0") + self.assertEqual(self.state()["components"]["UI"]["source"]["kind"], "npm-lock") + self.assertFalse((self.root / "go.work").exists()) + + def test_npm_library_rejects_wrong_lock_origin_and_competing_manual_lock(self): + remote, _, head = self.npm_fixture() + self.lock["components"]["UI"] = {"commit": head} + self.save_manifest() + result = self.cli("edit", "--name", "UI", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertIn("competing", result.stdout) + self.lock["components"].pop("UI") + self.save_manifest() + self.cli("prepare") + lock_path = self.root / ".workspace/App/package-lock.json" + document = json.loads(lock_path.read_text()) + document["packages"]["node_modules/@agent-system/ui"]["resolved"] = "git+file://" + str(self.base / "unapproved.git") + "#" + head + lock_path.write_text(json.dumps(document)) + result = self.cli("edit", "--name", "UI", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertIn("origin", result.stdout) + self.assertFalse((self.root / ".workspace/UI").exists()) + + def test_unlink_refuses_manual_overlay_changes_without_changing_registration(self): + self.go_fixture() + self.cli("prepare") + consumer = self.root / ".workspace/Consumer" + self.command(consumer, "go", "mod", "download", "all", env=self.env | {"GOWORK": "off"}) + self.cli("edit", "--name", "Native") + overlay = self.root / "go.work" + overlay.write_text(overlay.read_text() + "// manual edit\n") + result = self.cli("unlink", "--name", "Native", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertTrue(self.state()["components"]["Native"]["linked"]) + self.assertTrue(overlay.read_text().endswith("// manual edit\n")) + + def test_missing_fixed_source_never_falls_back_to_remote_main(self): + self.lock["components"] = {} + self.save_manifest() + result = self.cli("prepare", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertFalse((self.root / ".workspace/App").exists()) + + def test_existing_fixed_checkout_is_not_switched_after_lock_change(self): + self.cli("prepare") + (self.author / "content").write_text("advanced version\n") + self.git(self.author, "commit", "-am", "Advance") + self.git(self.author, "push", "origin", "main") + self.lock["components"]["App"]["commit"] = self.git(self.author, "rev-parse", "HEAD").stdout.strip() + self.save_manifest() + result = self.cli("prepare", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertEqual(self.git(self.root / ".workspace/App", "rev-parse", "HEAD").stdout.strip(), self.first) + + def test_private_git_metadata_symlink_is_not_adopted(self): + self.cli("prepare") + clone = self.root / ".workspace/App" + external = self.base / "other-owner-metadata" + (clone / ".git").rename(external) + (clone / ".git").symlink_to(external, target_is_directory=True) + result = self.cli("edit", "--name", "App", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertFalse((external / "refs/heads/feature").exists()) + + def test_git_operation_is_reported_and_not_removed(self): + self.cli("prepare") + operation = self.root / ".workspace/App/.git/MERGE_HEAD" + operation.write_text(self.first + "\n") + result = self.cli("edit", "--name", "App", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertEqual(operation.read_text(), self.first + "\n") + + def test_status_does_not_expose_credentials_from_an_unmatched_actual_origin(self): + self.cli("prepare") + clone = self.root / ".workspace/App" + self.git(clone, "remote", "set-url", "origin", "https://owner:workspace-fake-secret@example.invalid/repo.git") + result = self.cli("status") + self.assertNotIn("workspace-fake-secret", result.stdout) + self.assertIn("redacted", result.stdout) + + def test_transition_preserves_committed_symlink_deletion_and_file_type_change(self): + legacy = self.legacy() + (legacy / "old-link").symlink_to("content") + (legacy / "regular").write_text("committed file\n") + self.git(legacy, "add", "old-link", "regular") + self.git(legacy, "commit", "-m", "Add two file types") + (legacy / "old-link").unlink() + (legacy / "regular").unlink() + (legacy / "regular").symlink_to("content") + before = self.fingerprint(legacy) + self.cli("transition", "--name", "App", "--apply") + clone = self.root / ".workspace/App" + self.assertFalse((clone / "old-link").is_symlink()) + self.assertTrue((clone / "regular").is_symlink()) + self.assertEqual(self.git(clone, "diff", "--raw").stdout, self.git(legacy, "diff", "--raw").stdout) + self.assertEqual(self.fingerprint(legacy), before) + + def go_fixture(self): + module = "example.invalid/Native" + library_remote, author, head = self.component("Native", { + "go.mod": "module example.invalid/Native\n\ngo 1.27\n", + "value.go": 'package native\nfunc Value() string { return "versioned" }\n'}) + version = "v0.0.0-20261013000000-" + head[:12] + proxy = self.base / "proxy/example.invalid/!native/@v" + proxy.mkdir(parents=True) + (proxy / (version + ".mod")).write_text((author / "go.mod").read_text()) + # Go's real proxy protocol supplies Origin.Hash, avoiding a fake Go executable. + (proxy / (version + ".info")).write_text(json.dumps({"Version": version, + "Time": "2026-10-13T00:00:00Z", "Origin": {"VCS": "git", "URL": str(library_remote), "Hash": head}})) + with zipfile.ZipFile(proxy / (version + ".zip"), "w") as archive: + for filename in ("go.mod", "value.go"): + archive.write(author / filename, module + "@" + version + "/" + filename) + app_remote, _, app_head = self.component("Consumer", { + "go.mod": "module example.invalid/consumer\n\ngo 1.27\n\nrequire " + module + " " + version + "\n", + "main.go": 'package main\nimport ("fmt"; native "example.invalid/Native")\nfunc main() { fmt.Print(native.Value()) }\n'}) + self.manifest["components"] = [self.entry("Consumer", app_remote, modules=[{"path": "example.invalid/consumer", "directory": "."}]), + self.entry("Native", library_remote, "go-library", [{"path": module, "legacy": "native", "directory": "."}])] + self.lock["components"] = {"Consumer": {"commit": app_head}} + self.save_manifest() + self.env.update({"GOPROXY": (self.base / "proxy").as_uri(), "GOMODCACHE": str(self.base / "modcache"), + "GOPATH": str(self.base / "gopath")}) + return head + + def test_actual_go_version_baseline_overlay_and_unlink_restore_version_consumption(self): + head = self.go_fixture() + self.cli("prepare") + consumer = self.root / ".workspace/Consumer" + native = self.root / ".workspace/Native" + self.command(consumer, "go", "mod", "download", "all", env=self.env | {"GOWORK": "off"}) + self.assertEqual(self.command(consumer, "go", "run", "-mod=readonly", ".", env=self.env | {"GOWORK": "off"}).stdout, "versioned") + self.cli("edit", "--name", "Native", "--branch", "feature/value") + self.assertEqual(self.git(native, "rev-parse", "HEAD").stdout.strip(), head) + (native / "value.go").write_text('package native\nfunc Value() string { return "edited" }\n') + self.assertEqual(self.command(consumer, "go", "run", ".").stdout, "edited") + self.assertEqual(self.command(consumer, "go", "run", "-mod=readonly", ".", env=self.env | {"GOWORK": "off"}).stdout, "versioned") + self.cli("unlink", "--name", "Native") + self.assertFalse((self.root / "go.work").exists()) + self.assertEqual(self.command(consumer, "go", "run", "-mod=readonly", ".").stdout, "versioned") + self.assertEqual((native / "value.go").read_text(), 'package native\nfunc Value() string { return "edited" }\n') + + def test_fresh_library_edit_resolves_fixed_consumer_and_preserves_consumer_manifest(self): + head = self.go_fixture() + self.cli("edit", "--name", "Native") + native = self.root / ".workspace/Native" + consumer = self.root / ".workspace/Consumer" + self.assertEqual(self.git(native, "rev-parse", "HEAD").stdout.strip(), head) + self.assertFalse((consumer / "go.sum").exists(), "source resolution must not write a consumer's go.sum") + self.assertEqual(self.git(consumer, "status", "--porcelain=v1").stdout, "") + + def test_library_baseline_resolves_transitive_selected_module(self): + head = self.go_fixture() + native_version = "v0.0.0-20261013000000-" + head[:12] + bridge_remote, bridge_author, bridge_head = self.component("Bridge", { + "go.mod": "module example.invalid/Bridge\n\ngo 1.27\n\nrequire example.invalid/Native " + native_version + "\n", + "value.go": 'package bridge\nimport native "example.invalid/Native"\nfunc Value() string { return native.Value() }\n'}) + bridge_version = "v0.0.0-20261013000000-" + bridge_head[:12] + proxy = self.base / "proxy/example.invalid/!bridge/@v" + proxy.mkdir(parents=True) + (proxy / (bridge_version + ".mod")).write_text((bridge_author / "go.mod").read_text()) + (proxy / (bridge_version + ".info")).write_text(json.dumps({"Version": bridge_version, + "Time": "2026-10-13T00:00:00Z", "Origin": {"VCS": "git", "URL": str(bridge_remote), "Hash": bridge_head}})) + with zipfile.ZipFile(proxy / (bridge_version + ".zip"), "w") as archive: + for filename in ("go.mod", "value.go"): + archive.write(bridge_author / filename, "example.invalid/Bridge@" + bridge_version + "/" + filename) + author = self.base / "Consumer-author" + (author / "go.mod").write_text("module example.invalid/consumer\n\ngo 1.27\n\nrequire example.invalid/Bridge " + bridge_version + "\n") + (author / "main.go").write_text('package main\nimport ("fmt"; bridge "example.invalid/Bridge")\nfunc main() { fmt.Print(bridge.Value()) }\n') + self.git(author, "commit", "-am", "Consume Native transitively") + self.git(author, "push", "origin", "main") + self.lock["components"]["Consumer"]["commit"] = self.git(author, "rev-parse", "HEAD").stdout.strip() + self.save_manifest() + self.cli("edit", "--name", "Native") + self.assertEqual(self.git(self.root / ".workspace/Native", "rev-parse", "HEAD").stdout.strip(), head) + self.assertFalse((self.root / ".workspace/Consumer/go.sum").exists()) + (self.root / ".workspace/Native/value.go").write_text('package native\nfunc Value() string { return "transitive edit" }\n') + self.assertEqual(self.command(self.root / ".workspace/Consumer", "go", "run", ".", separate_stderr=True).stdout, "transitive edit") + + +if __name__ == "__main__": + unittest.main()