diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 8970e45b..59cd840b 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -10,98 +10,146 @@ jobs: runs-on: ubuntu-latest env: GOPROXY: https://goproxy.cn,direct + GOTOOLCHAIN: local + GOWORK: "off" + GOPRIVATE: git-ssh.u1680832.nyat.app/weichen + GONOSUMDB: git-ssh.u1680832.nyat.app/weichen steps: - name: Checkout env: TOKEN: ${{ secrets.GITHUB_TOKEN }} SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} - run: | + run: &trusted_acquisition_1 | set -euo pipefail - # Credential handling stays inline: no file from the candidate is executed. - # Workflow provenance and runner isolation still require platform controls. - python3 - <<'PY_CHECKOUT' + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json import os from pathlib import Path import re + import shlex import subprocess import sys + import tempfile from urllib.parse import urlsplit - # 服务端基址取运行器注入的 GITHUB_SERVER_URL(平台控制、候选 PR 不可影响)。 - # 2026-10-05 修复(run 948/949 实测):注入值为内网直连形态 - # 'http://172.17.0.1:3000'(docker 网关 → 宿主 Gitea),与公网拼写不同且为 - # http——此前硬编码常量严格比对会拒绝合法检出。校验收宽为「http(s) + 非空 - # netloc」;凭据仍只附着于「该基址 + 下方仓库白名单」构造的 URL。 SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") - parsed_server = urlsplit(SERVER) - if parsed_server.scheme not in {"http", "https"} or not parsed_server.netloc: - sys.exit("Checkout server must be the platform-injected http(s) URL") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" - # Reviewed allowlist, independent of candidate .gitmodules. Add repositories - # here only with an explicit review of the checkout credential's scope. - REPOSITORIES = { - "modules/core": "Agent-System-Core", - "modules/backend": "Agent-System-Backend", - "modules/frontend": "Agent-System-Frontend", - "modules/ui": "Agent-System-UI", - "modules/documents": "Agent-System-Documents", - "deps/agent-system-core": "Agent-System-Core", - "deps/development-guidelines": "Development-Guidelines", - "deps/agent-native": "Agent-Native", - "deps/agent-squad": "Agent-Squad", - "deps/agent-intent": "Agent-Intent", - "deps/agent-command": "Agent-Command", - "deps/error-code-system": "Error-Code-System", - "deps/logging-system": "Logging-System", + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} root_token = os.environ.pop("TOKEN", "") component_token = os.environ.pop("SUBMODULE_TOKEN", "") - if not root_token or not component_token: - sys.exit("Checkout requires TOKEN and SUBMODULE_TOKEN") - if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-Dev": - sys.exit("Checkout repository is outside the reviewed allowlist") - sha = os.environ.get("GITHUB_SHA", "") - if not re.fullmatch(r"[0-9a-fA-F]{40}", sha): - sys.exit("Checkout requires a fixed commit SHA") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" - # Discard inherited Git tracing/config/SSH hooks. Auth lives only in one - # Git process tree, in an exact URL-scoped header, never in a URL or file. - clean_env = {k: v for k, v in os.environ.items() if not k.startswith("GIT_")} - clean_env.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", - GIT_CONFIG_GLOBAL="/dev/null", GIT_TERMINAL_PROMPT="0") - config = { - "core.hooksPath": "/dev/null", "core.fsmonitor": "false", - "init.templateDir": "", "credential.helper": "", - "fetch.recurseSubmodules": "false", "submodule.recurse": "false", - "http.followRedirects": "false", "protocol.allow": "never", - "protocol." + urlsplit(SERVER).scheme + ".allow": "always", - } - - - def git(repo, *args, extra=None): - values = config | (extra or {}) - env = clean_env | {"GIT_CONFIG_COUNT": str(len(values))} + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} for index, (key, value) in enumerate(values.items()): env[f"GIT_CONFIG_KEY_{index}"] = key env[f"GIT_CONFIG_VALUE_{index}"] = value - return subprocess.run(["git", "-C", str(repo), *args], env=env, - check=True, stdout=subprocess.PIPE).stdout + return env + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout - def materialize(repo, depth=0): - if depth > 16: - raise ValueError("Submodule depth exceeds the reviewed checkout limit") - links = {} - for entry in git(repo, "ls-tree", "-rz", "HEAD").split(b"\0"): - if not entry: + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): continue - metadata, path = entry.split(b"\t", 1) - mode, kind, commit = metadata.decode().split() - if mode == "160000": - links[path.decode()] = commit + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit if not links: return - raw = git(repo, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") entries = {} for item in raw.split(b"\0"): if not item: @@ -115,46 +163,98 @@ jobs: raise ValueError("Duplicate candidate .gitmodules setting") entries[name][field] = value if set(entries) != set(links): - raise ValueError("Submodule names must match the fixed gitlink paths") - # Validate the entire level before any authenticated component fetch. + raise ValueError("Submodule names must match fixed gitlink paths") for name, fields in entries.items(): - repository = REPOSITORIES.get(name) - if not repository or fields.get("path") != name: - raise ValueError("Submodule path is outside the reviewed allowlist") - trusted_url = f"{SERVER}/weichen/{repository}.git" - if fields.get("url") not in {SSH + repository + ".git", trusted_url}: - raise ValueError("Submodule URL is outside the reviewed allowlist") + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") for name in entries: - url = f"{SERVER}/weichen/{REPOSITORIES[name]}.git" - # Persist only the reviewed public URL so Git recognizes the - # initialized submodule after process-scoped config is gone. - git(repo, "config", f"submodule.{name}.url", url) - git(repo, "submodule", "update", "--init", "--checkout", "--", name, - extra={f"submodule.{name}.url": url, - f"submodule.{name}.update": "checkout", - f"http.{url}.extraheader": "AUTHORIZATION: token " + component_token}) - child = repo / name - if git(child, "rev-parse", "HEAD").decode().strip() != links[name]: - raise ValueError("Materialized submodule does not match the fixed SHA") - materialize(child, depth + 1) + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) try: - root = Path.cwd() - # An ephemeral clean checkout is required; do not reuse prior Git state. + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-Dev": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") if (root / ".git").exists(): raise ValueError("Checkout requires a fresh workspace") git(root, "init", "-q") - url = SERVER + "/weichen/Agent-System-Dev.git" - git(root, "remote", "add", "origin", url) - git(root, "fetch", "--depth=1", "origin", sha, - extra={f"http.{url}.extraheader": "AUTHORIZATION: token " + root_token}) + git(root, "remote", "add", "origin", SERVER + "/weichen/Agent-System-Dev.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Agent-System-Dev") git(root, "checkout", "-q", "--detach", "FETCH_HEAD") - materialize(root) - except (ValueError, OSError, subprocess.CalledProcessError) as error: - sys.exit(f"Checkout refused: {error}") - print("Checkout complete; credentials were not persisted in Git configuration") - PY_CHECKOUT + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED unset TOKEN SUBMODULE_TOKEN - name: Install Go 1.27.1 run: | @@ -163,17 +263,497 @@ jobs: tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" ln -sfn /usr/local/go/bin/go /usr/local/bin/go ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Install boundary checker prerequisite + run: &install_boundary_prerequisite | + set -euo pipefail + if ! command -v rg >/dev/null 2>&1; then + SUDO="" + if command -v sudo >/dev/null 2>&1 && [ "$(id -u)" != 0 ]; then SUDO=sudo; fi + $SUDO apt-get update -y + $SUDO apt-get install -y ripgrep + fi + rg --version + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + try: + targets = [] + for source in source_roots(): + for suffix in (".", "examples/trace", "adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad"): + directory = source / suffix + if (directory / "go.mod").is_file() and directory.resolve() not in targets: + targets.append(directory.resolve()) + # Parse using the installed local Go tool without credentials or candidate execution. + original_files = {} + for directory in targets: + parsed_mod = json.loads(subprocess.check_output(["go", "mod", "edit", "-json"], cwd=directory, env=clean)) + canonical = parsed_mod["Module"]["Path"].startswith(GO_PREFIX) + for name in ("go.mod", "go.sum"): + dependency_file = directory / name + if dependency_file.is_file(): + original_files[(directory, name)] = dependency_file.read_bytes() + elif canonical and name == "go.sum": + original_files[(directory, name)] = None + for dep in (parsed_mod.get("Require") or []): + path = dep["Path"] + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go dependency is outside the reviewed module mapping") + for replacement in (parsed_mod.get("Replace") or []): + path = replacement["New"]["Path"] + if canonical and not replacement["New"].get("Version"): + raise ValueError("Canonical module cannot acquire a local path replacement") + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go replacement is outside the reviewed module mapping") + auth = config.copy() + for repo in sorted(GO_REPOS): + url = f"{SERVER}/weichen/{repo}.git" + auth[f"url.{url}.insteadOf"] = "https://" + GO_PREFIX + repo + auth[f"http.{url}.extraheader"] = "AUTHORIZATION: token " + component_token + def objects(output): + decoder = json.JSONDecoder() + remaining = output.strip() + while remaining: + item, end = decoder.raw_decode(remaining) + remaining = remaining[end:].lstrip() + yield item + def unchanged(): + for (owner, name), contents in original_files.items(): + dependency_file = owner / name + current = dependency_file.read_bytes() if dependency_file.exists() else None + if current != contents: + raise ValueError("Go acquisition modified a committed Go dependency file: " + str(dependency_file)) + for directory in targets: + # Resolve private go.mod metadata only through exact repository headers; + # validate the complete selected graph before acquiring module zip files. + graph = subprocess.run(["go", "list", "-mod=readonly", "-m", "-json", "all"], cwd=directory, + env=process_env(auth), capture_output=True, text=True) + if graph.returncode: + raise ValueError("Go selected graph resolution failed: " + graph.stderr.strip()) + for item in objects(graph.stdout): + if item.get("Main"): + continue + selected = item.get("Replace") or item + for path in (item.get("Path", ""), selected.get("Path", "")): + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Selected Go module is outside the reviewed mapping") + unchanged() + # Go 1.27 can prune go.sum even under -mod=readonly for this + # metadata-only command. Use a disposable copy, then validate actual + # package loading against the unchanged committed source locks. + local_replacements = json.loads(subprocess.check_output( + ["go", "mod", "edit", "-json"], cwd=directory, env=clean)).get("Replace") or [] + downloaded = "" + if not any(not item["New"].get("Version") for item in local_replacements): + with tempfile.TemporaryDirectory(prefix="ci-go-prefetch-") as temporary: + download_root = Path(temporary) + for name in ("go.mod", "go.sum"): + if (directory / name).is_file(): + (download_root / name).write_bytes((directory / name).read_bytes()) + result = subprocess.run(["go", "mod", "download", "-json"], cwd=download_root, + env=process_env(auth), capture_output=True, text=True) + if result.returncode: + raise ValueError("Go module acquisition failed: " + result.stderr.strip()) + downloaded = result.stdout + unchanged() + for item in objects(downloaded): + path = item.get("Path", "") + if path.startswith(GO_PREFIX): + if path not in GO_MODULES: + raise ValueError("Resolved Go module is outside the reviewed mapping") + repo = path[len(GO_PREFIX):].split(".git", 1)[0] + origin = item.get("Origin") or json.loads(Path(item["Info"]).read_text()).get("Origin") or {} + mirror(repo, fixed_sha(origin.get("Hash")), component_token) + # Package metadata loads actual test/build dependencies without running + # vet, compilers, package init functions or candidate tests. No CGO tools. + packages = subprocess.run(["go", "list", "-mod=readonly", "-deps", "-test", "./..."], cwd=directory, + env=process_env(auth) | {"CGO_ENABLED": "0"}, capture_output=True, text=True) + if packages.returncode: + raise ValueError("Go test/build dependency acquisition failed: " + packages.stderr.strip()) + unchanged() + mirror_env() + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("Go prefetch refused: " + str(error)) + print("Go modules cached with GOTOOLCHAIN=local; no candidate code executed") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN - name: Install Node 22 run: | set -euo pipefail curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz" + - name: Prefetch npm packages without lifecycle scripts + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_3 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + def git_package(value): + if not isinstance(value, str): + return None + if value.startswith(("file:", "link:", "workspace:")): + raise ValueError("Formal npm acquisition cannot consume a local package override") + if value.startswith(("http://", "https://")): + registry = urlsplit(value) + if registry.scheme != "https" or registry.hostname != "registry.npmjs.org" or registry.username or registry.password: + raise ValueError("npm tarball source is outside the reviewed public registry") + elif "/" in value and not value.startswith(("git+", "npm:")): + raise ValueError("npm repository shorthand is outside the fixed-SHA package mapping") + if value.startswith("git+") or value.startswith(("git://", "ssh://", "github:", "gitlab:", "bitbucket:")): + for repo in ("Agent-System-Core", "Agent-System-UI"): + prefix = "git+" + SSH + repo + ".git#" + if value.startswith(prefix): + return repo, fixed_sha(value[len(prefix):]) + raise ValueError("npm Git source is outside the reviewed fixed-SHA package mapping") + return None + + def registry_package(location, entry): + resolved = entry.get("resolved", "") + if not isinstance(resolved, str) or not resolved.startswith(("https://", "http://")): + return None + # A metadata spec is name@exact-version, never a candidate URL. + source = urlsplit(resolved) + if (source.scheme != "https" or source.netloc != "registry.npmjs.org" or + source.username or source.password or source.query or source.fragment): + raise ValueError("npm tarball source is outside the reviewed public registry") + relative = Path(location) + name = entry.get("name") or location.rsplit("node_modules/", 1)[-1] + version = entry.get("version", "") + if (not location.startswith("node_modules/") or relative.is_absolute() or ".." in relative.parts or + not isinstance(name, str) or not re.fullmatch(r"(?:@[a-z0-9][a-z0-9._~-]*/)?[a-z0-9][a-z0-9._~-]*", name) or + not isinstance(version, str) or not re.fullmatch(r"[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?", version)): + raise ValueError("Invalid locked registry package name or version") + return name + "@" + version + + try: + targets = [] + selected = set() + for directory in source_roots(): + if not (directory / "package.json").is_file(): + continue + if (directory / ".npmrc").exists(): + raise ValueError("Candidate .npmrc is not allowed during private dependency acquisition") + package = json.loads((directory / "package.json").read_text()) + lock_bytes = (directory / "package-lock.json").read_bytes() + lock = json.loads(lock_bytes) + if lock.get("lockfileVersion") not in {2, 3}: + raise ValueError("npm acquisition requires a package lock") + for group in ("dependencies", "devDependencies", "optionalDependencies"): + for value in package.get(group, {}).values(): + found = git_package(value) + if found: + selected.add(found) + registry_packages = [] + for location, entry in lock.get("packages", {}).items(): + spec = registry_package(location, entry) + if spec: + registry_packages.append((location, spec)) + found = git_package(entry.get("resolved")) + if found: + selected.add(found) + for group in ("dependencies", "devDependencies", "optionalDependencies"): + for value in entry.get(group, {}).values(): + found = git_package(value) + if found: + selected.add(found) + targets.append((directory, registry_packages, lock_bytes)) + # Fetch only registered fixed Git package commits. npm never receives token config. + for repo, sha in sorted(selected): + repository = mirror(repo, sha, component_token) + package = json.loads(git(repository, "show", sha + ":package.json")) + forbidden = {"prepare", "prepack", "prepublish", "prepublishOnly", "preinstall", "install", "postinstall"} + if forbidden & set(package.get("scripts", {})): + raise ValueError("Git package provider must commit outputs without acquisition lifecycle scripts") + if not git(repository, "ls-tree", sha, "package/").strip(): + raise ValueError("Git package provider is missing committed package outputs") + no_auth = mirror_env() + empty_config = tempfile.NamedTemporaryFile(prefix="ci-npm-globalrc-") + for directory, registry_packages, lock_bytes in targets: + result = subprocess.run(["npm", "ci", "--ignore-scripts", "--no-audit", "--no-fund", + "--userconfig=/dev/null", "--globalconfig=" + empty_config.name], + cwd=directory, env=no_auth, capture_output=True, text=True) + if result.returncode: + raise ValueError("npm dependency acquisition failed: " + result.stderr.strip()) + # npm ci caches tarballs; packed consumers also need resolver + # metadata. Only installed locked registry entries are fetched. + specs = sorted({spec for location, spec in registry_packages if (directory / location).is_dir()}) + if specs: + with tempfile.TemporaryDirectory(prefix="ci-npm-metadata-") as metadata_root: + result = subprocess.run(["npm", "cache", "add", *specs, "--ignore-scripts", + "--registry=https://registry.npmjs.org", "--userconfig=/dev/null", + "--globalconfig=" + empty_config.name], cwd=metadata_root, + env=no_auth, capture_output=True, text=True) + if result.returncode: + raise ValueError("npm metadata acquisition failed: " + result.stderr.strip()) + if (directory / "package-lock.json").read_bytes() != lock_bytes: + raise ValueError("npm acquisition changed the committed package lock") + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("npm prefetch refused: " + str(error)) + print("npm packages cached without credentials or lifecycle execution") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN - name: Install house-style Python packages run: python3 -m pip install --break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx python-pptx openpyxl - name: make test (boundaries, pins, libs, core, backend, frontend, ui, agent-command) - run: make test + run: | + set -euo pipefail + source .ci-mirrors.env + make test - name: Build the single binary - run: make build + run: | + set -euo pipefail + source .ci-mirrors.env + make build # 协作存储方案 U2:真实 PostgreSQL + pgvector + Redis 门禁。 # 缺服务时失败而非跳过(make test-backend-pg 硬校验环境变量); @@ -182,152 +762,16 @@ jobs: runs-on: ubuntu-latest env: GOPROXY: https://goproxy.cn,direct + GOTOOLCHAIN: local + GOWORK: "off" + GOPRIVATE: git-ssh.u1680832.nyat.app/weichen + GONOSUMDB: git-ssh.u1680832.nyat.app/weichen steps: - name: Checkout env: TOKEN: ${{ secrets.GITHUB_TOKEN }} SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} - run: | - set -euo pipefail - # Credential handling stays inline: no file from the candidate is executed. - # Workflow provenance and runner isolation still require platform controls. - python3 - <<'PY_CHECKOUT' - import os - from pathlib import Path - import re - import subprocess - import sys - from urllib.parse import urlsplit - - # 服务端基址取运行器注入的 GITHUB_SERVER_URL(平台控制、候选 PR 不可影响)。 - # 2026-10-05 修复(run 948/949 实测):注入值为内网直连形态 - # 'http://172.17.0.1:3000'(docker 网关 → 宿主 Gitea),与公网拼写不同且为 - # http——此前硬编码常量严格比对会拒绝合法检出。校验收宽为「http(s) + 非空 - # netloc」;凭据仍只附着于「该基址 + 下方仓库白名单」构造的 URL。 - SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") - parsed_server = urlsplit(SERVER) - if parsed_server.scheme not in {"http", "https"} or not parsed_server.netloc: - sys.exit("Checkout server must be the platform-injected http(s) URL") - SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" - # Reviewed allowlist, independent of candidate .gitmodules. Add repositories - # here only with an explicit review of the checkout credential's scope. - REPOSITORIES = { - "modules/core": "Agent-System-Core", - "modules/backend": "Agent-System-Backend", - "modules/frontend": "Agent-System-Frontend", - "modules/ui": "Agent-System-UI", - "modules/documents": "Agent-System-Documents", - "deps/agent-system-core": "Agent-System-Core", - "deps/development-guidelines": "Development-Guidelines", - "deps/agent-native": "Agent-Native", - "deps/agent-squad": "Agent-Squad", - "deps/agent-intent": "Agent-Intent", - "deps/agent-command": "Agent-Command", - "deps/error-code-system": "Error-Code-System", - "deps/logging-system": "Logging-System", - } - root_token = os.environ.pop("TOKEN", "") - component_token = os.environ.pop("SUBMODULE_TOKEN", "") - if not root_token or not component_token: - sys.exit("Checkout requires TOKEN and SUBMODULE_TOKEN") - if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-Dev": - sys.exit("Checkout repository is outside the reviewed allowlist") - sha = os.environ.get("GITHUB_SHA", "") - if not re.fullmatch(r"[0-9a-fA-F]{40}", sha): - sys.exit("Checkout requires a fixed commit SHA") - - # Discard inherited Git tracing/config/SSH hooks. Auth lives only in one - # Git process tree, in an exact URL-scoped header, never in a URL or file. - clean_env = {k: v for k, v in os.environ.items() if not k.startswith("GIT_")} - clean_env.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", - GIT_CONFIG_GLOBAL="/dev/null", GIT_TERMINAL_PROMPT="0") - config = { - "core.hooksPath": "/dev/null", "core.fsmonitor": "false", - "init.templateDir": "", "credential.helper": "", - "fetch.recurseSubmodules": "false", "submodule.recurse": "false", - "http.followRedirects": "false", "protocol.allow": "never", - "protocol." + urlsplit(SERVER).scheme + ".allow": "always", - } - - - def git(repo, *args, extra=None): - values = config | (extra or {}) - env = clean_env | {"GIT_CONFIG_COUNT": str(len(values))} - for index, (key, value) in enumerate(values.items()): - env[f"GIT_CONFIG_KEY_{index}"] = key - env[f"GIT_CONFIG_VALUE_{index}"] = value - return subprocess.run(["git", "-C", str(repo), *args], env=env, - check=True, stdout=subprocess.PIPE).stdout - - - def materialize(repo, depth=0): - if depth > 16: - raise ValueError("Submodule depth exceeds the reviewed checkout limit") - links = {} - for entry in git(repo, "ls-tree", "-rz", "HEAD").split(b"\0"): - if not entry: - continue - metadata, path = entry.split(b"\t", 1) - mode, kind, commit = metadata.decode().split() - if mode == "160000": - links[path.decode()] = commit - if not links: - return - raw = git(repo, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") - entries = {} - for item in raw.split(b"\0"): - if not item: - continue - key, value = item.decode().split("\n", 1) - match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) - if not match: - raise ValueError("Unsupported candidate .gitmodules setting") - name, field = match.groups() - if field in entries.setdefault(name, {}): - raise ValueError("Duplicate candidate .gitmodules setting") - entries[name][field] = value - if set(entries) != set(links): - raise ValueError("Submodule names must match the fixed gitlink paths") - # Validate the entire level before any authenticated component fetch. - for name, fields in entries.items(): - repository = REPOSITORIES.get(name) - if not repository or fields.get("path") != name: - raise ValueError("Submodule path is outside the reviewed allowlist") - trusted_url = f"{SERVER}/weichen/{repository}.git" - if fields.get("url") not in {SSH + repository + ".git", trusted_url}: - raise ValueError("Submodule URL is outside the reviewed allowlist") - for name in entries: - url = f"{SERVER}/weichen/{REPOSITORIES[name]}.git" - # Persist only the reviewed public URL so Git recognizes the - # initialized submodule after process-scoped config is gone. - git(repo, "config", f"submodule.{name}.url", url) - git(repo, "submodule", "update", "--init", "--checkout", "--", name, - extra={f"submodule.{name}.url": url, - f"submodule.{name}.update": "checkout", - f"http.{url}.extraheader": "AUTHORIZATION: token " + component_token}) - child = repo / name - if git(child, "rev-parse", "HEAD").decode().strip() != links[name]: - raise ValueError("Materialized submodule does not match the fixed SHA") - materialize(child, depth + 1) - - - try: - root = Path.cwd() - # An ephemeral clean checkout is required; do not reuse prior Git state. - if (root / ".git").exists(): - raise ValueError("Checkout requires a fresh workspace") - git(root, "init", "-q") - url = SERVER + "/weichen/Agent-System-Dev.git" - git(root, "remote", "add", "origin", url) - git(root, "fetch", "--depth=1", "origin", sha, - extra={f"http.{url}.extraheader": "AUTHORIZATION: token " + root_token}) - git(root, "checkout", "-q", "--detach", "FETCH_HEAD") - materialize(root) - except (ValueError, OSError, subprocess.CalledProcessError) as error: - sys.exit(f"Checkout refused: {error}") - print("Checkout complete; credentials were not persisted in Git configuration") - PY_CHECKOUT - unset TOKEN SUBMODULE_TOKEN + run: *trusted_acquisition_1 - name: Install Go 1.27.1 run: | set -euo pipefail @@ -335,6 +779,8 @@ jobs: tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" ln -sfn /usr/local/go/bin/go /usr/local/bin/go ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Install boundary checker prerequisite + run: *install_boundary_prerequisite - name: Install house-style Python packages run: python3 -m pip install --break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx python-pptx openpyxl - name: Install PostgreSQL, pgvector and Redis @@ -368,203 +814,140 @@ jobs: pg_as_postgres psql -d agent_test -c "CREATE EXTENSION IF NOT EXISTS pg_trgm" redis-server --daemonize yes --port 6399 --save '' --appendonly no redis-cli -p 6399 ping - - name: Backend tests against real PostgreSQL and Redis (required, no silent skip) - env: - AGENT_PG_TEST_DSN: postgres://ci_agent:ci_job_local_only@127.0.0.1:5432/agent_test?sslmode=disable - AGENT_REDIS_TEST_ADDR: 127.0.0.1:6399 - run: make test-backend-pg - - name: Two-process HTTP acceptance over shared PostgreSQL (U7, required) - env: - AGENT_PG_TEST_DSN: postgres://ci_agent:ci_job_local_only@127.0.0.1:5432/agent_test?sslmode=disable - run: make test-multi-instance - - name: RDM lifecycle pin is three fixed SHAs - run: python3 -m unittest tests.test_lifecycle_pin -q && bash scripts/fetch-rdm-pin.sh tests/integration/lifecycle/rdm.pin >/dev/null - name: Clone Agent-System-RDM with nested pins (reviewed allowlist addition) env: SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} - run: | + run: &trusted_acquisition_4 | set -euo pipefail - # 凭据纪律与 Checkout 块同源:经 GIT_CONFIG_* 环境注入 URL 级 token 头, - # 不落文件/命令行;allowlist 扩项 = Agent-System-RDM 及其 pins(同一 - # 组件集合),由本 PR 评审背书。SSH pins URL 以 insteadOf 改写到受信 - # https 基址后再取。只追加 pin 的三个 40 位 hex,不 source pin 文件。 - SERVER="$(printf '%s' "$GITHUB_SERVER_URL" | sed 's:/*$::')" - scheme="${GITHUB_SERVER_URL%%://*}" - export GIT_CONFIG_COUNT=4 - export GIT_CONFIG_KEY_0="protocol.$scheme.allow" - export GIT_CONFIG_VALUE_0="always" - export GIT_CONFIG_KEY_1="http.$SERVER/.extraheader" - export GIT_CONFIG_VALUE_1="AUTHORIZATION: token $SUBMODULE_TOKEN" - export GIT_CONFIG_KEY_2="url.$SERVER/weichen/.insteadOf" - export GIT_CONFIG_VALUE_2="ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" - export GIT_CONFIG_KEY_3="core.hooksPath" - export GIT_CONFIG_VALUE_3="/dev/null" - git clone --depth=1 "$SERVER/weichen/Agent-System-RDM.git" rdm - mapfile -t pins < <(python3 - <<'PY' - import pathlib - got = {} - for line in pathlib.Path("tests/integration/lifecycle/rdm.pin").read_text().splitlines(): - line = line.strip() - if not line or line.startswith("#") or "=" not in line: - continue - key, value = line.split("=", 1) - if key not in ("sha", "prev_sha", "legacy_sha") or len(value) != 40: - raise SystemExit("rdm.pin rejected") - if any(c not in "0123456789abcdef" for c in value): - raise SystemExit("rdm.pin rejected") - got[key] = value - if set(got) != {"sha", "prev_sha", "legacy_sha"}: - raise SystemExit("rdm.pin rejected") - print(got["prev_sha"]) - print(got["legacy_sha"]) - print(got["sha"]) - PY - ) - [ "${#pins[@]}" -eq 3 ] - # depth=1 会把三个 pin 变成互不相关的浅根,update 会把 prev→sha 误判成分叉。 - # 当前 first-parent 距离是 39,200 留余量,仍不拉全史。 - git -C rdm fetch --depth=200 origin "${pins[@]}" - for rev in "${pins[@]}"; do - git -C rdm checkout --detach "$rev" - git -C rdm submodule update --init --recursive - done - echo "RDM commit: $(git -C rdm rev-parse HEAD)" - unset GIT_CONFIG_COUNT GIT_CONFIG_KEY_0 GIT_CONFIG_VALUE_0 \ - GIT_CONFIG_KEY_1 GIT_CONFIG_VALUE_1 GIT_CONFIG_KEY_2 \ - GIT_CONFIG_VALUE_2 GIT_CONFIG_KEY_3 GIT_CONFIG_VALUE_3 - unset SUBMODULE_TOKEN - : > rdm/pin-build-digests.txt - for rev in "${pins[@]}"; do - git -C rdm checkout --detach "$rev" - make -C rdm build - sha256sum rdm/bin/agent-system-rdm | awk -v rev="$rev" '{print rev, $1}' >> rdm/pin-build-digests.txt - done - - name: Install Node 22 - run: | - set -euo pipefail - curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz - tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz" - - name: Build the real agent-system binary - run: make build - - name: Real-combination lifecycle gate (make test-lifecycle, required) - env: - AGENT_PG_TEST_DSN: postgres://ci_agent:ci_job_local_only@127.0.0.1:5432/agent_test?sslmode=disable - SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} - run: | - set -euo pipefail - # 路径变量在脚本内解析(YAML env: 不做 shell 展开)。 - # 不设 SVC_RDM_ORIGIN:全轨 git 部署由 svc-realcombo 作业覆盖。 - # pins 物化没有 SSH known_hosts。token 只经 SVC_CI_GIT_TOKEN 进 - # ci_git_env 的 URL 级头,不写文件。 - export SVC_TEST_REAL=1 SVC_TEST_PG=1 - export SVC_REAL_BIN="$PWD/bin/agent-system" - export SVC_REAL_RDM_BIN="$PWD/rdm/bin/agent-system-rdm" - export SVC_RDM_SRC_DIR="$PWD/rdm" - export SVC_CI_GIT_SERVER="$(printf '%s' "$GITHUB_SERVER_URL" | sed 's:/*$::')" - export SVC_CI_GIT_TOKEN="$SUBMODULE_TOKEN" - unset SUBMODULE_TOKEN - make test-lifecycle - - # U3(统一部署方案):真实 Dev/RDM 制品的 svc.sh 生命周期门禁——桩套件 - # (test_svc*.py)只证明脚本逻辑;本作业证明「声明≠能力」的最后一道:真实 - # identity 领养/verify、release 切换、伴生工作台、RDM 全轨部署。缺件即失败, - # 不静默跳过(SVC_TEST_REAL=1 硬开关)。 - svc-realcombo: - runs-on: ubuntu-latest - env: - GOPROXY: https://goproxy.cn,direct - steps: - - name: Checkout - env: - TOKEN: ${{ secrets.GITHUB_TOKEN }} - SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} - run: | - set -euo pipefail - # Credential handling stays inline: no file from the candidate is executed. - # Workflow provenance and runner isolation still require platform controls. - python3 - <<'PY_CHECKOUT' + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json import os from pathlib import Path import re + import shlex import subprocess import sys + import tempfile from urllib.parse import urlsplit - # 服务端基址取运行器注入的 GITHUB_SERVER_URL(平台控制、候选 PR 不可影响)。 - # 2026-10-05 修复(run 948/949 实测):注入值为内网直连形态 - # 'http://172.17.0.1:3000'(docker 网关 → 宿主 Gitea),与公网拼写不同且为 - # http——此前硬编码常量严格比对会拒绝合法检出。校验收宽为「http(s) + 非空 - # netloc」;凭据仍只附着于「该基址 + 下方仓库白名单」构造的 URL。 SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") - parsed_server = urlsplit(SERVER) - if parsed_server.scheme not in {"http", "https"} or not parsed_server.netloc: - sys.exit("Checkout server must be the platform-injected http(s) URL") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" - # Reviewed allowlist, independent of candidate .gitmodules. Add repositories - # here only with an explicit review of the checkout credential's scope. - REPOSITORIES = { - "modules/core": "Agent-System-Core", - "modules/backend": "Agent-System-Backend", - "modules/frontend": "Agent-System-Frontend", - "modules/ui": "Agent-System-UI", - "modules/documents": "Agent-System-Documents", - "deps/agent-system-core": "Agent-System-Core", - "deps/development-guidelines": "Development-Guidelines", - "deps/agent-native": "Agent-Native", - "deps/agent-squad": "Agent-Squad", - "deps/agent-intent": "Agent-Intent", - "deps/agent-command": "Agent-Command", - "deps/error-code-system": "Error-Code-System", - "deps/logging-system": "Logging-System", + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} root_token = os.environ.pop("TOKEN", "") component_token = os.environ.pop("SUBMODULE_TOKEN", "") - if not root_token or not component_token: - sys.exit("Checkout requires TOKEN and SUBMODULE_TOKEN") - if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-Dev": - sys.exit("Checkout repository is outside the reviewed allowlist") - sha = os.environ.get("GITHUB_SHA", "") - if not re.fullmatch(r"[0-9a-fA-F]{40}", sha): - sys.exit("Checkout requires a fixed commit SHA") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" - # Discard inherited Git tracing/config/SSH hooks. Auth lives only in one - # Git process tree, in an exact URL-scoped header, never in a URL or file. - clean_env = {k: v for k, v in os.environ.items() if not k.startswith("GIT_")} - clean_env.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", - GIT_CONFIG_GLOBAL="/dev/null", GIT_TERMINAL_PROMPT="0") - config = { - "core.hooksPath": "/dev/null", "core.fsmonitor": "false", - "init.templateDir": "", "credential.helper": "", - "fetch.recurseSubmodules": "false", "submodule.recurse": "false", - "http.followRedirects": "false", "protocol.allow": "never", - "protocol." + urlsplit(SERVER).scheme + ".allow": "always", - } - - - def git(repo, *args, extra=None): - values = config | (extra or {}) - env = clean_env | {"GIT_CONFIG_COUNT": str(len(values))} + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} for index, (key, value) in enumerate(values.items()): env[f"GIT_CONFIG_KEY_{index}"] = key env[f"GIT_CONFIG_VALUE_{index}"] = value - return subprocess.run(["git", "-C", str(repo), *args], env=env, - check=True, stdout=subprocess.PIPE).stdout + return env + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout - def materialize(repo, depth=0): - if depth > 16: - raise ValueError("Submodule depth exceeds the reviewed checkout limit") - links = {} - for entry in git(repo, "ls-tree", "-rz", "HEAD").split(b"\0"): - if not entry: + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): continue - metadata, path = entry.split(b"\t", 1) - mode, kind, commit = metadata.decode().split() - if mode == "160000": - links[path.decode()] = commit + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit if not links: return - raw = git(repo, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") entries = {} for item in raw.split(b"\0"): if not item: @@ -578,47 +961,133 @@ jobs: raise ValueError("Duplicate candidate .gitmodules setting") entries[name][field] = value if set(entries) != set(links): - raise ValueError("Submodule names must match the fixed gitlink paths") - # Validate the entire level before any authenticated component fetch. + raise ValueError("Submodule names must match fixed gitlink paths") for name, fields in entries.items(): - repository = REPOSITORIES.get(name) - if not repository or fields.get("path") != name: - raise ValueError("Submodule path is outside the reviewed allowlist") - trusted_url = f"{SERVER}/weichen/{repository}.git" - if fields.get("url") not in {SSH + repository + ".git", trusted_url}: - raise ValueError("Submodule URL is outside the reviewed allowlist") + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") for name in entries: - url = f"{SERVER}/weichen/{REPOSITORIES[name]}.git" - # Persist only the reviewed public URL so Git recognizes the - # initialized submodule after process-scoped config is gone. - git(repo, "config", f"submodule.{name}.url", url) - git(repo, "submodule", "update", "--init", "--checkout", "--", name, - extra={f"submodule.{name}.url": url, - f"submodule.{name}.update": "checkout", - f"http.{url}.extraheader": "AUTHORIZATION: token " + component_token}) - child = repo / name - if git(child, "rev-parse", "HEAD").decode().strip() != links[name]: - raise ValueError("Materialized submodule does not match the fixed SHA") - materialize(child, depth + 1) - + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) try: - root = Path.cwd() - # An ephemeral clean checkout is required; do not reuse prior Git state. - if (root / ".git").exists(): - raise ValueError("Checkout requires a fresh workspace") - git(root, "init", "-q") - url = SERVER + "/weichen/Agent-System-Dev.git" - git(root, "remote", "add", "origin", url) - git(root, "fetch", "--depth=1", "origin", sha, - extra={f"http.{url}.extraheader": "AUTHORIZATION: token " + root_token}) - git(root, "checkout", "-q", "--detach", "FETCH_HEAD") - materialize(root) + pins = {} + for line in (root / "tests/integration/lifecycle/rdm.pin").read_text().splitlines(): + line = line.strip() + if not line or line.startswith("#"): + continue + key, value = line.split("=", 1) + if key not in {"sha", "prev_sha", "legacy_sha"} or key in pins: + raise ValueError("rdm.pin rejected") + pins[key] = fixed_sha(value) + if set(pins) != {"sha", "prev_sha", "legacy_sha"}: + raise ValueError("rdm.pin rejected") + directory = root / "rdm" + if directory.exists(): + raise ValueError("RDM source requires a fresh destination") + directory.mkdir() + git(directory, "init", "-q") + git(directory, "remote", "add", "origin", SERVER + "/weichen/Agent-System-RDM.git") + revisions = [pins[key] for key in ("prev_sha", "legacy_sha", "sha")] + git(directory, "fetch", "--depth=200", "origin", *revisions, token=component_token, repo="Agent-System-RDM") + for sha in revisions: + git(directory, "checkout", "-q", "--detach", sha) + materialize_legacy(directory) + mirror("Agent-System-RDM", sha, component_token) + # Future lifecycle fetches use only local fixed-source mirrors. + git(directory, "remote", "set-url", "origin", (mirrors / "Agent-System-RDM.git").as_uri()) + git(directory, "update-ref", "refs/remotes/origin/main", pins["sha"]) + git(directory, "update-ref", "refs/heads/main", pins["sha"]) + mirror_env() + (root / ".ci-rdm-pins").write_text("\n".join(revisions) + "\n") except (ValueError, OSError, subprocess.CalledProcessError) as error: - sys.exit(f"Checkout refused: {error}") - print("Checkout complete; credentials were not persisted in Git configuration") - PY_CHECKOUT + sys.exit("RDM fixed source prefetch refused: " + str(error)) + print("RDM historical fixed sources cached; candidate builds run after credentials end") + PY_TRUSTED unset TOKEN SUBMODULE_TOKEN + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: *trusted_acquisition_2 + - name: Install Node 22 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz + tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz" + - name: Prefetch npm packages without lifecycle scripts + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: *trusted_acquisition_3 + - name: RDM lifecycle pin is three fixed SHAs + run: python3 -m unittest tests.test_lifecycle_pin -q && bash scripts/fetch-rdm-pin.sh tests/integration/lifecycle/rdm.pin >/dev/null + - name: Build fixed RDM pins without credentials + run: | + set -euo pipefail + source .ci-mirrors.env + : > rdm/pin-build-digests.txt + while IFS= read -r rev; do + git -C rdm checkout --detach "$rev" + make -C rdm build + sha256sum rdm/bin/agent-system-rdm | awk -v rev="$rev" '{print rev, $1}' >> rdm/pin-build-digests.txt + done < .ci-rdm-pins + - name: Build the real agent-system binary + run: | + set -euo pipefail + source .ci-mirrors.env + make build + - name: Backend tests against real PostgreSQL and Redis (required, no silent skip) + env: + AGENT_PG_TEST_DSN: postgres://ci_agent:ci_job_local_only@127.0.0.1:5432/agent_test?sslmode=disable + AGENT_REDIS_TEST_ADDR: 127.0.0.1:6399 + run: make test-backend-pg + - name: Two-process HTTP acceptance over shared PostgreSQL (U7, required) + env: + AGENT_PG_TEST_DSN: postgres://ci_agent:ci_job_local_only@127.0.0.1:5432/agent_test?sslmode=disable + run: make test-multi-instance + - name: Real-combination lifecycle gate (make test-lifecycle, required) + env: + AGENT_PG_TEST_DSN: postgres://ci_agent:ci_job_local_only@127.0.0.1:5432/agent_test?sslmode=disable + run: | + set -euo pipefail + # 路径变量在脚本内解析(YAML env: 不做 shell 展开)。 + # 不设 SVC_RDM_ORIGIN:全轨 git 部署由 svc-realcombo 作业覆盖。 + # Historical pins resolve through prefetched local mirrors; no checkout token. + export SVC_TEST_REAL=1 SVC_TEST_PG=1 + export SVC_REAL_BIN="$PWD/bin/agent-system" + export SVC_REAL_RDM_BIN="$PWD/rdm/bin/agent-system-rdm" + export SVC_RDM_SRC_DIR="$PWD/rdm" + source .ci-mirrors.env + unset TOKEN SUBMODULE_TOKEN SVC_CI_GIT_TOKEN + make test-lifecycle + + # U3(统一部署方案):真实 Dev/RDM 制品的 svc.sh 生命周期门禁——桩套件 + # (test_svc*.py)只证明脚本逻辑;本作业证明「声明≠能力」的最后一道:真实 + # identity 领养/verify、release 切换、伴生工作台、RDM 全轨部署。缺件即失败, + # 不静默跳过(SVC_TEST_REAL=1 硬开关)。 + svc-realcombo: + runs-on: ubuntu-latest + env: + GOPROXY: https://goproxy.cn,direct + GOTOOLCHAIN: local + GOWORK: "off" + GOPRIVATE: git-ssh.u1680832.nyat.app/weichen + GONOSUMDB: git-ssh.u1680832.nyat.app/weichen + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: *trusted_acquisition_1 - name: Install Go 1.27.1 run: | set -euo pipefail @@ -626,46 +1095,41 @@ jobs: tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" ln -sfn /usr/local/go/bin/go /usr/local/bin/go ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Install boundary checker prerequisite + run: *install_boundary_prerequisite + - name: Clone Agent-System-RDM with nested pins (reviewed allowlist addition) + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: *trusted_acquisition_4 + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: *trusted_acquisition_2 - name: Install Node 22 run: | set -euo pipefail curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz" - - name: Build the real agent-system binary - run: make build - - name: Clone Agent-System-RDM with nested pins (reviewed allowlist addition) + - name: Prefetch npm packages without lifecycle scripts env: SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: *trusted_acquisition_3 + - name: Build the real agent-system binary run: | set -euo pipefail - # 凭据纪律与 Checkout 块同源:经 GIT_CONFIG_* 环境注入 URL 级 token 头, - # 不落文件/命令行;allowlist 扩项 = Agent-System-RDM 及其 pins(同一 - # 组件集合),由本 PR 评审背书。SSH pins URL 以 insteadOf 改写到受信 - # https 基址后再取。 - SERVER="$(printf '%s' "$GITHUB_SERVER_URL" | sed 's:/*$::')" - scheme="${GITHUB_SERVER_URL%%://*}" - export GIT_CONFIG_COUNT=4 - export GIT_CONFIG_KEY_0="protocol.$scheme.allow" - export GIT_CONFIG_VALUE_0="always" - export GIT_CONFIG_KEY_1="http.$SERVER/.extraheader" - export GIT_CONFIG_VALUE_1="AUTHORIZATION: token $SUBMODULE_TOKEN" - export GIT_CONFIG_KEY_2="url.$SERVER/weichen/.insteadOf" - export GIT_CONFIG_VALUE_2="ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" - export GIT_CONFIG_KEY_3="core.hooksPath" - export GIT_CONFIG_VALUE_3="/dev/null" - git clone --depth=1 "$SERVER/weichen/Agent-System-RDM.git" rdm - # 凭据环境须保持到 pins 子模块取完(insteadOf + token 头覆盖嵌套 SSH URL), - # 之后再 unset。 - git -C rdm submodule update --init --recursive - echo "RDM commit: $(git -C rdm rev-parse HEAD)" - unset GIT_CONFIG_COUNT GIT_CONFIG_KEY_0 GIT_CONFIG_VALUE_0 \ - GIT_CONFIG_KEY_1 GIT_CONFIG_VALUE_1 GIT_CONFIG_KEY_2 \ - GIT_CONFIG_VALUE_2 GIT_CONFIG_KEY_3 GIT_CONFIG_VALUE_3 - unset SUBMODULE_TOKEN - make -C rdm build + source .ci-mirrors.env + make build + - name: Build fixed RDM pins without credentials + run: | + set -euo pipefail + source .ci-mirrors.env + : > rdm/pin-build-digests.txt + while IFS= read -r rev; do + git -C rdm checkout --detach "$rev" + make -C rdm build + sha256sum rdm/bin/agent-system-rdm | awk -v rev="$rev" '{print rev, $1}' >> rdm/pin-build-digests.txt + done < .ci-rdm-pins - name: Run real-combination lifecycle gates (SQLite, U3, required) - env: - SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} run: | set -euo pipefail # 路径变量在脚本内解析(YAML env: 不做 shell 展开)。 @@ -673,7 +1137,7 @@ jobs: export SVC_REAL_BIN="$PWD/bin/agent-system" export SVC_REAL_RDM_BIN="$PWD/rdm/bin/agent-system-rdm" export SVC_RDM_ORIGIN="$PWD/rdm" - # CI 无 SSH key:把受信基址与 URL 级 token 头经环境交给套件(仅环境传递)。 - export SVC_CI_GIT_SERVER="${GITHUB_SERVER_URL%/}" - export SVC_CI_GIT_TOKEN="${SUBMODULE_TOKEN}" + # Source deployments use prefetched local mirrors without checkout secrets. + source .ci-mirrors.env + unset TOKEN SUBMODULE_TOKEN SVC_CI_GIT_TOKEN python3 -m unittest tests.test_svc_realcombo -v diff --git a/.gitignore b/.gitignore index fb2abb3d..bcedfb16 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,16 @@ runtime-backups/ # e2e.sh 运行工件(构建/种子/日志;scripts/e2e.sh 输出) .tmp/ + +# Isolated migration candidates and local component workspaces. +/.migration/ +/.workspace/ +/go.work +/go.work.sum +/.ci-mirrors/ +/.ci-mirrors.env +/.ci-rdm-pins + +# Legacy checkouts remain for explicit owner transition and metadata preservation. +/modules/ +/deps/ diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index f1c67664..00000000 --- a/.gitmodules +++ /dev/null @@ -1,36 +0,0 @@ -[submodule "modules/core"] - path = modules/core - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Core.git -[submodule "modules/backend"] - path = modules/backend - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git -[submodule "modules/frontend"] - path = modules/frontend - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git -[submodule "modules/documents"] - path = modules/documents - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Documents.git -[submodule "deps/development-guidelines"] - path = deps/development-guidelines - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Development-Guidelines.git -[submodule "deps/agent-native"] - path = deps/agent-native - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git -[submodule "deps/agent-squad"] - path = deps/agent-squad - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Squad.git -[submodule "deps/agent-intent"] - path = deps/agent-intent - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Intent.git -[submodule "deps/error-code-system"] - path = deps/error-code-system - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Error-Code-System.git -[submodule "deps/logging-system"] - path = deps/logging-system - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Logging-System.git -[submodule "modules/ui"] - path = modules/ui - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-UI.git -[submodule "deps/agent-command"] - path = deps/agent-command - url = ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Command.git diff --git a/.task/feature-dependency-workspace.md b/.task/feature-dependency-workspace.md new file mode 100644 index 00000000..4e323fd3 --- /dev/null +++ b/.task/feature-dependency-workspace.md @@ -0,0 +1,12462 @@ +# feature/dependency-workspace 任务卡 + +任务主记录:Documents `docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md` r1(候选分支 `feature/dependency-workspace-plan`,PR NOT_RUN);状态:已授权实施与自检,组合收尾中;owner:Codex(本工作区写者) + +## 基线与授权 + +- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1 +- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace(worktree);分支:feature/dependency-workspace + +- 授权与交付终点:用户 2026-10-13 要求实现已讨论的版本化依赖与按需功能仓编辑,并纳入通用/项目规范。具体方案已获本会话批准,计划细化、重构与自检连续推进;正式验收按 policy/delivery.md 保留人工节点。共享服务部署、版本发布、改写历史、修改分支保护和清理不在本次自动推进范围。 +- 交付模式:authorized-continuous(实施计划细化、U1–U7 重构与自检;正式验收与高后果边界保留) +- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入) +- 自动推进授权:用户本次回答「批准,可以进行重构」;授权范围:上轮提出的计划细化、实施与自检连续推进;授权来源:2026-10-13 当前会话;授权终点:可审实现与自检;停止条件:真实传输试点失败、无法保护现场、超出方案/共享部署/发布范围。 +- 当前阶段:实施与自检产物已获用户批准,进入阶段 7 正式验证准备;U1–U7 的实现已具备,R15 在途/后续分支保护纳入真实回归;正式验收结论仍待当前候选结果评审。 +- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位) + +## 目标与非目标 + +目标与非目标的唯一正文见 Documents 主记录 r1 第 1–2 节。保留独立仓库,Dev 按需检出并联调,正式组合采用版本依赖;覆盖实际 RDM 消费方与未来项目的显式规则采纳。本次不操作共享运行服务或业务数据。 + +## 关联方向与规划 + +- 适用状态:新方向,已核对当前项目骨架、库计划入口及 Guidelines 多仓/采纳规则;用户批准 r1 方案及重构、自检,追加 R15 在途分支保护。 +- 主记录路径/版本:Documents `docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md` r1;分支 `feature/dependency-workspace-plan`。 +- Documents 候选:commit `4a26798000c39cc59ba0c2cc6328f5c8f10dcb32`;独立工作区 `/home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan`。Documents 由 components.lock.json 显式固定;旧物理检出已保留;保留外部工作区及其 Git 管理目录,后续回收须先保存并解除依赖。 +- 对应里程碑:U1–U8;当前 U1–U7 实施收尾,U8/正式放行待后续节点。 + +## 需求分析 + +| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 | +|---|---|---|---|---|---|---| +| R1–R15 | 唯一需求表见主记录 r1 第 2 节 | 依赖方式与现行 gitlink 规则需同步调整,依据第 1/6 节 | 见实施依赖顺序 | 第 2/8 节 | U1–U7 | r1 已批准;R15 根据本次明确要求纳入 | + +## 方案与计划 + +- 方案引用:Documents 主记录 r1 第 3–6 节(命名、依赖权威、命令、传输与规范归属)。 +- 实施顺序引用:主记录 r1 第 7 节(U1–U8);逐项执行计划见 Documents 对应 -implementation-plan.md;授权已记录。 +- 测试计划引用:主记录 r1 第 2/8 节(需求验收、正常/拒绝/故障路径及诚实出口)。 + +## 阶段评审 + +| 阶段 | 对象版本 | 结论 | 评审人 | 时间 | 依据 | +|---|---|---|---|---|---| +| 需求拆解 | r1(4a7b929)+ R15 | 已批准推进 | 用户 weichen | 2026-10-13 | 本会话「批准,可以进行重构」,并要求在途/后续分支平稳过渡 | +| 需求评估 | r1(4a7b929)+ R15 | 已批准推进 | 用户 weichen | 2026-10-13 | 本会话「批准,可以进行重构」,并要求在途/后续分支平稳过渡 | +| 需求表确认 | r1(4a7b929)+ R15 | 已批准推进 | 用户 weichen | 2026-10-13 | 本会话「批准,可以进行重构」,并要求在途/后续分支平稳过渡 | +| 方案设计 | r1(4a7b929)+ R15 | 已批准推进 | 用户 weichen | 2026-10-13 | 本会话「批准,可以进行重构」,并要求在途/后续分支平稳过渡 | +| 实施计划 | U1–U8(30bc86a) | 已授权连续细化/实施 | 用户 weichen | 2026-10-13 | 本会话批准上轮具体方案与实施顺序,覆盖重构、自检 | +| 实施与自检 | 0676f30c7bd0eaffa6db4ba6b14beef2978e2e02 及完整交接 | 通过 | 用户 weichen | 2026-10-14(Asia/Shanghai) | 本会话在实施与自检交接后回复「批准」;批准不代替阶段 7 当前对象正式验收与 GATE CI | +| 正式测试与验收 | 待定 | 未评审 | — | — | — | +| 代码 Review | 待定 | 未评审 | — | — | — | +| 合入 | 待定 | 未评审 | — | — | — | +| 合入核验与收口 | 待定 | 未评审 | — | — | — | + +## 探索试验与迭代 + +| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 批准依据 | 结果 | 变更影响 | 需重审补测 | +|---|---|---|---|---|---|---|---| +| U1 | Go 真实版本下载可替代本地 replace | 两个基础库与隔离消费方 | 来源/传输/子模块不可获取则停止推广 | 已批准 r1 | SELF:真实远端 Go 版本调用;原始收据如下 | 模块命名和传输 | 通过后判断 U3 推广 | + +## 同步记录 + +| 节点 | sync_base_sha | tested_head_sha | checked_at | +|---|---|---|---| +| 启动 | ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1 | ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1 | 2026-10-13T08:53:28Z | + +## 证据(Evidence) + + +| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) | +|---|---|---|---|---|---| + +## 结果与验证(完成后填写) + +- 结果:已实现版本依赖、按需普通 Git 工作区、显式过渡和固定构建的候选;移除已替代 gitlinks 时保留物理目录与 Git 管理数据。源码归属保持独立。 +- 验证:SELF 远端消费、Native 编辑/解除、Go/npm 独立验证及真实仓治理回归收据如下。固定 0d9f44 的完整组合自检通过;98d 普通 clone/Native 联调/构建、真实历史 ee9 候选的 103 gitlinks 隔离物化和旧构建、RDM 固定产品及临时数据库烟测均已实际执行。d76ec5d 补强组合器全部获取先于候选执行,23 个真实夹具通过;冻结后继续精确对象的组合/构建重放。早期独立 Review 的三项 P1 已按固定补充提交闭合;这些结论不代替最终候选 Review、正式验收或平台 CI。 +- 影响与剩余项:完成精确候选组合检查、在途保留和新 clone 重放,再提交可审实现;本次不操作共享服务、数据、发布或他人工作区。 + +## 规划进展与下一步 + +- 当前增量:U1–U7,实际产出与失败/通过证据由下方原始收据记录;不将分工报告等同能力证明。 +- 下一步:冻结当前 Dev/组件候选并完成精确对象重放,产出供人工评审的实施与自检交接。之后推荐在本任务推进阶段 7 正式验收,再按当前 HEAD 的独立 Review/GATE CI 和 PR 合入流程执行 U7/U8;不重复启动同范围任务。前置条件为人工确认当前增量、固定组合可获取且在途现场保存;验收条件为 R1–R15 映射与缺项如实记录,平台准入有效。本建议不扩大本次授权。 +- 通用规则候选:Development-Guidelines draft.12,固定内容来源由 components.lock.json 定义,其他项目须独立采纳。 +- 在途保护:仅本任务工作区与独立 .migration 克隆可写;原共享检出、其他任务及外部 worktree 保持原现场。 + +## 合入与清理 + +- Review 记录:提前 ce-code-review 已完成,固定 base=57bcb17、head=98d08347;报告 /tmp/compound-engineering-1000/ce-code-review/20261013-175258-5eab89ea。三项 P1 的独立补充闭合对象为 88b918/0d9f44/f2b7a9。新组合器的有界补充复审进行中;不声明整个最终 HEAD 已通过,外部 provider/Guidelines 和平台 CI 不在该提前审阅范围。跨模型 peer 超时且无可用产物,独立覆盖降级。 +- 冲突记录:98d08347 纳入当前 main=57bcb17 的任务恢复/合入调度/IAM 文档等在途成果;未撤销上游变更,既有独立工作区保持现场。最终固定前继续以 evidence 记录 task-sync。 +- CI 记录:NOT_RUN(当前 HEAD 完整 SHA、全部必需检查、运行链接、执行身份及 GATE 结果) +- 合入记录:NOT_RUN(交付授权范围、PR、被核验 HEAD、合入 SHA、目标分支及内容核验) +- 清理记录:NOT_RUN(授权依据、写者退出确认、worktree/分支/任务卡处置) + +## 代码整理(SELF,自检阶段) + +ce-simplify-code 的 reuse/quality/efficiency 三个独立只读扫描完成。删除未用内部参数与两处未用 import;digest 复用导致独立工具 fixture 缺少 workspace 包,实际失败后已撤回该整理;不合并有不同信任边界的 CI 校验,不改变 JSON 异常优先级,不引入未经测量的 clone/cache 行为。失败与修复后的实际组合器 fixture 重放由 evidence 记录。此记录不代替正式代码 Review、独立重放或平台准入。 + +## 固定候选后的证据入口 + +依照 policy/governance.md「候选固定前后」,最终重放使用 /tmp 的唯一源码外收据;不为记录输出反复推进候选 HEAD。最终结果、完整候选 SHA、组件列表、R1–R15 映射和未验证项保存在 `/tmp/dependency-workspace-handoff-20261013-01a1345f.md`,正式验收时核对实际文件及其原始收据。下方既有 JSON 是已记录的历史 SELF,不冒充新对象的通过结果。当前不运行 task-finish,不删除旧目录、Git 管理数据、其他分支或任何共享服务数据。 + +## 2026-10-14 正式验证准备与反馈 + +- 用户批准阶段 6 的 0676 候选及交接后,原登记任务以本次唯一 precheck 收据运行 task-resume;SELF:`/tmp/dependency-formal-resume-precheck-20261014-01a1345f.json`。实际 task-sync 的 base 为 add097,记录对象为 222687f,changed=0;原始收据 `/tmp/dependency-formal-sync-20261014-01a1345f.json`。未启用队列自动模式,继续既有同步节点。 +- Root 独立补充有效性核验:222687f 固定归档的 101 项最小重放通过,零失败/跳过;审阅者、命令、原始日志及 23 路径覆盖见 `/tmp/dependency-final-validity-n9q5aytw/receipt.json`。此结论受固定对象限制,后续 npm 修复需再复审。 +- Go provider 独立 REPLAY:原 9 仓/15 模块的 test、vet、离线模块图通过;562 个 Go 变更文件为 import 前缀迁移,第三方声明版本未变化。完整固定对象/命令/日志见 `/tmp/dependency-go-provider-review-20261014-01a1345f/report.json`,不扩大为平台 GATE 或产品验收。 +- fresh fetch 发现 RDM main 新增 38 个提交;在本任务普通克隆中合并,保留已合入 IAM、成员、投影、回归与任务归档。SELF 核对合并后的全部 230 个 Go 文件等于 6fcb256 的业务内容,仅规范化 import。独立 REPLAY 对固定 48358df 的完整 test、vet、离线模块图通过,432 个顶层测试 PASS、5 个环境用例 SKIP;报告 `/tmp/dependency-go-provider-review-20261014-01a1345f/new-rdm-48358df/report.json`。未修改其他任务工作区。 +- 前端独立审阅发现两项须整改:冷 npm ci 仅缓存 tarball,离线 consumer 测试缺 registry 元数据(npm10/11 均 RED);UI 无锁 consumer 重解析范围依赖,漂移到 DOMPurify 3.4.17 而正式 lock 为 3.4.16。报告 `/tmp/frontend-rules-replay-20261014-01a1345f-review/review.json`。修复保留离线测试,获取阶段补齐锁定包元数据,临时 consumer 固定来自正式 lock 的版本;不得以加热全局缓存或继续取漂移包替代修复。修复、组合锁集成、固定重放和复审进行中。 +- 已建立 10 个组件/规范/过程仓 WIP PR;真实链接清单 `/tmp/dependency-pr-links-20261014-01a1345f.json`。平台 API 核对 8 个功能仓精确 HEAD 的运行链接、执行账号及 runner/步骤,CI success;原始平台元数据 `/tmp/dependency-platform-ci-20261014-013118-01a1345f.json`,捕获命令的 SELF 收据 `/tmp/dependency-platform-ci-first-20261014-01a1345f.json`。这些运行是相应功能仓的 GATE,不替代尚未建立的最终 Dev/Frontend/UI/RDM 候选 GATE。Gitea URL 不被本应用附件接口接受,实际 PR 链接保留,不伪造 GitHub 地址。 +- 阶段 7 当前候选人工验收尚未通过;WIP PR 未合入。发布、共享部署、业务数据、历史改写、平台保护和回收仍未执行。修复固定后再提交当前组合的正式验证结果与缺项,按 policy/delivery.md 保留人工出口。 + +冷缓存整改已集成到固定代码提交 01b7799:UI=63d289e、Frontend=5467517;Frontend 的 249 个 registry lock 项与原对象完全相同,仅采用修复后的 UI 完整 Git SHA。Root 由两个 provider 的 git show 记录 CI fixture/provenance,不依赖 ignored 迁移源。SELF 主控实际重放 57 个 composition/CI 凭据用例通过,原始收据 `/tmp/dependency-cold-npm-host-targeted-20261014-01a1345f.json`;作者 npm10/npm11 实际隔离冷缓存正反验证与全部文件摘要见 `/tmp/cold-npm-repair-return-20261014.json`。独立整改复审、Node22 平台 GATE 及新固定组合重放仍待结果;不从这些 SELF 推断通过。后续精确对象与平台结果写入源码外阶段 7 报告,不为收据反复推进已固定 HEAD。 + +平台反馈形成新尝试:94bb648 的 SELF 全组合 test(467 用例、19 个显式跳过)、build、普通 clone/Native 联调及 RDM 产品/临时数据烟测通过;原始收据前缀为 `/tmp/dependency-formal-*20261014-01a1345f.json`。独立冷 npm 补充复审闭合 P1/P2,报告 `/tmp/frontend-rules-fix-replay-20261014-01a1345f/closed-review.json`;Root 57 项独立补充通过,报告 `/tmp/dependency-cold-npm-review-7so6nnso/receipt.json`。这些结论绑定 94bb,不冒充后续新 HEAD。 + +实际平台 run 3029/3030 的 Dev 与 run 3033 的 RDM 拒绝 runner 注入的 HTTP 镜像别名;run 3032 的 Frontend 缺跨仓私有依赖凭据。脱敏平台日志保存于 `/tmp/dependency-ci-<仓>-job-<编号>-sanitized.log`。63ba0d4 在保留普通 HTTP 禁止与凭据剥离的条件下,仅接受与注入 server/owner/repository 匹配的本地镜像别名;SELF 真实 Git clone RED→GREEN 与 31 项 transport/composition 重放见 `/tmp/dependency-ci-http-mirror-{red,green}-20261014-01a1345f.json`。 + +用户另行明确批准「创建并配置独立只读凭据」(2026-10-14 Asia/Shanghai):允许独立 `read:repository` token 读取账号可访问的仓库,并仅配置 Frontend Actions 的 `SUBMODULE_TOKEN`。不复用管理 API token、不新增写权限。token 管理 API 要求 BasicAuth,实际通过已安装 Gitea 官方 CLI 的 OS git 用户创建,再经受信 API 配置;没有使用/询问账号密码,未在仓库、日志、聊天或本地文件保存凭据值。仅用途、scope、可用状态保存在 `/tmp/dependency-frontend-ci-read-credential-record-20261014-01a1345f.json`,完整 SELF 收据为 `/tmp/dependency-frontend-ci-read-credential-cli-20261014-01a1345f.json`。后续重跑必须核验实际私有依赖读取成功,不能用 secret 名称存在推断 CI 已通过。正式验收及所有 PR 合入仍待当前候选结果和阶段结论,发布/部署/回收未授权也未执行。 + +后续平台反馈已定位并整改:Frontend 精确 5467517 的 run3032 新尝试和 UI 精确63d289e 的 run3031 实际 CI success;最终 GATE 链接与身份在源码外平台结果中核验。Dev run3036/RDM run3037 后续失败分别为缺 rg、固定检出被测试副产物污染、隔离 RDM 源缺可克隆 main head、夹具继承 acquisition 的 hooksPath。Root 代码 adb6cbc 保留现场守卫和全部原测试要求,仅将 versioned Go 检查放入一次性提交克隆,在三个 CI job 安装/核验 rg 并令缺工具 fail closed,隔离历史 RDM 仓的 main 指向明确 pin。SELF 实际 Go→Python 副产物 RED、连续检查/失败保留 GREEN 及原四项钩子夹具注入环境 RED→GREEN,见 `/tmp/dependency-u5-{components,hooks}-{red,green}-20261014.json` 和 `/tmp/dependency-u5-actual-backend-byproducts-20261014.json`;主控 11+4 项重放收据为 `/tmp/dependency-ci-isolation-host-green-20261014-01a1345f.json`,33 项 CI/凭据及真实 clone 重放为 `/tmp/dependency-lifecycle-prerequisites-green-20261014-01a1345f.json`。不放宽 dirty/ignored、PG/Redis 前提、认证隔离或 lifecycle 断言。固定后继续精确平台 GATE 和独立受影响复审,当前正式人工验收仍未评审。 + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T08:52:02.664115+00:00", + "command": "make precheck", + "command_sha256": "8fd03cdee8adbb8562846a1a114cc0623779a8654412cd20aac9b495e7eb0450", + "cwd": "/home/weichen/projects/Agent-System-Dev", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "branch": "main", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (remotes/origin/HEAD)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (remotes/origin/HEAD)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (remotes/origin/HEAD)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (heads/main)\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 (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (remotes/origin/HEAD)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (remotes/origin/HEAD)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (remotes/origin/HEAD)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (remotes/origin/HEAD)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (remotes/origin/HEAD)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (remotes/origin/HEAD)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (remotes/origin/HEAD)\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 (heads/main)\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 (heads/main)\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 (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (remotes/origin/HEAD)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after": { + "head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "branch": "main", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": " 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 deps/agent-command (remotes/origin/HEAD)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 deps/agent-command/deps/development-guidelines (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-intent (remotes/origin/HEAD)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-intent/deps/error-code-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-intent/deps/logging-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-native (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-native/deps/agent-intent (remotes/origin/HEAD)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-native/deps/agent-intent/deps/error-code-system (heads/main)\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 (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-native/deps/logging-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e deps/agent-squad (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-intent (remotes/origin/HEAD)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/agent-squad/deps/agent-intent/deps/error-code-system (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 deps/agent-squad/deps/agent-native (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c deps/agent-squad/deps/agent-native/deps/agent-intent (remotes/origin/HEAD)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/agent-squad/deps/logging-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n af199eeaa23c5b39e08b4649f2513d7572dc5274 deps/development-guidelines (remotes/origin/HEAD)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 deps/error-code-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 deps/logging-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 deps/logging-system/deps/development-guidelines (26b562d)\n cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\n 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 modules/backend/deps/agent-command (remotes/origin/HEAD)\n ed2af3e6048928b1fd0ba6da1f9d0c1bafec82d4 modules/backend/deps/agent-command/deps/development-guidelines (heads/main)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-intent (remotes/origin/HEAD)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/development-guidelines (26b562d)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/agent-intent/deps/error-code-system (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-intent/deps/logging-system/deps/development-guidelines (26b562d)\n c348441691e8bdab784a03aa9be64d53dacff341 modules/backend/deps/agent-native (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-native/deps/agent-intent (remotes/origin/HEAD)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-native/deps/logging-system/deps/development-guidelines (26b562d)\n 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e modules/backend/deps/agent-squad (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-intent (remotes/origin/HEAD)\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 (heads/main)\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 (heads/main)\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 (remotes/origin/HEAD)\n 343b1e6d9a5b58e47bf7e594826221036ae8175c modules/backend/deps/agent-squad/deps/agent-native/deps/agent-intent (remotes/origin/HEAD)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\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 (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/agent-squad/deps/logging-system/deps/development-guidelines (26b562d)\n 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\n a3ee67bba269e1276c14e22c026171ecf2cf6190 modules/backend/deps/error-code-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/error-code-system/deps/development-guidelines (26b562d)\n 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 modules/backend/deps/logging-system (heads/main)\n 26b562d2e34fbc560711296a309c91c74ffc55b1 modules/backend/deps/logging-system/deps/development-guidelines (26b562d)\n 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev'\n[repo] branch=main head=ff3fb4a7eb\n[remote] origin/main=ff3fb4a7eb ahead=0 behind=0\n[tree] clean submodules_drift=0 uninit=0\n[worktrees] linked=14\n[recycle] merged un-recycled branches: feature/card-close-20261012-054727Z feature/card-close-20261012-055452Z feature/card-close-20261012-062835Z feature/card-close-20261012-065217Z feature/card-close-20261012-095620Z feature/card-close-20261012-130704Z feature/card-close-20261012-133217Z feature/card-close-20261012-140049Z feature/card-close-20261012-150228Z feature/card-close-20261012-164920Z feature/card-close-20261012-static-pidcheck feature/card-close-20261013-021816Z feature/card-close-20261013-052211Z feature/card-close-20261013-065538Z feature/card-close-svc-d3-real-scenarios feature/card-close-u7-release-roadmap feature/card-close-u7-release-roadmap-record feature/d1-closeout-evidence feature/svc-d1-identity-flow feature/svc-d3-real-scenarios feature/svc-db-config-recover feature/svc-login-recovery-followup feature/sync-dhf-templates fix/genui-children-repair\n[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)\n[facts] policy/facts.md 4 条事实均在有效期内\n[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md\n[R0] ff3fb4a7eb(完整:ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1)\n[worktree] before-sync: recursive component checks passed\n[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev'\n", + "output_sha256": "7bcf2cc1903113a60eee3da9eef6d16cc317f6acbfb6cbf177bf4b9c8d8c9786", + "receipt_sha256": "08abcfcbfcd22a88af26f72b01cd91fd189480dc9e4385881c7dcbe163aba927" +} +``` +| 同步前验收 | ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1 | 0bd4bb3e24ccb36ac1a9d36380b0ccd852cd21f0 | 2026-10-13T08:55:20Z | + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T08:54:50.378610+00:00", + "command": "make task-sync", + "command_sha256": "6c0e3c8fbb3f43d01548180c9d9c147ce1c1c32ba1e78d3383961de470fe0d52", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "0bd4bb3e24ccb36ac1a9d36380b0ccd852cd21f0", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after": { + "head": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n[worktree] before-sync: recursive component checks passed\nAlready up to date.\n[worktree] before-update: recursive component checks passed\n[worktree] materialize: recursive component checks passed\n[worktree] after-sync: recursive component checks passed\n[synced] sync_base=ff3fb4a7eb tested_head=0bd4bb3e24 checked_at=2026-10-13T08:55:20Z\n[next] 跑正式验收(make test 等),证据写入任务卡\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "454e8cc26c77f8f93d827f668e8e524f7c622fe978db93b44c06ca038803e98a", + "receipt_sha256": "f70348ab7d9e178cdc3ba1a1fdd6d7ec1075bf6b35dee76e33d14035b67bc0d8" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T08:56:45.074985+00:00", + "command": "git rev-parse HEAD origin/main; git ls-tree origin/main modules/core modules/backend modules/frontend modules/ui modules/documents deps/agent-native deps/agent-intent deps/agent-squad deps/agent-command deps/logging-system deps/error-code-system deps/development-guidelines; git -C modules/documents rev-parse HEAD origin/main; git -C modules/documents status --short; git -C /home/weichen/projects/Agent-System-RDM rev-parse HEAD", + "command_sha256": "f5c7759f2a24329949cd1fdce0a46d742f8b71c91008a85b6e49d4498a011d9e", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n M modules/documents\n", + "tracked_diff_sha256": "b582eaac6586178b0a52a4bbe13931535063235df3f1e5a2340534408313dfb3", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n+5a06acf7cded07797ec4ebfea42c89331359b0bb modules/documents (heads/feature/dependency-workspace-plan)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after": { + "head": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n M modules/documents\n", + "tracked_diff_sha256": "b582eaac6586178b0a52a4bbe13931535063235df3f1e5a2340534408313dfb3", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n+5a06acf7cded07797ec4ebfea42c89331359b0bb modules/documents (heads/feature/dependency-workspace-plan)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2\nff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1\n160000 commit 4f583ca3eeeb07a56a714c5086de84dcd6ad2980\tdeps/agent-command\n160000 commit 343b1e6d9a5b58e47bf7e594826221036ae8175c\tdeps/agent-intent\n160000 commit c348441691e8bdab784a03aa9be64d53dacff341\tdeps/agent-native\n160000 commit 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e\tdeps/agent-squad\n160000 commit af199eeaa23c5b39e08b4649f2513d7572dc5274\tdeps/development-guidelines\n160000 commit a3ee67bba269e1276c14e22c026171ecf2cf6190\tdeps/error-code-system\n160000 commit 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7\tdeps/logging-system\n160000 commit cfb8308895d0b94765ba10ed0e5b9bf38b439414\tmodules/backend\n160000 commit 0f94e4b062bf8736af3953821fe5d0f67d87ea8e\tmodules/core\n160000 commit a73c84b5bee8ae569c4689daa4ead19c9f0a2b65\tmodules/documents\n160000 commit 44b964682c89535342c283aa73492c758b16c732\tmodules/frontend\n160000 commit 0da2e3acd6c8ae8957825b64ddb54b250c0979c0\tmodules/ui\n5a06acf7cded07797ec4ebfea42c89331359b0bb\n5a06acf7cded07797ec4ebfea42c89331359b0bb\nb1fe932883d2a55f0373bb0930950da3d12d2b5e\n", + "output_sha256": "7eaf1ccff1ab384f66069517ed62bcc9a7cf537b0bbc8468398c458a359328a6", + "receipt_sha256": "0f7e111ab8853cc668a764fe43c2f3d416663d898db0e1d9494f37dccb3cdceb" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T09:07:44.926679+00:00", + "command": "cat /tmp/agent-system-dependency-doc-check-01a1345f.py && python3 /tmp/agent-system-dependency-doc-check-01a1345f.py && git diff --check && git -C modules/documents diff --check", + "command_sha256": "2ed4c1dd6a15bb605da88bcca119d06e20feb61031c735ada29a03ed558c0310", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n M PROJECT.md\n M modules/documents\n", + "tracked_diff_sha256": "b97309bc57c453d295bdae37ff315efc3734e2a296434399ed605a4e7473252b", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n+5a06acf7cded07797ec4ebfea42c89331359b0bb modules/documents (heads/feature/dependency-workspace-plan)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after": { + "head": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n M PROJECT.md\n M modules/documents\n", + "tracked_diff_sha256": "b97309bc57c453d295bdae37ff315efc3734e2a296434399ed605a4e7473252b", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n+5a06acf7cded07797ec4ebfea42c89331359b0bb modules/documents (heads/feature/dependency-workspace-plan)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "import hashlib\nfrom pathlib import Path\nimport re\n\nroot = Path('/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace')\nproposal = root / 'modules/documents/docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md'\nindex = proposal.parent / 'INDEX.md'\nentry = root / 'PROJECT.md'\ncard = root / '.task/feature-dependency-workspace.md'\nbody = proposal.read_text()\nrequirements = re.findall(r'^\\| (R\\d+) \\|', body, flags=re.M)\nunits = re.findall(r'^\\| (U\\d+) ', body, flags=re.M)\nassert requirements == [f'R{i}' for i in range(1, 15)], requirements\nassert units == [f'U{i}' for i in range(1, 9)], units\nassert '状态:proposed' in body\nassert '当前尚未实现' in body\nassert 'U1–U8 实施、迁移测试、PR、发布与部署均 NOT_RUN' in body\nassert proposal.name in index.read_text()\nassert proposal.name in entry.read_text()\nassert proposal.name in card.read_text()\nassert '尚未推进该 Documents gitlink' in entry.read_text()\nchecked = 0\nfor document in (proposal, index):\n for target in re.findall(r'\\[[^\\]]+\\]\\(([^)]+)\\)', document.read_text()):\n if re.match(r'^[a-z][a-z0-9+.-]*:', target, re.I) or target.startswith('#'):\n continue\n assert (document.parent / target.split('#', 1)[0]).exists(), (document, target)\n checked += 1\nassert (root / '.task/feature-dependency-workspace.md').exists()\nprint(f'PASS: R1-R14 and U1-U8 are unique and ordered; {checked} relative links resolve')\nfor document in (proposal, index, entry):\n digest = hashlib.sha256(document.read_bytes()).hexdigest()\n print(f'SELF file_sha256={digest} path={document.relative_to(root)}')\nPASS: R1-R14 and U1-U8 are unique and ordered; 63 relative links resolve\nSELF file_sha256=650c54538cb49986a7116e6ed4f98ef0b3b7d26fab932f55a95eeec76a91f0d6 path=modules/documents/docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md\nSELF file_sha256=4621c4581f91f182cf4589bd8f1055a9d81f7afafd52c40c425037d253afa3a2 path=modules/documents/docs/proposals/INDEX.md\nSELF file_sha256=f745a35aff78a3ee53486be7436bb147576939a63bb1f66315e4ad98a104e82e path=PROJECT.md\n", + "output_sha256": "6bcf9d03255e5267b4637871420b380766926a46c57c4b3edb3df329e628fbca", + "receipt_sha256": "59108676d0cf8b73adae38c16a69a0726a1a7344da99821bee6c6f04f42d85cc" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T09:10:48.150271+00:00", + "command": "git -C modules/documents switch --detach a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 && git -C modules/documents worktree add /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan feature/dependency-workspace-plan", + "command_sha256": "eee54c487bd86d618e52c38c2c1d9940ffa2b6577dea1fe2992b816215fc3e6c", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n M PROJECT.md\n M modules/documents\n", + "tracked_diff_sha256": "5d55a22f470ad76c755612a03fa90a5496e5dec9da969604bfc57a7167330e94", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n+4a7b9293e9d74804833f98cebd52e235c9375d3c modules/documents (heads/feature/dependency-workspace-plan)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after": { + "head": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n M PROJECT.md\n", + "tracked_diff_sha256": "668a1af80026945ab5cafe7fcfcee18478a850ab462002a81aaa47a3f2984ae4", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "HEAD is now at a73c84b Add RDM settings, members, duties and permissions increment plan r1\nPreparing worktree (checking out 'feature/dependency-workspace-plan')\nHEAD is now at 4a7b929 Describe versioned dependencies and editable component workspaces\n", + "output_sha256": "0e4beba0dfab78dffa3491072bef05facf07840c473a8ebdbf4e0a6871e23563", + "receipt_sha256": "b3b0d09411eafa3ba6e31bb793003a1103f43ed4c5f78722835cd13d81cd33da" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T09:11:13.350035+00:00", + "command": "make task-sync", + "command_sha256": "6c0e3c8fbb3f43d01548180c9d9c147ce1c1c32ba1e78d3383961de470fe0d52", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n M PROJECT.md\n", + "tracked_diff_sha256": "71356e69d0f4ad5fe3d2bde1307181b70f6f2e04d5203eb3bbb609feb4cc0d1e", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after": { + "head": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n M PROJECT.md\n", + "tracked_diff_sha256": "71356e69d0f4ad5fe3d2bde1307181b70f6f2e04d5203eb3bbb609feb4cc0d1e", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after_error": null, + "exit_code": 2, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\nERROR: unsaved, untracked files in /home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace; preserve them before continuing\nmake[1]: *** [Makefile:40: task-sync] Error 1\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "aff3b05dc227d67b9c1d9e51d759f7bdd4454d1d841c1b6e9c7d54fc06491d66", + "receipt_sha256": "2236684086f55fcbdd380b166443fdd8b77e47c67ece3298db159087f2be1d97" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T09:11:50.075449+00:00", + "command": "git -C /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan fetch origin refs/heads/main:refs/remotes/origin/main && git -C /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan merge --no-edit origin/main && cat /tmp/agent-system-dependency-doc-check-01a1345f.py && python3 /tmp/agent-system-dependency-doc-check-01a1345f.py && git diff --check && git -C /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan diff --check && git -C /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan rev-parse HEAD origin/main", + "command_sha256": "96731ff3550f627891a2d0b3cec8bc8a7e0012b155f4b074e4736fa1617d27ea", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n M PROJECT.md\n", + "tracked_diff_sha256": "bd31d590d79bca56e89304d110346309a6b2d9ba0275b95c6b503229defe1dee", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after": { + "head": "14c9e9c903e97eba54b3a6556152c5b5e962c6e2", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n M PROJECT.md\n", + "tracked_diff_sha256": "bd31d590d79bca56e89304d110346309a6b2d9ba0275b95c6b503229defe1dee", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "Already up to date.\nimport hashlib\nfrom pathlib import Path\nimport re\n\nroot = Path('/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace')\nproposal = Path('/home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md')\nindex = proposal.parent / 'INDEX.md'\nentry = root / 'PROJECT.md'\ncard = root / '.task/feature-dependency-workspace.md'\nbody = proposal.read_text()\nrequirements = re.findall(r'^\\| (R\\d+) \\|', body, flags=re.M)\nunits = re.findall(r'^\\| (U\\d+) ', body, flags=re.M)\nassert requirements == [f'R{i}' for i in range(1, 15)], requirements\nassert units == [f'U{i}' for i in range(1, 9)], units\nassert '状态:proposed' in body\nassert '当前尚未实现' in body\nassert 'U1–U8 实施、迁移测试、PR、发布与部署均 NOT_RUN' in body\nassert proposal.name in index.read_text()\nassert proposal.name in entry.read_text()\nassert proposal.name in card.read_text()\nassert '尚未推进该 Documents gitlink' in entry.read_text()\nchecked = 0\nfor document in (proposal, index):\n for target in re.findall(r'\\[[^\\]]+\\]\\(([^)]+)\\)', document.read_text()):\n if re.match(r'^[a-z][a-z0-9+.-]*:', target, re.I) or target.startswith('#'):\n continue\n assert (document.parent / target.split('#', 1)[0]).exists(), (document, target)\n checked += 1\nassert (root / '.task/feature-dependency-workspace.md').exists()\nprint(f'PASS: R1-R14 and U1-U8 are unique and ordered; {checked} relative links resolve')\nfor document in (proposal, index, entry):\n digest = hashlib.sha256(document.read_bytes()).hexdigest()\n print(f'SELF file_sha256={digest} path={document}')\nPASS: R1-R14 and U1-U8 are unique and ordered; 63 relative links resolve\nSELF file_sha256=650c54538cb49986a7116e6ed4f98ef0b3b7d26fab932f55a95eeec76a91f0d6 path=/home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md\nSELF file_sha256=4621c4581f91f182cf4589bd8f1055a9d81f7afafd52c40c425037d253afa3a2 path=/home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/INDEX.md\nSELF file_sha256=f745a35aff78a3ee53486be7436bb147576939a63bb1f66315e4ad98a104e82e path=/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/PROJECT.md\n4a7b9293e9d74804833f98cebd52e235c9375d3c\n5a06acf7cded07797ec4ebfea42c89331359b0bb\n", + "output_sha256": "082c746c1195d69501b43eb6acc54313b4ccf71ae97179251339d951e9440616", + "receipt_sha256": "5a5798878d64e0c92d0406610abc842c6ea429b78bf8802277eb4ef3b8cd17e8" +} +``` +| 同步前验收 | ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1 | 09a8ae69482de5de2f7ec678f4ddce2ccca4a182 | 2026-10-13T09:13:21Z | + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T09:12:54.771649+00:00", + "command": "make task-sync", + "command_sha256": "6c0e3c8fbb3f43d01548180c9d9c147ce1c1c32ba1e78d3383961de470fe0d52", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "09a8ae69482de5de2f7ec678f4ddce2ccca4a182", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after": { + "head": "dd9e4420bdb3fce6437961c9e18186d20fdcd753", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n[worktree] before-sync: recursive component checks passed\nAlready up to date.\n[worktree] before-update: recursive component checks passed\n[worktree] materialize: recursive component checks passed\n[worktree] after-sync: recursive component checks passed\n[evidence] WARN JSON receipt line 98: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 137: recorded HEAD predates non-card changes ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 175: unverified: recorded object includes uncommitted non-card changes ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 213: unverified: recorded object includes uncommitted non-card changes ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 251: unverified: recorded object includes uncommitted non-card changes ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 289: unverified: recorded object includes uncommitted non-card changes ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 327: unverified: recorded object includes uncommitted non-card changes ——关键检查须重跑并以 make evidence 重新写入\n[synced] sync_base=ff3fb4a7eb tested_head=09a8ae6948 checked_at=2026-10-13T09:13:21Z\n[next] 跑正式验收(make test 等),证据写入任务卡\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "7cb22d16bfa898a1c25f63a800f9e2cc5e46eeeded9d9a836fc39bf683f0be6b", + "receipt_sha256": "4d36354ad54a2215bbbd8db21d8fa6a2c89ba91f8db2190d61d20cc3c715793a" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T09:13:52.562225+00:00", + "command": "cat /tmp/agent-system-dependency-doc-check-01a1345f.py && python3 /tmp/agent-system-dependency-doc-check-01a1345f.py && git diff --check && git -C /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan diff --check && git -C /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan rev-parse HEAD && git -C /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan status --short && git diff origin/main HEAD -- .gitmodules modules deps", + "command_sha256": "ba4a2660de282aab274d334af09901830dd926a5a8c9069f92c91106ed4beccb", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "dd9e4420bdb3fce6437961c9e18186d20fdcd753", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "4340187dc976e4d230b47d5292d2ea5848ecdc8b7ab1069958362919cc88f357", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after": { + "head": "dd9e4420bdb3fce6437961c9e18186d20fdcd753", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1", + "status": " M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "4340187dc976e4d230b47d5292d2ea5848ecdc8b7ab1069958362919cc88f357", + "untracked": {}, + "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 cfb8308895d0b94765ba10ed0e5b9bf38b439414 modules/backend (v0.3.0-153-gcfb8308)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/backend/deps/agent-system-core (v0.3.0-14-g0f94e4b)\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 0f94e4b062bf8736af3953821fe5d0f67d87ea8e modules/core (v0.3.0-14-g0f94e4b)\n a73c84b5bee8ae569c4689daa4ead19c9f0a2b65 modules/documents (remotes/origin/feature/rdm-increment-settings-duties)\n 44b964682c89535342c283aa73492c758b16c732 modules/frontend (v0.3.0-79-g44b9646)\n 0da2e3acd6c8ae8957825b64ddb54b250c0979c0 modules/ui (v0.3.0-29-g0da2e3a)\n" + }, + "after_error": null, + "exit_code": 0, + "output": "import hashlib\nfrom pathlib import Path\nimport re\n\nroot = Path('/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace')\nproposal = Path('/home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md')\nindex = proposal.parent / 'INDEX.md'\nentry = root / 'PROJECT.md'\ncard = root / '.task/feature-dependency-workspace.md'\nbody = proposal.read_text()\nrequirements = re.findall(r'^\\| (R\\d+) \\|', body, flags=re.M)\nunits = re.findall(r'^\\| (U\\d+) ', body, flags=re.M)\nassert requirements == [f'R{i}' for i in range(1, 15)], requirements\nassert units == [f'U{i}' for i in range(1, 9)], units\nassert '状态:proposed' in body\nassert '当前尚未实现' in body\nassert 'U1–U8 实施、迁移测试、PR、发布与部署均 NOT_RUN' in body\nassert proposal.name in index.read_text()\nassert proposal.name in entry.read_text()\nassert proposal.name in card.read_text()\nassert '尚未推进该 Documents gitlink' in entry.read_text()\nchecked = 0\nfor document in (proposal, index):\n for target in re.findall(r'\\[[^\\]]+\\]\\(([^)]+)\\)', document.read_text()):\n if re.match(r'^[a-z][a-z0-9+.-]*:', target, re.I) or target.startswith('#'):\n continue\n assert (document.parent / target.split('#', 1)[0]).exists(), (document, target)\n checked += 1\nassert (root / '.task/feature-dependency-workspace.md').exists()\nprint(f'PASS: R1-R14 and U1-U8 are unique and ordered; {checked} relative links resolve')\nfor document in (proposal, index, entry):\n digest = hashlib.sha256(document.read_bytes()).hexdigest()\n print(f'SELF file_sha256={digest} path={document}')\nPASS: R1-R14 and U1-U8 are unique and ordered; 63 relative links resolve\nSELF file_sha256=650c54538cb49986a7116e6ed4f98ef0b3b7d26fab932f55a95eeec76a91f0d6 path=/home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md\nSELF file_sha256=4621c4581f91f182cf4589bd8f1055a9d81f7afafd52c40c425037d253afa3a2 path=/home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/INDEX.md\nSELF file_sha256=f745a35aff78a3ee53486be7436bb147576939a63bb1f66315e4ad98a104e82e path=/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/PROJECT.md\n4a7b9293e9d74804833f98cebd52e235c9375d3c\n", + "output_sha256": "1a2b8f06070c13b12d32836889d0f8573a6ac0435d267beac278d14e4003bb56", + "receipt_sha256": "88e3cc35deb41531c74cc287cc62bd3238a6bb2e47a44bcce892ef25801551d4" +} +``` +| 同步前验收 | ee9b437b22b49f96e1bc65f79417b22e8e82a37c | 4af43c5846e862e45671a51644b4646ea102c529 | 2026-10-13T14:47:23Z | + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T14:47:39.709262+00:00", + "command": "make precheck", + "command_sha256": "8fd03cdee8adbb8562846a1a114cc0623779a8654412cd20aac9b495e7eb0450", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ee9b437b22b49f96e1bc65f79417b22e8e82a37c", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "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": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ee9b437b22b49f96e1bc65f79417b22e8e82a37c", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "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": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n[repo] branch=feature/dependency-workspace head=e0982c8428\n[remote] origin/main=ee9b437b22 ahead=7 behind=0\n[tree] clean submodules_drift=0 uninit=0\n[worktrees] linked=16\n[recycle] merged un-recycled branches: feature/card-close-20261012-054727Z feature/card-close-20261012-055452Z feature/card-close-20261012-062835Z feature/card-close-20261012-065217Z feature/card-close-20261012-095620Z feature/card-close-20261012-130704Z feature/card-close-20261012-133217Z feature/card-close-20261012-140049Z feature/card-close-20261012-150228Z feature/card-close-20261012-164920Z feature/card-close-20261012-static-pidcheck feature/card-close-20261013-021816Z feature/card-close-20261013-052211Z feature/card-close-20261013-065538Z feature/card-close-svc-d3-real-scenarios feature/card-close-u7-release-roadmap feature/card-close-u7-release-roadmap-record feature/d1-closeout-evidence feature/rdm-increment-release-plan feature/rdm-increment-settings-duties feature/svc-d1-identity-flow feature/svc-d3-real-scenarios feature/svc-db-config-recover feature/svc-login-recovery-followup feature/sync-dhf-templates fix/genui-children-repair\n[cards] 闭合分支超过 24 小时未合入:feature/card-close-20261012-123313Z\n[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)\n[facts] WARN 过期事实:F6(日期格式)——引用前先 make facts-verify 重验并更新登记表\n[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md\n[R0] ee9b437b22(完整:ee9b437b22b49f96e1bc65f79417b22e8e82a37c)\n[worktree] before-sync: recursive component checks passed\n[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "472428d98b891fa3f457b56b709887ed17bc1230fafedc7fa249408786a6e224", + "receipt_sha256": "25a1c907c32347ca1064853d35cb82338a8d1ced8ed60135190f755045cfbfb0" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T14:57:00.161241+00:00", + "command": "cat /tmp/dependency-migration-clone-01a1345f.py && python3 /tmp/dependency-migration-clone-01a1345f.py", + "command_sha256": "f0380ea86b4307ea99c13fc804ff8eb012d8f0bc379303068036fe8bae72bcc3", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ee9b437b22b49f96e1bc65f79417b22e8e82a37c", + "status": " M .gitignore\n M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "b92f35bb8e0529e991224c05b39266f1a7bd0830ff39b594c3180ab8a879e467", + "untracked": {}, + "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": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ee9b437b22b49f96e1bc65f79417b22e8e82a37c", + "status": " M .gitignore\n M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "b92f35bb8e0529e991224c05b39266f1a7bd0830ff39b594c3180ab8a879e467", + "untracked": {}, + "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": "from concurrent.futures import ThreadPoolExecutor\nfrom pathlib import Path\nimport json\nimport subprocess\n\nroot = Path('/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration')\nnames = ['Logging-System', 'Error-Code-System', 'Agent-System-Core', 'Agent-System-UI',\n 'Agent-System-Frontend', 'Agent-Native', 'Agent-Intent', 'Agent-Command',\n 'Agent-Squad', 'Agent-System-Backend', 'Agent-System-RDM']\ndef prepare(name):\n path = root / name\n if path.exists():\n raise RuntimeError(f'preserve existing candidate: {path}')\n url = f'ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/{name}.git'\n subprocess.run(['git', 'clone', '--no-checkout', url, str(path)], check=True, stdout=subprocess.DEVNULL)\n subprocess.run(['git', '-C', str(path), 'switch', '-c', 'feature/versioned-dependencies', 'origin/main'], check=True, stdout=subprocess.DEVNULL)\n sha = subprocess.check_output(['git', '-C', str(path), 'rev-parse', 'HEAD'], text=True).strip()\n return {'id': name, 'path': str(path), 'origin': url, 'initial_base_sha': sha}\nroot.mkdir(parents=True, exist_ok=True)\nwith ThreadPoolExecutor(max_workers=3) as pool:\n records = list(pool.map(prepare, names))\n(root / 'sources.json').write_text(json.dumps(records, indent=2) + '\\n')\nprint(json.dumps(records, indent=2))\nCloning into '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Logging-System'...\nCloning into '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Error-Code-System'...\nCloning into '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-Core'...\nSwitched to a new branch 'feature/versioned-dependencies'\nCloning into '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-UI'...\nSwitched to a new branch 'feature/versioned-dependencies'\nCloning into '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-Frontend'...\nSwitched to a new branch 'feature/versioned-dependencies'\nCloning into '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-Native'...\nSwitched to a new branch 'feature/versioned-dependencies'\nCloning into '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-Intent'...\nSwitched to a new branch 'feature/versioned-dependencies'\nSwitched to a new branch 'feature/versioned-dependencies'\nCloning into '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-Command'...\nCloning into '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-Squad'...\nSwitched to a new branch 'feature/versioned-dependencies'\nCloning into '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-Backend'...\nSwitched to a new branch 'feature/versioned-dependencies'\nCloning into '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-RDM'...\nSwitched to a new branch 'feature/versioned-dependencies'\nSwitched to a new branch 'feature/versioned-dependencies'\nSwitched to a new branch 'feature/versioned-dependencies'\n[\n {\n \"id\": \"Logging-System\",\n \"path\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Logging-System\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Logging-System.git\",\n \"initial_base_sha\": \"da5c33eb25a88b5ad5c88999d1a119f6f5b3af24\"\n },\n {\n \"id\": \"Error-Code-System\",\n \"path\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Error-Code-System\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Error-Code-System.git\",\n \"initial_base_sha\": \"9e99b52611449c0ce7f35527b9b95fe55701f892\"\n },\n {\n \"id\": \"Agent-System-Core\",\n \"path\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-Core\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Core.git\",\n \"initial_base_sha\": \"5773e74086791731059730bd3726dc8c9cd1381f\"\n },\n {\n \"id\": \"Agent-System-UI\",\n \"path\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-UI\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-UI.git\",\n \"initial_base_sha\": \"2c4322ef56df64ad72f65907d25b048a74bb5ffc\"\n },\n {\n \"id\": \"Agent-System-Frontend\",\n \"path\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-Frontend\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git\",\n \"initial_base_sha\": \"eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b\"\n },\n {\n \"id\": \"Agent-Native\",\n \"path\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-Native\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git\",\n \"initial_base_sha\": \"c348441691e8bdab784a03aa9be64d53dacff341\"\n },\n {\n \"id\": \"Agent-Intent\",\n \"path\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-Intent\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Intent.git\",\n \"initial_base_sha\": \"343b1e6d9a5b58e47bf7e594826221036ae8175c\"\n },\n {\n \"id\": \"Agent-Command\",\n \"path\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-Command\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Command.git\",\n \"initial_base_sha\": \"4f583ca3eeeb07a56a714c5086de84dcd6ad2980\"\n },\n {\n \"id\": \"Agent-Squad\",\n \"path\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-Squad\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Squad.git\",\n \"initial_base_sha\": \"490b0b2dfa1567cb16ff7a7230fd78e52bc2938e\"\n },\n {\n \"id\": \"Agent-System-Backend\",\n \"path\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-Backend\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git\",\n \"initial_base_sha\": \"5d5fc9891c0eb8994545ccb8b740535d9b99fb0e\"\n },\n {\n \"id\": \"Agent-System-RDM\",\n \"path\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-RDM\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-RDM.git\",\n \"initial_base_sha\": \"c058bfcf651c42b2dfc9c93ec7cb1f1036d3fd95\"\n }\n]\n", + "output_sha256": "947444627c8870cab67c41d9f9e870f47ce37fe78435c335f62e0909223fbb31", + "receipt_sha256": "3d59ccdd4402c4d343ad5d60d5025fce869e9c8db4f6766d7fb62f559394400a" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:00:37.190424+00:00", + "command": "cat /tmp/dependency-foundation-probe-01a1345f.py && python3 /tmp/dependency-foundation-probe-01a1345f.py red", + "command_sha256": "d5f8cf2f366e3cb0d08190bbdcd29fdb7a6ed5f77c53e4d26441c5ff4dadb4ad", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ee9b437b22b49f96e1bc65f79417b22e8e82a37c", + "status": " M .gitignore\n M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "d341d82253ecc6a89110fbe016cc81a6fa78d55d6616f3a48cbf69423440d8eb", + "untracked": {}, + "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": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ee9b437b22b49f96e1bc65f79417b22e8e82a37c", + "status": " M .gitignore\n M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "d341d82253ecc6a89110fbe016cc81a6fa78d55d6616f3a48cbf69423440d8eb", + "untracked": {}, + "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 json\nimport os\nfrom pathlib import Path\nimport subprocess\nimport sys\nimport tempfile\n\nroot = Path('/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration')\nprefix = 'git-ssh.u1680832.nyat.app/weichen/'\nrecords = {r['id']: r for r in json.loads((root / 'sources.json').read_text())}\nexpect_red = sys.argv[1] == 'red'\nrefs = {n: subprocess.check_output(['git', '-C', str(root / n), 'rev-parse', 'HEAD'], text=True).strip()\n for n in ['Logging-System', 'Error-Code-System']}\nwith tempfile.TemporaryDirectory(prefix='foundation-', dir=root) as td:\n consumer = Path(td)\n (consumer / 'go.mod').write_text('module example.test/foundation\\n\\ngo 1.27\\n')\n env = dict(os.environ, GOWORK='off', GOTOOLCHAIN='local', GOPRIVATE=prefix.rstrip('/'),\n GOPROXY='direct', GONOSUMDB=prefix.rstrip('/'), GOMODCACHE=str(consumer / 'cache'),\n GIT_CONFIG_COUNT='1', GIT_CONFIG_KEY_0='url.ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/.insteadOf',\n GIT_CONFIG_VALUE_0='https://git-ssh.u1680832.nyat.app/weichen/')\n failed = []\n versions = {}\n for name, ref in refs.items():\n module = prefix + name + '.git'\n args = ['go', 'get', module + '@' + ref]\n result = subprocess.run(args, cwd=consumer, env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)\n print(json.dumps({'command': args, 'source_sha': ref, 'exit': result.returncode}), flush=True)\n print(result.stdout, flush=True)\n if result.returncode:\n failed.append(name)\n if expect_red and 'declares its path' not in result.stdout:\n raise RuntimeError('unexpected download/transport failure')\n elif not expect_red:\n raw = subprocess.check_output(['go', 'list', '-m', '-json', module], cwd=consumer, env=env, text=True)\n versions[name] = json.loads(raw)['Version']\n if expect_red:\n assert failed == list(refs), failed\n print('RED: both existing short module declarations reject canonical remote consumption')\n else:\n assert not failed, failed\n (consumer / 'foundation_test.go').write_text('''package foundation\nimport (\n \"testing\"\n errcode \"git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/errcode\"\n _ \"git-ssh.u1680832.nyat.app/weichen/Logging-System.git/redact\"\n)\nfunc TestRealRemoteModules(t *testing.T) {\n code, err := errcode.ParseCode(\"sys.unknown_code\")\n if err != nil || code.Domain() != \"sys\" { t.Fatalf(\"code=%v err=%v\", code, err) }\n}\n''')\n subprocess.run(['go', 'test', '-mod=readonly', '-count=1', './...'], cwd=consumer, env=env, check=True)\n (root / 'foundation-versions.json').write_text(json.dumps({'refs': refs, 'versions': versions}, indent=2) + '\\n')\n print('GREEN: clean-cache remote modules compile and execute without workspace/local replace')\n print(json.dumps({'refs': refs, 'versions': versions}, indent=2))\n{\"command\": [\"go\", \"get\", \"git-ssh.u1680832.nyat.app/weichen/Logging-System.git@da5c33eb25a88b5ad5c88999d1a119f6f5b3af24\"], \"source_sha\": \"da5c33eb25a88b5ad5c88999d1a119f6f5b3af24\", \"exit\": 1}\ngo: downloading git-ssh.u1680832.nyat.app/weichen/Logging-System.git v0.0.0-20260930160839-da5c33eb25a8\ngo: git-ssh.u1680832.nyat.app/weichen/Logging-System.git@da5c33eb25a88b5ad5c88999d1a119f6f5b3af24 (v0.0.0-20260930160839-da5c33eb25a8) requires git-ssh.u1680832.nyat.app/weichen/Logging-System.git@v0.0.0-20260930160839-da5c33eb25a8: parsing go.mod:\n\tmodule declares its path as: logging-system\n\t but was required as: git-ssh.u1680832.nyat.app/weichen/Logging-System.git\n\n{\"command\": [\"go\", \"get\", \"git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git@9e99b52611449c0ce7f35527b9b95fe55701f892\"], \"source_sha\": \"9e99b52611449c0ce7f35527b9b95fe55701f892\", \"exit\": 1}\ngo: downloading git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git v0.0.0-20260930160838-9e99b5261144\ngo: git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git@9e99b52611449c0ce7f35527b9b95fe55701f892 (v0.0.0-20260930160838-9e99b5261144) requires git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git@v0.0.0-20260930160838-9e99b5261144: parsing go.mod:\n\tmodule declares its path as: error-code-system\n\t but was required as: git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git\n\nRED: both existing short module declarations reject canonical remote consumption\n", + "output_sha256": "6f4a3d53b29ba7ca09c7a04498e7a6e92ac6352abd69838ca00290c1ee1d6c93", + "receipt_sha256": "f123f907a0d774442573083cd10b407665d65d8231a0ac14e044f111dfa0e19a" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:04:01.256603+00:00", + "command": "git -C .migration/Logging-System diff --check && git -C .migration/Error-Code-System diff --check && (cd .migration/Logging-System && GOWORK=off go test -count=1 ./...) && (cd .migration/Error-Code-System && GOWORK=off go test -count=1 ./...)", + "command_sha256": "e5088a6bfd858e2da4cebe31eae3a29ef32d29312582bd6006bc193ac726f29d", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ee9b437b22b49f96e1bc65f79417b22e8e82a37c", + "status": " M .gitignore\n M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "03ed187a0173eddda253d5e6b5c77167555ee8ab0d8369999a4ddab60840b47b", + "untracked": {}, + "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": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "ee9b437b22b49f96e1bc65f79417b22e8e82a37c", + "status": " M .gitignore\n M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "03ed187a0173eddda253d5e6b5c77167555ee8ab0d8369999a4ddab60840b47b", + "untracked": {}, + "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": "? \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/cli\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/config\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/conformance\t0.044s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/logsys\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/redact\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/server\t0.055s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/sink\t0.015s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/slogadapter\t0.002s\n? \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/cli\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/conformance\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/domains\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/errcode\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/httpx\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/server\t0.004s\n", + "output_sha256": "325b95d178fee3a0222dd8dad501e6fdf4511eff843cf4762702db04466e4874", + "receipt_sha256": "8b0e620588027e1d523e39ab76f1d1910c16e89e10ed2a700b89b2526e8ced0f" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:06:47.873930+00:00", + "command": "cat /tmp/dependency-commit-providers-01a1345f.py && python3 /tmp/dependency-commit-providers-01a1345f.py Logging-System Error-Code-System && python3 /tmp/dependency-foundation-probe-01a1345f.py green", + "command_sha256": "347a7608c50a53f13d08acf93222e9a95d54591215e55968710284d59ef2454b", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "69c5c84d8a2f1a7966ebfb809cbb26d54e8e8abb", + "status": " M .gitignore\n M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "77d65645ea48f6aa107a50f0da4d61dbb94d70a33f42005c81647815138ea726", + "untracked": {}, + "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": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "69c5c84d8a2f1a7966ebfb809cbb26d54e8e8abb", + "status": " M .gitignore\n M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "77d65645ea48f6aa107a50f0da4d61dbb94d70a33f42005c81647815138ea726", + "untracked": {}, + "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": "from pathlib import Path\nimport subprocess\nimport sys\n\nroot=Path('/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration')\nfor name in sys.argv[1:]:\n repo=root/name\n files=subprocess.check_output(['git','-C',str(repo),'diff','--name-only','-z'],text=True).split('\\0')\n files=[p for p in files if p]\n if not files: raise RuntimeError('no owned delta: '+name)\n subprocess.run(['git','-C',str(repo),'diff','--check'],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 print(name,subprocess.check_output(['git','-C',str(repo),'rev-parse','HEAD'],text=True).strip(),flush=True)\n[feature/versioned-dependencies 9c5442f] Enable canonical versioned Go module consumption\n 22 files changed, 38 insertions(+), 38 deletions(-)\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Logging-System/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Logging-System.git\n * [new branch] HEAD -> feature/versioned-dependencies\nLogging-System 9c5442f06d05d4fd17905e91a415a8ce3d5db705\n[feature/versioned-dependencies 28d2d50] Enable canonical versioned Go module consumption\n 19 files changed, 28 insertions(+), 28 deletions(-)\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Error-Code-System/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Error-Code-System.git\n * [new branch] HEAD -> feature/versioned-dependencies\nError-Code-System 28d2d50743479176307cec755413035a6a17c773\n{\"command\": [\"go\", \"get\", \"git-ssh.u1680832.nyat.app/weichen/Logging-System.git@9c5442f06d05d4fd17905e91a415a8ce3d5db705\"], \"source_sha\": \"9c5442f06d05d4fd17905e91a415a8ce3d5db705\", \"exit\": 0}\ngo: downloading git-ssh.u1680832.nyat.app/weichen/Logging-System.git v0.0.0-20261013150647-9c5442f06d05\ngo: added git-ssh.u1680832.nyat.app/weichen/Logging-System.git v0.0.0-20261013150647-9c5442f06d05\n\n{\"command\": [\"go\", \"get\", \"git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git@28d2d50743479176307cec755413035a6a17c773\"], \"source_sha\": \"28d2d50743479176307cec755413035a6a17c773\", \"exit\": 0}\ngo: downloading git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git v0.0.0-20261013150648-28d2d5074347\ngo: added git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git v0.0.0-20261013150648-28d2d5074347\n\nok \texample.test/foundation\t0.002s\nGREEN: clean-cache remote modules compile and execute without workspace/local replace\n{\n \"refs\": {\n \"Logging-System\": \"9c5442f06d05d4fd17905e91a415a8ce3d5db705\",\n \"Error-Code-System\": \"28d2d50743479176307cec755413035a6a17c773\"\n },\n \"versions\": {\n \"Logging-System\": \"v0.0.0-20261013150647-9c5442f06d05\",\n \"Error-Code-System\": \"v0.0.0-20261013150648-28d2d5074347\"\n }\n}\n", + "output_sha256": "8f35ccaafb74dc3edc229b05d8443e3d5ed9e9c4e5d4f27e44947526188e0228", + "receipt_sha256": "fb1c5f0435d57fdfd786b750dd7e9c0c9be43d1b5809ea74c4f2423ec611c667" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:09:53.395849+00:00", + "command": "git -C .migration/Agent-System-Core diff --check && (cd .migration/Agent-System-Core && GOWORK=off go test -count=1 ./... && npm test && npm run typecheck)", + "command_sha256": "2d5526ed3cd807c792cfb3ff455a1017c2c719c74dfbf9201e3771b59253796d", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "69c5c84d8a2f1a7966ebfb809cbb26d54e8e8abb", + "status": " M .gitignore\n M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "16836eacb975c1c8bffc0bbae90f1413b2d5d766fd8f38efdca3de13f0510bca", + "untracked": {}, + "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": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "69c5c84d8a2f1a7966ebfb809cbb26d54e8e8abb", + "status": " M .gitignore\n M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "16836eacb975c1c8bffc0bbae90f1413b2d5d766fd8f38efdca3de13f0510bca", + "untracked": {}, + "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": "ok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git\t0.003s\n\n> @agent-system/contracts@0.1.0 test\n> npm run check:package && node --test scripts/test-package.mjs\n\n\n> @agent-system/contracts@0.1.0 check:package\n> node scripts/build-package.mjs --check\n\n✔ packed contracts compile in a consumer without the Core checkout (602.65968ms)\nℹ tests 1\nℹ suites 0\nℹ pass 1\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 642.77669\n\n> @agent-system/contracts@0.1.0 typecheck\n> tsc -p tsconfig.package.json --noEmit\n\n", + "output_sha256": "b00579136a17414d8fe3e19e8fe79ef3b6aa7b5570728f6837dddca7b819e3e9", + "receipt_sha256": "568fd5ec507bb92e912685a02c6ceb77867823fc64c27ff8e1f45efc553ccf07" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:18:23.000163+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": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "69c5c84d8a2f1a7966ebfb809cbb26d54e8e8abb", + "status": " M .gitignore\n 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_transport.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "0182484a6342fd5c388d0814d70c3dcab71d00ee3543b103e48475f0b9262e53", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "5b5160ad42f7349afe8776bcecb2a758e8768a611faad27ea26537b5a4ce87ab", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "99e8871ba1603d6861a42b46694c1c6589f1e7f1cca09bfeb3b981c3bd46ee63", + "scripts/workspace/go.py": "9306fbe0fe2ab10cbcd3ff046f9d444d94d0f7b80fe4be53a2d669f377873677", + "scripts/workspace/manifest.py": "840c02103309e25a25fc01bc7a87ad960a8fd8f456c38631b04b20482bfbe7f4", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "4a05473b50c871b95d0f9eed19447b5e5a25a085a8c61cba27fcf328a7934f40", + "tests/test_transport.py": "02cba544a6e7038e9eb5cf202feb725c5dec45efc72ff4dc4c4b669c9285cbb5", + "tests/test_workspace.py": "e70ee31b86d040ea63965757f32fd98e56c72383cb888ab975871e26ad8b6594" + }, + "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": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "69c5c84d8a2f1a7966ebfb809cbb26d54e8e8abb", + "status": " M .gitignore\n 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_transport.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "0182484a6342fd5c388d0814d70c3dcab71d00ee3543b103e48475f0b9262e53", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "5b5160ad42f7349afe8776bcecb2a758e8768a611faad27ea26537b5a4ce87ab", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "99e8871ba1603d6861a42b46694c1c6589f1e7f1cca09bfeb3b981c3bd46ee63", + "scripts/workspace/go.py": "9306fbe0fe2ab10cbcd3ff046f9d444d94d0f7b80fe4be53a2d669f377873677", + "scripts/workspace/manifest.py": "840c02103309e25a25fc01bc7a87ad960a8fd8f456c38631b04b20482bfbe7f4", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "4a05473b50c871b95d0f9eed19447b5e5a25a085a8c61cba27fcf328a7934f40", + "tests/test_transport.py": "02cba544a6e7038e9eb5cf202feb725c5dec45efc72ff4dc4c4b669c9285cbb5", + "tests/test_workspace.py": "e70ee31b86d040ea63965757f32fd98e56c72383cb888ab975871e26ad8b6594" + }, + "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_credentials_in_transport_url_are_rejected (test_transport.TransportTests.test_credentials_in_transport_url_are_rejected) ... FAIL\ntest_remote_revision_download_without_global_git_change (test_transport.TransportTests.test_remote_revision_download_without_global_git_change) ... FAIL\n\n======================================================================\nFAIL: test_credentials_in_transport_url_are_rejected (test_transport.TransportTests.test_credentials_in_transport_url_are_rejected)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_transport.py\", line 51, in test_credentials_in_transport_url_are_rejected\n transport = self.load()\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_transport.py\", line 13, in load\n self.assertTrue(SCRIPT.is_file(), 'process-scoped module transport is required')\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: False is not true : process-scoped module transport is required\n\n======================================================================\nFAIL: test_remote_revision_download_without_global_git_change (test_transport.TransportTests.test_remote_revision_download_without_global_git_change)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_transport.py\", line 20, in test_remote_revision_download_without_global_git_change\n transport = self.load()\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_transport.py\", line 13, in load\n self.assertTrue(SCRIPT.is_file(), 'process-scoped module transport is required')\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: False is not true : process-scoped module transport is required\n\n----------------------------------------------------------------------\nRan 2 tests in 0.001s\n\nFAILED (failures=2)\n", + "output_sha256": "cd8cea9da9aa4027a4b8da54d256262b9cddb88e8fb6dd5fbd7482e89c740c6d", + "receipt_sha256": "b97492aaa631b1c3272334a877da8c243a0fe1048c0d5e6b0b7f72841b37171f" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:18:24.006425+00:00", + "command": "(cd .migration/Agent-System-UI && npm test && npm run typecheck && npm run check:package)", + "command_sha256": "8288e4660f43ea7f6a5b0bd83e82ab67e2c02075e211aaed13a159ebc18f667e", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "69c5c84d8a2f1a7966ebfb809cbb26d54e8e8abb", + "status": " M .gitignore\n 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_transport.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "0182484a6342fd5c388d0814d70c3dcab71d00ee3543b103e48475f0b9262e53", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "5b5160ad42f7349afe8776bcecb2a758e8768a611faad27ea26537b5a4ce87ab", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "99e8871ba1603d6861a42b46694c1c6589f1e7f1cca09bfeb3b981c3bd46ee63", + "scripts/workspace/go.py": "9306fbe0fe2ab10cbcd3ff046f9d444d94d0f7b80fe4be53a2d669f377873677", + "scripts/workspace/manifest.py": "840c02103309e25a25fc01bc7a87ad960a8fd8f456c38631b04b20482bfbe7f4", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "4a05473b50c871b95d0f9eed19447b5e5a25a085a8c61cba27fcf328a7934f40", + "tests/test_transport.py": "02cba544a6e7038e9eb5cf202feb725c5dec45efc72ff4dc4c4b669c9285cbb5", + "tests/test_workspace.py": "e70ee31b86d040ea63965757f32fd98e56c72383cb888ab975871e26ad8b6594" + }, + "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": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "69c5c84d8a2f1a7966ebfb809cbb26d54e8e8abb", + "status": " M .gitignore\n 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_transport.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "2d0824a3259d21f5f0701aef4cb265314f3e3daaf1e8bbef1967a414a0490007", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "5b5160ad42f7349afe8776bcecb2a758e8768a611faad27ea26537b5a4ce87ab", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "99e8871ba1603d6861a42b46694c1c6589f1e7f1cca09bfeb3b981c3bd46ee63", + "scripts/workspace/go.py": "9306fbe0fe2ab10cbcd3ff046f9d444d94d0f7b80fe4be53a2d669f377873677", + "scripts/workspace/manifest.py": "840c02103309e25a25fc01bc7a87ad960a8fd8f456c38631b04b20482bfbe7f4", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "4a05473b50c871b95d0f9eed19447b5e5a25a085a8c61cba27fcf328a7934f40", + "tests/test_transport.py": "02cba544a6e7038e9eb5cf202feb725c5dec45efc72ff4dc4c4b669c9285cbb5", + "tests/test_workspace.py": "e70ee31b86d040ea63965757f32fd98e56c72383cb888ab975871e26ad8b6594" + }, + "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/ui@0.1.0 test\n> vitest run && npm run test:package\n\n\n RUN v4.1.11 /home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Agent-System-UI\n\n\n Test Files 18 passed (18)\n Tests 162 passed (162)\n Start at 15:18:24\n Duration 1.01s (transform 766ms, setup 0ms, import 2.13s, tests 1.97s, environment 4.81s)\n\n\n> @agent-system/ui@0.1.0 test:package\n> npm run check:package && node --test scripts/test-package.mjs\n\n\n> @agent-system/ui@0.1.0 check:package\n> node scripts/build-package.mjs --check\n\n✔ packed UI renders and exposes CSS and types without adjacent source checkouts (1432.9721ms)\nℹ tests 1\nℹ suites 0\nℹ pass 1\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 1471.263093\n\n> @agent-system/ui@0.1.0 typecheck\n> tsc --noEmit\n\n\n> @agent-system/ui@0.1.0 check:package\n> node scripts/build-package.mjs --check\n\n", + "output_sha256": "be224bb03dbe868d7e104a91bd514b1db97f92ef42a681ed12c350da207b24cd", + "receipt_sha256": "238d992820aa60efb9fbaefc9c0eebc614aca6cce4c1123ee9c8ff537163a7a6" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T15:19:51.183213+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": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5aae47ebca20ad1f3add3b080212cca7e1c6edf9", + "status": " M .gitignore\n 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?? scripts/workspace/transport.py\n?? tests/test_transport.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "41925d5d8571b9cf78ce7b6ccfe9a80e40f7f38fe1d40cdea49bec002699ea05", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "5b5160ad42f7349afe8776bcecb2a758e8768a611faad27ea26537b5a4ce87ab", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "99e8871ba1603d6861a42b46694c1c6589f1e7f1cca09bfeb3b981c3bd46ee63", + "scripts/workspace/go.py": "9306fbe0fe2ab10cbcd3ff046f9d444d94d0f7b80fe4be53a2d669f377873677", + "scripts/workspace/manifest.py": "840c02103309e25a25fc01bc7a87ad960a8fd8f456c38631b04b20482bfbe7f4", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "4a05473b50c871b95d0f9eed19447b5e5a25a085a8c61cba27fcf328a7934f40", + "scripts/workspace/transport.py": "4fb2fa86ecb1bf58bd00fbd4cafbbb38c06654fafa9e511ee391b9c4004a82b2", + "tests/test_transport.py": "02cba544a6e7038e9eb5cf202feb725c5dec45efc72ff4dc4c4b669c9285cbb5", + "tests/test_workspace.py": "0457bf0e774e638894fcd6675cef5a49ac84a224ca301324edbb4c921e036e5a" + }, + "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": "e0982c8428ec413334ab6761bf59b2c4bbaaba16", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "5aae47ebca20ad1f3add3b080212cca7e1c6edf9", + "status": " M .gitignore\n 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?? scripts/workspace/transport.py\n?? tests/test_transport.py\n?? tests/test_workspace.py\n", + "tracked_diff_sha256": "41925d5d8571b9cf78ce7b6ccfe9a80e40f7f38fe1d40cdea49bec002699ea05", + "untracked": { + "scripts/workspace.py": "fe7c424ff34d621453b7ff7afa47b57f145a05d3bdfd103f927c74fe91beee30", + "scripts/workspace/__init__.py": "5b62131864535e2e398d78d941aeff31fc0983b9b722390aecc7abdb1d7a0096", + "scripts/workspace/cli.py": "5b5160ad42f7349afe8776bcecb2a758e8768a611faad27ea26537b5a4ce87ab", + "scripts/workspace/common.py": "ce0d96596f25ee85fb0da49cabb7a119bb9d9b782a6ff0e1b5bc2358fb81a851", + "scripts/workspace/git.py": "99e8871ba1603d6861a42b46694c1c6589f1e7f1cca09bfeb3b981c3bd46ee63", + "scripts/workspace/go.py": "9306fbe0fe2ab10cbcd3ff046f9d444d94d0f7b80fe4be53a2d669f377873677", + "scripts/workspace/manifest.py": "840c02103309e25a25fc01bc7a87ad960a8fd8f456c38631b04b20482bfbe7f4", + "scripts/workspace/state.py": "bed23cb6ca7ee4db0e40e42ea027bc234623f3f8255aa89c63a98e29cf9fb605", + "scripts/workspace/transition.py": "4a05473b50c871b95d0f9eed19447b5e5a25a085a8c61cba27fcf328a7934f40", + "scripts/workspace/transport.py": "4fb2fa86ecb1bf58bd00fbd4cafbbb38c06654fafa9e511ee391b9c4004a82b2", + "tests/test_transport.py": "02cba544a6e7038e9eb5cf202feb725c5dec45efc72ff4dc4c4b669c9285cbb5", + "tests/test_workspace.py": "0457bf0e774e638894fcd6675cef5a49ac84a224ca301324edbb4c921e036e5a" + }, + "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": "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\n\n----------------------------------------------------------------------\nRan 2 tests in 0.171s\n\nOK\n", + "output_sha256": "4f635d9752cb6d7eded7375868b6197ac501ba0f4ea16f3c351dd9fcab02c7c0", + "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" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:02:27.297711+00:00", + "command": "python3 -m unittest tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request -v", + "command_sha256": "02db5f46693d9515c45b66c9f2d648efbe1f1155b97ea611325c82ed1a5d5ce4", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M tests/test_ci_credentials.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n", + "tracked_diff_sha256": "28678c8bcdefbec3a55c274bc7a4fd14ec251e9f27774b8995853d135c2fa4a4", + "untracked": { + "tests/test_composition.py": "4597ab39cb4becc3dbb71009374ec3714ae4464cbd528118c2d2dfdf31fc7940", + "tests/test_dependency_ci.py": "6bb0cd31d8075380e36bfea461780e6cae65692879f26447e648754616622df4" + }, + "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": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M tests/test_ci_credentials.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n", + "tracked_diff_sha256": "28678c8bcdefbec3a55c274bc7a4fd14ec251e9f27774b8995853d135c2fa4a4", + "untracked": { + "tests/test_composition.py": "4597ab39cb4becc3dbb71009374ec3714ae4464cbd528118c2d2dfdf31fc7940", + "tests/test_dependency_ci.py": "6bb0cd31d8075380e36bfea461780e6cae65692879f26447e648754616622df4" + }, + "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": 1, + "output": "test_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... FAIL\n\n======================================================================\nFAIL: test_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_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 183, in test_npm_nonregistry_tarball_rejected_before_request\n self.assertFalse(self.requests, \"candidate tarball source was contacted\")\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: [('/untrusted/payload.tgz', None)] is not false : candidate tarball source was contacted\n\n----------------------------------------------------------------------\nRan 1 test in 0.685s\n\nFAILED (failures=1)\n", + "output_sha256": "20789c2938cd879995b373650eb01220ee1fcffb8ec4f528a15071ca6f348d90", + "receipt_sha256": "768b14bb05b8c2562f11fd5aa38da9a13872bbd2932cfaf05d848771fb6ec232" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:03:01.518520+00:00", + "command": "python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -v", + "command_sha256": "aec96627d88bea7de31c0a9715632d3316431ef9b5cd6d15741cb16317092664", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .task/feature-dependency-workspace.md\n M tests/test_ci_credentials.py\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n", + "tracked_diff_sha256": "93ba780394d717a1f7c3b51d761ac7fa1bf0370fd384c9c03b6889d667b60a1a", + "untracked": { + "scripts/build-composition.py": "e3857af9ac127c9a57860ef2119d21d6921e72f8e2defc50c7d3293bef4c172d", + "tests/test_composition.py": "4597ab39cb4becc3dbb71009374ec3714ae4464cbd528118c2d2dfdf31fc7940", + "tests/test_dependency_ci.py": "6bb0cd31d8075380e36bfea461780e6cae65692879f26447e648754616622df4" + }, + "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": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .task/feature-dependency-workspace.md\n M tests/test_ci_credentials.py\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n", + "tracked_diff_sha256": "93ba780394d717a1f7c3b51d761ac7fa1bf0370fd384c9c03b6889d667b60a1a", + "untracked": { + "scripts/build-composition.py": "e3857af9ac127c9a57860ef2119d21d6921e72f8e2defc50c7d3293bef4c172d", + "tests/test_composition.py": "4597ab39cb4becc3dbb71009374ec3714ae4464cbd528118c2d2dfdf31fc7940", + "tests/test_dependency_ci.py": "6bb0cd31d8075380e36bfea461780e6cae65692879f26447e648754616622df4" + }, + "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_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\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) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (tests.test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (tests.test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\ntest_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\n\n----------------------------------------------------------------------\nRan 19 tests in 12.308s\n\nOK\n", + "output_sha256": "165718cd4b5facd7b9f287130e1767623b91f79964dd3eebb505ca4a5c2fb929", + "receipt_sha256": "47291e17e45f367d6d6233bb1f2d7771090e0df9cbf9fdfae1bcf7c08457be51" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:07:19.935551+00:00", + "command": "python3 scripts/workspace.py prepare --name Agent-System-Backend && python3 scripts/workspace.py prepare --name Agent-System-Frontend", + "command_sha256": "d86d9caef18cf35931c5b77f818bb36656b52f326724e72ff74aaadb06ee1bc8", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M scripts/check-worktree.py\n M scripts/task.sh\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "c3600af7d54065adb1dd07dafe38af3cf086a009b9bfa17a3c708256066aa054", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "6bb0cd31d8075380e36bfea461780e6cae65692879f26447e648754616622df4", + "tests/test_workspace_cutover.py": "c613265e7acb36c33a56e2762be33b0cf913d1644b06ac9996f9ea45a6403cc5" + }, + "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": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M scripts/check-worktree.py\n M scripts/task.sh\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "c3600af7d54065adb1dd07dafe38af3cf086a009b9bfa17a3c708256066aa054", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "6bb0cd31d8075380e36bfea461780e6cae65692879f26447e648754616622df4", + "tests/test_workspace_cutover.py": "c613265e7acb36c33a56e2762be33b0cf913d1644b06ac9996f9ea45a6403cc5" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "5687d2501994196f62d1d00cb2318804c1a64a7e4b3f4ea0134f8ec823d944ac" + } + }, + "after_error": null, + "exit_code": 0, + "output": "{\n \"components\": {\n \"Agent-System-Backend\": {\n \"actual\": {\n \"branch\": null,\n \"changes\": [],\n \"common_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Backend/.git\",\n \"dirty\": false,\n \"git_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Backend/.git\",\n \"head\": \"f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c\",\n \"ignored\": [],\n \"locks\": [],\n \"operations\": [],\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git\",\n \"worktrees\": [\n \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Backend\"\n ]\n },\n \"declared\": {\n \"commit\": \"f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c\"\n },\n \"path\": \".workspace/Agent-System-Backend\",\n \"registered\": {\n \"baseline\": \"f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c\",\n \"branch\": null,\n \"linked\": false,\n \"mode\": \"versioned\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git\",\n \"owner_root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"path\": \".workspace/Agent-System-Backend\",\n \"source\": {\n \"kind\": \"source-lock\"\n }\n },\n \"repo\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git\",\n \"role\": \"application\"\n }\n },\n \"go_work\": null,\n \"root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"schema\": 1\n}\n{\n \"components\": {\n \"Agent-System-Frontend\": {\n \"actual\": {\n \"branch\": null,\n \"changes\": [],\n \"common_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Frontend/.git\",\n \"dirty\": false,\n \"git_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Frontend/.git\",\n \"head\": \"ad53e90a8542143104ddc7f759c8f8e7b7001924\",\n \"ignored\": [],\n \"locks\": [],\n \"operations\": [],\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git\",\n \"worktrees\": [\n \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Frontend\"\n ]\n },\n \"declared\": {\n \"commit\": \"ad53e90a8542143104ddc7f759c8f8e7b7001924\"\n },\n \"path\": \".workspace/Agent-System-Frontend\",\n \"registered\": {\n \"baseline\": \"ad53e90a8542143104ddc7f759c8f8e7b7001924\",\n \"branch\": null,\n \"linked\": false,\n \"mode\": \"versioned\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git\",\n \"owner_root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"path\": \".workspace/Agent-System-Frontend\",\n \"source\": {\n \"kind\": \"source-lock\"\n }\n },\n \"repo\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git\",\n \"role\": \"application\"\n }\n },\n \"go_work\": null,\n \"root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"schema\": 1\n}\n", + "output_sha256": "927cad1680600910e59cda5f7954127b032a192ac43442270283459825bde8b5", + "receipt_sha256": "b816da95bd914846812a86f7c70b4a6c14394a088eb2293cecce73f5fed74f67" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:03:51.096038+00:00", + "command": "make test-governance", + "command_sha256": "9776a8dfcfb8f4c95abc94c40cae3a2c0e91e8f4b91fe95d98085c290e929158", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .task/feature-dependency-workspace.md\n M tests/test_ci_credentials.py\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n", + "tracked_diff_sha256": "47d7d9455b548644784d293f0fbeb1a6d0da805191754b335fdfc7049f75af9a", + "untracked": { + "scripts/build-composition.py": "e3857af9ac127c9a57860ef2119d21d6921e72f8e2defc50c7d3293bef4c172d", + "tests/test_composition.py": "4597ab39cb4becc3dbb71009374ec3714ae4464cbd528118c2d2dfdf31fc7940", + "tests/test_dependency_ci.py": "6bb0cd31d8075380e36bfea461780e6cae65692879f26447e648754616622df4" + }, + "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": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M scripts/check-worktree.py\n M scripts/task.sh\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "66a7a1ee16056052d643dcf78e71d31584a2d9da6663161b005d61cb14434a40", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "6bb0cd31d8075380e36bfea461780e6cae65692879f26447e648754616622df4", + "tests/test_workspace_cutover.py": "c613265e7acb36c33a56e2762be33b0cf913d1644b06ac9996f9ea45a6403cc5" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "5687d2501994196f62d1d00cb2318804c1a64a7e4b3f4ea0134f8ec823d944ac" + } + }, + "after_error": null, + "exit_code": 0, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\nPYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p 'test_*.py' -v\ntest_candidate_cannot_read_checkout_credentials (test_ci_credentials.CheckoutTests.test_candidate_cannot_read_checkout_credentials) ... ok\ntest_candidate_submodule_update_commands_are_rejected (test_ci_credentials.CheckoutTests.test_candidate_submodule_update_commands_are_rejected) ... ok\ntest_credential_destination_confined_to_injected_server (test_ci_credentials.CheckoutTests.test_credential_destination_confined_to_injected_server) ... ok\ntest_external_or_unlisted_urls_are_rejected_before_component_fetch (test_ci_credentials.CheckoutTests.test_external_or_unlisted_urls_are_rejected_before_component_fetch) ... ok\ntest_inherited_template_hook_does_not_execute_with_credentials (test_ci_credentials.CheckoutTests.test_inherited_template_hook_does_not_execute_with_credentials) ... ok\ntest_nested_external_url_is_rejected_before_authenticated_fetch (test_ci_credentials.CheckoutTests.test_nested_external_url_is_rejected_before_authenticated_fetch) ... ok\ntest_rdm_pin_fetch_is_three_shas_on_the_allowlist (test_ci_credentials.CheckoutTests.test_rdm_pin_fetch_is_three_shas_on_the_allowlist) ... ok\ntest_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials (test_ci_credentials.CheckoutTests.test_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials) ... ok\ntest_redirects_do_not_forward_credential_or_fetch_unlisted_target (test_ci_credentials.CheckoutTests.test_redirects_do_not_forward_credential_or_fetch_unlisted_target) ... ok\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\ntest_dirty_root_lock_is_rejected (test_composition.CompositionTests.test_dirty_root_lock_is_rejected) ... ok\ntest_fixed_commits_embed_assets_without_touching_developer_checkout (test_composition.CompositionTests.test_fixed_commits_embed_assets_without_touching_developer_checkout) ... ok\ntest_local_go_replace_is_rejected (test_composition.CompositionTests.test_local_go_replace_is_rejected) ... ok\ntest_locked_missing_revision_is_rejected (test_composition.CompositionTests.test_locked_missing_revision_is_rejected) ... ok\ntest_missing_frontend_assets_fails_before_publishing_binary (test_composition.CompositionTests.test_missing_frontend_assets_fails_before_publishing_binary) ... ok\ntest_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache (test_composition.CompositionTests.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache) ... ok\ntest_source_path_escape_is_rejected (test_composition.CompositionTests.test_source_path_escape_is_rejected) ... ok\ntest_test_target_runs_real_frontend_and_go_tests (test_composition.CompositionTests.test_test_target_runs_real_frontend_and_go_tests) ... ok\ntest_component_checkout_removes_tokens_before_candidate_executes (test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\ntest_go_prefetch_uses_only_registered_private_repo_and_local_toolchain (test_dependency_ci.DependencyCITests.test_go_prefetch_uses_only_registered_private_repo_and_local_toolchain) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_registered_application_lock_materializes_fixed_source (test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\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\ntest_pin_is_three_fixed_shas (test_lifecycle_pin.RdmPinTests.test_pin_is_three_fixed_shas) ... ok\ntest_rejects_url_and_short_sha (test_lifecycle_pin.RdmPinTests.test_rejects_url_and_short_sha) ... ok\ntest_addr_change_keeps_database_and_auth (test_svc.SvcDbRecoveryTests.test_addr_change_keeps_database_and_auth) ... ok\ntest_auth_preflight_aligns_with_effective_env_dsn (test_svc.SvcDbRecoveryTests.test_auth_preflight_aligns_with_effective_env_dsn) ... ok\ntest_batch_update_stops_second_service_despite_prior_pidcheck (test_svc.SvcDbRecoveryTests.test_batch_update_stops_second_service_despite_prior_pidcheck)\n批量 update 不得用上一服务的 SVC_PIDCHECK 误判下一服务进程。 ... ok\ntest_dbref_binding_survives_bare_restart_and_redeploy (test_svc.SvcDbRecoveryTests.test_dbref_binding_survives_bare_restart_and_redeploy) ... ok\ntest_explicit_unbind_blocks_residual_env_dsn (test_svc.SvcDbRecoveryTests.test_explicit_unbind_blocks_residual_env_dsn) ... ok\ntest_external_dsn_and_conffile_recover_on_bare_start (test_svc.SvcDbRecoveryTests.test_external_dsn_and_conffile_recover_on_bare_start) ... ok\ntest_legacy_exec_dsn_survives_consecutive_restarts (test_svc.SvcDbRecoveryTests.test_legacy_exec_dsn_survives_consecutive_restarts) ... ok\ntest_mock_conflict_and_legacy_binary_refuse (test_svc.SvcDbRecoveryTests.test_mock_conflict_and_legacy_binary_refuse) ... ok\ntest_rdm_companion_missing_web_fails_deploy (test_svc.SvcDbRecoveryTests.test_rdm_companion_missing_web_fails_deploy) ... ok\ntest_rdm_source_commits_and_update_track (test_svc.SvcDbRecoveryTests.test_rdm_source_commits_and_update_track) ... [main 96badb1] rdm v2\n 1 file changed, 1 insertion(+)\n create mode 100644 marker\nTo /tmp/svc-db-regress-dackc2c1/rdmremote.git\n 103186c..96badb1 main -> main\nok\ntest_rdm_source_deploy_end_to_end (test_svc.SvcDbRecoveryTests.test_rdm_source_deploy_end_to_end) ... ok\ntest_refusals_keep_registration_without_sqlite_fallback (test_svc.SvcDbRecoveryTests.test_refusals_keep_registration_without_sqlite_fallback) ... ok\ntest_restart_refusal_happens_before_stopping_running_service (test_svc.SvcDbRecoveryTests.test_restart_refusal_happens_before_stopping_running_service) ... ok\ntest_seed_owner_override_skips_account_lookup (test_svc.SvcDbRecoveryTests.test_seed_owner_override_skips_account_lookup) ... ok\ntest_seed_puts_with_temporary_bearer_key_when_auth_on (test_svc.SvcDbRecoveryTests.test_seed_puts_with_temporary_bearer_key_when_auth_on) ... ok\ntest_seed_puts_without_credentials_when_auth_off (test_svc.SvcDbRecoveryTests.test_seed_puts_without_credentials_when_auth_off) ... ok\ntest_sequential_restarts_no_cross_dsn_and_no_secret_leak (test_svc.SvcDbRecoveryTests.test_sequential_restarts_no_cross_dsn_and_no_secret_leak) ... ok\ntest_source_switch_requires_flag (test_svc.SvcDbRecoveryTests.test_source_switch_requires_flag) ... ok\ntest_static_fresh_deploy_registers_pidcheck_and_starts (test_svc.SvcDbRecoveryTests.test_static_fresh_deploy_registers_pidcheck_and_starts)\n全新 static --dir:登记须含 pidcheck;首启探活不得把 http.server 判死。 ... ok\ntest_update_preserves_binding (test_svc.SvcDbRecoveryTests.test_update_preserves_binding) ... ok\ntest_backup_custom_out_not_pruned (test_svc_backup.SvcAgentBackupTests.test_backup_custom_out_not_pruned) ... ok\ntest_backup_event_recorded (test_svc_backup.SvcAgentBackupTests.test_backup_event_recorded) ... ok\ntest_backup_live_writer_consistent_and_outside_runtime (test_svc_backup.SvcAgentBackupTests.test_backup_live_writer_consistent_and_outside_runtime)\n活跃 WAL 写入者:快照可读、行在、integrity ok;-wal/-shm 不入快照。 ... ok\n/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/suite.py:107: ResourceWarning: unclosed file <_io.TextIOWrapper name=3 encoding='UTF-8'>\n for index, test in enumerate(self):\nResourceWarning: Enable tracemalloc to get the object allocation traceback\ntest_backup_manifest_sha_matches (test_svc_backup.SvcAgentBackupTests.test_backup_manifest_sha_matches) ... ok\ntest_backup_non_sqlite_db_kept_raw_without_leftovers (test_svc_backup.SvcAgentBackupTests.test_backup_non_sqlite_db_kept_raw_without_leftovers) ... ok\ntest_backup_rejects_postgres_with_db_hint (test_svc_backup.SvcAgentBackupTests.test_backup_rejects_postgres_with_db_hint) ... ok\ntest_backup_requires_registration (test_svc_backup.SvcAgentBackupTests.test_backup_requires_registration) ... ok\ntest_backup_target_exists_refused (test_svc_backup.SvcAgentBackupTests.test_backup_target_exists_refused) ... ok\ntest_backup_without_sqlite3_refuses (test_svc_backup.SvcAgentBackupTests.test_backup_without_sqlite3_refuses)\nPATH 无 sqlite3 → 拒绝(不回退裸拷贝)。重建与真实 PATH 等价的工具目录、 ... ok\ntest_retention_and_listing (test_svc_backup.SvcAgentBackupTests.test_retention_and_listing) ... ok\ntest_rm_purge_removes_snapshots (test_svc_backup.SvcAgentBackupTests.test_rm_purge_removes_snapshots) ... ok\ntest_forward_only_requires_confirm_and_backup (test_svc_deploy_txn.DeployTxnTests.test_forward_only_requires_confirm_and_backup) ... ok\ntest_schema_incompatible_refuses_before_stop (test_svc_deploy_txn.DeployTxnTests.test_schema_incompatible_refuses_before_stop) ... ok\ntest_replace_failure_keeps_original (test_svc_identity.AtomicWriteTests.test_replace_failure_keeps_original) ... ok\ntest_I3_start_ensures_sqlite_identity (test_svc_identity.IdentityTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_identity.IdentityTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_identity.IdentityTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_identity.IdentityTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_identity.IdentityTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_identity.IdentityTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_identity.IdentityTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_identity.IdentityTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_identity.IdentityTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_identity.IdentityTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_identity.IdentityTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_identity.IdentityTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_identity.IdentityTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_identity.IdentityTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_identity.IdentityTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_Z_real_pg_not_run (test_svc_identity.IdentityTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_identity.IdentityTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_identity.IdentityTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_identity.IdentityTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_identity.IdentityTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_identity.IdentityTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_identity.IdentityTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_identity.IdentityTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_identity.IdentityTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_identity.IdentityTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_identity.IdentityTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_identity.IdentityTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_identity.IdentityTests.test_watchdog_print_plan) ... ok\ntest_caller_identity_env_does_not_reach_serve (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_caller_identity_env_does_not_reach_serve) ... ok\ntest_recover_fails_when_port_stolen (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_two_bare_restarts_keep_identity (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_two_bare_restarts_keep_identity) ... ok\ntest_watchdog_print_plan (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_watchdog_print_plan) ... ok\ntest_addr_defaults_to_default_addr (test_svc_precheck.AgentListenRejectedPrecheck.test_addr_defaults_to_default_addr) ... ok\ntest_incident_combo_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_incident_combo_not_rejected) ... ok\ntest_insecure_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_insecure_not_rejected) ... ok\ntest_loopback_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_loopback_not_rejected) ... ok\ntest_nonloop_auth_off_with_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_auth_off_with_dsn_rejected) ... ok\ntest_nonloop_no_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_no_dsn_rejected) ... ok\ntest_auth_off_beats_dsn (test_svc_precheck.DbAuthEnabledMatrix.test_auth_off_beats_dsn) ... ok\ntest_auth_on_explicit (test_svc_precheck.DbAuthEnabledMatrix.test_auth_on_explicit) ... ok\ntest_auto_with_effective_dsn_is_authed (test_svc_precheck.DbAuthEnabledMatrix.test_auto_with_effective_dsn_is_authed) ... ok\ntest_auto_without_dsn_is_denied (test_svc_precheck.DbAuthEnabledMatrix.test_auto_without_dsn_is_denied) ... ok\ntest_no_auth_no_dsn_denied (test_svc_precheck.DbAuthEnabledMatrix.test_no_auth_no_dsn_denied) ... ok\ntest_broken_dbref_refuses (test_svc_precheck.ResolveDbConfigFixtures.test_broken_dbref_refuses) ... ok\ntest_legacy_exec_dsn_migrates_to_recoverable_keys (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_migrates_to_recoverable_keys) ... ok\ntest_legacy_exec_dsn_without_instance_goes_to_dsn_key (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_without_instance_goes_to_dsn_key) ... ok\ntest_migration_is_idempotent (test_svc_precheck.ResolveDbConfigFixtures.test_migration_is_idempotent) ... ok\ntest_no_dsn_no_dbref_is_sqlite (test_svc_precheck.ResolveDbConfigFixtures.test_no_dsn_no_dbref_is_sqlite) ... ok\ntest_post_g17_exec_restores_dsn_from_dbref (test_svc_precheck.ResolveDbConfigFixtures.test_post_g17_exec_restores_dsn_from_dbref) ... ok\ntest_env_config_resets_identity_env (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_identity_env) ... ok\ntest_env_config_resets_pidcheck_runtime_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_pidcheck_runtime_state) ... ok\ntest_env_config_resets_resolver_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_resolver_state) ... ok\ntest_help_topic_lists_rdm_admin (test_svc_rdm_admin.RdmAdminTests.test_help_topic_lists_rdm_admin) ... ok\ntest_recover_fails_when_port_stolen (test_svc_rdm_admin.RdmAdminTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_rdm_admin.RdmAdminTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_rdm_admin.RdmAdminTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_rdm_admin.RdmAdminTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_rdm_admin.RdmAdminTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_rdm_admin.RdmAdminTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_rdm_admin.RdmAdminTests.test_recover_skips_when_lock_held) ... ok\ntest_refuses_when_base_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_base_db_missing) ... ok\ntest_refuses_when_rdm_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_rdm_db_missing) ... ok\ntest_show_empty_ledger_hint (test_svc_rdm_admin.RdmAdminTests.test_show_empty_ledger_hint) ... ok\ntest_show_known_owner_no_warning (test_svc_rdm_admin.RdmAdminTests.test_show_known_owner_no_warning) ... ok\ntest_show_prints_ledger_and_flags_unknown_owner (test_svc_rdm_admin.RdmAdminTests.test_show_prints_ledger_and_flags_unknown_owner) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_rdm_admin.RdmAdminTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_rdm_admin.RdmAdminTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_rdm_admin.RdmAdminTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_status_lists_rdm_admin_row_and_warning (test_svc_rdm_admin.RdmAdminTests.test_status_lists_rdm_admin_row_and_warning) ... ok\ntest_status_silent_without_rdm_db (test_svc_rdm_admin.RdmAdminTests.test_status_silent_without_rdm_db) ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_rdm_admin.RdmAdminTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_transfer_idempotent_when_already_owner (test_svc_rdm_admin.RdmAdminTests.test_transfer_idempotent_when_already_owner) ... ok\ntest_transfer_rejects_empty_ledger (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_empty_ledger) ... ok\ntest_transfer_rejects_owner_missing_from_base_users (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_owner_missing_from_base_users) ... ok\ntest_transfer_rewrites_single_row_with_provenance (test_svc_rdm_admin.RdmAdminTests.test_transfer_rewrites_single_row_with_provenance) ... ok\ntest_unknown_subcommand_usage_exit_2 (test_svc_rdm_admin.RdmAdminTests.test_unknown_subcommand_usage_exit_2) ... ok\ntest_watchdog_print_plan (test_svc_rdm_admin.RdmAdminTests.test_watchdog_print_plan) ... ok\ntest_U3_real_agent_identity_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_agent_identity_lifecycle_sqlite)\n真实组合二进制:领养 ensure → verify → 两次裸重启身份/锚点稳定; ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_pg_identity_env_delivery (test_svc_realcombo.RealComboTests.test_U3_real_pg_identity_env_delivery)\n真实 PostgreSQL:AGENT_SYSTEM_DSN 环境交付 ensure/verify(凭据不进 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_binary_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_rdm_binary_lifecycle_sqlite)\n真实 RDM 组合二进制:identity 接线(Backend 公共 CLI)→ serve 门禁 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_full_deploy_track (test_svc_realcombo.RealComboTests.test_U3_real_rdm_full_deploy_track)\n全轨:materialize(真实 make build)→ 候选身份门禁 → release 切换 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_realcombo.RealComboTests.test_recover_fails_when_port_stolen) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_ignores_never_started_service (test_svc_realcombo.RealComboTests.test_recover_ignores_never_started_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_noop_while_running (test_svc_realcombo.RealComboTests.test_recover_noop_while_running) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_reserved_name_rejected (test_svc_realcombo.RealComboTests.test_recover_reserved_name_rejected) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_respects_explicit_stop (test_svc_realcombo.RealComboTests.test_recover_respects_explicit_stop) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_restarts_sigkilled_service (test_svc_realcombo.RealComboTests.test_recover_restarts_sigkilled_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_skips_when_lock_held (test_svc_realcombo.RealComboTests.test_recover_skips_when_lock_held) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_realcombo.RealComboTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_records_autostart_and_stop_clears (test_svc_realcombo.RealComboTests.test_start_records_autostart_and_stop_clears) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_rejects_foreign_port_occupant (test_svc_realcombo.RealComboTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_stop_on_dead_process_clears_autostart (test_svc_realcombo.RealComboTests.test_stop_on_dead_process_clears_autostart) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_watchdog_print_plan (test_svc_realcombo.RealComboTests.test_watchdog_print_plan) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_recover.SvcAutoRecoverTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_recover.SvcAutoRecoverTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_recover.SvcAutoRecoverTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_recover.SvcAutoRecoverTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_recover.SvcAutoRecoverTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_recover.SvcAutoRecoverTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_recover.SvcAutoRecoverTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_recover.SvcAutoRecoverTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_recover.SvcAutoRecoverTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_recover.SvcAutoRecoverTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_recover.SvcAutoRecoverTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_recover.SvcAutoRecoverTests.test_watchdog_print_plan) ... ok\ntest_I3_start_ensures_sqlite_identity (test_svc_u2.U2ReleaseTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_u2.U2ReleaseTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_u2.U2ReleaseTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_u2.U2ReleaseTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_u2.U2ReleaseTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_u2.U2ReleaseTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_u2.U2ReleaseTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_u2.U2ReleaseTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_u2.U2ReleaseTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_u2.U2ReleaseTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_u2.U2ReleaseTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_u2.U2ReleaseTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_u2.U2ReleaseTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_U2_build_failure_keeps_old_running (test_svc_u2.U2ReleaseTests.test_U2_build_failure_keeps_old_running) ... ok\ntest_U2_fault_after_switch_rolls_back_on_next_start (test_svc_u2.U2ReleaseTests.test_U2_fault_after_switch_rolls_back_on_next_start) ... ok\ntest_U2_health_timeout_rolls_back (test_svc_u2.U2ReleaseTests.test_U2_health_timeout_rolls_back) ... ok\ntest_U2_journal_interrupt_resolved_on_start (test_svc_u2.U2ReleaseTests.test_U2_journal_interrupt_resolved_on_start) ... ok\ntest_U2_layout_switch_and_rollback_on_start_failure (test_svc_u2.U2ReleaseTests.test_U2_layout_switch_and_rollback_on_start_failure) ... ok\ntest_U2_legacy_layout_bare_lifecycle_still_works (test_svc_u2.U2ReleaseTests.test_U2_legacy_layout_bare_lifecycle_still_works) ... ok\ntest_U2_schema_advance_blocks_rollback (test_svc_u2.U2ReleaseTests.test_U2_schema_advance_blocks_rollback) ... ok\ntest_Z_real_pg_not_run (test_svc_u2.U2ReleaseTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_u2.U2ReleaseTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_u2.U2ReleaseTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_u2.U2ReleaseTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_u2.U2ReleaseTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_u2.U2ReleaseTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_u2.U2ReleaseTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_u2.U2ReleaseTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_u2.U2ReleaseTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_u2.U2ReleaseTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_u2.U2ReleaseTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_u2.U2ReleaseTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_u2.U2ReleaseTests.test_watchdog_print_plan) ... ok\ntest_T1_user_list_binds_manifest_data (test_svc_user_binding.UserBindingTests.test_T1_user_list_binds_manifest_data) ... ok\ntest_T2_reject_override_data_flag (test_svc_user_binding.UserBindingTests.test_T2_reject_override_data_flag) ... ok\ntest_T2b_reject_literal_default_data (test_svc_user_binding.UserBindingTests.test_T2b_reject_literal_default_data) ... ok\ntest_T3_missing_data_root_rejected (test_svc_user_binding.UserBindingTests.test_T3_missing_data_root_rejected) ... ok\ntest_T4_no_flock_rejects_user_and_deploy (test_svc_user_binding.UserBindingTests.test_T4_no_flock_rejects_user_and_deploy) ... ok\ntest_T5_identity_regression_smoke (test_svc_user_binding.UserBindingTests.test_T5_identity_regression_smoke) ... ok\ntest_recover_fails_when_port_stolen (test_svc_user_binding.UserBindingTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_user_binding.UserBindingTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_user_binding.UserBindingTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_user_binding.UserBindingTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_user_binding.UserBindingTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_user_binding.UserBindingTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_user_binding.UserBindingTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_user_binding.UserBindingTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_user_binding.UserBindingTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_user_binding.UserBindingTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_user_binding.UserBindingTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_user_binding.UserBindingTests.test_watchdog_print_plan) ... ok\ntest_full_help_mentions_user_binding (test_svc_user_help.UserHelpTests.test_full_help_mentions_user_binding) ... ok\ntest_help_accounts_lists_six_commands (test_svc_user_help.UserHelpTests.test_help_accounts_lists_six_commands) ... ok\ntest_topics_and_short_and_lifecycle_mention_accounts (test_svc_user_help.UserHelpTests.test_topics_and_short_and_lifecycle_mention_accounts) ... ok\ntest_ide_lock_in_git_dir_does_not_block_finish (test_task.FinishGuardFixTests.test_ide_lock_in_git_dir_does_not_block_finish) ... ok\ntest_local_default_branch_at_origin_main_does_not_block (test_task.FinishGuardFixTests.test_local_default_branch_at_origin_main_does_not_block)\n克隆默认分支停在 origin/main 顶端(pin 为 feature 顶端时不在其历史内) ... ok\ntest_local_unique_commit_still_preserved (test_task.FinishGuardFixTests.test_local_unique_commit_still_preserved) ... ok\ntest_real_git_lock_still_blocks_finish (test_task.FinishGuardFixTests.test_real_git_lock_still_blocks_finish) ... ok\ntest_remote_tracking_refs_do_not_block_finish (test_task.FinishGuardFixTests.test_remote_tracking_refs_do_not_block_finish) ... ok\ntest_finish_abandon_retains_local_remote_tips_and_reason (test_task.TaskLifecycleTests.test_finish_abandon_retains_local_remote_tips_and_reason) ... ok\ntest_finish_abandon_without_reason_preserves_checkout_and_refs (test_task.TaskLifecycleTests.test_finish_abandon_without_reason_preserves_checkout_and_refs) ... ok\ntest_finish_clean_worktree_has_accurate_remote_result (test_task.TaskLifecycleTests.test_finish_clean_worktree_has_accurate_remote_result) ... ok\ntest_finish_deletes_only_merged_remote_branch (test_task.TaskLifecycleTests.test_finish_deletes_only_merged_remote_branch) ... ok\ntest_finish_preserves_component_commits_off_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_component_commits_off_the_pinned_head) ... ok\ntest_finish_preserves_component_untracked_file (test_task.TaskLifecycleTests.test_finish_preserves_component_untracked_file) ... ok\ntest_finish_preserves_linked_component_worktrees_at_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_linked_component_worktrees_at_the_pinned_head) ... ok\ntest_finish_preserves_linked_nested_component_worktree (test_task.TaskLifecycleTests.test_finish_preserves_linked_nested_component_worktree) ... ok\ntest_finish_preserves_locked_worktree (test_task.TaskLifecycleTests.test_finish_preserves_locked_worktree) ... ok\ntest_finish_preserves_main_and_active_index_lock (test_task.TaskLifecycleTests.test_finish_preserves_main_and_active_index_lock) ... ok\ntest_finish_preserves_modified_untracked_and_ignored_files (test_task.TaskLifecycleTests.test_finish_preserves_modified_untracked_and_ignored_files) ... ok\ntest_finish_preserves_remote_unmerged_tip (test_task.TaskLifecycleTests.test_finish_preserves_remote_unmerged_tip) ... ok\ntest_finish_recycles_clean_submodule_without_shared_config_changes (test_task.TaskLifecycleTests.test_finish_recycles_clean_submodule_without_shared_config_changes) ... ok\ntest_finish_rejects_subdirectory_without_deleting_it (test_task.TaskLifecycleTests.test_finish_rejects_subdirectory_without_deleting_it) ... ok\ntest_finish_remote_deletion_lease_preserves_concurrent_update (test_task.TaskLifecycleTests.test_finish_remote_deletion_lease_preserves_concurrent_update) ... ok\ntest_finish_requires_writer_exit_confirmation (test_task.TaskLifecycleTests.test_finish_requires_writer_exit_confirmation) ... ok\ntest_post_merge_is_silent_outside_main_checkout (test_task.TaskLifecycleTests.test_post_merge_is_silent_outside_main_checkout) ... ok\ntest_post_merge_main_merge_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_merge_only_reminds_owner) ... ok\ntest_post_merge_main_pull_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_pull_only_reminds_owner) ... ok\ntest_precheck_feature_behind_requires_sync (test_task.TaskLifecycleTests.test_precheck_feature_behind_requires_sync) ... ok\ntest_precheck_rejects_unreachable_authority (test_task.TaskLifecycleTests.test_precheck_rejects_unreachable_authority) ... ok\ntest_precheck_routes_existing_project_delivery_policy (test_task.TaskLifecycleTests.test_precheck_routes_existing_project_delivery_policy) ... ok\ntest_start_imports_precheck_and_creates_four_part_commit (test_task.TaskLifecycleTests.test_start_imports_precheck_and_creates_four_part_commit) ... ok\ntest_start_offline_does_not_create_worktree (test_task.TaskLifecycleTests.test_start_offline_does_not_create_worktree) ... ok\ntest_start_preserves_merged_local_and_remote_branch_names (test_task.TaskLifecycleTests.test_start_preserves_merged_local_and_remote_branch_names) ... ok\ntest_start_rejects_receipt_when_authoritative_base_changed (test_task.TaskLifecycleTests.test_start_rejects_receipt_when_authoritative_base_changed) ... ok\ntest_start_requires_precheck_receipt_before_creating_worktree (test_task.TaskLifecycleTests.test_start_requires_precheck_receipt_before_creating_worktree) ... ok\ntest_start_stacked_branch_records_parent_and_main_baseline (test_task.TaskLifecycleTests.test_start_stacked_branch_records_parent_and_main_baseline) ... ok\ntest_sync_commit_failure_never_reports_synced (test_task.TaskLifecycleTests.test_sync_commit_failure_never_reports_synced) ... ok\ntest_sync_does_not_execute_json_receipt_command (test_task.TaskLifecycleTests.test_sync_does_not_execute_json_receipt_command) ... ok\ntest_sync_keeps_json_evidence_fresh_after_metadata_only_changes (test_task.TaskLifecycleTests.test_sync_keeps_json_evidence_fresh_after_metadata_only_changes) ... ok\ntest_sync_keeps_unchanged_component_branch (test_task.TaskLifecycleTests.test_sync_keeps_unchanged_component_branch) ... ok\ntest_sync_materializes_nested_detached_components (test_task.TaskLifecycleTests.test_sync_materializes_nested_detached_components) ... ok\ntest_sync_materializes_updated_component (test_task.TaskLifecycleTests.test_sync_materializes_updated_component) ... ok\ntest_sync_preserves_component_feature_branch (test_task.TaskLifecycleTests.test_sync_preserves_component_feature_branch) ... ok\ntest_sync_preserves_dirty_child (test_task.TaskLifecycleTests.test_sync_preserves_dirty_child) ... ok\ntest_sync_preserves_nested_feature_branch_when_parent_pin_changes (test_task.TaskLifecycleTests.test_sync_preserves_nested_feature_branch_when_parent_pin_changes) ... ok\ntest_sync_reads_legacy_commands_with_escaped_pipes (test_task.TaskLifecycleTests.test_sync_reads_legacy_commands_with_escaped_pipes) ... ok\ntest_sync_still_warns_for_stale_legacy_table_evidence (test_task.TaskLifecycleTests.test_sync_still_warns_for_stale_legacy_table_evidence) ... ok\ntest_sync_warns_for_malformed_json_evidence (test_task.TaskLifecycleTests.test_sync_warns_for_malformed_json_evidence) ... ok\ntest_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum (test_task.TaskLifecycleTests.test_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum) ... ok\ntest_sync_warns_for_unresolved_json_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_json_evidence_head) ... ok\ntest_sync_warns_for_unresolved_legacy_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_legacy_evidence_head) ... ok\ntest_sync_warns_when_json_after_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_after_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_before_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_before_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_evidence_predates_noncard_changes (test_task.TaskLifecycleTests.test_sync_warns_when_json_evidence_predates_noncard_changes) ... ok\ntest_verify_rejects_recursive_drift_even_when_root_has_local_edits (test_task.TaskLifecycleTests.test_verify_rejects_recursive_drift_even_when_root_has_local_edits) ... ok\ntest_verify_rejects_uninitialized_component (test_task.TaskLifecycleTests.test_verify_rejects_uninitialized_component) ... ok\ntest_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\ntest_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\ntest_deleting_main_symlink_to_outside_is_denied (test_write_guard.WriteGuardTests.test_deleting_main_symlink_to_outside_is_denied) ... ok\ntest_detached_and_bad_branches_are_denied (test_write_guard.WriteGuardTests.test_detached_and_bad_branches_are_denied) ... ok\ntest_every_patch_file_and_move_destination_is_checked (test_write_guard.WriteGuardTests.test_every_patch_file_and_move_destination_is_checked) ... ok\ntest_feature_missing_parent_is_allowed (test_write_guard.WriteGuardTests.test_feature_missing_parent_is_allowed) ... ok\ntest_invalid_json_is_denied (test_write_guard.WriteGuardTests.test_invalid_json_is_denied) ... ok\ntest_missing_parent_on_main_is_denied (test_write_guard.WriteGuardTests.test_missing_parent_on_main_is_denied) ... ok\ntest_missing_unknown_and_malformed_write_input_are_denied (test_write_guard.WriteGuardTests.test_missing_unknown_and_malformed_write_input_are_denied) ... ok\ntest_non_git_destination_is_explicitly_outside_scope (test_write_guard.WriteGuardTests.test_non_git_destination_is_explicitly_outside_scope) ... ok\ntest_nonwrite_tools_are_outside_scope (test_write_guard.WriteGuardTests.test_nonwrite_tools_are_outside_scope) ... ok\ntest_relative_path_uses_hook_cwd_not_process_cwd (test_write_guard.WriteGuardTests.test_relative_path_uses_hook_cwd_not_process_cwd) ... ok\ntest_symlink_into_main_with_missing_parents_is_denied (test_write_guard.WriteGuardTests.test_symlink_into_main_with_missing_parents_is_denied) ... ok\ntest_valid_multi_file_patch_on_feature_is_allowed (test_write_guard.WriteGuardTests.test_valid_multi_file_patch_on_feature_is_allowed) ... ok\n\n----------------------------------------------------------------------\nRan 365 tests in 237.567s\n\nOK (skipped=18)\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "2a6f1308b682d69271a1dd9aded6e46a6e671f156bfb528171ab14d56184d0a0", + "receipt_sha256": "9b96663663bc2d721b3499d0e249c940b54cba0d3015914e1d8d8e75de947e04" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:09:41.106884+00:00", + "command": "python3 -m unittest tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source -v", + "command_sha256": "89fa000b267f5329376eebc2d18659069ca925a12d1ebfa8b7ad643578f3251c", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M scripts/check-worktree.py\n M scripts/task.sh\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "9e64810904f0fdda71bb83cd7577a4c7e839d9cfdee3ee4b41af5eee14e05468", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "131ee0f35f0d1ffee6becf12be3d438cae1459449c4c4aabb735938aaca7000b" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "5687d2501994196f62d1d00cb2318804c1a64a7e4b3f4ea0134f8ec823d944ac" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M scripts/check-worktree.py\n M scripts/task.sh\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "9e64810904f0fdda71bb83cd7577a4c7e839d9cfdee3ee4b41af5eee14e05468", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "131ee0f35f0d1ffee6becf12be3d438cae1459449c4c4aabb735938aaca7000b" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "5687d2501994196f62d1d00cb2318804c1a64a7e4b3f4ea0134f8ec823d944ac" + } + }, + "after_error": null, + "exit_code": 1, + "output": "test_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... FAIL\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 65, in test_registered_application_lock_materializes_fixed_source\n self.assertEqual(self.git(self.checkout / \".workspace/Agent-System-Backend\", \"config\", \"remote.origin.url\"),\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n SSH + \"Agent-System-Backend.git\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 'http://127.0.0.1:35717/weichen/Agent-System-Backend.git' != 'ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git'\n- http://127.0.0.1:35717/weichen/Agent-System-Backend.git\n+ ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git\n\n\n----------------------------------------------------------------------\nRan 1 test in 0.615s\n\nFAILED (failures=1)\n", + "output_sha256": "4c011dd48d7166f2e57f78b81188b438032d297a44c5530e6fa34fe7c66cfcc7", + "receipt_sha256": "11de37d64ceea1758616bed5114d239a7e3950aa888fa71eab91cb00966c2769" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:10:05.098270+00:00", + "command": "python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -v", + "command_sha256": "aec96627d88bea7de31c0a9715632d3316431ef9b5cd6d15741cb16317092664", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M scripts/check-worktree.py\n M scripts/task.sh\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "32d7666107c7a4b43e154ee7e04e3a25f8d9d6e60c72e7b0277218735ce1285a", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "131ee0f35f0d1ffee6becf12be3d438cae1459449c4c4aabb735938aaca7000b" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "5687d2501994196f62d1d00cb2318804c1a64a7e4b3f4ea0134f8ec823d944ac" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M scripts/check-worktree.py\n M scripts/task.sh\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "32d7666107c7a4b43e154ee7e04e3a25f8d9d6e60c72e7b0277218735ce1285a", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "131ee0f35f0d1ffee6becf12be3d438cae1459449c4c4aabb735938aaca7000b" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "5687d2501994196f62d1d00cb2318804c1a64a7e4b3f4ea0134f8ec823d944ac" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\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) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (tests.test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (tests.test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\ntest_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\n\n----------------------------------------------------------------------\nRan 19 tests in 12.240s\n\nOK\n", + "output_sha256": "468f795e567e81dae74637088385ce885b89412db57a5182d26e017de74edb51", + "receipt_sha256": "43bb949a0b04fde74b3518851a6b5c2cbfbf388964830ed933523558463d143d" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:11:33.637435+00:00", + "command": "python3 scripts/workspace.py edit --name Agent-Native --branch feature/dependency-live-edit-probe", + "command_sha256": "f6147bb740b34697494c2b1b4d86de0f97e4cac9b9422c8e524cf570f49bdb9e", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M scripts/check-worktree.py\n M scripts/task.sh\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "0a1e2126ac35381b3e4dadb4f74fe150a7a010da93c53f97de601e5f75ff100e", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "5ec6f6b6c21bb8c35b8b448573bc5ae8342727d82271676cfed89c84092f47b3" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "5687d2501994196f62d1d00cb2318804c1a64a7e4b3f4ea0134f8ec823d944ac" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M scripts/check-worktree.py\n M scripts/task.sh\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "0a1e2126ac35381b3e4dadb4f74fe150a7a010da93c53f97de601e5f75ff100e", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "5ec6f6b6c21bb8c35b8b448573bc5ae8342727d82271676cfed89c84092f47b3" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "5687d2501994196f62d1d00cb2318804c1a64a7e4b3f4ea0134f8ec823d944ac" + } + }, + "after_error": null, + "exit_code": 1, + "output": "workspace: Go Origin URL does not match approved repository: git-ssh.u1680832.nyat.app/weichen/Agent-Native.git\n", + "output_sha256": "f46c0e1f518123344d3cb7bc1800721f6f5cd79095b2b7f493fff5e65c877799", + "receipt_sha256": "2d59c7914d18b1201773ab5065798b05664ae3643400c9ba93bc43cd69a5e1ac" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:12:55.034161+00:00", + "command": "python3 scripts/workspace.py edit --name Agent-Native --branch feature/dependency-live-edit-probe", + "command_sha256": "f6147bb740b34697494c2b1b4d86de0f97e4cac9b9422c8e524cf570f49bdb9e", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "f2d863b4018727a2611ea6d024dddcb5f705ef8d", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "a373eed6a9be69f2ef0cc602a9af53dd1c49c060354288183983ad6dda2cdf08", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "5ec6f6b6c21bb8c35b8b448573bc5ae8342727d82271676cfed89c84092f47b3" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "state": "missing" + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "5687d2501994196f62d1d00cb2318804c1a64a7e4b3f4ea0134f8ec823d944ac" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "a373eed6a9be69f2ef0cc602a9af53dd1c49c060354288183983ad6dda2cdf08", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "5ec6f6b6c21bb8c35b8b448573bc5ae8342727d82271676cfed89c84092f47b3" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "746b23e0fb58a4bbc35f1028620d05671d62c87b1347875b6216e447ad971480" + } + }, + "after_error": null, + "exit_code": 0, + "output": "{\n \"components\": {\n \"Agent-Native\": {\n \"actual\": {\n \"branch\": \"feature/dependency-live-edit-probe\",\n \"changes\": [],\n \"common_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-Native/.git\",\n \"dirty\": false,\n \"git_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-Native/.git\",\n \"head\": \"6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e\",\n \"ignored\": [],\n \"locks\": [],\n \"operations\": [],\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git\",\n \"worktrees\": [\n \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-Native\"\n ]\n },\n \"declared\": null,\n \"path\": \".workspace/Agent-Native\",\n \"registered\": {\n \"baseline\": \"6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e\",\n \"branch\": \"feature/dependency-live-edit-probe\",\n \"linked\": true,\n \"mode\": \"linked\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git\",\n \"owner_root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"path\": \".workspace/Agent-Native\",\n \"source\": {\n \"consumer\": \"Agent-System-Backend\",\n \"consumers\": [\n \"Agent-System-Backend\"\n ],\n \"kind\": \"go-module\",\n \"module\": \"git-ssh.u1680832.nyat.app/weichen/Agent-Native.git\",\n \"origin\": {\n \"Hash\": \"6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e\",\n \"URL\": \"https://git-ssh.u1680832.nyat.app/weichen/Agent-Native\",\n \"VCS\": \"git\"\n },\n \"selections\": [\n {\n \"consumer\": \"Agent-System-Backend\",\n \"kind\": \"go-module\",\n \"module\": \"git-ssh.u1680832.nyat.app/weichen/Agent-Native.git\",\n \"origin\": {\n \"Hash\": \"6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e\",\n \"URL\": \"https://git-ssh.u1680832.nyat.app/weichen/Agent-Native\",\n \"VCS\": \"git\"\n },\n \"version\": \"v0.0.0-20261013153610-6ddd3da8df5c\"\n }\n ],\n \"version\": \"v0.0.0-20261013153610-6ddd3da8df5c\"\n }\n },\n \"repo\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git\",\n \"role\": \"go-library\"\n }\n },\n \"go_work\": {\n \"paths\": [\n \".workspace/Agent-Native\",\n \".workspace/Agent-System-Backend\"\n ],\n \"sha256\": \"38da33d0e8f4d91662d22417c84f4b0b1bd243b8e3f4bcb8d34f8bdda88afc3d\"\n },\n \"root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"schema\": 1\n}\n", + "output_sha256": "9af180dd1e8b1f1cec8f5f3ae6a99302c66715935249e1134003405714d664bc", + "receipt_sha256": "81d09cfd5f6a3943a982a254c90bb40f128abe3e861a90cc1b6784c33992387b" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:12:56.191829+00:00", + "command": "python3 -m unittest discover -s tests -p test_workspace.py -v", + "command_sha256": "7154d39b0d1bd97c7943affd715166f3f8cca5be50900350b9fea8c63454c140", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "a373eed6a9be69f2ef0cc602a9af53dd1c49c060354288183983ad6dda2cdf08", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "5ec6f6b6c21bb8c35b8b448573bc5ae8342727d82271676cfed89c84092f47b3" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "746b23e0fb58a4bbc35f1028620d05671d62c87b1347875b6216e447ad971480" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "925ac9617bd29cc1bcebb60807b66439c04c1d10fa30c3f2e19458d1ed8e9566", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/test_composition.py": "14c24d9bd5b960de642860604a8cd4ba10eea2ca8fb80a6c65017114a053861d", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "5ec6f6b6c21bb8c35b8b448573bc5ae8342727d82271676cfed89c84092f47b3" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "746b23e0fb58a4bbc35f1028620d05671d62c87b1347875b6216e447ad971480" + } + }, + "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.626s\n\nOK\n", + "output_sha256": "c1027b08a16350244828342beff351ad4d10243c9d46e6a52a606220f87358dc", + "receipt_sha256": "3af8386693a0f95e0b1e9c1b839d319dc0f8c6d76db44d70932119f2bbfb1bdf" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:14:35.300092+00:00", + "command": "go run /tmp/dependency-native-live-probe-01a1345f.go && python3 scripts/workspace.py unlink --name Agent-Native && if GOWORK=off go run /tmp/dependency-native-live-probe-01a1345f.go; then exit 1; else printf \"PASS: unlink excludes the uncommitted local Native function\\n\"; fi && test -f .workspace/Agent-Native/exec/workspace_probe.go", + "command_sha256": "256ceec1fcfe80bfd8970240a0660061bf3045956db0a9d4480150880fdb4648", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "bf88c63a28432b0f945bca09aed5096b9a7bcc492c5e6a7c3f5dcd499f1cd940", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "4e2dadcaa61ab4103e73bf712ea39e4a29dcc1caa45427877c2ec525348e98ce", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "af035b6cc9c7d5a47c5ac649c75eea8a3905c1e1cf2e349beb94567ae93bde50" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "?? exec/workspace_probe.go\n", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": { + "exec/workspace_probe.go": "aca5dfbb14436d7459a87b669d646e6c74482d49e1116634e02fedf627b31d75" + } + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "746b23e0fb58a4bbc35f1028620d05671d62c87b1347875b6216e447ad971480" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "bf88c63a28432b0f945bca09aed5096b9a7bcc492c5e6a7c3f5dcd499f1cd940", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "4e2dadcaa61ab4103e73bf712ea39e4a29dcc1caa45427877c2ec525348e98ce", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "af035b6cc9c7d5a47c5ac649c75eea8a3905c1e1cf2e349beb94567ae93bde50" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "?? exec/workspace_probe.go\n", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": { + "exec/workspace_probe.go": "aca5dfbb14436d7459a87b669d646e6c74482d49e1116634e02fedf627b31d75" + } + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "native-local-source\n{\n \"components\": {\n \"Agent-Native\": {\n \"actual\": {\n \"branch\": \"feature/dependency-live-edit-probe\",\n \"changes\": [\n \"?? exec/workspace_probe.go\"\n ],\n \"common_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-Native/.git\",\n \"dirty\": true,\n \"git_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-Native/.git\",\n \"head\": \"6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e\",\n \"ignored\": [],\n \"locks\": [],\n \"operations\": [],\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git\",\n \"worktrees\": [\n \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-Native\"\n ]\n },\n \"declared\": null,\n \"path\": \".workspace/Agent-Native\",\n \"registered\": {\n \"baseline\": \"6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e\",\n \"branch\": \"feature/dependency-live-edit-probe\",\n \"linked\": false,\n \"mode\": \"editable\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git\",\n \"owner_root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"path\": \".workspace/Agent-Native\",\n \"source\": {\n \"consumer\": \"Agent-System-Backend\",\n \"consumers\": [\n \"Agent-System-Backend\"\n ],\n \"kind\": \"go-module\",\n \"module\": \"git-ssh.u1680832.nyat.app/weichen/Agent-Native.git\",\n \"origin\": {\n \"Hash\": \"6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e\",\n \"URL\": \"https://git-ssh.u1680832.nyat.app/weichen/Agent-Native\",\n \"VCS\": \"git\"\n },\n \"selections\": [\n {\n \"consumer\": \"Agent-System-Backend\",\n \"kind\": \"go-module\",\n \"module\": \"git-ssh.u1680832.nyat.app/weichen/Agent-Native.git\",\n \"origin\": {\n \"Hash\": \"6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e\",\n \"URL\": \"https://git-ssh.u1680832.nyat.app/weichen/Agent-Native\",\n \"VCS\": \"git\"\n },\n \"version\": \"v0.0.0-20261013153610-6ddd3da8df5c\"\n }\n ],\n \"version\": \"v0.0.0-20261013153610-6ddd3da8df5c\"\n }\n },\n \"repo\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git\",\n \"role\": \"go-library\"\n }\n },\n \"go_work\": null,\n \"root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"schema\": 1\n}\n/tmp/dependency-native-live-probe-01a1345f.go:5:2: no required module provides package git-ssh.u1680832.nyat.app/weichen/Agent-Native.git/exec: go.mod file not found in current directory or any parent directory; see 'go help modules'\nPASS: unlink excludes the uncommitted local Native function\n", + "output_sha256": "b9cf4fa099627ebd8cf51e15cbe171ab2dca671d49ecd7439ab3957b9c0ad433", + "receipt_sha256": "6cd67a41dd6da39990dbb57d96569ca4400ffdc5b3d17875b51e558d78cecf97" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:15:48.554834+00:00", + "command": "(cd .workspace/Agent-System-Backend && if GOWORK=off go run /tmp/dependency-native-live-probe-01a1345f.go; then exit 1; else printf \"PASS: declared remote Native has no local probe symbol\\n\"; fi) && test -f .workspace/Agent-Native/exec/workspace_probe.go", + "command_sha256": "8b61dcd0eaeb5e221d74b89480f118ec482c92c0a6e7c6537c8d9c1267aec680", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "640d101169825fda7e347dbbeced958427a39aa2eba3f5c013546ced2bfd4751", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "scripts/component-source.py": "996e0c3408a4be40271a8d67e81fc0351a705a282b32efd0f27f2b9ee89c915c", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "4e2dadcaa61ab4103e73bf712ea39e4a29dcc1caa45427877c2ec525348e98ce", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "af035b6cc9c7d5a47c5ac649c75eea8a3905c1e1cf2e349beb94567ae93bde50" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "?? exec/workspace_probe.go\n", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": { + "exec/workspace_probe.go": "aca5dfbb14436d7459a87b669d646e6c74482d49e1116634e02fedf627b31d75" + } + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\n M .task/feature-dependency-workspace.md\n M Makefile\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "640d101169825fda7e347dbbeced958427a39aa2eba3f5c013546ced2bfd4751", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "a9e5fcc670188e53e2762e51d9db6d2978ecfbb2e0a9f778bd8c60e4858fae25", + "scripts/component-source.py": "996e0c3408a4be40271a8d67e81fc0351a705a282b32efd0f27f2b9ee89c915c", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "4e2dadcaa61ab4103e73bf712ea39e4a29dcc1caa45427877c2ec525348e98ce", + "tests/test_dependency_ci.py": "a939545fc315be79b8d501a753b970e55b9f2e31bdd745a3581c1d01793f95da", + "tests/test_workspace_cutover.py": "af035b6cc9c7d5a47c5ac649c75eea8a3905c1e1cf2e349beb94567ae93bde50" + }, + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "?? exec/workspace_probe.go\n", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": { + "exec/workspace_probe.go": "aca5dfbb14436d7459a87b669d646e6c74482d49e1116634e02fedf627b31d75" + } + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7c83c41f8bdef99f6c1cb401de288561ae6385c10fce1e566553d66cf1a110da", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "# command-line-arguments\n/tmp/dependency-native-live-probe-01a1345f.go:8:34: undefined: native.WorkspaceDevelopmentProbe\nPASS: declared remote Native has no local probe symbol\n", + "output_sha256": "633ff45e9ddb798f31092d578f2c1e4cbdf4cdfcd0b73bbbf8c6cb8f9ece0f35", + "receipt_sha256": "ba6917cfd661f469e2636c75cdc87e15cb3ad7ead3179a3e50d77b5c87ce5fb7" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:35:53.334592+00:00", + "command": "python3 -m unittest tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source -v", + "command_sha256": "89fa000b267f5329376eebc2d18659069ca925a12d1ebfa8b7ad643578f3251c", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "7e02b793b5ca7455409bc3e1bd0755b1439353f7f1e6e434cf831b1a6b9f5a7e", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "83727b9094472cc0c4146fb513d02417c4ce5eade19f9be4395d6cbcfc49d0d1", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "7e02b793b5ca7455409bc3e1bd0755b1439353f7f1e6e434cf831b1a6b9f5a7e", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "83727b9094472cc0c4146fb513d02417c4ce5eade19f9be4395d6cbcfc49d0d1", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "test_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... FAIL\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 63, in test_registered_application_lock_materializes_fixed_source\n self.assertEqual(result.returncode, 0, result.stderr)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 1 != 0 : Checkout refused: Application and documentation source needs a fixed lock\n\n\n----------------------------------------------------------------------\nRan 1 test in 0.583s\n\nFAILED (failures=1)\n", + "output_sha256": "9262237d47739f84de010991e801f10465e34745192cfc23c516ada8d32d123d", + "receipt_sha256": "dd02577d4f6d90b26d41a2564cfcf7a55b57352ab4f01b70a9cac65457fdf9af" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:36:01.247149+00:00", + "command": "python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -v", + "command_sha256": "aec96627d88bea7de31c0a9715632d3316431ef9b5cd6d15741cb16317092664", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "6829574675551182df3a8244b5a5c8462b398a66e6a7236029b13be851d8ae20", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "83727b9094472cc0c4146fb513d02417c4ce5eade19f9be4395d6cbcfc49d0d1", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/architecture.yaml\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "6829574675551182df3a8244b5a5c8462b398a66e6a7236029b13be851d8ae20", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "83727b9094472cc0c4146fb513d02417c4ce5eade19f9be4395d6cbcfc49d0d1", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\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) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (tests.test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (tests.test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\ntest_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\n\n----------------------------------------------------------------------\nRan 19 tests in 12.299s\n\nOK\n", + "output_sha256": "a4b825f330687cc11bff701811df1d0291442ce73d4030ba68b6bcb79e2f71d3", + "receipt_sha256": "6171f44290b483c19d02ee86932c63c5148e87131715531579ccc95b638ae574" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:37:34.942286+00:00", + "command": "python3 /tmp/dependency-finish-examples-01a1345f.py", + "command_sha256": "d3abaadee9cd4bedfc23d54d9cb00920ecad0267db8c0383f75232023363af24", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "583ab8cf6d195676637cd1155016a63146afce3b44a3e40ff650a6c85c738989", + "untracked": { + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "83727b9094472cc0c4146fb513d02417c4ce5eade19f9be4395d6cbcfc49d0d1", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "3e0ca9db2d05e7c2fe38fb1c03714341d5bd262d7c37536bc2b71d411c18d1d7", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "83727b9094472cc0c4146fb513d02417c4ce5eade19f9be4395d6cbcfc49d0d1", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "EXAMPLE /home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/examples/downstream-rdm\ngo: added git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git v0.4.1-0.20261013154716-f1302ed5b395\n# example.com/agent-system-plugin-rdm [example.com/agent-system-plugin-rdm.test]\n./plugin_test.go:55:21: cannot use reg (variable of type *fakeRegistry) as extension.Registry value in argument to register: *fakeRegistry does not implement extension.Registry (missing method AddAdminZone)\n./plugin_test.go:96:44: cannot use fakeHost{…} (value of struct type fakeHost) as extension.Host value in argument to rdmPing: fakeHost does not implement extension.Host (missing method KnowledgeDelete)\nFAIL\texample.com/agent-system-plugin-rdm [build failed]\nFAIL\nTraceback (most recent call last):\n File \"/tmp/dependency-finish-examples-01a1345f.py\", line 11, in \n subprocess.run(args,cwd=path,env=env,check=True)\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/subprocess.py\", line 578, in run\n raise CalledProcessError(retcode, process.args,\n output=stdout, stderr=stderr)\nsubprocess.CalledProcessError: Command '('go', 'test', '-mod=readonly', './...')' returned non-zero exit status 1.\n", + "output_sha256": "3dbfe42dd93dc5cdfbabc1aec67b07920122d7c140cae1ce1ea7e6bd9bebe649", + "receipt_sha256": "2643f37efd91704762823d985aac6b5ed5f9a88d625322f16c3a17a04ed59d2f" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:38:23.167955+00:00", + "command": "python3 /tmp/dependency-finish-examples-01a1345f.py", + "command_sha256": "d3abaadee9cd4bedfc23d54d9cb00920ecad0267db8c0383f75232023363af24", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "360c69826c3f4f03974a95532798c34dc517858595e5f74dc32e3620966dda27", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "83727b9094472cc0c4146fb513d02417c4ce5eade19f9be4395d6cbcfc49d0d1", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "360c69826c3f4f03974a95532798c34dc517858595e5f74dc32e3620966dda27", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "83727b9094472cc0c4146fb513d02417c4ce5eade19f9be4395d6cbcfc49d0d1", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "EXAMPLE /home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/examples/downstream-rdm\nok \texample.com/agent-system-plugin-rdm\t0.002s\nEXAMPLE /home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Logging-System/examples/trace\ngo: added git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git v0.0.0-20261013150648-28d2d5074347\ngo: added git-ssh.u1680832.nyat.app/weichen/Logging-System.git v0.0.0-20261013150647-9c5442f06d05\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/examples/trace\t0.002s\n", + "output_sha256": "bef6dc6fb99aebb693e4ae694fc8fc2e278b5f300da7153e1a59cf41f4c444bd", + "receipt_sha256": "5b55a328a8d2258ae568a76661c60d2fc9dd3db62e8f2368283d5f8211d4dd01" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:39:41.623261+00:00", + "command": "git diff --check", + "command_sha256": "466c2f308b48c7661d646fdd068fbecea974c665fe65dbf8ed508f224180ce0b", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "514ce2c1ea4459ee4a338ef20ccec25f6283adde90c81257eb23d4ac13d2cf62", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "83727b9094472cc0c4146fb513d02417c4ce5eade19f9be4395d6cbcfc49d0d1", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "514ce2c1ea4459ee4a338ef20ccec25f6283adde90c81257eb23d4ac13d2cf62", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "83727b9094472cc0c4146fb513d02417c4ce5eade19f9be4395d6cbcfc49d0d1", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "", + "output_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "receipt_sha256": "bdf197f395340e24ad7ea3f3cbb962df1b82be8fd2bd198689046cbfa10a953e" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:39:57.350898+00:00", + "command": "python3 -m unittest tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module -v", + "command_sha256": "02614a6ae6430ad94e7049e490d1e542d61586879b41258d03f5296b83b53695", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "f692dd8817941dd1e416d0df209766955a9cb5176aed9ead0118292766e1624d", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "64ca34758662cd2e29be9d84136dc314e497bd3e9799b10a9a7302a09a0fe960", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "1e5c6b9c10ba77ed34663fd670138621a17342bd", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "f692dd8817941dd1e416d0df209766955a9cb5176aed9ead0118292766e1624d", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "64ca34758662cd2e29be9d84136dc314e497bd3e9799b10a9a7302a09a0fe960", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "test_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) ... \n test_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) (repo='Logging-System') ... FAIL\n test_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) (repo='Agent-Squad') ... FAIL\ntest_go_prefetch_covers_logging_trace_module (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module) ... FAIL\n\n======================================================================\nFAIL: test_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) (repo='Logging-System')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 209, in test_component_ci_executes_nested_go_module_tests\n self.assertNotEqual(result.returncode, 0, \"nested regression was skipped by component CI\")\n ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 0 == 0 : nested regression was skipped by component CI\n\n======================================================================\nFAIL: test_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) (repo='Agent-Squad')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 209, in test_component_ci_executes_nested_go_module_tests\n self.assertNotEqual(result.returncode, 0, \"nested regression was skipped by component CI\")\n ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 0 == 0 : nested regression was skipped by component CI\n\n======================================================================\nFAIL: test_go_prefetch_covers_logging_trace_module (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 223, in test_go_prefetch_covers_logging_trace_module\n self.assertTrue(self.requests, \"trace module's private requirement was not prefetched\")\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: [] is not true : trace module's private requirement was not prefetched\n\n----------------------------------------------------------------------\nRan 2 tests in 1.012s\n\nFAILED (failures=3)\n", + "output_sha256": "f6e1f8891d51f1c30684419481359e50a0c39536f867d0d888283e097f0fb2d5", + "receipt_sha256": "682950c0156b964100ce10c75f096b1d848141795b43e0b07b99f5ef10565abe" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:42:00.705055+00:00", + "command": "python3 -m unittest tests.test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums -v", + "command_sha256": "4c9ac535aec27f247f372b606640fae68cde40eec70b75b8ac0f291290ccd206", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "f97c606bbb66f8b92d39b4898313020bbcd0c8994a292329b18c6ee519893171", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "f97c606bbb66f8b92d39b4898313020bbcd0c8994a292329b18c6ee519893171", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "test_go_prefetch_rejects_mutation_of_committed_checksums (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums) ... FAIL\n\n======================================================================\nFAIL: test_go_prefetch_rejects_mutation_of_committed_checksums (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 232, in test_go_prefetch_rejects_mutation_of_committed_checksums\n self.assertNotEqual(result.returncode, 0, \"private acquisition silently rewrote committed checksums\")\n ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 0 == 0 : private acquisition silently rewrote committed checksums\n\n----------------------------------------------------------------------\nRan 1 test in 0.622s\n\nFAILED (failures=1)\n", + "output_sha256": "cdaedd7b35cd4ce6bd70ac344286065720cd11b936bec5f4a32ae0615b804384", + "receipt_sha256": "d21f3eb51a514a7600c841ec4ad8fc3254479cd37bea97c22dd8316cd0ed62db" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:42:03.524267+00:00", + "command": "python3 /tmp/dependency-check-docs-final-01a1345f.py", + "command_sha256": "5dc2d73a4dc7fb5db16a8dd47ac36f84e5a98aeabd44a3f0b6162062e9e01a37", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "d94bc4dbc4d8a8afd382e6c6302a40aa5833caabff740826fae21aecd3c1d6e7", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "d94bc4dbc4d8a8afd382e6c6302a40aa5833caabff740826fae21aecd3c1d6e7", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "SELF 32c7fa6c10e89c9775b8d84495a2b54edb461f128e9321d2cbbf030dd84a5adf /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md\nSELF b90d57e1dfe172bc34c9527e2875d5a10df611822e0cd92501d76a4f15ec5fd9 /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/2026-10-13-versioned-dependencies-implementation-plan.md\nSELF 29b2a2c2f13c101865d0eb46e9c966f954c45c01d379f054d4c197cc5285dc2f /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/INDEX.md\nSELF 60a9307b298d99939c12189643a2abfd397cccf4cc809ee2d4f8008b9d1d492c /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/README.md\nSELF f0fb916ff17cf1b079b7c89c8a34380839317c45a8e9e415bdf2da10392a80e9 /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/standards/multi-repo.md\nSELF bd1ce8f432732cced1a3edce42e593ba5219ae3231b395e6480b3208cb4b1d2b /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/standards/collaboration.md\nSELF ff6d51d5b1426b256a94c7c87e86e47ff9cb7337fd1c5edf9edcce42de29e4e8 /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/workflows/adoption.md\nPASS: R1-R15, U1-U8, general/project separation, relative links: 116\n", + "output_sha256": "361662eb8029a9fe468f8fa37923c0c128f380f93b2dc8510591f35550d91cd2", + "receipt_sha256": "ef1f4b0770f2a7eed2961edd705ac6c97f5322b326ca7463d7366a3b716623d8" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:42:29.606404+00:00", + "command": "git -C /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan add AGENTS.md README.md docs/proposals/INDEX.md docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md && git -C /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan commit --only -F /tmp/dependency-docs-transition-commit-01a1345f.txt -- AGENTS.md README.md docs/proposals/INDEX.md docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md && git -C /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan push origin feature/dependency-workspace-plan", + "command_sha256": "f4b774990541a7b8b0248f584172294e4900610ef468c7b22cc562204acf136f", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "af527144c2b7e40e59dad252994569f66713bd84933b4797637d66ebaa213f11", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "af527144c2b7e40e59dad252994569f66713bd84933b4797637d66ebaa213f11", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "[feature/dependency-workspace-plan 7ba50e5] Record approved branch transition and dependency entry points\n 4 files changed, 9 insertions(+), 7 deletions(-)\nremote: \nremote: Create a new pull request for 'feature/dependency-workspace-plan': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/new/feature/dependency-workspace-plan \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Documents.git\n * [new branch] feature/dependency-workspace-plan -> feature/dependency-workspace-plan\n", + "output_sha256": "1fcdc02c9730d7156d6849703446bba80f700ff32770a23abae6f697c9711eb3", + "receipt_sha256": "de67bb38c500b09eaea8326a159875d0dd14376b2b7a45d97e6c7d623a8e0a88" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:42:43.583261+00:00", + "command": "python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -v", + "command_sha256": "aec96627d88bea7de31c0a9715632d3316431ef9b5cd6d15741cb16317092664", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "71e18ea165032b0c5647972135a19b116a434fe8d072e444ddd98d4304bac085", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "b638bc6284c5cf0df18b1d532b22e7f318bb5b213b38e65ea2d2127245de2f7a", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\ntest_go_prefetch_covers_logging_trace_module (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module) ... ok\ntest_go_prefetch_rejects_mutation_of_committed_checksums (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums) ... ok\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) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (tests.test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (tests.test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\ntest_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\n\n----------------------------------------------------------------------\nRan 22 tests in 16.092s\n\nOK\n", + "output_sha256": "2302abae5af5ee3b7cbf2590100004dc45e6af802ac728a162c99b11704ef4f4", + "receipt_sha256": "f4a6b44861a0a48ad87014a26624353ed1fa65b1c55aea2f87ce27d8e6bd5b0f" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:43:14.415768+00:00", + "command": "python3 /tmp/dependency-ci-package-check.py", + "command_sha256": "dc0b57002fd501fafd6d8fc9bdd7e6a68c67605e4e9ffa68d6bcc79c71b1d241", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "bc9b3a0be5d1aed074318e8591f51b2ec03591adc483036b02eb9ffde08585ea", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "bc9b3a0be5d1aed074318e8591f51b2ec03591adc483036b02eb9ffde08585ea", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "Agent-System-Core pack --ignore-scripts: cda89816421af5e8ce4e0532a19c921614a3836a6ff3be02a0013ca6db039078\nAgent-System-UI pack --ignore-scripts: 5cdaf3d9cc3f93316d0f0765fd6ffce28bc61e8f125ee3c717cc0f2d118382ac\n\nadded 8 packages in 291ms\nFinal provider exports consumed without lifecycle scripts\nCONSUMER=/tmp/dependency-ci-package-consumer-gon5cq7t\n", + "output_sha256": "14f5511a9c84b6cd40dd1ed26ffe0d5fa0a31f8eeaa6a7b026e75e7f0a6e2300", + "receipt_sha256": "9bc65e1ca78eb389cb16697c025390130959e544de942430944571613fb7d59b" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:43:46.810783+00:00", + "command": "python3 /tmp/dependency-ci-final-probe.py", + "command_sha256": "80350596743319a77dfad276d10b2181afeadc6623bbaa6b01ff4ef5475708c5", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "ead5b8e0d35c90cb4cae93c71bdab5cf9cefc2ea14800332f1e3e9d4b79598c0", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "ead5b8e0d35c90cb4cae93c71bdab5cf9cefc2ea14800332f1e3e9d4b79598c0", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "SOURCE_EXPORT=/tmp/dependency-ci-final-source-35886fek\nLogging-System: indexed source exported with no legacy source directories\nError-Code-System: indexed source exported with no legacy source directories\nAgent-System-Core: indexed source exported with no legacy source directories\nAgent-Native: indexed source exported with no legacy source directories\nAgent-Intent: indexed source exported with no legacy source directories\nAgent-Command: indexed source exported with no legacy source directories\nAgent-Squad: indexed source exported with no legacy source directories\nAgent-System-Backend: indexed source exported with no legacy source directories\nAgent-System-UI: indexed source exported with no legacy source directories\nAgent-System-Frontend: indexed source exported with no legacy source directories\nAgent-System-RDM: indexed source exported with no legacy source directories\nGO_SOURCE_CHECK Logging-System/. exit=0\nGO_SOURCE_CHECK Logging-System/examples/trace exit=1\nPREFETCH dependency-files-mutated=True\nGO_SOURCE_CHECK Error-Code-System/. exit=0\nGO_SOURCE_CHECK Agent-System-Core/. exit=0\nGO_SOURCE_CHECK Agent-Native/. exit=0\nGO_SOURCE_CHECK Agent-Intent/. exit=1\nPREFETCH dependency-files-mutated=True\nGO_SOURCE_CHECK Agent-Command/. exit=0\nGO_SOURCE_CHECK Agent-Squad/. exit=0\nGO_SOURCE_CHECK Agent-Squad/adapters/sqlite exit=1\nPREFETCH dependency-files-mutated=True\nGO_SOURCE_CHECK Agent-Squad/adapters/native exit=0\nGO_SOURCE_CHECK Agent-Squad/adapters/intent exit=1\nPREFETCH dependency-files-mutated=True\nGO_SOURCE_CHECK Agent-Squad/adapters/a2a exit=0\nGO_SOURCE_CHECK Agent-Squad/cmd/agent-squad exit=1\nPREFETCH dependency-files-mutated=True\nGO_SOURCE_CHECK Agent-System-Backend/. exit=1\nPREFETCH dependency-files-mutated=True\nGO_SOURCE_CHECK Agent-System-RDM/. exit=1\nPREFETCH dependency-files-mutated=True\nALL_EXPORT_CHECKS_FINISHED\n", + "output_sha256": "c5e4980899d6264d2eeeae791d7c236488609a666f1c194c6a2b1bbc686153fb", + "receipt_sha256": "f46b3d7288ca3b92732e27c50622ec57571acbe1879cd0edb34395d067954687" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:44:04.069580+00:00", + "command": "python3 /tmp/dependency-complete-backend-source-01a1345f.py", + "command_sha256": "3c3dd302cf463d2d0dfe6f906ed94dc4283724e10a9e489482d2d640b2df4890", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "ead5b8e0d35c90cb4cae93c71bdab5cf9cefc2ea14800332f1e3e9d4b79598c0", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "f9de5afea27cc2a816064bc18930782ac457d5e1b4818adcdda4442878e54016", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "RUN ['go', 'get', 'git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git@37b273e35f88473e369e4be70c80e6c8a8545ee3', 'git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/native@37b273e35f88473e369e4be70c80e6c8a8545ee3']\ngo: downloading git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/native v0.0.0-20261013154435-37b273e35f88\ngo: downloading git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git v0.0.0-20261013154435-37b273e35f88\ngo: upgraded git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git v0.0.0-20261013154230-ed0952e08fd7 => v0.0.0-20261013154435-37b273e35f88\ngo: upgraded git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/native v0.0.0-20261013154230-ed0952e08fd7 => v0.0.0-20261013154435-37b273e35f88\nRUN ['go', 'mod', 'download', 'all']\ngo: github.com/stretchr/objx@v0.1.0: Get \"https://proxy.golang.org/github.com/stretchr/objx/@v/v0.1.0.zip\": net/http: TLS handshake timeout\ngo: golang.org/x/net@v0.57.0: Get \"https://proxy.golang.org/golang.org/x/net/@v/v0.57.0.zip\": net/http: TLS handshake timeout\ngo: golang.org/x/term@v0.45.0: Get \"https://proxy.golang.org/golang.org/x/term/@v/v0.45.0.zip\": net/http: TLS handshake timeout\nTraceback (most recent call last):\n File \"/tmp/dependency-complete-backend-source-01a1345f.py\", line 8, in \n print('RUN',list(argv),flush=True);subprocess.run(argv,cwd=repo,env=env,check=True)\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/subprocess.py\", line 578, in run\n raise CalledProcessError(retcode, process.args,\n output=stdout, stderr=stderr)\nsubprocess.CalledProcessError: Command '('go', 'mod', 'download', 'all')' returned non-zero exit status 1.\n", + "output_sha256": "314bcc9e1163935d45baaffa209f1d94618e997356d292e7c173fd0acf22996f", + "receipt_sha256": "f3b4c92f22d989d8b767c4ed12171a851d187dd859b315a5a1b42b03e6c3ffff" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:40:43.300865+00:00", + "command": "make test-governance", + "command_sha256": "9776a8dfcfb8f4c95abc94c40cae3a2c0e91e8f4b91fe95d98085c290e929158", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "f97c606bbb66f8b92d39b4898313020bbcd0c8994a292329b18c6ee519893171", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "64ca34758662cd2e29be9d84136dc314e497bd3e9799b10a9a7302a09a0fe960", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "973fdc1f454e5388c31be29b347458d75fc661ea60baac882279228aa4357056", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 2, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\nPYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p 'test_*.py' -v\ntest_candidate_cannot_read_checkout_credentials (test_ci_credentials.CheckoutTests.test_candidate_cannot_read_checkout_credentials) ... ok\ntest_candidate_submodule_update_commands_are_rejected (test_ci_credentials.CheckoutTests.test_candidate_submodule_update_commands_are_rejected) ... ok\ntest_credential_destination_confined_to_injected_server (test_ci_credentials.CheckoutTests.test_credential_destination_confined_to_injected_server) ... ok\ntest_external_or_unlisted_urls_are_rejected_before_component_fetch (test_ci_credentials.CheckoutTests.test_external_or_unlisted_urls_are_rejected_before_component_fetch) ... ok\ntest_inherited_template_hook_does_not_execute_with_credentials (test_ci_credentials.CheckoutTests.test_inherited_template_hook_does_not_execute_with_credentials) ... ok\ntest_nested_external_url_is_rejected_before_authenticated_fetch (test_ci_credentials.CheckoutTests.test_nested_external_url_is_rejected_before_authenticated_fetch) ... ok\ntest_rdm_pin_fetch_is_three_shas_on_the_allowlist (test_ci_credentials.CheckoutTests.test_rdm_pin_fetch_is_three_shas_on_the_allowlist) ... ok\ntest_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials (test_ci_credentials.CheckoutTests.test_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials) ... ok\ntest_redirects_do_not_forward_credential_or_fetch_unlisted_target (test_ci_credentials.CheckoutTests.test_redirects_do_not_forward_credential_or_fetch_unlisted_target) ... ok\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\ntest_developer_package_tarball_overrides_do_not_reach_formal_tests (test_composition.CompositionTests.test_developer_package_tarball_overrides_do_not_reach_formal_tests) ... ok\ntest_dirty_root_lock_is_rejected (test_composition.CompositionTests.test_dirty_root_lock_is_rejected) ... ok\ntest_fixed_commits_embed_assets_without_touching_developer_checkout (test_composition.CompositionTests.test_fixed_commits_embed_assets_without_touching_developer_checkout) ... ok\ntest_fixed_root_governance_and_boundaries_receive_proven_source_map (test_composition.CompositionTests.test_fixed_root_governance_and_boundaries_receive_proven_source_map) ... ok\ntest_frontend_dist_symlink_cannot_import_assets_from_outside_source (test_composition.CompositionTests.test_frontend_dist_symlink_cannot_import_assets_from_outside_source) ... ok\ntest_historical_rdm_product_still_builds_from_legacy_pins (test_composition.CompositionTests.test_historical_rdm_product_still_builds_from_legacy_pins) ... ok\ntest_local_go_replace_is_rejected (test_composition.CompositionTests.test_local_go_replace_is_rejected) ... ok\ntest_locked_missing_revision_is_rejected (test_composition.CompositionTests.test_locked_missing_revision_is_rejected) ... ok\ntest_missing_frontend_assets_fails_before_publishing_binary (test_composition.CompositionTests.test_missing_frontend_assets_fails_before_publishing_binary) ... ok\ntest_modified_go_module_cache_is_rejected_before_product_publication (test_composition.CompositionTests.test_modified_go_module_cache_is_rejected_before_product_publication) ... ok\ntest_npm_local_dependency_overlay_is_rejected (test_composition.CompositionTests.test_npm_local_dependency_overlay_is_rejected) ... ok\ntest_project_test_mode_refuses_missing_boundary_gate (test_composition.CompositionTests.test_project_test_mode_refuses_missing_boundary_gate) ... ok\ntest_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock (test_composition.CompositionTests.test_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock) ... ok\ntest_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache (test_composition.CompositionTests.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache) ... ok\ntest_source_path_escape_is_rejected (test_composition.CompositionTests.test_source_path_escape_is_rejected) ... ok\ntest_test_target_checks_fixed_go_library_and_ui_sources (test_composition.CompositionTests.test_test_target_checks_fixed_go_library_and_ui_sources) ... ok\ntest_test_target_runs_real_frontend_and_go_tests (test_composition.CompositionTests.test_test_target_runs_real_frontend_and_go_tests) ... ok\ntest_version_and_plugin_assets_come_from_committed_root (test_composition.CompositionTests.test_version_and_plugin_assets_come_from_committed_root) ... ok\ntest_versioned_rdm_product_entry_uses_fixed_composer (test_composition.CompositionTests.test_versioned_rdm_product_entry_uses_fixed_composer) ... ok\ntest_component_checkout_removes_tokens_before_candidate_executes (test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_component_ci_executes_nested_go_module_tests (test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) ... \n test_component_ci_executes_nested_go_module_tests (test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) (repo='Logging-System') ... FAIL\n test_component_ci_executes_nested_go_module_tests (test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) (repo='Agent-Squad') ... FAIL\ntest_external_npm_git_source_rejected_before_authenticated_request (test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\ntest_go_prefetch_covers_logging_trace_module (test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module) ... FAIL\ntest_go_prefetch_uses_only_registered_private_repo_and_local_toolchain (test_dependency_ci.DependencyCITests.test_go_prefetch_uses_only_registered_private_repo_and_local_toolchain) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_registered_application_lock_materializes_fixed_source (test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\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\ntest_pin_is_three_fixed_shas (test_lifecycle_pin.RdmPinTests.test_pin_is_three_fixed_shas) ... ok\ntest_rejects_url_and_short_sha (test_lifecycle_pin.RdmPinTests.test_rejects_url_and_short_sha) ... ok\ntest_addr_change_keeps_database_and_auth (test_svc.SvcDbRecoveryTests.test_addr_change_keeps_database_and_auth) ... ok\ntest_auth_preflight_aligns_with_effective_env_dsn (test_svc.SvcDbRecoveryTests.test_auth_preflight_aligns_with_effective_env_dsn) ... ok\ntest_batch_update_stops_second_service_despite_prior_pidcheck (test_svc.SvcDbRecoveryTests.test_batch_update_stops_second_service_despite_prior_pidcheck)\n批量 update 不得用上一服务的 SVC_PIDCHECK 误判下一服务进程。 ... ok\ntest_dbref_binding_survives_bare_restart_and_redeploy (test_svc.SvcDbRecoveryTests.test_dbref_binding_survives_bare_restart_and_redeploy) ... ok\ntest_explicit_unbind_blocks_residual_env_dsn (test_svc.SvcDbRecoveryTests.test_explicit_unbind_blocks_residual_env_dsn) ... ok\ntest_external_dsn_and_conffile_recover_on_bare_start (test_svc.SvcDbRecoveryTests.test_external_dsn_and_conffile_recover_on_bare_start) ... ok\ntest_legacy_exec_dsn_survives_consecutive_restarts (test_svc.SvcDbRecoveryTests.test_legacy_exec_dsn_survives_consecutive_restarts) ... ok\ntest_mock_conflict_and_legacy_binary_refuse (test_svc.SvcDbRecoveryTests.test_mock_conflict_and_legacy_binary_refuse) ... ok\ntest_rdm_companion_missing_web_fails_deploy (test_svc.SvcDbRecoveryTests.test_rdm_companion_missing_web_fails_deploy) ... ok\ntest_rdm_source_commits_and_update_track (test_svc.SvcDbRecoveryTests.test_rdm_source_commits_and_update_track) ... [main ce003d7] rdm v2\n 1 file changed, 1 insertion(+)\n create mode 100644 marker\nTo /tmp/svc-db-regress-jxj8wmwx/rdmremote.git\n db24a50..ce003d7 main -> main\nok\ntest_rdm_source_deploy_end_to_end (test_svc.SvcDbRecoveryTests.test_rdm_source_deploy_end_to_end) ... ok\ntest_refusals_keep_registration_without_sqlite_fallback (test_svc.SvcDbRecoveryTests.test_refusals_keep_registration_without_sqlite_fallback) ... ok\ntest_restart_refusal_happens_before_stopping_running_service (test_svc.SvcDbRecoveryTests.test_restart_refusal_happens_before_stopping_running_service) ... ok\ntest_seed_owner_override_skips_account_lookup (test_svc.SvcDbRecoveryTests.test_seed_owner_override_skips_account_lookup) ... ok\ntest_seed_puts_with_temporary_bearer_key_when_auth_on (test_svc.SvcDbRecoveryTests.test_seed_puts_with_temporary_bearer_key_when_auth_on) ... ok\ntest_seed_puts_without_credentials_when_auth_off (test_svc.SvcDbRecoveryTests.test_seed_puts_without_credentials_when_auth_off) ... ok\ntest_sequential_restarts_no_cross_dsn_and_no_secret_leak (test_svc.SvcDbRecoveryTests.test_sequential_restarts_no_cross_dsn_and_no_secret_leak) ... ok\ntest_source_switch_requires_flag (test_svc.SvcDbRecoveryTests.test_source_switch_requires_flag) ... ok\ntest_static_fresh_deploy_registers_pidcheck_and_starts (test_svc.SvcDbRecoveryTests.test_static_fresh_deploy_registers_pidcheck_and_starts)\n全新 static --dir:登记须含 pidcheck;首启探活不得把 http.server 判死。 ... ok\ntest_update_preserves_binding (test_svc.SvcDbRecoveryTests.test_update_preserves_binding) ... ok\ntest_backup_custom_out_not_pruned (test_svc_backup.SvcAgentBackupTests.test_backup_custom_out_not_pruned) ... ok\ntest_backup_event_recorded (test_svc_backup.SvcAgentBackupTests.test_backup_event_recorded) ... ok\ntest_backup_live_writer_consistent_and_outside_runtime (test_svc_backup.SvcAgentBackupTests.test_backup_live_writer_consistent_and_outside_runtime)\n活跃 WAL 写入者:快照可读、行在、integrity ok;-wal/-shm 不入快照。 ... ok\n/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/suite.py:107: ResourceWarning: unclosed file <_io.TextIOWrapper name=3 encoding='UTF-8'>\n for index, test in enumerate(self):\nResourceWarning: Enable tracemalloc to get the object allocation traceback\ntest_backup_manifest_sha_matches (test_svc_backup.SvcAgentBackupTests.test_backup_manifest_sha_matches) ... ok\ntest_backup_non_sqlite_db_kept_raw_without_leftovers (test_svc_backup.SvcAgentBackupTests.test_backup_non_sqlite_db_kept_raw_without_leftovers) ... ok\ntest_backup_rejects_postgres_with_db_hint (test_svc_backup.SvcAgentBackupTests.test_backup_rejects_postgres_with_db_hint) ... ok\ntest_backup_requires_registration (test_svc_backup.SvcAgentBackupTests.test_backup_requires_registration) ... ok\ntest_backup_target_exists_refused (test_svc_backup.SvcAgentBackupTests.test_backup_target_exists_refused) ... ok\ntest_backup_without_sqlite3_refuses (test_svc_backup.SvcAgentBackupTests.test_backup_without_sqlite3_refuses)\nPATH 无 sqlite3 → 拒绝(不回退裸拷贝)。重建与真实 PATH 等价的工具目录、 ... ok\ntest_retention_and_listing (test_svc_backup.SvcAgentBackupTests.test_retention_and_listing) ... ok\ntest_rm_purge_removes_snapshots (test_svc_backup.SvcAgentBackupTests.test_rm_purge_removes_snapshots) ... ok\ntest_forward_only_requires_confirm_and_backup (test_svc_deploy_txn.DeployTxnTests.test_forward_only_requires_confirm_and_backup) ... ok\ntest_schema_incompatible_refuses_before_stop (test_svc_deploy_txn.DeployTxnTests.test_schema_incompatible_refuses_before_stop) ... ok\ntest_replace_failure_keeps_original (test_svc_identity.AtomicWriteTests.test_replace_failure_keeps_original) ... ok\ntest_I3_start_ensures_sqlite_identity (test_svc_identity.IdentityTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_identity.IdentityTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_identity.IdentityTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_identity.IdentityTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_identity.IdentityTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_identity.IdentityTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_identity.IdentityTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_identity.IdentityTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_identity.IdentityTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_identity.IdentityTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_identity.IdentityTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_identity.IdentityTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_identity.IdentityTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_identity.IdentityTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_identity.IdentityTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_Z_real_pg_not_run (test_svc_identity.IdentityTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_identity.IdentityTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_identity.IdentityTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_identity.IdentityTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_identity.IdentityTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_identity.IdentityTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_identity.IdentityTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_identity.IdentityTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_identity.IdentityTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_identity.IdentityTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_identity.IdentityTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_identity.IdentityTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_identity.IdentityTests.test_watchdog_print_plan) ... ok\ntest_caller_identity_env_does_not_reach_serve (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_caller_identity_env_does_not_reach_serve) ... ok\ntest_recover_fails_when_port_stolen (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_two_bare_restarts_keep_identity (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_two_bare_restarts_keep_identity) ... ok\ntest_watchdog_print_plan (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_watchdog_print_plan) ... ok\ntest_addr_defaults_to_default_addr (test_svc_precheck.AgentListenRejectedPrecheck.test_addr_defaults_to_default_addr) ... ok\ntest_incident_combo_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_incident_combo_not_rejected) ... ok\ntest_insecure_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_insecure_not_rejected) ... ok\ntest_loopback_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_loopback_not_rejected) ... ok\ntest_nonloop_auth_off_with_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_auth_off_with_dsn_rejected) ... ok\ntest_nonloop_no_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_no_dsn_rejected) ... ok\ntest_auth_off_beats_dsn (test_svc_precheck.DbAuthEnabledMatrix.test_auth_off_beats_dsn) ... ok\ntest_auth_on_explicit (test_svc_precheck.DbAuthEnabledMatrix.test_auth_on_explicit) ... ok\ntest_auto_with_effective_dsn_is_authed (test_svc_precheck.DbAuthEnabledMatrix.test_auto_with_effective_dsn_is_authed) ... ok\ntest_auto_without_dsn_is_denied (test_svc_precheck.DbAuthEnabledMatrix.test_auto_without_dsn_is_denied) ... ok\ntest_no_auth_no_dsn_denied (test_svc_precheck.DbAuthEnabledMatrix.test_no_auth_no_dsn_denied) ... ok\ntest_broken_dbref_refuses (test_svc_precheck.ResolveDbConfigFixtures.test_broken_dbref_refuses) ... ok\ntest_legacy_exec_dsn_migrates_to_recoverable_keys (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_migrates_to_recoverable_keys) ... ok\ntest_legacy_exec_dsn_without_instance_goes_to_dsn_key (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_without_instance_goes_to_dsn_key) ... ok\ntest_migration_is_idempotent (test_svc_precheck.ResolveDbConfigFixtures.test_migration_is_idempotent) ... ok\ntest_no_dsn_no_dbref_is_sqlite (test_svc_precheck.ResolveDbConfigFixtures.test_no_dsn_no_dbref_is_sqlite) ... ok\ntest_post_g17_exec_restores_dsn_from_dbref (test_svc_precheck.ResolveDbConfigFixtures.test_post_g17_exec_restores_dsn_from_dbref) ... ok\ntest_env_config_resets_identity_env (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_identity_env) ... ok\ntest_env_config_resets_pidcheck_runtime_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_pidcheck_runtime_state) ... ok\ntest_env_config_resets_resolver_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_resolver_state) ... ok\ntest_help_topic_lists_rdm_admin (test_svc_rdm_admin.RdmAdminTests.test_help_topic_lists_rdm_admin) ... ok\ntest_recover_fails_when_port_stolen (test_svc_rdm_admin.RdmAdminTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_rdm_admin.RdmAdminTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_rdm_admin.RdmAdminTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_rdm_admin.RdmAdminTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_rdm_admin.RdmAdminTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_rdm_admin.RdmAdminTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_rdm_admin.RdmAdminTests.test_recover_skips_when_lock_held) ... ok\ntest_refuses_when_base_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_base_db_missing) ... ok\ntest_refuses_when_rdm_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_rdm_db_missing) ... ok\ntest_show_empty_ledger_hint (test_svc_rdm_admin.RdmAdminTests.test_show_empty_ledger_hint) ... ok\ntest_show_known_owner_no_warning (test_svc_rdm_admin.RdmAdminTests.test_show_known_owner_no_warning) ... ok\ntest_show_prints_ledger_and_flags_unknown_owner (test_svc_rdm_admin.RdmAdminTests.test_show_prints_ledger_and_flags_unknown_owner) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_rdm_admin.RdmAdminTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_rdm_admin.RdmAdminTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_rdm_admin.RdmAdminTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_status_lists_rdm_admin_row_and_warning (test_svc_rdm_admin.RdmAdminTests.test_status_lists_rdm_admin_row_and_warning) ... ok\ntest_status_silent_without_rdm_db (test_svc_rdm_admin.RdmAdminTests.test_status_silent_without_rdm_db) ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_rdm_admin.RdmAdminTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_transfer_idempotent_when_already_owner (test_svc_rdm_admin.RdmAdminTests.test_transfer_idempotent_when_already_owner) ... ok\ntest_transfer_rejects_empty_ledger (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_empty_ledger) ... ok\ntest_transfer_rejects_owner_missing_from_base_users (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_owner_missing_from_base_users) ... ok\ntest_transfer_rewrites_single_row_with_provenance (test_svc_rdm_admin.RdmAdminTests.test_transfer_rewrites_single_row_with_provenance) ... ok\ntest_unknown_subcommand_usage_exit_2 (test_svc_rdm_admin.RdmAdminTests.test_unknown_subcommand_usage_exit_2) ... ok\ntest_watchdog_print_plan (test_svc_rdm_admin.RdmAdminTests.test_watchdog_print_plan) ... ok\ntest_U3_real_agent_identity_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_agent_identity_lifecycle_sqlite)\n真实组合二进制:领养 ensure → verify → 两次裸重启身份/锚点稳定; ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_pg_identity_env_delivery (test_svc_realcombo.RealComboTests.test_U3_real_pg_identity_env_delivery)\n真实 PostgreSQL:AGENT_SYSTEM_DSN 环境交付 ensure/verify(凭据不进 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_binary_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_rdm_binary_lifecycle_sqlite)\n真实 RDM 组合二进制:identity 接线(Backend 公共 CLI)→ serve 门禁 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_full_deploy_track (test_svc_realcombo.RealComboTests.test_U3_real_rdm_full_deploy_track)\n全轨:materialize(真实 make build)→ 候选身份门禁 → release 切换 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_realcombo.RealComboTests.test_recover_fails_when_port_stolen) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_ignores_never_started_service (test_svc_realcombo.RealComboTests.test_recover_ignores_never_started_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_noop_while_running (test_svc_realcombo.RealComboTests.test_recover_noop_while_running) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_reserved_name_rejected (test_svc_realcombo.RealComboTests.test_recover_reserved_name_rejected) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_respects_explicit_stop (test_svc_realcombo.RealComboTests.test_recover_respects_explicit_stop) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_restarts_sigkilled_service (test_svc_realcombo.RealComboTests.test_recover_restarts_sigkilled_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_skips_when_lock_held (test_svc_realcombo.RealComboTests.test_recover_skips_when_lock_held) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_realcombo.RealComboTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_records_autostart_and_stop_clears (test_svc_realcombo.RealComboTests.test_start_records_autostart_and_stop_clears) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_rejects_foreign_port_occupant (test_svc_realcombo.RealComboTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_stop_on_dead_process_clears_autostart (test_svc_realcombo.RealComboTests.test_stop_on_dead_process_clears_autostart) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_watchdog_print_plan (test_svc_realcombo.RealComboTests.test_watchdog_print_plan) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_recover.SvcAutoRecoverTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_recover.SvcAutoRecoverTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_recover.SvcAutoRecoverTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_recover.SvcAutoRecoverTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_recover.SvcAutoRecoverTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_recover.SvcAutoRecoverTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_recover.SvcAutoRecoverTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_recover.SvcAutoRecoverTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_recover.SvcAutoRecoverTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_recover.SvcAutoRecoverTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_recover.SvcAutoRecoverTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_recover.SvcAutoRecoverTests.test_watchdog_print_plan) ... ok\ntest_I3_start_ensures_sqlite_identity (test_svc_u2.U2ReleaseTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_u2.U2ReleaseTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_u2.U2ReleaseTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_u2.U2ReleaseTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_u2.U2ReleaseTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_u2.U2ReleaseTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_u2.U2ReleaseTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_u2.U2ReleaseTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_u2.U2ReleaseTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_u2.U2ReleaseTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_u2.U2ReleaseTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_u2.U2ReleaseTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_u2.U2ReleaseTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_U2_build_failure_keeps_old_running (test_svc_u2.U2ReleaseTests.test_U2_build_failure_keeps_old_running) ... ok\ntest_U2_fault_after_switch_rolls_back_on_next_start (test_svc_u2.U2ReleaseTests.test_U2_fault_after_switch_rolls_back_on_next_start) ... ok\ntest_U2_health_timeout_rolls_back (test_svc_u2.U2ReleaseTests.test_U2_health_timeout_rolls_back) ... ok\ntest_U2_journal_interrupt_resolved_on_start (test_svc_u2.U2ReleaseTests.test_U2_journal_interrupt_resolved_on_start) ... ok\ntest_U2_layout_switch_and_rollback_on_start_failure (test_svc_u2.U2ReleaseTests.test_U2_layout_switch_and_rollback_on_start_failure) ... ok\ntest_U2_legacy_layout_bare_lifecycle_still_works (test_svc_u2.U2ReleaseTests.test_U2_legacy_layout_bare_lifecycle_still_works) ... ok\ntest_U2_schema_advance_blocks_rollback (test_svc_u2.U2ReleaseTests.test_U2_schema_advance_blocks_rollback) ... ok\ntest_Z_real_pg_not_run (test_svc_u2.U2ReleaseTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_u2.U2ReleaseTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_u2.U2ReleaseTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_u2.U2ReleaseTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_u2.U2ReleaseTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_u2.U2ReleaseTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_u2.U2ReleaseTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_u2.U2ReleaseTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_u2.U2ReleaseTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_u2.U2ReleaseTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_u2.U2ReleaseTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_u2.U2ReleaseTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_u2.U2ReleaseTests.test_watchdog_print_plan) ... ok\ntest_T1_user_list_binds_manifest_data (test_svc_user_binding.UserBindingTests.test_T1_user_list_binds_manifest_data) ... ok\ntest_T2_reject_override_data_flag (test_svc_user_binding.UserBindingTests.test_T2_reject_override_data_flag) ... ok\ntest_T2b_reject_literal_default_data (test_svc_user_binding.UserBindingTests.test_T2b_reject_literal_default_data) ... ok\ntest_T3_missing_data_root_rejected (test_svc_user_binding.UserBindingTests.test_T3_missing_data_root_rejected) ... ok\ntest_T4_no_flock_rejects_user_and_deploy (test_svc_user_binding.UserBindingTests.test_T4_no_flock_rejects_user_and_deploy) ... ok\ntest_T5_identity_regression_smoke (test_svc_user_binding.UserBindingTests.test_T5_identity_regression_smoke) ... ok\ntest_recover_fails_when_port_stolen (test_svc_user_binding.UserBindingTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_user_binding.UserBindingTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_user_binding.UserBindingTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_user_binding.UserBindingTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_user_binding.UserBindingTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_user_binding.UserBindingTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_user_binding.UserBindingTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_user_binding.UserBindingTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_user_binding.UserBindingTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_user_binding.UserBindingTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_user_binding.UserBindingTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_user_binding.UserBindingTests.test_watchdog_print_plan) ... ok\ntest_full_help_mentions_user_binding (test_svc_user_help.UserHelpTests.test_full_help_mentions_user_binding) ... ok\ntest_help_accounts_lists_six_commands (test_svc_user_help.UserHelpTests.test_help_accounts_lists_six_commands) ... ok\ntest_topics_and_short_and_lifecycle_mention_accounts (test_svc_user_help.UserHelpTests.test_topics_and_short_and_lifecycle_mention_accounts) ... ok\ntest_ide_lock_in_git_dir_does_not_block_finish (test_task.FinishGuardFixTests.test_ide_lock_in_git_dir_does_not_block_finish) ... ok\ntest_local_default_branch_at_origin_main_does_not_block (test_task.FinishGuardFixTests.test_local_default_branch_at_origin_main_does_not_block)\n克隆默认分支停在 origin/main 顶端(pin 为 feature 顶端时不在其历史内) ... ok\ntest_local_unique_commit_still_preserved (test_task.FinishGuardFixTests.test_local_unique_commit_still_preserved) ... ok\ntest_real_git_lock_still_blocks_finish (test_task.FinishGuardFixTests.test_real_git_lock_still_blocks_finish) ... ok\ntest_remote_tracking_refs_do_not_block_finish (test_task.FinishGuardFixTests.test_remote_tracking_refs_do_not_block_finish) ... ok\ntest_finish_abandon_retains_local_remote_tips_and_reason (test_task.TaskLifecycleTests.test_finish_abandon_retains_local_remote_tips_and_reason) ... ok\ntest_finish_abandon_without_reason_preserves_checkout_and_refs (test_task.TaskLifecycleTests.test_finish_abandon_without_reason_preserves_checkout_and_refs) ... ok\ntest_finish_clean_worktree_has_accurate_remote_result (test_task.TaskLifecycleTests.test_finish_clean_worktree_has_accurate_remote_result) ... ok\ntest_finish_deletes_only_merged_remote_branch (test_task.TaskLifecycleTests.test_finish_deletes_only_merged_remote_branch) ... ok\ntest_finish_preserves_component_commits_off_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_component_commits_off_the_pinned_head) ... ok\ntest_finish_preserves_component_untracked_file (test_task.TaskLifecycleTests.test_finish_preserves_component_untracked_file) ... ok\ntest_finish_preserves_linked_component_worktrees_at_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_linked_component_worktrees_at_the_pinned_head) ... ok\ntest_finish_preserves_linked_nested_component_worktree (test_task.TaskLifecycleTests.test_finish_preserves_linked_nested_component_worktree) ... ok\ntest_finish_preserves_locked_worktree (test_task.TaskLifecycleTests.test_finish_preserves_locked_worktree) ... ok\ntest_finish_preserves_main_and_active_index_lock (test_task.TaskLifecycleTests.test_finish_preserves_main_and_active_index_lock) ... ok\ntest_finish_preserves_modified_untracked_and_ignored_files (test_task.TaskLifecycleTests.test_finish_preserves_modified_untracked_and_ignored_files) ... ok\ntest_finish_preserves_remote_unmerged_tip (test_task.TaskLifecycleTests.test_finish_preserves_remote_unmerged_tip) ... ok\ntest_finish_recycles_clean_submodule_without_shared_config_changes (test_task.TaskLifecycleTests.test_finish_recycles_clean_submodule_without_shared_config_changes) ... ok\ntest_finish_rejects_subdirectory_without_deleting_it (test_task.TaskLifecycleTests.test_finish_rejects_subdirectory_without_deleting_it) ... ok\ntest_finish_remote_deletion_lease_preserves_concurrent_update (test_task.TaskLifecycleTests.test_finish_remote_deletion_lease_preserves_concurrent_update) ... ok\ntest_finish_requires_writer_exit_confirmation (test_task.TaskLifecycleTests.test_finish_requires_writer_exit_confirmation) ... ok\ntest_post_merge_is_silent_outside_main_checkout (test_task.TaskLifecycleTests.test_post_merge_is_silent_outside_main_checkout) ... ok\ntest_post_merge_main_merge_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_merge_only_reminds_owner) ... ok\ntest_post_merge_main_pull_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_pull_only_reminds_owner) ... ok\ntest_precheck_feature_behind_requires_sync (test_task.TaskLifecycleTests.test_precheck_feature_behind_requires_sync) ... ok\ntest_precheck_rejects_unreachable_authority (test_task.TaskLifecycleTests.test_precheck_rejects_unreachable_authority) ... ok\ntest_precheck_routes_existing_project_delivery_policy (test_task.TaskLifecycleTests.test_precheck_routes_existing_project_delivery_policy) ... ok\ntest_start_imports_precheck_and_creates_four_part_commit (test_task.TaskLifecycleTests.test_start_imports_precheck_and_creates_four_part_commit) ... ok\ntest_start_offline_does_not_create_worktree (test_task.TaskLifecycleTests.test_start_offline_does_not_create_worktree) ... ok\ntest_start_preserves_merged_local_and_remote_branch_names (test_task.TaskLifecycleTests.test_start_preserves_merged_local_and_remote_branch_names) ... ok\ntest_start_rejects_receipt_when_authoritative_base_changed (test_task.TaskLifecycleTests.test_start_rejects_receipt_when_authoritative_base_changed) ... ok\ntest_start_requires_precheck_receipt_before_creating_worktree (test_task.TaskLifecycleTests.test_start_requires_precheck_receipt_before_creating_worktree) ... ok\ntest_start_stacked_branch_records_parent_and_main_baseline (test_task.TaskLifecycleTests.test_start_stacked_branch_records_parent_and_main_baseline) ... ok\ntest_sync_commit_failure_never_reports_synced (test_task.TaskLifecycleTests.test_sync_commit_failure_never_reports_synced) ... ok\ntest_sync_does_not_execute_json_receipt_command (test_task.TaskLifecycleTests.test_sync_does_not_execute_json_receipt_command) ... ok\ntest_sync_keeps_json_evidence_fresh_after_metadata_only_changes (test_task.TaskLifecycleTests.test_sync_keeps_json_evidence_fresh_after_metadata_only_changes) ... ok\ntest_sync_keeps_unchanged_component_branch (test_task.TaskLifecycleTests.test_sync_keeps_unchanged_component_branch) ... ok\ntest_sync_materializes_nested_detached_components (test_task.TaskLifecycleTests.test_sync_materializes_nested_detached_components) ... ok\ntest_sync_materializes_updated_component (test_task.TaskLifecycleTests.test_sync_materializes_updated_component) ... ok\ntest_sync_preserves_component_feature_branch (test_task.TaskLifecycleTests.test_sync_preserves_component_feature_branch) ... ok\ntest_sync_preserves_dirty_child (test_task.TaskLifecycleTests.test_sync_preserves_dirty_child) ... ok\ntest_sync_preserves_nested_feature_branch_when_parent_pin_changes (test_task.TaskLifecycleTests.test_sync_preserves_nested_feature_branch_when_parent_pin_changes) ... ok\ntest_sync_reads_legacy_commands_with_escaped_pipes (test_task.TaskLifecycleTests.test_sync_reads_legacy_commands_with_escaped_pipes) ... ok\ntest_sync_still_warns_for_stale_legacy_table_evidence (test_task.TaskLifecycleTests.test_sync_still_warns_for_stale_legacy_table_evidence) ... ok\ntest_sync_warns_for_malformed_json_evidence (test_task.TaskLifecycleTests.test_sync_warns_for_malformed_json_evidence) ... ok\ntest_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum (test_task.TaskLifecycleTests.test_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum) ... ok\ntest_sync_warns_for_unresolved_json_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_json_evidence_head) ... ok\ntest_sync_warns_for_unresolved_legacy_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_legacy_evidence_head) ... ok\ntest_sync_warns_when_json_after_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_after_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_before_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_before_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_evidence_predates_noncard_changes (test_task.TaskLifecycleTests.test_sync_warns_when_json_evidence_predates_noncard_changes) ... ok\ntest_verify_rejects_recursive_drift_even_when_root_has_local_edits (test_task.TaskLifecycleTests.test_verify_rejects_recursive_drift_even_when_root_has_local_edits) ... ok\ntest_verify_rejects_uninitialized_component (test_task.TaskLifecycleTests.test_verify_rejects_uninitialized_component) ... ok\ntest_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\ntest_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\ntest_architecture_gate_preserves_edges_under_workspace_paths_and_new_module_identity (test_workspace_cutover.WorkspaceCutoverTests.test_architecture_gate_preserves_edges_under_workspace_paths_and_new_module_identity) ... ok\ntest_boundary_gate_uses_isolated_map_and_rejects_new_backend_internal_import (test_workspace_cutover.WorkspaceCutoverTests.test_boundary_gate_uses_isolated_map_and_rejects_new_backend_internal_import) ... ok\ntest_finish_preserves_absorbed_metadata_after_legacy_checkout_disappears (test_workspace_cutover.WorkspaceCutoverTests.test_finish_preserves_absorbed_metadata_after_legacy_checkout_disappears) ... ok\ntest_finish_preserves_external_worktree_of_retired_legacy_checkout (test_workspace_cutover.WorkspaceCutoverTests.test_finish_preserves_external_worktree_of_retired_legacy_checkout) ... ok\ntest_finish_preserves_nonbranch_legacy_refs_without_remote_backup (test_workspace_cutover.WorkspaceCutoverTests.test_finish_preserves_nonbranch_legacy_refs_without_remote_backup) ... ok\ntest_make_workspace_commands_prepare_edit_unlink_and_report (test_workspace_cutover.WorkspaceCutoverTests.test_make_workspace_commands_prepare_edit_unlink_and_report) ... ok\ntest_old_task_sync_adopts_new_sources_and_reports_explicit_transition (test_workspace_cutover.WorkspaceCutoverTests.test_old_task_sync_adopts_new_sources_and_reports_explicit_transition) ... ok\ntest_old_task_sync_preserves_unique_legacy_commit_staging_dirty_and_ignored_files (test_workspace_cutover.WorkspaceCutoverTests.test_old_task_sync_preserves_unique_legacy_commit_staging_dirty_and_ignored_files) ... ok\ntest_old_task_text_conflict_keeps_legacy_source_and_reports_no_success (test_workspace_cutover.WorkspaceCutoverTests.test_old_task_text_conflict_keeps_legacy_source_and_reports_no_success) ... ok\ntest_precheck_never_claims_ready_for_unavailable_fixed_rules (test_workspace_cutover.WorkspaceCutoverTests.test_precheck_never_claims_ready_for_unavailable_fixed_rules) ... ok\ntest_precheck_prepares_fixed_rules_outside_project_before_ready (test_workspace_cutover.WorkspaceCutoverTests.test_precheck_prepares_fixed_rules_outside_project_before_ready) ... ok\ntest_precheck_rejects_borrowed_rules_cache_symlink (test_workspace_cutover.WorkspaceCutoverTests.test_precheck_rejects_borrowed_rules_cache_symlink) ... ok\ntest_start_prepares_fixed_sources_without_recursive_submodule_init (test_workspace_cutover.WorkspaceCutoverTests.test_start_prepares_fixed_sources_without_recursive_submodule_init) ... ok\ntest_sync_preserves_edit_branch_and_refuses_changed_declared_source (test_workspace_cutover.WorkspaceCutoverTests.test_sync_preserves_edit_branch_and_refuses_changed_declared_source) ... ok\ntest_verify_detects_active_git_operation_in_nested_retired_root (test_workspace_cutover.WorkspaceCutoverTests.test_verify_detects_active_git_operation_in_nested_retired_root) ... ok\ntest_verify_detects_nested_git_operation_inside_new_workspace (test_workspace_cutover.WorkspaceCutoverTests.test_verify_detects_nested_git_operation_inside_new_workspace) ... ok\ntest_deleting_main_symlink_to_outside_is_denied (test_write_guard.WriteGuardTests.test_deleting_main_symlink_to_outside_is_denied) ... ok\ntest_detached_and_bad_branches_are_denied (test_write_guard.WriteGuardTests.test_detached_and_bad_branches_are_denied) ... ok\ntest_every_patch_file_and_move_destination_is_checked (test_write_guard.WriteGuardTests.test_every_patch_file_and_move_destination_is_checked) ... ok\ntest_feature_missing_parent_is_allowed (test_write_guard.WriteGuardTests.test_feature_missing_parent_is_allowed) ... ok\ntest_invalid_json_is_denied (test_write_guard.WriteGuardTests.test_invalid_json_is_denied) ... ok\ntest_missing_parent_on_main_is_denied (test_write_guard.WriteGuardTests.test_missing_parent_on_main_is_denied) ... ok\ntest_missing_unknown_and_malformed_write_input_are_denied (test_write_guard.WriteGuardTests.test_missing_unknown_and_malformed_write_input_are_denied) ... ok\ntest_non_git_destination_is_explicitly_outside_scope (test_write_guard.WriteGuardTests.test_non_git_destination_is_explicitly_outside_scope) ... ok\ntest_nonwrite_tools_are_outside_scope (test_write_guard.WriteGuardTests.test_nonwrite_tools_are_outside_scope) ... ok\ntest_relative_path_uses_hook_cwd_not_process_cwd (test_write_guard.WriteGuardTests.test_relative_path_uses_hook_cwd_not_process_cwd) ... ok\ntest_symlink_into_main_with_missing_parents_is_denied (test_write_guard.WriteGuardTests.test_symlink_into_main_with_missing_parents_is_denied) ... ok\ntest_valid_multi_file_patch_on_feature_is_allowed (test_write_guard.WriteGuardTests.test_valid_multi_file_patch_on_feature_is_allowed) ... ok\n\n======================================================================\nFAIL: test_component_ci_executes_nested_go_module_tests (test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) (repo='Logging-System')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 209, in test_component_ci_executes_nested_go_module_tests\n self.assertNotEqual(result.returncode, 0, \"nested regression was skipped by component CI\")\n ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 0 == 0 : nested regression was skipped by component CI\n\n======================================================================\nFAIL: test_component_ci_executes_nested_go_module_tests (test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) (repo='Agent-Squad')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 209, in test_component_ci_executes_nested_go_module_tests\n self.assertNotEqual(result.returncode, 0, \"nested regression was skipped by component CI\")\n ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 0 == 0 : nested regression was skipped by component CI\n\n======================================================================\nFAIL: test_go_prefetch_covers_logging_trace_module (test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 223, in test_go_prefetch_covers_logging_trace_module\n self.assertTrue(self.requests, \"trace module's private requirement was not prefetched\")\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: [] is not true : trace module's private requirement was not prefetched\n\n----------------------------------------------------------------------\nRan 394 tests in 255.445s\n\nFAILED (failures=3, skipped=18)\nmake[1]: *** [Makefile:227: test-governance] Error 1\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "32b9dd805349689cc6fe4da2c505afe37647577907e012446f4043d173d4ef8f", + "receipt_sha256": "f6c2e5668af97d3fb75f0efd1e73dfc388a3b67dd3afd5ac9cf1faa102b40ed9" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:44:54.441003+00:00", + "command": "python3 /tmp/dependency-complete-backend-source-01a1345f.py", + "command_sha256": "3c3dd302cf463d2d0dfe6f906ed94dc4283724e10a9e489482d2d640b2df4890", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "973fdc1f454e5388c31be29b347458d75fc661ea60baac882279228aa4357056", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "3ee00dd0d63714b18462afc78a2c3b7073a9c357e28849e2590c4c3801dd137f", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "4a6f3a1abd1638552496bbdc6b57cfe84fac5e377f4b9fd211ffa1787fbc298e", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "RUN ['go', 'get', 'git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git@37b273e35f88473e369e4be70c80e6c8a8545ee3', 'git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/native@37b273e35f88473e369e4be70c80e6c8a8545ee3']\nRUN ['go', 'mod', 'download', 'all']\nRUN ['go', 'test', '-mod=readonly', './...']\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/agent-system\t0.007s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/storage-migrate\t0.042s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/eval\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/app\t0.448s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/blobstore\t0.005s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/bus\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cardsvc\t0.148s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cmdbus\t0.016s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/config\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ctxasm\t0.005s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/docgen\t0.006s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/evalgold\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/genui\t0.081s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/hostapi\t0.037s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ingest\t0.799s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentgate\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentsem\t0.004s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/pgbus\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/plugins\t0.264s\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/profiles\t[no test files]\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/projectscope\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/prompts\t0.078s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/quality\t0.161s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/rag\t0.151s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ratelimit\t0.268s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/route\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runmgr\t1.045s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runtime\t1.793s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/server\t9.275s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/settings\t0.050s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/skills\t1.698s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/squadadapter\t0.155s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/store\t2.998s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/surfacesvc\t0.178s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/tools\t13.221s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/wfcompile\t0.078s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/workflow\t0.011s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension\t0.009s\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension/link\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/identity\t0.069s\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/web\t[no test files]\n", + "output_sha256": "4b12025b10b8a1a340161b02f0044ae1cac859cd950576e6d13d4af4f933eda9", + "receipt_sha256": "57880289322c781de4dc27376f7fb33a604250469278489eade76ca66a17efe1" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:47:04.096732+00:00", + "command": "python3 -m unittest tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits -v", + "command_sha256": "ceb2a35375adc364c4ab51b3058237d8d8da73a618a950b22ebfed05a694838d", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "c2e86a4e3061ecef833b7b96eecd364d92a8617186ffd304268fcdfb8f138ed3", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "41e2b97471bb71128bce960049b14cb383c73e1b70978638b4bcb338ae09bf22", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "c2e86a4e3061ecef833b7b96eecd364d92a8617186ffd304268fcdfb8f138ed3", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "41e2b97471bb71128bce960049b14cb383c73e1b70978638b4bcb338ae09bf22", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "test_rdm_composition_lock_fetches_fixed_dev_without_executing_code (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code) ... FAIL\ntest_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) ... \n test_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) (lock={'schema': 1, 'repo': 'http://127.0.0.1:45759/untrusted/receiver', 'commit': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}) ... FAIL\n test_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) (lock={'schema': 1, 'repo': 'ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git'}) ... FAIL\n test_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) (lock={'schema': 1, 'repo': 'ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git', 'commit': 'main'}) ... FAIL\n\n======================================================================\nFAIL: test_rdm_composition_lock_fetches_fixed_dev_without_executing_code (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 239, in test_rdm_composition_lock_fetches_fixed_dev_without_executing_code\n result = self.run_phase(\"Prefetch fixed Dev product composition\",\n workflow=MIGRATION / \"Agent-System-RDM/.gitea/workflows/ci.yml\")\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_ci_credentials.py\", line 25, in workflow_script\n raise AssertionError(f\"Workflow has no executable phase: {name}\")\nAssertionError: Workflow has no executable phase: Prefetch fixed Dev product composition\n\n======================================================================\nFAIL: test_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) (lock={'schema': 1, 'repo': 'http://127.0.0.1:45759/untrusted/receiver', 'commit': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 254, in test_rdm_composition_lock_rejects_external_missing_and_malformed_commits\n result = self.run_phase(\"Prefetch fixed Dev product composition\",\n workflow=MIGRATION / \"Agent-System-RDM/.gitea/workflows/ci.yml\")\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_ci_credentials.py\", line 25, in workflow_script\n raise AssertionError(f\"Workflow has no executable phase: {name}\")\nAssertionError: Workflow has no executable phase: Prefetch fixed Dev product composition\n\n======================================================================\nFAIL: test_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) (lock={'schema': 1, 'repo': 'ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git'})\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 254, in test_rdm_composition_lock_rejects_external_missing_and_malformed_commits\n result = self.run_phase(\"Prefetch fixed Dev product composition\",\n workflow=MIGRATION / \"Agent-System-RDM/.gitea/workflows/ci.yml\")\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_ci_credentials.py\", line 25, in workflow_script\n raise AssertionError(f\"Workflow has no executable phase: {name}\")\nAssertionError: Workflow has no executable phase: Prefetch fixed Dev product composition\n\n======================================================================\nFAIL: test_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) (lock={'schema': 1, 'repo': 'ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git', 'commit': 'main'})\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 254, in test_rdm_composition_lock_rejects_external_missing_and_malformed_commits\n result = self.run_phase(\"Prefetch fixed Dev product composition\",\n workflow=MIGRATION / \"Agent-System-RDM/.gitea/workflows/ci.yml\")\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_ci_credentials.py\", line 25, in workflow_script\n raise AssertionError(f\"Workflow has no executable phase: {name}\")\nAssertionError: Workflow has no executable phase: Prefetch fixed Dev product composition\n\n----------------------------------------------------------------------\nRan 2 tests in 1.006s\n\nFAILED (failures=4)\n", + "output_sha256": "ac6753e38fc4ead765c06d05529b36c7bc78962071c77de6f3e4517686d05504", + "receipt_sha256": "98d77e1b1db1498b1da4d17199ec3cec652452ab1c26fd6a04fbc6b6a3556f3d" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:47:50.162496+00:00", + "command": "python3 /tmp/dependency-complete-backend-source-01a1345f.py", + "command_sha256": "3c3dd302cf463d2d0dfe6f906ed94dc4283724e10a9e489482d2d640b2df4890", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "2cb3a82cedc465e0ea4dcaaf38c40ef68938b565471911a8ce53aef5bf4e303f", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "41e2b97471bb71128bce960049b14cb383c73e1b70978638b4bcb338ae09bf22", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "2cb3a82cedc465e0ea4dcaaf38c40ef68938b565471911a8ce53aef5bf4e303f", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "5767da13f45c0649d090e19efcc9c5e007747cd1fa5a9374f4335f27ae0caa39", + "tests/test_dependency_ci.py": "41e2b97471bb71128bce960049b14cb383c73e1b70978638b4bcb338ae09bf22", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "RUN ['go', 'get', 'git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git@37b273e35f88473e369e4be70c80e6c8a8545ee3', 'git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/native@37b273e35f88473e369e4be70c80e6c8a8545ee3']\nRUN ['go', 'mod', 'tidy']\nRUN ['go', 'mod', 'download']\nRUN ['go', 'list', '-mod=readonly', '-deps', '-test', './...']\ninternal/goarch\nunsafe\ninternal/abi\ninternal/unsafeheader\ninternal/cpu\ninternal/bytealg\ninternal/byteorder\ninternal/chacha8rand\ninternal/coverage/rtcov\ninternal/godebugs\ninternal/goexperiment\ninternal/goos\ninternal/profilerecord\ninternal/runtime/atomic\ninternal/runtime/syscall/linux\nmath/bits\ninternal/strconv\ninternal/runtime/cgroup\ninternal/runtime/exithook\ninternal/runtime/gc\ninternal/runtime/sys\ninternal/runtime/gc/scan\ninternal/asan\ninternal/msan\ninternal/race\ninternal/runtime/math\ninternal/runtime/maps\ninternal/runtime/pprof/label\ninternal/stringslite\ninternal/trace/tracev2\nruntime\ninternal/reflectlite\nerrors\nsync/atomic\ninternal/sync\ninternal/synctest\nsync\nio\niter\nunicode\nunicode/utf8\nbytes\ncmp\nencoding\nencoding/json/internal\nencoding/json/internal/jsonflags\nencoding/json/internal/jsonopts\nmath\nslices\nstrconv\nstrings\nunicode/utf16\nencoding/json/internal/jsonwire\nencoding/json/jsontext\nencoding/base32\nencoding/base64\nreflect\nencoding/binary\ninternal/fmtsort\ninternal/oserror\npath\nsyscall\ntime\nio/fs\ninternal/filepathlite\ninternal/syscall/unix\ninternal/poll\ninternal/syscall/execenv\ninternal/testlog\nos\nfmt\nencoding/hex\nencoding/json/v2\nencoding/json\nflag\ncontext\nhash\ncrypto\ninternal/bisect\ninternal/godebug\ncrypto/internal/fips140deps/godebug\ncrypto/internal/fips140\ncrypto/internal/fips140/alias\ncrypto/internal/fips140deps/byteorder\ncrypto/internal/fips140deps/cpu\ncrypto/internal/impl\ncrypto/internal/fips140/sha256\ncrypto/internal/constanttime\ncrypto/internal/fips140/subtle\ncrypto/internal/fips140/sha3\ncrypto/internal/fips140/sha512\ncrypto/internal/fips140/hmac\ncrypto/internal/fips140/check\ncrypto/internal/fips140/aes\ncrypto/internal/fips140deps/time\ncrypto/internal/entropy/v1.0.0\ncrypto/internal/sysrand\ncrypto/internal/fips140/drbg\ncrypto/internal/fips140/aes/gcm\ncrypto/fips140\ncrypto/internal/fips140only\ncrypto/subtle\ncrypto/cipher\ncrypto/internal/boring/sig\ncrypto/internal/boring\nmath/rand/v2\ncrypto/internal/randutil\ncrypto/internal/rand\nmath/rand\nmath/big\ncrypto/rand\nsort\nregexp/syntax\nregexp\ngit-ssh.u1680832.nyat.app/weichen/Agent-Command.git\npath/filepath\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/checkpoint\nbufio\ncompress/flate\nhash/crc32\ncompress/gzip\ncontainer/list\ncrypto/aes\ncrypto/des\ncrypto/internal/fips140/nistec/fiat\ncrypto/internal/fips140/nistec\ncrypto/internal/fips140/ecdh\ncrypto/internal/fips140/edwards25519/field\ncrypto/ecdh\ncrypto/elliptic\ncrypto/internal/boring/bbig\ncrypto/internal/fips140/bigmod\ncrypto/internal/fips140/ecdsa\nweak\ncrypto/internal/fips140cache\ncrypto/sha3\ncrypto/internal/fips140hash\ncrypto/sha512\ninternal/saferio\nencoding/asn1\nvendor/golang.org/x/crypto/cryptobyte/asn1\nvendor/golang.org/x/crypto/cryptobyte\ncrypto/ecdsa\ncrypto/internal/fips140/edwards25519\ncrypto/internal/fips140/ed25519\ncrypto/ed25519\ncrypto/internal/fips140/hkdf\ncrypto/hkdf\ncrypto/hmac\ncrypto/internal/fips140/mlkem\ncrypto/mlkem\ncrypto/sha256\nvendor/golang.org/x/crypto/internal/alias\nvendor/golang.org/x/crypto/chacha20\nvendor/golang.org/x/crypto/internal/poly1305\nvendor/golang.org/x/sys/cpu\nvendor/golang.org/x/crypto/chacha20poly1305\ncrypto/hpke\ncrypto/internal/fips140/tls12\ncrypto/internal/fips140/tls13\ncrypto/md5\ncrypto/internal/fips140/mldsa\ncrypto/mldsa\ncrypto/rc4\ncrypto/internal/fips140/rsa\ncrypto/rsa\ncrypto/sha1\ncrypto/tls/internal/fips140tls\ncrypto/dsa\ncrypto/x509/pkix\nencoding/pem\nmaps\nvendor/golang.org/x/net/dns/dnsmessage\ninternal/nettrace\ninternal/singleflight\nunique\nnet/netip\nruntime/cgo\nnet\nnet/url\ncrypto/x509\ncrypto/tls\nvendor/golang.org/x/text/transform\nlog/internal\nlog\nvendor/golang.org/x/text/unicode/bidi\nvendor/golang.org/x/text/secure/bidirule\nvendor/golang.org/x/text/unicode/norm\nvendor/golang.org/x/net/idna\nnet/textproto\nvendor/golang.org/x/net/http/httpguts\nvendor/golang.org/x/net/http/httpproxy\nmime\nmime/quotedprintable\nmime/multipart\nnet/http/httptrace\nnet/http/internal\nnet/http/internal/ascii\nvendor/golang.org/x/net/http2/hpack\nnet/http/internal/httpcommon\nnet/http/internal/httpsfv\nnet/http/internal/http2\nnet/http\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/llm\nembed\nos/exec\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/codeorch\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/filestate\nhtml\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/tools\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/mcp\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/policy\ngit-ssh.u1680832.nyat.app/weichen/Logging-System.git/logsys\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/telemetry\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/exec\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/hooks\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/memory\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/reminders\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/session\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/promptx\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/skills\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/subagent\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/adapters/native\narchive/zip\nencoding/xml\ngit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/textextract\ngit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/errcode\nhash/fnv\ngit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/squad\ngit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/native\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/blobstore\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/bus\ndatabase/sql/internal\nuuid\ndatabase/sql/driver\ndatabase/sql\ngithub.com/jackc/pgx/v5/internal/pgio\ngithub.com/jackc/pgx/v5/internal/sanitize\ncrypto/internal/fips140/pbkdf2\ncrypto/pbkdf2\ngithub.com/jackc/pgpassfile\ngithub.com/jackc/pgservicefile\ngithub.com/jackc/pgx/v5/internal/iobufpool\ngithub.com/jackc/pgx/v5/pgconn/ctxwatch\ngithub.com/jackc/pgx/v5/pgconn/internal/bgreader\ngithub.com/jackc/pgx/v5/pgproto3\ngithub.com/jackc/pgx/v5/pgtype\ngolang.org/x/text/internal/tag\ngolang.org/x/text/internal/language\ngolang.org/x/text/internal/language/compact\ngolang.org/x/text/language\ngolang.org/x/text/internal\ngolang.org/x/text/transform\ngolang.org/x/text/unicode/norm\ngolang.org/x/text/cases\ngolang.org/x/text/runes\ngolang.org/x/text/unicode/bidi\ngolang.org/x/text/secure/bidirule\ngolang.org/x/text/width\ngolang.org/x/text/secure/precis\nos/user\ngithub.com/jackc/pgx/v5/pgconn\ngithub.com/jackc/pgx/v5/internal/stmtcache\ngithub.com/jackc/pgx/v5\ngithub.com/jackc/puddle/v2/internal/genstack\ngolang.org/x/sync/semaphore\ngithub.com/jackc/puddle/v2\ngithub.com/jackc/pgx/v5/pgxpool\ngithub.com/jackc/pgx/v5/stdlib\ngolang.org/x/sys/cpu\ngolang.org/x/crypto/blake2b\ngolang.org/x/crypto/argon2\ngolang.org/x/sys/unix\ngithub.com/dustin/go-humanize\ngithub.com/google/uuid\nmodernc.org/libc/uuid/uuid\ngithub.com/remyoudompheng/bigfft\nmodernc.org/mathutil\nmodernc.org/memory\nos/signal\nruntime/debug\nmodernc.org/libc\nmodernc.org/libc/sys/types\nmodernc.org/sqlite/lib\nmodernc.org/sqlite/vtab\nmodernc.org/sqlite\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/store\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cardsvc\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cmdbus\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/config\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/genui\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/hostapi\nhash/adler32\ncompress/zlib\nencoding/ascii85\ngithub.com/ledongthuc/pdf\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ingest\ngit-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/intent\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentgate\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentsem\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/pgbus\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/settings\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/skills\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/quality\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/tools\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/workflow\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/plugins\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/profiles\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/projectscope\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/prompts\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/rag\ngithub.com/cespare/xxhash/v2\ngithub.com/dgryski/go-rendezvous\ngithub.com/redis/go-redis/v9/auth\ngithub.com/redis/go-redis/v9/internal/rand\ngithub.com/redis/go-redis/v9/internal/util\ngithub.com/redis/go-redis/v9/internal\ngithub.com/redis/go-redis/v9/internal/hashtag\ngithub.com/redis/go-redis/v9/internal/hscan\ngithub.com/redis/go-redis/v9/internal/proto\ngithub.com/redis/go-redis/v9/internal/pool\ngithub.com/redis/go-redis/v9\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ratelimit\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/route\ngit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/gates\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ctxasm\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/docgen\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/squadadapter\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/wfcompile\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runtime\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runmgr\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/surfacesvc\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/web\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/server\ngit-ssh.u1680832.nyat.app/weichen/Logging-System.git/sink\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/app\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/identity\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/agent-system\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/storage-migrate\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/eval\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/evalgold\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension/link\ninternal/sysinfo\nruntime/trace\ntesting\ngo/token\ngo/scanner\ngo/ast\ngo/build/constraint\ngo/parser\ninternal/fuzz\ntext/tabwriter\nruntime/pprof\ntesting/internal/testdeps\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/agent-system [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/agent-system.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/agent-system.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/storage-migrate [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/storage-migrate.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/storage-migrate.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/eval [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/eval.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/eval.test\ninternal/gate\ninternal/nettest\nnet/http/internal/testcert\nnet/http/httptest\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/app [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/app.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/app.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/blobstore [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/blobstore.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/blobstore.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/bus [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/bus.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/bus.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cardsvc [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cardsvc.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cardsvc.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cmdbus [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cmdbus.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cmdbus.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/config [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/config.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/config.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ctxasm [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ctxasm.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ctxasm.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/docgen [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/docgen.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/docgen.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/evalgold [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/evalgold.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/evalgold.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/genui [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/genui.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/genui.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/hostapi [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/hostapi.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/hostapi.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ingest [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ingest.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ingest.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentgate [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentgate.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentgate.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentsem [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentsem.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentsem.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/pgbus [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/pgbus.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/pgbus.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/plugins [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/plugins.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/plugins.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/prompts [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/prompts.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/prompts.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/quality [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/quality.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/quality.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/rag [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/rag.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/rag.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ratelimit [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ratelimit.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ratelimit.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/route [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/route.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/route.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runmgr [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runmgr.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runmgr.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runtime [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runtime.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runtime.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/server [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/server.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/server.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/settings [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/settings.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/settings.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/skills [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/skills.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/skills.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/squadadapter [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/squadadapter.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/squadadapter.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/store [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/store.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/store.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/surfacesvc [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/surfacesvc.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/surfacesvc.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/tools [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/tools.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/tools.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/wfcompile [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/wfcompile.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/wfcompile.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/workflow [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/workflow.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/workflow.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension.test\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/identity [git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/identity.test]\ngit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/identity.test\nRUN ['go', 'test', '-mod=readonly', './...']\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/agent-system\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/storage-migrate\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/eval\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/app\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/blobstore\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/bus\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cardsvc\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cmdbus\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/config\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ctxasm\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/docgen\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/evalgold\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/genui\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/hostapi\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ingest\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentgate\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentsem\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/pgbus\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/plugins\t(cached)\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/profiles\t[no test files]\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/projectscope\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/prompts\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/quality\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/rag\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ratelimit\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/route\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runmgr\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runtime\t1.456s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/server\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/settings\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/skills\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/squadadapter\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/store\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/surfacesvc\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/tools\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/wfcompile\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/workflow\t(cached)\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension\t(cached)\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension/link\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/identity\t(cached)\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/web\t[no test files]\n", + "output_sha256": "cf4c9545b8637a79cdd55676a14cd9b515c7291e8694243906a96110e4cfcebb", + "receipt_sha256": "bb8130d466a9ee44223a5f4b12ac5e9afc0d325ce2c171f45968124acefbce60" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:49:07.820042+00:00", + "command": "python3 -B -m unittest discover -s tests -p test_composition.py -k unused_transitive -v", + "command_sha256": "309485443f56e8034dbfc902e21495bb68fe9d3e9ef90a04fe9728aae09d5d2d", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "830ad0e553f4a5f51363d909492ce403c83086da6d6602af1fc5e04db0406949", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "c0a05740d34819add6ab43b57b1d19cc6b5b95d662d01194d953618a6f98e62c", + "tests/test_dependency_ci.py": "41e2b97471bb71128bce960049b14cb383c73e1b70978638b4bcb338ae09bf22", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "830ad0e553f4a5f51363d909492ce403c83086da6d6602af1fc5e04db0406949", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "880b661f2f03b715436b7a4fd10b2cf928eda80ae807f15beba126e30d721d71", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "c0a05740d34819add6ab43b57b1d19cc6b5b95d662d01194d953618a6f98e62c", + "tests/test_dependency_ci.py": "41e2b97471bb71128bce960049b14cb383c73e1b70978638b4bcb338ae09bf22", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "test_unused_transitive_zip_does_not_require_consumer_sum_rewrite (test_composition.CompositionTests.test_unused_transitive_zip_does_not_require_consumer_sum_rewrite) ... FAIL\n\n======================================================================\nFAIL: test_unused_transitive_zip_does_not_require_consumer_sum_rewrite (test_composition.CompositionTests.test_unused_transitive_zip_does_not_require_consumer_sum_rewrite)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_composition.py\", line 161, in test_unused_transitive_zip_does_not_require_consumer_sum_rewrite\n self.assertEqual(result.returncode, 0, result.stdout)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 2 != 0 : [composition] git clone --no-checkout --no-hardlinks -- /tmp/composition-test-hsbe_smj/frontend /tmp/agent-system-composition-vgw995bo/Agent-System-Frontend-git\nCloning into '/tmp/agent-system-composition-vgw995bo/Agent-System-Frontend-git'...\ndone.\n[composition] git clone --no-checkout --no-hardlinks -- /tmp/composition-test-hsbe_smj/backend /tmp/agent-system-composition-vgw995bo/Agent-System-Backend-git\nCloning into '/tmp/agent-system-composition-vgw995bo/Agent-System-Backend-git'...\ndone.\n[composition] npm ci --ignore-scripts --no-audit --no-fund\n\nup to date in 79ms\n[composition] npm run build\n\n> composition-fixture@1.0.0 build\n> node build.cjs\n\n[composition] go mod verify\ncomposition: Go acquisition changed committed go.sum; update the consumer first\nall modules verified\n\n\n----------------------------------------------------------------------\nRan 1 test in 0.547s\n\nFAILED (failures=1)\n", + "output_sha256": "618aae73e0a76161c2d888ab1ee14db689ebd1503558493f2f27115250ef80bc", + "receipt_sha256": "e02b9d80ce36fa85a911cf3d2cc747cc7f471005be12a9dbed665d506489dcc5" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:49:32.869517+00:00", + "command": "python3 -B -m unittest discover -s tests -p test_composition.py -v", + "command_sha256": "57fafdaf6207351efb67ec6dd35d781e8ece54dba12585050f373432d3aef46f", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "3c7bbfab5bd08a6140d1d09f0e37a613a60174b3ef9d3756e891feca4ca02264", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "7e94c84ae43f83fefb65576136425a58739b2a50a39f34c3e43be45ce8b97bb6", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "c0a05740d34819add6ab43b57b1d19cc6b5b95d662d01194d953618a6f98e62c", + "tests/test_dependency_ci.py": "41e2b97471bb71128bce960049b14cb383c73e1b70978638b4bcb338ae09bf22", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "abd1fe04df486eadf62e3cd2e0335dac97a16bcaf7227b46ba2f034e20149d6b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "4045d3e24dba5f3a8738472a417c987975df4af4a29a785f84b372a1675db18e", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "7e94c84ae43f83fefb65576136425a58739b2a50a39f34c3e43be45ce8b97bb6", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "c0a05740d34819add6ab43b57b1d19cc6b5b95d662d01194d953618a6f98e62c", + "tests/test_dependency_ci.py": "41e2b97471bb71128bce960049b14cb383c73e1b70978638b4bcb338ae09bf22", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_developer_package_tarball_overrides_do_not_reach_formal_tests (test_composition.CompositionTests.test_developer_package_tarball_overrides_do_not_reach_formal_tests) ... ok\ntest_dirty_root_lock_is_rejected (test_composition.CompositionTests.test_dirty_root_lock_is_rejected) ... ok\ntest_fixed_commits_embed_assets_without_touching_developer_checkout (test_composition.CompositionTests.test_fixed_commits_embed_assets_without_touching_developer_checkout) ... ok\ntest_fixed_root_governance_and_boundaries_receive_proven_source_map (test_composition.CompositionTests.test_fixed_root_governance_and_boundaries_receive_proven_source_map) ... ok\ntest_frontend_dist_symlink_cannot_import_assets_from_outside_source (test_composition.CompositionTests.test_frontend_dist_symlink_cannot_import_assets_from_outside_source) ... ok\ntest_historical_rdm_product_still_builds_from_legacy_pins (test_composition.CompositionTests.test_historical_rdm_product_still_builds_from_legacy_pins) ... ok\ntest_local_go_replace_is_rejected (test_composition.CompositionTests.test_local_go_replace_is_rejected) ... ok\ntest_locked_missing_revision_is_rejected (test_composition.CompositionTests.test_locked_missing_revision_is_rejected) ... ok\ntest_missing_frontend_assets_fails_before_publishing_binary (test_composition.CompositionTests.test_missing_frontend_assets_fails_before_publishing_binary) ... ok\ntest_modified_go_module_cache_is_rejected_before_product_publication (test_composition.CompositionTests.test_modified_go_module_cache_is_rejected_before_product_publication) ... ok\ntest_npm_local_dependency_overlay_is_rejected (test_composition.CompositionTests.test_npm_local_dependency_overlay_is_rejected) ... ok\ntest_project_test_mode_refuses_missing_boundary_gate (test_composition.CompositionTests.test_project_test_mode_refuses_missing_boundary_gate) ... ok\ntest_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock (test_composition.CompositionTests.test_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock) ... ok\ntest_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache (test_composition.CompositionTests.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache) ... ok\ntest_source_path_escape_is_rejected (test_composition.CompositionTests.test_source_path_escape_is_rejected) ... ok\ntest_test_target_checks_fixed_go_library_and_ui_sources (test_composition.CompositionTests.test_test_target_checks_fixed_go_library_and_ui_sources) ... ok\ntest_test_target_runs_real_frontend_and_go_tests (test_composition.CompositionTests.test_test_target_runs_real_frontend_and_go_tests) ... ok\ntest_unused_transitive_zip_does_not_require_consumer_sum_rewrite (test_composition.CompositionTests.test_unused_transitive_zip_does_not_require_consumer_sum_rewrite) ... ok\ntest_version_and_plugin_assets_come_from_committed_root (test_composition.CompositionTests.test_version_and_plugin_assets_come_from_committed_root) ... ok\ntest_versioned_rdm_product_entry_uses_fixed_composer (test_composition.CompositionTests.test_versioned_rdm_product_entry_uses_fixed_composer) ... ok\n\n----------------------------------------------------------------------\nRan 20 tests in 16.288s\n\nOK\n", + "output_sha256": "e5cb5fb64429ad277286d726b884a1e7e829ce450f8f139183fa6a3dd125c5c3", + "receipt_sha256": "71fd2086fca2bdb44dc72d29f3857d6f5557f67f108138afe817121e75f06903" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:51:25.915249+00:00", + "command": "python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -v", + "command_sha256": "aec96627d88bea7de31c0a9715632d3316431ef9b5cd6d15741cb16317092664", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "a7f21f450227cb0e2e9519e45dd1cd3d0aa7c75ded01a1c9bd0582d98f0bb0cb", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "7e94c84ae43f83fefb65576136425a58739b2a50a39f34c3e43be45ce8b97bb6", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "c0a05740d34819add6ab43b57b1d19cc6b5b95d662d01194d953618a6f98e62c", + "tests/test_dependency_ci.py": "6f85f4a4969ffb6ec1a2cc1a55c9d941a9f1faa5b0b35c6c163052ff55250a9a", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "a7f21f450227cb0e2e9519e45dd1cd3d0aa7c75ded01a1c9bd0582d98f0bb0cb", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "7e94c84ae43f83fefb65576136425a58739b2a50a39f34c3e43be45ce8b97bb6", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "c0a05740d34819add6ab43b57b1d19cc6b5b95d662d01194d953618a6f98e62c", + "tests/test_dependency_ci.py": "6f85f4a4969ffb6ec1a2cc1a55c9d941a9f1faa5b0b35c6c163052ff55250a9a", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\ntest_go_prefetch_covers_logging_trace_module (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module) ... ERROR\ntest_go_prefetch_rejects_mutation_of_committed_checksums (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums) ... ok\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) ... ERROR\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (tests.test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (tests.test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_rdm_composition_lock_fetches_fixed_dev_without_executing_code (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code) ... ok\ntest_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) ... ok\ntest_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\ntest_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\n\n======================================================================\nERROR: test_go_prefetch_covers_logging_trace_module (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 240, in test_go_prefetch_covers_logging_trace_module\n (example / \"go.sum\").write_text(self.fixture_checksums(MODULE, sha))\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 67, in fixture_checksums\n result = subprocess.run([\"go\", \"mod\", \"download\", \"-json\"], cwd=directory, env=env,\n capture_output=True, text=True, check=True)\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/subprocess.py\", line 578, in run\n raise CalledProcessError(retcode, process.args,\n output=stdout, stderr=stderr)\nsubprocess.CalledProcessError: Command '['go', 'mod', 'download', '-json']' returned non-zero exit status 1.\n\n======================================================================\nERROR: 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 106, in test_go_prefetch_uses_only_registered_private_repo_and_local_toolchain\n (self.checkout / \"go.sum\").write_text(self.fixture_checksums(MODULE, sha))\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_dependency_ci.py\", line 67, in fixture_checksums\n result = subprocess.run([\"go\", \"mod\", \"download\", \"-json\"], cwd=directory, env=env,\n capture_output=True, text=True, check=True)\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/subprocess.py\", line 578, in run\n raise CalledProcessError(retcode, process.args,\n output=stdout, stderr=stderr)\nsubprocess.CalledProcessError: Command '['go', 'mod', 'download', '-json']' returned non-zero exit status 1.\n\n----------------------------------------------------------------------\nRan 24 tests in 17.075s\n\nFAILED (errors=2)\n", + "output_sha256": "64250547d7cef9f683dab51f9bb8b4f2ef834bc734767de860adedb51a0734e1", + "receipt_sha256": "dc1a3c223feb5fee2ec401f0cd9eae47e811d98306f0d7ae7162482b6d69eb4a" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:52:08.863736+00:00", + "command": "python3 /tmp/dependency-ci-final-probe.py", + "command_sha256": "80350596743319a77dfad276d10b2181afeadc6623bbaa6b01ff4ef5475708c5", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "e1e78c819d754c2be15ae22e439cfa05c83d40e7a268c76cfde33565daec61c1", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "7e94c84ae43f83fefb65576136425a58739b2a50a39f34c3e43be45ce8b97bb6", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "c0a05740d34819add6ab43b57b1d19cc6b5b95d662d01194d953618a6f98e62c", + "tests/test_dependency_ci.py": "6f85f4a4969ffb6ec1a2cc1a55c9d941a9f1faa5b0b35c6c163052ff55250a9a", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "e1e78c819d754c2be15ae22e439cfa05c83d40e7a268c76cfde33565daec61c1", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "7e94c84ae43f83fefb65576136425a58739b2a50a39f34c3e43be45ce8b97bb6", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "c0a05740d34819add6ab43b57b1d19cc6b5b95d662d01194d953618a6f98e62c", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "SOURCE_EXPORT=/tmp/dependency-ci-final-source-loo_smkn\nLogging-System: indexed source exported with no legacy source directories\nError-Code-System: indexed source exported with no legacy source directories\nAgent-System-Core: indexed source exported with no legacy source directories\nAgent-Native: indexed source exported with no legacy source directories\nAgent-Intent: indexed source exported with no legacy source directories\nAgent-Command: indexed source exported with no legacy source directories\nAgent-Squad: indexed source exported with no legacy source directories\nAgent-System-Backend: indexed source exported with no legacy source directories\nAgent-System-UI: indexed source exported with no legacy source directories\nAgent-System-Frontend: indexed source exported with no legacy source directories\nAgent-System-RDM: indexed source exported with no legacy source directories\nGO_SOURCE_CHECK Logging-System/. exit=0\nGO_SOURCE_CHECK Logging-System/examples/trace exit=1\nPREFETCH dependency-files-mutated=True\nGO_SOURCE_CHECK Error-Code-System/. exit=0\nGO_SOURCE_CHECK Agent-System-Core/. exit=0\nGO_SOURCE_CHECK Agent-Native/. exit=0\nGO_SOURCE_CHECK Agent-Intent/. exit=0\nGO_SOURCE_CHECK Agent-Command/. exit=0\nGO_SOURCE_CHECK Agent-Squad/. exit=0\nGO_SOURCE_CHECK Agent-Squad/adapters/sqlite exit=0\nGO_SOURCE_CHECK Agent-Squad/adapters/native exit=0\nGO_SOURCE_CHECK Agent-Squad/adapters/intent exit=0\nGO_SOURCE_CHECK Agent-Squad/adapters/a2a exit=0\nGO_SOURCE_CHECK Agent-Squad/cmd/agent-squad exit=0\nGO_SOURCE_CHECK Agent-System-Backend/. exit=0\nGO_SOURCE_CHECK Agent-System-RDM/. exit=0\nALL_EXPORT_CHECKS_FINISHED failures=1\n", + "output_sha256": "73816ccbe917eb52658d8bc8755239327fcfcdafb1c31fb16940c6879665d646", + "receipt_sha256": "2618b182ab673ed832784ab2c871c2b1495037443f99e02847d7f53f78b23015" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:53:53.192957+00:00", + "command": "python3 -B -m unittest discover -s tests -p test_composition.py -k fixed_root_governance -v", + "command_sha256": "79b5a0e3a86e8c818c2a0a1a2a5027a1ca617facda853ab7a1dd59b740b87396", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "e30ce81006075ca544b6e2c4fe70af857b6d43a0c9d27bd336311ca57f4f2c78", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "7e94c84ae43f83fefb65576136425a58739b2a50a39f34c3e43be45ce8b97bb6", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "e30ce81006075ca544b6e2c4fe70af857b6d43a0c9d27bd336311ca57f4f2c78", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "7e94c84ae43f83fefb65576136425a58739b2a50a39f34c3e43be45ce8b97bb6", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "test_fixed_root_governance_and_boundaries_receive_proven_source_map (test_composition.CompositionTests.test_fixed_root_governance_and_boundaries_receive_proven_source_map) ... FAIL\n\n======================================================================\nFAIL: test_fixed_root_governance_and_boundaries_receive_proven_source_map (test_composition.CompositionTests.test_fixed_root_governance_and_boundaries_receive_proven_source_map)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_composition.py\", line 299, in test_fixed_root_governance_and_boundaries_receive_proven_source_map\n self.assertEqual(marker.read_text(), \"boundaries\\npins\\ngovernance\\n\")\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 'boundaries\\ngovernance\\n' != 'boundaries\\npins\\ngovernance\\n'\n boundaries\n+ pins\n governance\n\n\n----------------------------------------------------------------------\nRan 1 test in 0.847s\n\nFAILED (failures=1)\n", + "output_sha256": "170789a46929cfccb439df80ce15edc9d05f47f7a0d410a9b0746389b1182782", + "receipt_sha256": "d13ba4391bdb859d49f2b9b0a05a5265ef459b9da2a2d51913b00080a47d1dc4" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:54:00.398825+00:00", + "command": "python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -v", + "command_sha256": "aec96627d88bea7de31c0a9715632d3316431ef9b5cd6d15741cb16317092664", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "667d2677c8f460f18488bbd193925dc6d66fa5e9ba809840325bc62fcff8fdb9", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "7e94c84ae43f83fefb65576136425a58739b2a50a39f34c3e43be45ce8b97bb6", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "e793e9804a1f5ecf49b29a40b4baac90ceb04e55", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "667d2677c8f460f18488bbd193925dc6d66fa5e9ba809840325bc62fcff8fdb9", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "4eae804c84d5c0299c5e705a8ff747bd570fc94b88f7ea87908a2ccfaa0f07d9", + "scripts/build-composition.py": "7e94c84ae43f83fefb65576136425a58739b2a50a39f34c3e43be45ce8b97bb6", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\ntest_go_prefetch_covers_logging_trace_module (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module) ... ok\ntest_go_prefetch_rejects_mutation_of_committed_checksums (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums) ... ok\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) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (tests.test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (tests.test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_rdm_composition_lock_fetches_fixed_dev_without_executing_code (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code) ... ok\ntest_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) ... ok\ntest_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\ntest_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\n\n----------------------------------------------------------------------\nRan 24 tests in 18.302s\n\nOK\n", + "output_sha256": "17d667b3d3758d17233ede7184a55dffe30ff3fa9609c89ce9a0823e5f3435f4", + "receipt_sha256": "e4200bd3ccb4cba7b0339647cfb8b17d91548d2bc8e3b008be8ef6119c099d2d" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:54:36.078831+00:00", + "command": "python3 -B -m unittest discover -s tests -p test_composition.py -v", + "command_sha256": "57fafdaf6207351efb67ec6dd35d781e8ece54dba12585050f373432d3aef46f", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "03bb31d4142b37d94282ed5eed5e625671c2a60f550f57fa4d64ccfbf1b84d66", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "f296bebd46c98aaccac4b0e9c4ca7cdaedad3931a208736957db414aea72d57e", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "03bb31d4142b37d94282ed5eed5e625671c2a60f550f57fa4d64ccfbf1b84d66", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "f296bebd46c98aaccac4b0e9c4ca7cdaedad3931a208736957db414aea72d57e", + "scripts/component-check.py": "d0a59b6d0fe88d2f5f66ab7a28662e1c1a4b74a129ed47cdc8de2723a3f31729", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "33740dfaa4e7716331be8a93b167b536fad5c24412e95d25d95aa536b0818c50", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_developer_package_tarball_overrides_do_not_reach_formal_tests (test_composition.CompositionTests.test_developer_package_tarball_overrides_do_not_reach_formal_tests) ... ok\ntest_dirty_root_lock_is_rejected (test_composition.CompositionTests.test_dirty_root_lock_is_rejected) ... ok\ntest_fixed_commits_embed_assets_without_touching_developer_checkout (test_composition.CompositionTests.test_fixed_commits_embed_assets_without_touching_developer_checkout) ... ok\ntest_fixed_root_governance_and_boundaries_receive_proven_source_map (test_composition.CompositionTests.test_fixed_root_governance_and_boundaries_receive_proven_source_map) ... ok\ntest_frontend_dist_symlink_cannot_import_assets_from_outside_source (test_composition.CompositionTests.test_frontend_dist_symlink_cannot_import_assets_from_outside_source) ... ok\ntest_historical_rdm_product_still_builds_from_legacy_pins (test_composition.CompositionTests.test_historical_rdm_product_still_builds_from_legacy_pins) ... ok\ntest_local_go_replace_is_rejected (test_composition.CompositionTests.test_local_go_replace_is_rejected) ... ok\ntest_locked_missing_revision_is_rejected (test_composition.CompositionTests.test_locked_missing_revision_is_rejected) ... ok\ntest_missing_frontend_assets_fails_before_publishing_binary (test_composition.CompositionTests.test_missing_frontend_assets_fails_before_publishing_binary) ... ok\ntest_modified_go_module_cache_is_rejected_before_product_publication (test_composition.CompositionTests.test_modified_go_module_cache_is_rejected_before_product_publication) ... ok\ntest_npm_local_dependency_overlay_is_rejected (test_composition.CompositionTests.test_npm_local_dependency_overlay_is_rejected) ... ok\ntest_project_test_mode_refuses_missing_boundary_gate (test_composition.CompositionTests.test_project_test_mode_refuses_missing_boundary_gate) ... ok\ntest_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock (test_composition.CompositionTests.test_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock) ... ok\ntest_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache (test_composition.CompositionTests.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache) ... ok\ntest_source_path_escape_is_rejected (test_composition.CompositionTests.test_source_path_escape_is_rejected) ... ok\ntest_test_target_checks_fixed_go_library_and_ui_sources (test_composition.CompositionTests.test_test_target_checks_fixed_go_library_and_ui_sources) ... ok\ntest_test_target_runs_real_frontend_and_go_tests (test_composition.CompositionTests.test_test_target_runs_real_frontend_and_go_tests) ... ok\ntest_unused_transitive_zip_does_not_require_consumer_sum_rewrite (test_composition.CompositionTests.test_unused_transitive_zip_does_not_require_consumer_sum_rewrite) ... ok\ntest_version_and_plugin_assets_come_from_committed_root (test_composition.CompositionTests.test_version_and_plugin_assets_come_from_committed_root) ... ok\ntest_versioned_rdm_product_entry_uses_fixed_composer (test_composition.CompositionTests.test_versioned_rdm_product_entry_uses_fixed_composer) ... ok\n\n----------------------------------------------------------------------\nRan 20 tests in 18.245s\n\nOK\n", + "output_sha256": "17252e80473588efce2fe0081c8bb8d67e5a9a01d93d4c6bbfac15b83b7f3fce", + "receipt_sha256": "1ad69d699b3fc1a36053826921869305e9c217ae100d80b49da611752c8e5fef" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:57:06.568857+00:00", + "command": "python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -v", + "command_sha256": "aec96627d88bea7de31c0a9715632d3316431ef9b5cd6d15741cb16317092664", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "95557f5fbbc10a3d2cc46ebee3764c46f609e7973ecbc02db1042bb857b9ffb2", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "f296bebd46c98aaccac4b0e9c4ca7cdaedad3931a208736957db414aea72d57e", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "95557f5fbbc10a3d2cc46ebee3764c46f609e7973ecbc02db1042bb857b9ffb2", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\ntest_go_prefetch_covers_logging_trace_module (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module) ... ok\ntest_go_prefetch_rejects_mutation_of_committed_checksums (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums) ... ok\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) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (tests.test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (tests.test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_rdm_composition_lock_fetches_fixed_dev_without_executing_code (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code) ... ok\ntest_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) ... ok\ntest_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\ntest_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\n\n----------------------------------------------------------------------\nRan 24 tests in 18.179s\n\nOK\n", + "output_sha256": "518d1faa332e6a43f082081038d53f776b0ca390f1c46118022eab14b6ff3754", + "receipt_sha256": "7ea93cd0b064f655d640353f1c292440bff373fcaa523000605a71b24d24db8b" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T16:57:22.993239+00:00", + "command": "python3 -B -m unittest discover -s tests -p test_composition.py -v", + "command_sha256": "57fafdaf6207351efb67ec6dd35d781e8ece54dba12585050f373432d3aef46f", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "95557f5fbbc10a3d2cc46ebee3764c46f609e7973ecbc02db1042bb857b9ffb2", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "96d010367e3c2449d374cccce07a6e42355932e1123cc590204d6c7c030533ff", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "e4b3639ff073b22fd77fcd11e177f2082047f1e38c6ab6ad92f6448c2e6514c2", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_developer_package_tarball_overrides_do_not_reach_formal_tests (test_composition.CompositionTests.test_developer_package_tarball_overrides_do_not_reach_formal_tests) ... ok\ntest_dirty_root_lock_is_rejected (test_composition.CompositionTests.test_dirty_root_lock_is_rejected) ... ok\ntest_fixed_commits_embed_assets_without_touching_developer_checkout (test_composition.CompositionTests.test_fixed_commits_embed_assets_without_touching_developer_checkout) ... ok\ntest_fixed_root_governance_and_boundaries_receive_proven_source_map (test_composition.CompositionTests.test_fixed_root_governance_and_boundaries_receive_proven_source_map) ... ok\ntest_frontend_dist_symlink_cannot_import_assets_from_outside_source (test_composition.CompositionTests.test_frontend_dist_symlink_cannot_import_assets_from_outside_source) ... ok\ntest_historical_rdm_product_still_builds_from_legacy_pins (test_composition.CompositionTests.test_historical_rdm_product_still_builds_from_legacy_pins) ... ok\ntest_local_go_replace_is_rejected (test_composition.CompositionTests.test_local_go_replace_is_rejected) ... ok\ntest_locked_missing_revision_is_rejected (test_composition.CompositionTests.test_locked_missing_revision_is_rejected) ... ok\ntest_missing_frontend_assets_fails_before_publishing_binary (test_composition.CompositionTests.test_missing_frontend_assets_fails_before_publishing_binary) ... ok\ntest_modified_go_module_cache_is_rejected_before_product_publication (test_composition.CompositionTests.test_modified_go_module_cache_is_rejected_before_product_publication) ... ok\ntest_npm_local_dependency_overlay_is_rejected (test_composition.CompositionTests.test_npm_local_dependency_overlay_is_rejected) ... ok\ntest_project_test_mode_refuses_missing_boundary_gate (test_composition.CompositionTests.test_project_test_mode_refuses_missing_boundary_gate) ... ok\ntest_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock (test_composition.CompositionTests.test_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock) ... ok\ntest_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache (test_composition.CompositionTests.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache) ... ok\ntest_source_path_escape_is_rejected (test_composition.CompositionTests.test_source_path_escape_is_rejected) ... ok\ntest_test_target_checks_fixed_go_library_and_ui_sources (test_composition.CompositionTests.test_test_target_checks_fixed_go_library_and_ui_sources) ... ok\ntest_test_target_runs_real_frontend_and_go_tests (test_composition.CompositionTests.test_test_target_runs_real_frontend_and_go_tests) ... ok\ntest_unused_transitive_zip_does_not_require_consumer_sum_rewrite (test_composition.CompositionTests.test_unused_transitive_zip_does_not_require_consumer_sum_rewrite) ... ok\ntest_version_and_plugin_assets_come_from_committed_root (test_composition.CompositionTests.test_version_and_plugin_assets_come_from_committed_root) ... ok\ntest_versioned_rdm_product_entry_uses_fixed_composer (test_composition.CompositionTests.test_versioned_rdm_product_entry_uses_fixed_composer) ... ok\n\n----------------------------------------------------------------------\nRan 20 tests in 16.702s\n\nOK\n", + "output_sha256": "31ef695e88eb12dd14ce9eedd72f2dd4c8cb671c46a1719e86dee20ff688eb80", + "receipt_sha256": "e58acd5be05c01f631ff3ab6b03b71d4065fafc0da517693da4f7b601eef6d31" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:00:28.860997+00:00", + "command": "PYTHONPATH=. python3 /tmp/dependency-ci-real-prefetch.py", + "command_sha256": "8143f93e1d067154be6f5c003eabbb031e17c72113e08b0227b6571a61b8b536", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "9a44d246795611ffdddbe53cc4a38d75a1e6ca67bd135e1a9aa3b89d86f093d7", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "80a353d1f3eec3a51623a0e6c25aefcbb83c9802ea9af8dae6bb18c5eac29df5", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "9a44d246795611ffdddbe53cc4a38d75a1e6ca67bd135e1a9aa3b89d86f093d7", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "80a353d1f3eec3a51623a0e6c25aefcbb83c9802ea9af8dae6bb18c5eac29df5", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "Logging-System actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nError-Code-System actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nAgent-System-Core actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nAgent-Native actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nAgent-Intent actual readonly CI prefetch exit=1\nGo prefetch refused: Go selected graph resolution failed: go: module lookup disabled by GOPROXY=off\ngo: golang.org/x/text@v0.29.0: module lookup disabled by GOPROXY=off\n\nAgent-Command actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nAgent-Squad actual readonly CI prefetch exit=1\nGo prefetch refused: Command '['git', '-C', '/tmp/dependency-ci-final-source-loo_smkn/Agent-Squad/.ci-mirrors/Agent-Squad.git', 'fetch', '--depth=200', 'http://127.0.0.1:41247/weichen/Agent-Squad.git', 'd2fea7e17310d9e267c28a1e39328704e83df0b1']' returned non-zero exit status 128.\n\nAgent-System-Backend actual readonly CI prefetch exit=1\nGo prefetch refused: Go selected graph resolution failed: go: git-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git@v0.4.1-0.20261013151137-f32d4317846f: invalid pseudo-version: git fetch --unshallow -f --end-of-options origin in /tmp/tmpobtezijs/home/go/pkg/mod/cache/vcs/807b922af6ef9157e34799b3988e173ab26cb3110af221c50921c518b47861fe: exit status 128:\n\tfatal: the remote end hung up unexpectedly\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: git-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git@v0.4.1-0.20261013151137-f32d4317846f: invalid pseudo-version: git fetch --unshallow -f --end-of-options origin in /tmp/tmpobtezijs/home/go/pkg/mod/cache/vcs/807b922af6ef9157e34799b3988e173ab26cb3110af221c50921c518b47861fe: exit status 128:\n\tfatal: the remote end hung up unexpectedly\n\nAgent-System-RDM actual readonly CI prefetch exit=1\nGo prefetch refused: Go selected graph resolution failed: go: git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git@v0.4.1-0.20261013154716-f1302ed5b395: invalid pseudo-version: git fetch --unshallow -f --end-of-options origin in /tmp/tmpobtezijs/home/go/pkg/mod/cache/vcs/831b36c22a2c29042157f9eb7a0d7416d6c005e7ec1236ae883e371b6c951d02: exit status 128:\n\tfatal: the remote end hung up unexpectedly\ngo: git-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git@v0.4.1-0.20261013151137-f32d4317846f: invalid pseudo-version: git fetch --unshallow -f --end-of-options origin in /tmp/tmpobtezijs/home/go/pkg/mod/cache/vcs/807b922af6ef9157e34799b3988e173ab26cb3110af221c50921c518b47861fe: exit status 128:\n\tfatal: the remote end hung up unexpectedly\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: module lookup disabled by GOPROXY=off\ngo: git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git@v0.4.1-0.20261013154716-f1302ed5b395: invalid pseudo-version: git fetch --unshallow -f --end-of-options origin in /tmp/tmpobtezijs/home/go/pkg/mod/cache/vcs/831b36c22a2c29042157f9eb7a0d7416d6c005e7ec1236ae883e371b6c951d02: exit status 128:\n\tfatal: the remote end hung up unexpectedly\n\nactual provider prefetch failures=4\n", + "output_sha256": "0246b97a36e891fe1756a8fe1eede747e0ad79dd4418b3065f620363e2824d41", + "receipt_sha256": "89bf9e8166892b809fe7eed70a391e628eb7b8455585315a65393140c5424372" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:01:32.741247+00:00", + "command": "python3 /tmp/dependency-check-docs-final-01a1345f.py", + "command_sha256": "5dc2d73a4dc7fb5db16a8dd47ac36f84e5a98aeabd44a3f0b6162062e9e01a37", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "b9d7896ca321a5cd35b409b61747d317fa94f3770de420d1ac108226e34f1dc5", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "80a353d1f3eec3a51623a0e6c25aefcbb83c9802ea9af8dae6bb18c5eac29df5", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "b9d7896ca321a5cd35b409b61747d317fa94f3770de420d1ac108226e34f1dc5", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "80a353d1f3eec3a51623a0e6c25aefcbb83c9802ea9af8dae6bb18c5eac29df5", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "SELF 32c7fa6c10e89c9775b8d84495a2b54edb461f128e9321d2cbbf030dd84a5adf /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md\nSELF b90d57e1dfe172bc34c9527e2875d5a10df611822e0cd92501d76a4f15ec5fd9 /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/2026-10-13-versioned-dependencies-implementation-plan.md\nSELF 29b2a2c2f13c101865d0eb46e9c966f954c45c01d379f054d4c197cc5285dc2f /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/INDEX.md\nSELF 60a9307b298d99939c12189643a2abfd397cccf4cc809ee2d4f8008b9d1d492c /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/README.md\nSELF f0fb916ff17cf1b079b7c89c8a34380839317c45a8e9e415bdf2da10392a80e9 /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/standards/multi-repo.md\nSELF bd1ce8f432732cced1a3edce42e593ba5219ae3231b395e6480b3208cb4b1d2b /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/standards/collaboration.md\nSELF ff6d51d5b1426b256a94c7c87e86e47ff9cb7337fd1c5edf9edcce42de29e4e8 /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/workflows/adoption.md\nPASS: R1-R15, U1-U8, general/project separation, relative links: 116\n", + "output_sha256": "361662eb8029a9fe468f8fa37923c0c128f380f93b2dc8510591f35550d91cd2", + "receipt_sha256": "104423617dc8ea262878e8ae6ff856085a1709bbf364b244f7ec73bd6c059a91" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:02:07.079218+00:00", + "command": "PYTHONPATH=. python3 /tmp/dependency-ci-real-prefetch.py", + "command_sha256": "8143f93e1d067154be6f5c003eabbb031e17c72113e08b0227b6571a61b8b536", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "98df6eed10c2d9fcbc0f852b15c730dd2e10b303d3485f05779b2ee3c57bdfd9", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "80a353d1f3eec3a51623a0e6c25aefcbb83c9802ea9af8dae6bb18c5eac29df5", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "98df6eed10c2d9fcbc0f852b15c730dd2e10b303d3485f05779b2ee3c57bdfd9", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "0304eca6d538bcefb9b908743eca573b1935474b07fd26c06ca6f07563122313", + "tests/test_svc_build_cutover.py": "80a353d1f3eec3a51623a0e6c25aefcbb83c9802ea9af8dae6bb18c5eac29df5", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "Logging-System actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nError-Code-System actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nAgent-System-Core actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nAgent-Native actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nAgent-Intent actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nAgent-Command actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nAgent-Squad actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nAgent-System-Backend actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nAgent-System-RDM actual readonly CI prefetch exit=0\nGo modules cached with GOTOOLCHAIN=local; no candidate code executed\n\nactual provider prefetch failures=0\n", + "output_sha256": "4ec75dea4bfce9edb6c59c393b6507edb846e3687f294e2c07d60081554adc9b", + "receipt_sha256": "01a6af38e9dce548fdab704327bade428484f77e9dbb29c7e72a13b4f4280ce4" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:03:32.609398+00:00", + "command": "python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -v", + "command_sha256": "aec96627d88bea7de31c0a9715632d3316431ef9b5cd6d15741cb16317092664", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "6acd455fe7082b7eb5596421e231a3d302cd3dd450ee76d0c645635ff39f046a", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "80a353d1f3eec3a51623a0e6c25aefcbb83c9802ea9af8dae6bb18c5eac29df5", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "6acd455fe7082b7eb5596421e231a3d302cd3dd450ee76d0c645635ff39f046a", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "d2092b394c9ee12311e4a70edff03c4def8d4da33a5c8748de5a2742a0af6909", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "3ebcb37b2a21dfabf76ac37551ab88499879f6cbedf00aef51c4e49d363f3c1b", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "80a353d1f3eec3a51623a0e6c25aefcbb83c9802ea9af8dae6bb18c5eac29df5", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\ntest_go_prefetch_covers_logging_trace_module (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module) ... ok\ntest_go_prefetch_rejects_mutation_of_committed_checksums (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums) ... ok\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) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (tests.test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (tests.test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_rdm_composition_lock_fetches_fixed_dev_without_executing_code (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code) ... ok\ntest_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) ... ok\ntest_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\ntest_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\n\n----------------------------------------------------------------------\nRan 24 tests in 17.797s\n\nOK\n", + "output_sha256": "2c12c2a2fe5e2b63191b47a4b434bd5f8c29a4149885077dc2e37813809719fb", + "receipt_sha256": "20c43287e12d0c4b071100a54d328032e7cd0a45061c4685214304f35ad1d62f" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:09:44.180657+00:00", + "command": "python3 /tmp/dependency-commit-cutover-providers-01a1345f.py Logging-System Error-Code-System Agent-System-Core Agent-System-UI Agent-System-Frontend Agent-Native Agent-Intent Agent-Command Agent-Squad Agent-System-Backend", + "command_sha256": "89fa2938ae315e71b7bf7ba275decdffc0145aa161e78f1499a214e54d642140", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "29e6189004152f9b11e5fa3543fafc32209dd80e5437c7a5f61177b3b14dad9c", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "3baa744caea6a7b987b37c9b312db2cd04bc3c3c8715df01982d3732be2cf028", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "29e6189004152f9b11e5fa3543fafc32209dd80e5437c7a5f61177b3b14dad9c", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "3baa744caea6a7b987b37c9b312db2cd04bc3c3c8715df01982d3732be2cf028", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "fatal: pathspec '.gitmodules' did not match any files\nTraceback (most recent call last):\n File \"/tmp/dependency-commit-cutover-providers-01a1345f.py\", line 13, in \n subprocess.run(['git','-C',str(repo),'add','--',*files],check=True)\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/subprocess.py\", line 578, in run\n raise CalledProcessError(retcode, process.args,\n output=stdout, stderr=stderr)\nsubprocess.CalledProcessError: Command '['git', '-C', '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Logging-System', 'add', '--', '.gitea/workflows/ci.yml', '.gitmodules', 'AGENTS.md', 'PROJECT.md', 'README.md', 'deps/development-guidelines', 'examples/trace/go.mod', 'examples/trace/go.sum']' returned non-zero exit status 128.\n", + "output_sha256": "e1a74079ed3ed285d912d879ebbf6bc31b438a407cf2d780377b7524097f98ae", + "receipt_sha256": "422c6c7756eacffdd85f572c7e1645671d61ebd921f33654a7ab4f2ca777fb8c" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:11:20.638615+00:00", + "command": "python3 /tmp/dependency-commit-cutover-providers-01a1345f.py Logging-System Error-Code-System Agent-System-Core Agent-System-UI Agent-System-Frontend Agent-Native Agent-Intent Agent-Command Agent-Squad Agent-System-Backend", + "command_sha256": "89fa2938ae315e71b7bf7ba275decdffc0145aa161e78f1499a214e54d642140", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "c1659a56c8a7e7218f8ad6607a948588053707bd88c22aba8e2a832109eacfa0", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "ae3ff3c32a7400e560e7b1a4612c1bb43d6dd68f6b99170d3800eb8cdb0d1451", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "c1659a56c8a7e7218f8ad6607a948588053707bd88c22aba8e2a832109eacfa0", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "ae3ff3c32a7400e560e7b1a4612c1bb43d6dd68f6b99170d3800eb8cdb0d1451", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "error: pathspec 'deps/development-guidelines' did not match any file(s) known to git\nTraceback (most recent call last):\n File \"/tmp/dependency-commit-cutover-providers-01a1345f.py\", line 17, in \n subprocess.run(['git','-C',str(repo),'commit','--include','-F','/tmp/dependency-source-cutover-commit-01a1345f.txt','--',*present],check=True)\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/subprocess.py\", line 578, in run\n raise CalledProcessError(retcode, process.args,\n output=stdout, stderr=stderr)\nsubprocess.CalledProcessError: Command '['git', '-C', '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.migration/Logging-System', 'commit', '--include', '-F', '/tmp/dependency-source-cutover-commit-01a1345f.txt', '--', '.gitea/workflows/ci.yml', 'AGENTS.md', 'PROJECT.md', 'README.md', 'deps/development-guidelines', 'examples/trace/go.mod', 'examples/trace/go.sum']' returned non-zero exit status 128.\n", + "output_sha256": "e08985946f8ddea7cd79eae2c7ecb7a1aacfedcc7ba2282f2a0e399d10295b32", + "receipt_sha256": "919fa15afd3a6a458c62fcc97f3830ff25c4f811135ddb901517b5d99d36be14" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:11:41.561474+00:00", + "command": "python3 /tmp/dependency-commit-cutover-providers-01a1345f.py Logging-System Error-Code-System Agent-System-Core Agent-System-UI Agent-System-Frontend Agent-Native Agent-Intent Agent-Command Agent-Squad Agent-System-Backend", + "command_sha256": "89fa2938ae315e71b7bf7ba275decdffc0145aa161e78f1499a214e54d642140", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "774e31350178bb41ea7f661a9d24965f23324caefce22933917c5fea8e81d2e8", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "ae3ff3c32a7400e560e7b1a4612c1bb43d6dd68f6b99170d3800eb8cdb0d1451", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "774e31350178bb41ea7f661a9d24965f23324caefce22933917c5fea8e81d2e8", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "2fee657d01f0f5e7abca887202560bf6265accebb90555a966e476bb4b566267", + "scripts/component-check.py": "ae3ff3c32a7400e560e7b1a4612c1bb43d6dd68f6b99170d3800eb8cdb0d1451", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "f60b26947166eaaf001b4d2f23e3433346d2df7314f0a550ff3633f44cdf222b", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "[feature/versioned-dependencies 2e26200] Adopt credential safe CI and retire replaced source gitlinks\n 8 files changed, 515 insertions(+), 35 deletions(-)\n delete mode 100644 .gitmodules\n delete mode 160000 deps/development-guidelines\n create mode 100644 examples/trace/go.sum\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Logging-System/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Logging-System.git\n 9c5442f..2e26200 HEAD -> feature/versioned-dependencies\nSOURCE Logging-System 2e2620009fcb21c302369c1125bea33e2a383c71\n[feature/versioned-dependencies f55c6b1] Adopt credential safe CI and retire replaced source gitlinks\n 6 files changed, 504 insertions(+), 25 deletions(-)\n delete mode 100644 .gitmodules\n delete mode 160000 deps/development-guidelines\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Error-Code-System/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Error-Code-System.git\n 28d2d50..f55c6b1 HEAD -> feature/versioned-dependencies\nSOURCE Error-Code-System f55c6b11b6eeda36b9d30fb9e92dcecc44a9fcae\n[feature/versioned-dependencies dc4440d] Adopt credential safe CI and retire replaced source gitlinks\n 3 files changed, 712 insertions(+), 4 deletions(-)\n create mode 100644 .gitea/workflows/ci.yml\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Agent-System-Core/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Core.git\n f32d431..dc4440d HEAD -> feature/versioned-dependencies\nSOURCE Agent-System-Core dc4440d5d81a7ff9a79349c9c6a390cc2f9cb60a\n[feature/versioned-dependencies bc0a4d3] Adopt credential safe CI and retire replaced source gitlinks\n 2 files changed, 436 insertions(+), 47 deletions(-)\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Agent-System-UI/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-UI.git\n 468776e..bc0a4d3 HEAD -> feature/versioned-dependencies\nSOURCE Agent-System-UI bc0a4d33d03728e8726b5c398c4239a87def8eda\n[feature/versioned-dependencies 6ed7b93] Adopt credential safe CI and retire replaced source gitlinks\n 2 files changed, 467 insertions(+), 2 deletions(-)\n create mode 100644 .gitea/workflows/ci.yml\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git\n ad53e90..6ed7b93 HEAD -> feature/versioned-dependencies\nSOURCE Agent-System-Frontend 6ed7b9322c5733f76b206a35cd78649ba385d83b\n[feature/versioned-dependencies 3b550d7] Adopt credential safe CI and retire replaced source gitlinks\n 9 files changed, 484 insertions(+), 44 deletions(-)\n delete mode 100644 .gitmodules\n delete mode 160000 deps/agent-intent\n delete mode 160000 deps/development-guidelines\n delete mode 160000 deps/error-code-system\n delete mode 160000 deps/logging-system\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 6ddd3da..3b550d7 HEAD -> feature/versioned-dependencies\nSOURCE Agent-Native 3b550d783dd7d4dd37d30bb312f0c4369a3102a5\n[feature/versioned-dependencies c29cf6a] Adopt credential safe CI and retire replaced source gitlinks\n 8 files changed, 484 insertions(+), 40 deletions(-)\n delete mode 100644 .gitmodules\n delete mode 160000 deps/development-guidelines\n delete mode 160000 deps/error-code-system\n delete mode 160000 deps/logging-system\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 3a8468c..c29cf6a HEAD -> feature/versioned-dependencies\nSOURCE Agent-Intent c29cf6a283d0a2d93099e703d76b08c8a7801c90\n[feature/versioned-dependencies 63dc7e0] Adopt credential safe CI and retire replaced source gitlinks\n 4 files changed, 499 insertions(+), 5 deletions(-)\n create mode 100644 .gitea/workflows/ci.yml\n delete mode 100644 .gitmodules\n delete mode 160000 deps/development-guidelines\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 1aa532f..63dc7e0 HEAD -> feature/versioned-dependencies\nSOURCE Agent-Command 63dc7e06412af632c6b9c32ca3d71fb7cd8235fc\n[feature/versioned-dependencies 42e1c4c] Adopt credential safe CI and retire replaced source gitlinks\n 10 files changed, 493 insertions(+), 51 deletions(-)\n delete mode 100644 .gitmodules\n delete mode 160000 deps/agent-intent\n delete mode 160000 deps/agent-native\n delete mode 160000 deps/development-guidelines\n delete mode 160000 deps/error-code-system\n delete mode 160000 deps/logging-system\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 37b273e..42e1c4c HEAD -> feature/versioned-dependencies\nSOURCE Agent-Squad 42e1c4cd3296c7c68eef9473f34e50d59ba1412b\n[feature/versioned-dependencies fffd579] Adopt credential safe CI and retire replaced source gitlinks\n 14 files changed, 483 insertions(+), 50 deletions(-)\n delete mode 100644 .gitmodules\n delete mode 160000 deps/agent-command\n delete mode 160000 deps/agent-intent\n delete mode 160000 deps/agent-native\n delete mode 160000 deps/agent-squad\n delete mode 160000 deps/agent-system-core\n delete mode 160000 deps/error-code-system\n delete mode 160000 deps/logging-system\nremote: \nremote: Create a new pull request for 'feature/versioned-dependencies': \nremote: https://git-panel.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/new/feature/versioned-dependencies \nremote: \nTo ssh://git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git\n f1302ed..fffd579 HEAD -> feature/versioned-dependencies\nSOURCE Agent-System-Backend fffd5790cfab317fadafb40fa55a11bab6e9a847\n", + "output_sha256": "d787c4e704cb50da871914cb21b3312310468509b23cfaab1a724a3cb446aa68", + "receipt_sha256": "4c302900219b3818d601339a1f097081de5cc61fd585c6bf5c24604d4cd7d418" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:14:07.699846+00:00", + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_composition.py -v", + "command_sha256": "e2dfe5d6f43f53ee79d704ce73bf3a813dd3f0e5c9f9db00262aa9cdf389668c", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/common.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "c0ab53d58a7e6a99672ac3f3f0eab3145007f0b56fd79ddfbe451a9aed0ea8bf", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "3cbf7dde996fa8a7d371452d70f08ccd383dfc7ef80f0f9dc4b432e19a652a8e", + "scripts/component-check.py": "ae3ff3c32a7400e560e7b1a4612c1bb43d6dd68f6b99170d3800eb8cdb0d1451", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7f50152402d0e4bb18f9ce32d5bafca6610ee5971e172a7842b4036866f7eed6", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "415f9ac58ece9d9b63bd9b3fea39978bb847fcce", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/common.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "c0ab53d58a7e6a99672ac3f3f0eab3145007f0b56fd79ddfbe451a9aed0ea8bf", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "e5b18eef3f48e19184b84eeef481b1df2a4c06b4010ee2842ef7e759ebaa85c8", + "scripts/build-composition.py": "3cbf7dde996fa8a7d371452d70f08ccd383dfc7ef80f0f9dc4b432e19a652a8e", + "scripts/component-check.py": "ae3ff3c32a7400e560e7b1a4612c1bb43d6dd68f6b99170d3800eb8cdb0d1451", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7f50152402d0e4bb18f9ce32d5bafca6610ee5971e172a7842b4036866f7eed6", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "test_developer_package_tarball_overrides_do_not_reach_formal_tests (test_composition.CompositionTests.test_developer_package_tarball_overrides_do_not_reach_formal_tests) ... ok\ntest_dirty_root_lock_is_rejected (test_composition.CompositionTests.test_dirty_root_lock_is_rejected) ... ok\ntest_fixed_commits_embed_assets_without_touching_developer_checkout (test_composition.CompositionTests.test_fixed_commits_embed_assets_without_touching_developer_checkout) ... ok\ntest_fixed_root_governance_and_boundaries_receive_proven_source_map (test_composition.CompositionTests.test_fixed_root_governance_and_boundaries_receive_proven_source_map) ... ok\ntest_frontend_dist_symlink_cannot_import_assets_from_outside_source (test_composition.CompositionTests.test_frontend_dist_symlink_cannot_import_assets_from_outside_source) ... ok\ntest_historical_rdm_product_still_builds_from_legacy_pins (test_composition.CompositionTests.test_historical_rdm_product_still_builds_from_legacy_pins) ... ok\ntest_local_go_replace_is_rejected (test_composition.CompositionTests.test_local_go_replace_is_rejected) ... ok\ntest_locked_missing_revision_is_rejected (test_composition.CompositionTests.test_locked_missing_revision_is_rejected) ... ok\ntest_missing_frontend_assets_fails_before_publishing_binary (test_composition.CompositionTests.test_missing_frontend_assets_fails_before_publishing_binary) ... ok\ntest_modified_go_module_cache_is_rejected_before_product_publication (test_composition.CompositionTests.test_modified_go_module_cache_is_rejected_before_product_publication) ... ok\ntest_npm_local_dependency_overlay_is_rejected (test_composition.CompositionTests.test_npm_local_dependency_overlay_is_rejected) ... ok\ntest_project_test_mode_refuses_missing_boundary_gate (test_composition.CompositionTests.test_project_test_mode_refuses_missing_boundary_gate) ... ok\ntest_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock (test_composition.CompositionTests.test_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock) ... ok\ntest_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache (test_composition.CompositionTests.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache) ... ok\ntest_source_path_escape_is_rejected (test_composition.CompositionTests.test_source_path_escape_is_rejected) ... ok\ntest_test_target_checks_fixed_go_library_and_ui_sources (test_composition.CompositionTests.test_test_target_checks_fixed_go_library_and_ui_sources) ... ok\ntest_test_target_runs_real_frontend_and_go_tests (test_composition.CompositionTests.test_test_target_runs_real_frontend_and_go_tests) ... ok\ntest_unused_transitive_zip_does_not_require_consumer_sum_rewrite (test_composition.CompositionTests.test_unused_transitive_zip_does_not_require_consumer_sum_rewrite) ... ok\ntest_version_and_plugin_assets_come_from_committed_root (test_composition.CompositionTests.test_version_and_plugin_assets_come_from_committed_root) ... ok\ntest_versioned_rdm_product_entry_uses_fixed_composer (test_composition.CompositionTests.test_versioned_rdm_product_entry_uses_fixed_composer) ... FAIL\n\n======================================================================\nFAIL: test_versioned_rdm_product_entry_uses_fixed_composer (test_composition.CompositionTests.test_versioned_rdm_product_entry_uses_fixed_composer)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_composition.py\", line 401, in test_versioned_rdm_product_entry_uses_fixed_composer\n self.assertEqual(result.returncode, 0, result.stdout)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 2 != 0 : make[1]: Entering directory '/tmp/composition-test-4md99y64/rdm'\nbash scripts/build-product.sh\nTraceback (most recent call last):\n File \"/tmp/composition-test-4md99y64/dev/scripts/build-composition.py\", line 21, in \n from workspace.common import digest\nModuleNotFoundError: No module named 'workspace.common'\nmake[1]: *** [Makefile:62: product] Error 1\nmake[1]: Leaving directory '/tmp/composition-test-4md99y64/rdm'\n\n\n----------------------------------------------------------------------\nRan 20 tests in 15.524s\n\nFAILED (failures=1)\n", + "output_sha256": "06b6d7514f7558827d57d4c36f78aad9120d759fc6070204cd6e9fe6ada9cd25", + "receipt_sha256": "e87797f1fe9bbdfd5ceb8c5c562ed1c0a037afcecc2174eac5ab84f3686deef4" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:16:12.969889+00:00", + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_composition.py -v", + "command_sha256": "e2dfe5d6f43f53ee79d704ce73bf3a813dd3f0e5c9f9db00262aa9cdf389668c", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/common.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "d6151428514843dac35ee46aef835e74dfa91e635ffc08de00e22c16fa8514ff", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "0c933daeb0eb1e374002a45611c74af0ea925d85fbb49797897e489e65be16f3", + "scripts/build-composition.py": "3cbf7dde996fa8a7d371452d70f08ccd383dfc7ef80f0f9dc4b432e19a652a8e", + "scripts/component-check.py": "ae3ff3c32a7400e560e7b1a4612c1bb43d6dd68f6b99170d3800eb8cdb0d1451", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7f50152402d0e4bb18f9ce32d5bafca6610ee5971e172a7842b4036866f7eed6", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/common.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "d6151428514843dac35ee46aef835e74dfa91e635ffc08de00e22c16fa8514ff", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "0c933daeb0eb1e374002a45611c74af0ea925d85fbb49797897e489e65be16f3", + "scripts/build-composition.py": "3cbf7dde996fa8a7d371452d70f08ccd383dfc7ef80f0f9dc4b432e19a652a8e", + "scripts/component-check.py": "ae3ff3c32a7400e560e7b1a4612c1bb43d6dd68f6b99170d3800eb8cdb0d1451", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7f50152402d0e4bb18f9ce32d5bafca6610ee5971e172a7842b4036866f7eed6", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 1, + "output": "test_developer_package_tarball_overrides_do_not_reach_formal_tests (test_composition.CompositionTests.test_developer_package_tarball_overrides_do_not_reach_formal_tests) ... ok\ntest_dirty_root_lock_is_rejected (test_composition.CompositionTests.test_dirty_root_lock_is_rejected) ... ok\ntest_fixed_commits_embed_assets_without_touching_developer_checkout (test_composition.CompositionTests.test_fixed_commits_embed_assets_without_touching_developer_checkout) ... ok\ntest_fixed_root_governance_and_boundaries_receive_proven_source_map (test_composition.CompositionTests.test_fixed_root_governance_and_boundaries_receive_proven_source_map) ... ok\ntest_frontend_dist_symlink_cannot_import_assets_from_outside_source (test_composition.CompositionTests.test_frontend_dist_symlink_cannot_import_assets_from_outside_source) ... ok\ntest_historical_rdm_product_still_builds_from_legacy_pins (test_composition.CompositionTests.test_historical_rdm_product_still_builds_from_legacy_pins) ... ok\ntest_local_go_replace_is_rejected (test_composition.CompositionTests.test_local_go_replace_is_rejected) ... ok\ntest_locked_missing_revision_is_rejected (test_composition.CompositionTests.test_locked_missing_revision_is_rejected) ... ok\ntest_missing_frontend_assets_fails_before_publishing_binary (test_composition.CompositionTests.test_missing_frontend_assets_fails_before_publishing_binary) ... ok\ntest_modified_go_module_cache_is_rejected_before_product_publication (test_composition.CompositionTests.test_modified_go_module_cache_is_rejected_before_product_publication) ... ok\ntest_npm_local_dependency_overlay_is_rejected (test_composition.CompositionTests.test_npm_local_dependency_overlay_is_rejected) ... ok\ntest_project_test_mode_refuses_missing_boundary_gate (test_composition.CompositionTests.test_project_test_mode_refuses_missing_boundary_gate) ... ok\ntest_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock (test_composition.CompositionTests.test_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock) ... ok\ntest_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache (test_composition.CompositionTests.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache) ... ok\ntest_source_path_escape_is_rejected (test_composition.CompositionTests.test_source_path_escape_is_rejected) ... ok\ntest_test_target_checks_fixed_go_library_and_ui_sources (test_composition.CompositionTests.test_test_target_checks_fixed_go_library_and_ui_sources) ... ok\ntest_test_target_runs_real_frontend_and_go_tests (test_composition.CompositionTests.test_test_target_runs_real_frontend_and_go_tests) ... ok\ntest_unused_transitive_zip_does_not_require_consumer_sum_rewrite (test_composition.CompositionTests.test_unused_transitive_zip_does_not_require_consumer_sum_rewrite) ... ok\ntest_version_and_plugin_assets_come_from_committed_root (test_composition.CompositionTests.test_version_and_plugin_assets_come_from_committed_root) ... ok\ntest_versioned_rdm_product_entry_uses_fixed_composer (test_composition.CompositionTests.test_versioned_rdm_product_entry_uses_fixed_composer) ... FAIL\n\n======================================================================\nFAIL: test_versioned_rdm_product_entry_uses_fixed_composer (test_composition.CompositionTests.test_versioned_rdm_product_entry_uses_fixed_composer)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_composition.py\", line 401, in test_versioned_rdm_product_entry_uses_fixed_composer\n self.assertEqual(result.returncode, 0, result.stdout)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 2 != 0 : make[1]: Entering directory '/tmp/composition-test-2im6v8vz/rdm'\nbash scripts/build-product.sh\nTraceback (most recent call last):\n File \"/tmp/composition-test-2im6v8vz/dev/scripts/build-composition.py\", line 21, in \n from workspace.common import digest\nModuleNotFoundError: No module named 'workspace.common'\nmake[1]: *** [Makefile:62: product] Error 1\nmake[1]: Leaving directory '/tmp/composition-test-2im6v8vz/rdm'\n\n\n----------------------------------------------------------------------\nRan 20 tests in 15.620s\n\nFAILED (failures=1)\n", + "output_sha256": "09dde5f06c9ad12ac54dad092d72a886a3426a48bfcf145d0092444a6512d159", + "receipt_sha256": "f78be926f754e9a12193694ca515af9ed043d8a0c026976e1daa0ead98ff9994" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:18:07.752375+00:00", + "command": "git diff --check", + "command_sha256": "466c2f308b48c7661d646fdd068fbecea974c665fe65dbf8ed508f224180ce0b", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/common.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "ea83d780c4d66cf1cb9b6cd76abb9800f34be3bd5058a0b50a8b4cd60c93a267", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "0c933daeb0eb1e374002a45611c74af0ea925d85fbb49797897e489e65be16f3", + "scripts/build-composition.py": "3cbf7dde996fa8a7d371452d70f08ccd383dfc7ef80f0f9dc4b432e19a652a8e", + "scripts/component-check.py": "ae3ff3c32a7400e560e7b1a4612c1bb43d6dd68f6b99170d3800eb8cdb0d1451", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7f50152402d0e4bb18f9ce32d5bafca6610ee5971e172a7842b4036866f7eed6", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "b450e51c40ae7e52146a30b1ba6cb0612f4baeef", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .gitea/workflows/ci.yaml\n M .gitignore\nD .gitmodules\n M .task/feature-dependency-workspace.md\n M AGENTS.md\n M Makefile\n M PROJECT.md\n M README.md\n M components.lock.json\nD deps/agent-command\nD deps/agent-intent\nD deps/agent-native\nD deps/agent-squad\nD deps/development-guidelines\nD deps/error-code-system\nD deps/logging-system\n M examples/downstream-rdm/README.md\n M examples/downstream-rdm/go.mod\n M examples/downstream-rdm/plugin.go\n M examples/downstream-rdm/plugin_test.go\nD modules/backend\nD modules/core\nD modules/documents\nD modules/frontend\nD modules/ui\n M policy/adoption.md\n M policy/architecture.yaml\n M policy/delivery.md\n M policy/governance.md\n M scripts/check-pins.sh\n M scripts/check-worktree.py\n M scripts/e2e.sh\n M scripts/lint-architecture.go\n M scripts/lint-architecture.sh\n M scripts/lint-boundaries.sh\n M scripts/svc.sh\n M scripts/task.sh\n M scripts/workspace/cli.py\n M scripts/workspace/common.py\n M scripts/workspace/git.py\n M scripts/workspace/go.py\n M scripts/workspace/transition.py\n M tests/test_ci_credentials.py\n M tests/test_workspace.py\n?? examples/downstream-rdm/go.sum\n?? policy/dependencies.md\n?? scripts/build-composition.py\n?? scripts/component-check.py\n?? scripts/component-source.py\n?? tests/fixtures/rdm-legacy-product.sh\n?? tests/test_component_checks.py\n?? tests/test_composition.py\n?? tests/test_dependency_ci.py\n?? tests/test_svc_build_cutover.py\n?? tests/test_workspace_cutover.py\n", + "tracked_diff_sha256": "ea83d780c4d66cf1cb9b6cd76abb9800f34be3bd5058a0b50a8b4cd60c93a267", + "untracked": { + "examples/downstream-rdm/go.sum": "46dc9e9b21648d4a34e30a9c58959ebd52bf3c7ece11bd20c33e291df3719fd7", + "policy/dependencies.md": "0c933daeb0eb1e374002a45611c74af0ea925d85fbb49797897e489e65be16f3", + "scripts/build-composition.py": "3cbf7dde996fa8a7d371452d70f08ccd383dfc7ef80f0f9dc4b432e19a652a8e", + "scripts/component-check.py": "ae3ff3c32a7400e560e7b1a4612c1bb43d6dd68f6b99170d3800eb8cdb0d1451", + "scripts/component-source.py": "57d06d0d40d2c8006c1186334100ffebb3c96ac0dd2d1334a59bd9ea29ed81d8", + "tests/fixtures/rdm-legacy-product.sh": "c36df85966d87f3492c91102394bae35d94e745680feb94bee8a2811ecc1b2ea", + "tests/test_component_checks.py": "8fa2e18685ffcaa9eec466853d82c76200bb104670cf30d9bf896351b89ee4a0", + "tests/test_composition.py": "2c079acc6a06d720695ea0b75c5879ff818e466b3ac4cab63e645e587223faf6", + "tests/test_dependency_ci.py": "dab15dcc2368a8e61c259189ad951b4995a212e1772f0e802af774836b871bdb", + "tests/test_svc_build_cutover.py": "5ddbfc1f1626aa2ac6ffa7c63a0b99f8eabdaf301089ab62c84ad2881809b541", + "tests/test_workspace_cutover.py": "4a804934e19eae8545dba149137e2856bc8ad9ed01cdd44a3b9e3d8e275224b4" + }, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7f50152402d0e4bb18f9ce32d5bafca6610ee5971e172a7842b4036866f7eed6", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "", + "output_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "receipt_sha256": "8906c99e54fa7f23f64ed9abfcc36c1742d8502d420ee8bed6d95870f73d6c05" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:18:46.676423+00:00", + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_composition.py -v", + "command_sha256": "e2dfe5d6f43f53ee79d704ce73bf3a813dd3f0e5c9f9db00262aa9cdf389668c", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "93ac63fb3d3c6d1ba56b0aedda657b73821f3a1e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n M scripts/build-composition.py\n", + "tracked_diff_sha256": "3ff24824b0bfb828b0ad5c44810f31eb4ed1c1dba82bf9ea68c7949b65b09b06", + "untracked": {}, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7f50152402d0e4bb18f9ce32d5bafca6610ee5971e172a7842b4036866f7eed6", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "93ac63fb3d3c6d1ba56b0aedda657b73821f3a1e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n M scripts/build-composition.py\n", + "tracked_diff_sha256": "3ff24824b0bfb828b0ad5c44810f31eb4ed1c1dba82bf9ea68c7949b65b09b06", + "untracked": {}, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7f50152402d0e4bb18f9ce32d5bafca6610ee5971e172a7842b4036866f7eed6", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_developer_package_tarball_overrides_do_not_reach_formal_tests (test_composition.CompositionTests.test_developer_package_tarball_overrides_do_not_reach_formal_tests) ... ok\ntest_dirty_root_lock_is_rejected (test_composition.CompositionTests.test_dirty_root_lock_is_rejected) ... ok\ntest_fixed_commits_embed_assets_without_touching_developer_checkout (test_composition.CompositionTests.test_fixed_commits_embed_assets_without_touching_developer_checkout) ... ok\ntest_fixed_root_governance_and_boundaries_receive_proven_source_map (test_composition.CompositionTests.test_fixed_root_governance_and_boundaries_receive_proven_source_map) ... ok\ntest_frontend_dist_symlink_cannot_import_assets_from_outside_source (test_composition.CompositionTests.test_frontend_dist_symlink_cannot_import_assets_from_outside_source) ... ok\ntest_historical_rdm_product_still_builds_from_legacy_pins (test_composition.CompositionTests.test_historical_rdm_product_still_builds_from_legacy_pins) ... ok\ntest_local_go_replace_is_rejected (test_composition.CompositionTests.test_local_go_replace_is_rejected) ... ok\ntest_locked_missing_revision_is_rejected (test_composition.CompositionTests.test_locked_missing_revision_is_rejected) ... ok\ntest_missing_frontend_assets_fails_before_publishing_binary (test_composition.CompositionTests.test_missing_frontend_assets_fails_before_publishing_binary) ... ok\ntest_modified_go_module_cache_is_rejected_before_product_publication (test_composition.CompositionTests.test_modified_go_module_cache_is_rejected_before_product_publication) ... ok\ntest_npm_local_dependency_overlay_is_rejected (test_composition.CompositionTests.test_npm_local_dependency_overlay_is_rejected) ... ok\ntest_project_test_mode_refuses_missing_boundary_gate (test_composition.CompositionTests.test_project_test_mode_refuses_missing_boundary_gate) ... ok\ntest_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock (test_composition.CompositionTests.test_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock) ... ok\ntest_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache (test_composition.CompositionTests.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache) ... ok\ntest_source_path_escape_is_rejected (test_composition.CompositionTests.test_source_path_escape_is_rejected) ... ok\ntest_test_target_checks_fixed_go_library_and_ui_sources (test_composition.CompositionTests.test_test_target_checks_fixed_go_library_and_ui_sources) ... ok\ntest_test_target_runs_real_frontend_and_go_tests (test_composition.CompositionTests.test_test_target_runs_real_frontend_and_go_tests) ... ok\ntest_unused_transitive_zip_does_not_require_consumer_sum_rewrite (test_composition.CompositionTests.test_unused_transitive_zip_does_not_require_consumer_sum_rewrite) ... ok\ntest_version_and_plugin_assets_come_from_committed_root (test_composition.CompositionTests.test_version_and_plugin_assets_come_from_committed_root) ... ok\ntest_versioned_rdm_product_entry_uses_fixed_composer (test_composition.CompositionTests.test_versioned_rdm_product_entry_uses_fixed_composer) ... ok\n\n----------------------------------------------------------------------\nRan 20 tests in 16.522s\n\nOK\n", + "output_sha256": "1a4f5bb991070291f1a7e37a8fe1da3887d219f49a96ef1f084c94c8186be192", + "receipt_sha256": "5b7c224d67ab248b685da436ebee56638c1945a1dca3666f40e763621c1b8003" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:19:19.240432+00:00", + "command": "make workspace-prepare REFRESH_FIXED=1", + "command_sha256": "64a31bf70d0564cc9fd41b0296fdf4772c2c772f1cf125206cf19d56bef9f2d0", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "93ac63fb3d3c6d1ba56b0aedda657b73821f3a1e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n M scripts/build-composition.py\n", + "tracked_diff_sha256": "8eab78125ea5ea22491958fcac0f6d6f2d22fb6c30daa4a54aeb3222b8611a11", + "untracked": {}, + "submodules": "", + "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": { + "head": "ad53e90a8542143104ddc7f759c8f8e7b7001924", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "state": "missing" + }, + "Agent-System-Documents": { + "state": "missing" + } + }, + "lock_sha256": "7f50152402d0e4bb18f9ce32d5bafca6610ee5971e172a7842b4036866f7eed6", + "state_sha256": "9f6b12c6d0e66f8e4c67c8dde56600daa0d90b14229d64a1c7140bdaff01ef11" + } + }, + "after": { + "head": "93ac63fb3d3c6d1ba56b0aedda657b73821f3a1e", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n M scripts/build-composition.py\n", + "tracked_diff_sha256": "8eab78125ea5ea22491958fcac0f6d6f2d22fb6c30daa4a54aeb3222b8611a11", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "7f50152402d0e4bb18f9ce32d5bafca6610ee5971e172a7842b4036866f7eed6", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "after_error": null, + "exit_code": 0, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n{\n \"components\": {\n \"Agent-System-Backend\": {\n \"actual\": {\n \"branch\": null,\n \"changes\": [],\n \"common_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Backend/.git\",\n \"dirty\": false,\n \"git_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Backend/.git\",\n \"head\": \"fffd5790cfab317fadafb40fa55a11bab6e9a847\",\n \"ignored\": [],\n \"locks\": [],\n \"operations\": [],\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git\",\n \"worktrees\": [\n \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Backend\"\n ]\n },\n \"declared\": {\n \"commit\": \"fffd5790cfab317fadafb40fa55a11bab6e9a847\"\n },\n \"path\": \".workspace/Agent-System-Backend\",\n \"registered\": {\n \"baseline\": \"fffd5790cfab317fadafb40fa55a11bab6e9a847\",\n \"branch\": null,\n \"linked\": false,\n \"mode\": \"versioned\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git\",\n \"owner_root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"path\": \".workspace/Agent-System-Backend\",\n \"previous_sources\": [\n {\n \"commit\": \"f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c\",\n \"ref\": \"refs/workspace/fixed/f1302ed5b3952aeb4ad386a793c0c78fe90d7a3c\",\n \"source\": {\n \"kind\": \"source-lock\"\n }\n }\n ],\n \"source\": {\n \"kind\": \"source-lock\"\n }\n },\n \"repo\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git\",\n \"role\": \"application\"\n },\n \"Agent-System-Documents\": {\n \"actual\": {\n \"branch\": null,\n \"changes\": [],\n \"common_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Documents/.git\",\n \"dirty\": false,\n \"git_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Documents/.git\",\n \"head\": \"7ba50e5b2dce226b4b962ea787222a4b08f0e94c\",\n \"ignored\": [],\n \"locks\": [],\n \"operations\": [],\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Documents.git\",\n \"worktrees\": [\n \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Documents\"\n ]\n },\n \"declared\": {\n \"commit\": \"7ba50e5b2dce226b4b962ea787222a4b08f0e94c\"\n },\n \"path\": \".workspace/Agent-System-Documents\",\n \"registered\": {\n \"baseline\": \"7ba50e5b2dce226b4b962ea787222a4b08f0e94c\",\n \"branch\": null,\n \"linked\": false,\n \"mode\": \"versioned\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Documents.git\",\n \"owner_root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"path\": \".workspace/Agent-System-Documents\",\n \"source\": {\n \"kind\": \"source-lock\"\n }\n },\n \"repo\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Documents.git\",\n \"role\": \"documentation\"\n },\n \"Agent-System-Frontend\": {\n \"actual\": {\n \"branch\": null,\n \"changes\": [],\n \"common_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Frontend/.git\",\n \"dirty\": false,\n \"git_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Frontend/.git\",\n \"head\": \"6ed7b9322c5733f76b206a35cd78649ba385d83b\",\n \"ignored\": [],\n \"locks\": [],\n \"operations\": [],\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git\",\n \"worktrees\": [\n \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Frontend\"\n ]\n },\n \"declared\": {\n \"commit\": \"6ed7b9322c5733f76b206a35cd78649ba385d83b\"\n },\n \"path\": \".workspace/Agent-System-Frontend\",\n \"registered\": {\n \"baseline\": \"6ed7b9322c5733f76b206a35cd78649ba385d83b\",\n \"branch\": null,\n \"linked\": false,\n \"mode\": \"versioned\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git\",\n \"owner_root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"path\": \".workspace/Agent-System-Frontend\",\n \"previous_sources\": [\n {\n \"commit\": \"ad53e90a8542143104ddc7f759c8f8e7b7001924\",\n \"ref\": \"refs/workspace/fixed/ad53e90a8542143104ddc7f759c8f8e7b7001924\",\n \"source\": {\n \"kind\": \"source-lock\"\n }\n }\n ],\n \"source\": {\n \"kind\": \"source-lock\"\n }\n },\n \"repo\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git\",\n \"role\": \"application\"\n },\n \"Development-Guidelines\": {\n \"actual\": {\n \"branch\": null,\n \"changes\": [],\n \"common_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Development-Guidelines/.git\",\n \"dirty\": false,\n \"git_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Development-Guidelines/.git\",\n \"head\": \"1a842553b6a7432e5a85aaae43a45a7a7ea58195\",\n \"ignored\": [],\n \"locks\": [],\n \"operations\": [],\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Development-Guidelines.git\",\n \"worktrees\": [\n \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Development-Guidelines\"\n ]\n },\n \"declared\": {\n \"commit\": \"1a842553b6a7432e5a85aaae43a45a7a7ea58195\"\n },\n \"path\": \".workspace/Development-Guidelines\",\n \"registered\": {\n \"baseline\": \"1a842553b6a7432e5a85aaae43a45a7a7ea58195\",\n \"branch\": null,\n \"linked\": false,\n \"mode\": \"versioned\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Development-Guidelines.git\",\n \"owner_root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"path\": \".workspace/Development-Guidelines\",\n \"source\": {\n \"kind\": \"source-lock\"\n }\n },\n \"repo\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Development-Guidelines.git\",\n \"role\": \"guidelines\"\n }\n },\n \"go_work\": null,\n \"root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"schema\": 1\n}\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "4468df95034445b300c33fb0c44ee03989f701147c090e3ad654fcb92795e435", + "receipt_sha256": "d65203bc505ba8ed4286fda05a7afe78be5b4cc538018796436e263c27882dfa" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:24:29.129477+00:00", + "command": "make task-sync", + "command_sha256": "6c0e3c8fbb3f43d01548180c9d9c147ce1c1c32ba1e78d3383961de470fe0d52", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "7a1ff23341f535483c8abcb8ce3fee67b13519c7", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "7f50152402d0e4bb18f9ce32d5bafca6610ee5971e172a7842b4036866f7eed6", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "after": null, + "after_error": "Git object could not be recorded: submodule status", + "exit_code": 2, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n[worktree] before-sync: recursive component checks passed\nAuto-merging AGENTS.md\nAuto-merging Makefile\nCONFLICT (content): Merge conflict in Makefile\nAuto-merging PROJECT.md\nCONFLICT (content): Merge conflict in PROJECT.md\nCONFLICT (modify/delete): deps/development-guidelines deleted in HEAD and modified in origin/main. Version origin/main of deps/development-guidelines left in tree.\nCONFLICT (modify/delete): modules/documents deleted in HEAD and modified in origin/main. Version origin/main of modules/documents left in tree.\nAuto-merging policy/adoption.md\nCONFLICT (content): Merge conflict in policy/adoption.md\nAuto-merging policy/delivery.md\nAuto-merging policy/governance.md\nAuto-merging scripts/evidence.py\nAuto-merging scripts/task.sh\nCONFLICT (content): Merge conflict in scripts/task.sh\nAutomatic merge failed; fix conflicts and then commit the result.\nmake[1]: *** [Makefile:58: task-sync] Error 1\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "88f6526b3d2e3efc5dd2a0f32e35357000e767bdd732997498b03657c48b09f6", + "receipt_sha256": "19ae7d12d909588a857c55da83b54cecfeeba10757f87c5149e242be2825637a" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:30:11.070684+00:00", + "command": "python3 /tmp/dependency-check-docs-final-01a1345f.py", + "command_sha256": "5dc2d73a4dc7fb5db16a8dd47ac36f84e5a98aeabd44a3f0b6162062e9e01a37", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "7a1ff23341f535483c8abcb8ce3fee67b13519c7", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "R .task/feature-d1-closeout-evidence.md -> .task/archive/feature-d1-closeout-evidence.md\nA .task/archive/feature-iam-i1-permission-boundaries.md\nR .task/feature-project-member-access.md -> .task/archive/feature-project-member-access.md\nR .task/feature-rdm-increment-settings-duties.md -> .task/archive/feature-rdm-increment-settings-duties.md\nA .task/artifacts/iam-i1-stage8/dev-actual-merge.json\nA .task/artifacts/iam-i1-stage8/dev-before-merge-sync.json\nA .task/artifacts/iam-i1-stage8/dev-before-pr-sync.json\nA .task/artifacts/iam-i1-stage8/dev-final-composition-test.json\nA .task/artifacts/iam-i1-stage8/dev-final-gate.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-doccheck.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-check.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-v2.json\nA .task/artifacts/iam-i1-stage8/dev-final-review.md\nA .task/artifacts/iam-i1-stage8/dev-final-source-equivalence-v2.json\nA .task/artifacts/iam-i1-stage8/dev-merge-response.json\nA .task/artifacts/iam-i1-stage8/dev-published-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/dev-stage9-independent-sync-review.json\nA .task/artifacts/iam-i1-stage8/docs-review.md\nA .task/artifacts/iam-i1-stage8/documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/documents-merge-response.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v2.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v3.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-approved-snapshot-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.md\nA .task/artifacts/iam-i1-stage8/projection-documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/projection-documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/projection-source-link-verified.json\nA .task/artifacts/iam-i1-stage8/rdm-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-final-gate-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-merge-response-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-resynced-review-replay.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-review.md\nA .task/artifacts/iam-i1-stage8/rdm-card-close.json\nA .task/artifacts/iam-i1-stage8/rdm-final-gate.json\nA .task/artifacts/iam-i1-stage8/rdm-final-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/rdm-merge-response.json\nA .task/artifacts/project-member-access-receipts/downstream-final-records-manifest.json\nA .task/artifacts/project-member-access-receipts/project-member-actual-merge.json\nA .task/artifacts/project-member-access-receipts/project-member-archive-check.py\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-check.json\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-sync.json\nA .task/artifacts/project-member-access-receipts/project-member-final-gate.json\nA .task/artifacts/project-member-access-receipts/project-member-merged-components.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-actual-merge-354.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-final-gate-2973.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-synced-final-test.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-tag-final-review.md\nA .task/artifacts/project-member-access-receipts/project-member-rdm-upstream-final-review.md\n M .task/feature-dependency-workspace.md\nA .task/feature-merge-queue-policy-draft.md\nM AGENTS.md\nUU Makefile\nM PROJECT.md\n M components.lock.json\nM policy/adoption.md\nM policy/delivery.md\nM policy/governance.md\nA policy/merge-queue.md\nM policy/platform-admission.md\nM policy/tool-adaptation-matrix.md\nM scripts/evidence.py\nUU scripts/task.sh\nM tests/integration/rdm-increment/acceptance_scenarios.sh\nM tests/test_evidence.py\nA tests/test_merge_queue_trial.py\nM tests/test_task.py\nA tests/test_task_recovery.py\n", + "tracked_diff_sha256": "c4595c2f66ae31ac1102933582b000626535f1112c5b5c68d044520bab1e9110", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "after": { + "head": "7a1ff23341f535483c8abcb8ce3fee67b13519c7", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "R .task/feature-d1-closeout-evidence.md -> .task/archive/feature-d1-closeout-evidence.md\nA .task/archive/feature-iam-i1-permission-boundaries.md\nR .task/feature-project-member-access.md -> .task/archive/feature-project-member-access.md\nR .task/feature-rdm-increment-settings-duties.md -> .task/archive/feature-rdm-increment-settings-duties.md\nA .task/artifacts/iam-i1-stage8/dev-actual-merge.json\nA .task/artifacts/iam-i1-stage8/dev-before-merge-sync.json\nA .task/artifacts/iam-i1-stage8/dev-before-pr-sync.json\nA .task/artifacts/iam-i1-stage8/dev-final-composition-test.json\nA .task/artifacts/iam-i1-stage8/dev-final-gate.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-doccheck.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-check.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-v2.json\nA .task/artifacts/iam-i1-stage8/dev-final-review.md\nA .task/artifacts/iam-i1-stage8/dev-final-source-equivalence-v2.json\nA .task/artifacts/iam-i1-stage8/dev-merge-response.json\nA .task/artifacts/iam-i1-stage8/dev-published-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/dev-stage9-independent-sync-review.json\nA .task/artifacts/iam-i1-stage8/docs-review.md\nA .task/artifacts/iam-i1-stage8/documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/documents-merge-response.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v2.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v3.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-approved-snapshot-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.md\nA .task/artifacts/iam-i1-stage8/projection-documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/projection-documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/projection-source-link-verified.json\nA .task/artifacts/iam-i1-stage8/rdm-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-final-gate-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-merge-response-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-resynced-review-replay.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-review.md\nA .task/artifacts/iam-i1-stage8/rdm-card-close.json\nA .task/artifacts/iam-i1-stage8/rdm-final-gate.json\nA .task/artifacts/iam-i1-stage8/rdm-final-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/rdm-merge-response.json\nA .task/artifacts/project-member-access-receipts/downstream-final-records-manifest.json\nA .task/artifacts/project-member-access-receipts/project-member-actual-merge.json\nA .task/artifacts/project-member-access-receipts/project-member-archive-check.py\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-check.json\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-sync.json\nA .task/artifacts/project-member-access-receipts/project-member-final-gate.json\nA .task/artifacts/project-member-access-receipts/project-member-merged-components.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-actual-merge-354.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-final-gate-2973.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-synced-final-test.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-tag-final-review.md\nA .task/artifacts/project-member-access-receipts/project-member-rdm-upstream-final-review.md\n M .task/feature-dependency-workspace.md\nA .task/feature-merge-queue-policy-draft.md\nM AGENTS.md\nUU Makefile\nM PROJECT.md\n M components.lock.json\nM policy/adoption.md\nM policy/delivery.md\nM policy/governance.md\nA policy/merge-queue.md\nM policy/platform-admission.md\nM policy/tool-adaptation-matrix.md\nM scripts/evidence.py\nUU scripts/task.sh\nM tests/integration/rdm-increment/acceptance_scenarios.sh\nM tests/test_evidence.py\nA tests/test_merge_queue_trial.py\nM tests/test_task.py\nA tests/test_task_recovery.py\n", + "tracked_diff_sha256": "c4595c2f66ae31ac1102933582b000626535f1112c5b5c68d044520bab1e9110", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "after_error": null, + "exit_code": 0, + "output": "SELF 32c7fa6c10e89c9775b8d84495a2b54edb461f128e9321d2cbbf030dd84a5adf /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md\nSELF b90d57e1dfe172bc34c9527e2875d5a10df611822e0cd92501d76a4f15ec5fd9 /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/2026-10-13-versioned-dependencies-implementation-plan.md\nSELF ae88e212f58502a9adcbe4926224e48d0467c683858781152679db3b02d03e4e /home/weichen/projects/Agent-System-Documents-wt-feature-dependency-workspace-plan/docs/proposals/INDEX.md\nSELF 60a9307b298d99939c12189643a2abfd397cccf4cc809ee2d4f8008b9d1d492c /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/README.md\nSELF f0fb916ff17cf1b079b7c89c8a34380839317c45a8e9e415bdf2da10392a80e9 /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/standards/multi-repo.md\nSELF bd1ce8f432732cced1a3edce42e593ba5219ae3231b395e6480b3208cb4b1d2b /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/standards/collaboration.md\nSELF ff6d51d5b1426b256a94c7c87e86e47ff9cb7337fd1c5edf9edcce42de29e4e8 /home/weichen/projects/Development-Guidelines-wt-feature-versioned-dependencies/workflows/adoption.md\nPASS: R1-R15, U1-U8, general/project separation, relative links: 120\n", + "output_sha256": "9017bed6f0be47083e45201b05be5345c0982c246935448d52cbe47b40887630", + "receipt_sha256": "97b5eb903e4f3ce6ac0691f19bc02f588730749a310c0500cdfca6cf49564ce5" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:34:39.569763+00:00", + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_component_governance.py -v", + "command_sha256": "47968df6b40cd41363f5167484d183a24656112c4994b8d5a9efb8f4dc97af4e", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "7a1ff23341f535483c8abcb8ce3fee67b13519c7", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "R .task/feature-d1-closeout-evidence.md -> .task/archive/feature-d1-closeout-evidence.md\nA .task/archive/feature-iam-i1-permission-boundaries.md\nR .task/feature-project-member-access.md -> .task/archive/feature-project-member-access.md\nR .task/feature-rdm-increment-settings-duties.md -> .task/archive/feature-rdm-increment-settings-duties.md\nA .task/artifacts/iam-i1-stage8/dev-actual-merge.json\nA .task/artifacts/iam-i1-stage8/dev-before-merge-sync.json\nA .task/artifacts/iam-i1-stage8/dev-before-pr-sync.json\nA .task/artifacts/iam-i1-stage8/dev-final-composition-test.json\nA .task/artifacts/iam-i1-stage8/dev-final-gate.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-doccheck.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-check.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-v2.json\nA .task/artifacts/iam-i1-stage8/dev-final-review.md\nA .task/artifacts/iam-i1-stage8/dev-final-source-equivalence-v2.json\nA .task/artifacts/iam-i1-stage8/dev-merge-response.json\nA .task/artifacts/iam-i1-stage8/dev-published-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/dev-stage9-independent-sync-review.json\nA .task/artifacts/iam-i1-stage8/docs-review.md\nA .task/artifacts/iam-i1-stage8/documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/documents-merge-response.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v2.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v3.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-approved-snapshot-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.md\nA .task/artifacts/iam-i1-stage8/projection-documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/projection-documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/projection-source-link-verified.json\nA .task/artifacts/iam-i1-stage8/rdm-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-final-gate-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-merge-response-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-resynced-review-replay.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-review.md\nA .task/artifacts/iam-i1-stage8/rdm-card-close.json\nA .task/artifacts/iam-i1-stage8/rdm-final-gate.json\nA .task/artifacts/iam-i1-stage8/rdm-final-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/rdm-merge-response.json\nA .task/artifacts/project-member-access-receipts/downstream-final-records-manifest.json\nA .task/artifacts/project-member-access-receipts/project-member-actual-merge.json\nA .task/artifacts/project-member-access-receipts/project-member-archive-check.py\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-check.json\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-sync.json\nA .task/artifacts/project-member-access-receipts/project-member-final-gate.json\nA .task/artifacts/project-member-access-receipts/project-member-merged-components.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-actual-merge-354.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-final-gate-2973.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-synced-final-test.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-tag-final-review.md\nA .task/artifacts/project-member-access-receipts/project-member-rdm-upstream-final-review.md\n M .task/feature-dependency-workspace.md\nA .task/feature-merge-queue-policy-draft.md\nM AGENTS.md\nM Makefile\nM PROJECT.md\n M components.lock.json\nM policy/adoption.md\nM policy/delivery.md\nM policy/governance.md\nA policy/merge-queue.md\nM policy/platform-admission.md\nM policy/tool-adaptation-matrix.md\nM scripts/evidence.py\nUU scripts/task.sh\nM tests/integration/rdm-increment/acceptance_scenarios.sh\n M tests/test_component_governance.py\nM tests/test_evidence.py\nA tests/test_merge_queue_trial.py\nM tests/test_task.py\nAM tests/test_task_recovery.py\n", + "tracked_diff_sha256": "7b3dc3344653c085f97dbc7486b5b52bd8959b28903c6817f29d1a3c98e92f35", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "after": { + "head": "7a1ff23341f535483c8abcb8ce3fee67b13519c7", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "R .task/feature-d1-closeout-evidence.md -> .task/archive/feature-d1-closeout-evidence.md\nA .task/archive/feature-iam-i1-permission-boundaries.md\nR .task/feature-project-member-access.md -> .task/archive/feature-project-member-access.md\nR .task/feature-rdm-increment-settings-duties.md -> .task/archive/feature-rdm-increment-settings-duties.md\nA .task/artifacts/iam-i1-stage8/dev-actual-merge.json\nA .task/artifacts/iam-i1-stage8/dev-before-merge-sync.json\nA .task/artifacts/iam-i1-stage8/dev-before-pr-sync.json\nA .task/artifacts/iam-i1-stage8/dev-final-composition-test.json\nA .task/artifacts/iam-i1-stage8/dev-final-gate.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-doccheck.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-check.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-v2.json\nA .task/artifacts/iam-i1-stage8/dev-final-review.md\nA .task/artifacts/iam-i1-stage8/dev-final-source-equivalence-v2.json\nA .task/artifacts/iam-i1-stage8/dev-merge-response.json\nA .task/artifacts/iam-i1-stage8/dev-published-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/dev-stage9-independent-sync-review.json\nA .task/artifacts/iam-i1-stage8/docs-review.md\nA .task/artifacts/iam-i1-stage8/documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/documents-merge-response.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v2.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v3.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-approved-snapshot-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.md\nA .task/artifacts/iam-i1-stage8/projection-documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/projection-documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/projection-source-link-verified.json\nA .task/artifacts/iam-i1-stage8/rdm-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-final-gate-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-merge-response-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-resynced-review-replay.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-review.md\nA .task/artifacts/iam-i1-stage8/rdm-card-close.json\nA .task/artifacts/iam-i1-stage8/rdm-final-gate.json\nA .task/artifacts/iam-i1-stage8/rdm-final-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/rdm-merge-response.json\nA .task/artifacts/project-member-access-receipts/downstream-final-records-manifest.json\nA .task/artifacts/project-member-access-receipts/project-member-actual-merge.json\nA .task/artifacts/project-member-access-receipts/project-member-archive-check.py\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-check.json\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-sync.json\nA .task/artifacts/project-member-access-receipts/project-member-final-gate.json\nA .task/artifacts/project-member-access-receipts/project-member-merged-components.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-actual-merge-354.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-final-gate-2973.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-synced-final-test.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-tag-final-review.md\nA .task/artifacts/project-member-access-receipts/project-member-rdm-upstream-final-review.md\n M .task/feature-dependency-workspace.md\nA .task/feature-merge-queue-policy-draft.md\nM AGENTS.md\nM Makefile\nM PROJECT.md\n M components.lock.json\nM policy/adoption.md\nM policy/delivery.md\nM policy/governance.md\nA policy/merge-queue.md\nM policy/platform-admission.md\nM policy/tool-adaptation-matrix.md\nM scripts/evidence.py\nUU scripts/task.sh\nM tests/integration/rdm-increment/acceptance_scenarios.sh\n M tests/test_component_governance.py\nM tests/test_evidence.py\nA tests/test_merge_queue_trial.py\nM tests/test_task.py\nAM tests/test_task_recovery.py\n", + "tracked_diff_sha256": "7b3dc3344653c085f97dbc7486b5b52bd8959b28903c6817f29d1a3c98e92f35", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "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) ... 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_new_layout_cannot_use_receipt_without_component_identity (test_component_governance.ComponentGovernanceTests.test_new_layout_cannot_use_receipt_without_component_identity) ... FAIL\ntest_receipts_reject_component_path_escape (test_component_governance.ComponentGovernanceTests.test_receipts_reject_component_path_escape) ... ok\ntest_startup_receipt_rejects_changed_ignored_component_objects (test_component_governance.ComponentGovernanceTests.test_startup_receipt_rejects_changed_ignored_component_objects) ... FAIL\n\n======================================================================\nFAIL: test_new_layout_cannot_use_receipt_without_component_identity (test_component_governance.ComponentGovernanceTests.test_new_layout_cannot_use_receipt_without_component_identity)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_component_governance.py\", line 83, in test_new_layout_cannot_use_receipt_without_component_identity\n with self.assertRaises(module.EvidenceError):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: EvidenceError not raised\n\n======================================================================\nFAIL: test_startup_receipt_rejects_changed_ignored_component_objects (test_component_governance.ComponentGovernanceTests.test_startup_receipt_rejects_changed_ignored_component_objects)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/tests/test_component_governance.py\", line 72, in test_startup_receipt_rejects_changed_ignored_component_objects\n with self.assertRaises(module.EvidenceError):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: EvidenceError not raised\n\n----------------------------------------------------------------------\nRan 5 tests in 0.377s\n\nFAILED (failures=2)\n", + "output_sha256": "d4a2f12874327b8e7d7551167d276ae8e1daba0efd79b208ad053b49b40a589e", + "receipt_sha256": "30317956e19fa7cb8cee19d7e1e47994086a451d7c7207d18f32588d6bac85e3" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:35:16.198481+00:00", + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_component_governance.py -v", + "command_sha256": "47968df6b40cd41363f5167484d183a24656112c4994b8d5a9efb8f4dc97af4e", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "7a1ff23341f535483c8abcb8ce3fee67b13519c7", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "R .task/feature-d1-closeout-evidence.md -> .task/archive/feature-d1-closeout-evidence.md\nA .task/archive/feature-iam-i1-permission-boundaries.md\nR .task/feature-project-member-access.md -> .task/archive/feature-project-member-access.md\nR .task/feature-rdm-increment-settings-duties.md -> .task/archive/feature-rdm-increment-settings-duties.md\nA .task/artifacts/iam-i1-stage8/dev-actual-merge.json\nA .task/artifacts/iam-i1-stage8/dev-before-merge-sync.json\nA .task/artifacts/iam-i1-stage8/dev-before-pr-sync.json\nA .task/artifacts/iam-i1-stage8/dev-final-composition-test.json\nA .task/artifacts/iam-i1-stage8/dev-final-gate.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-doccheck.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-check.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-v2.json\nA .task/artifacts/iam-i1-stage8/dev-final-review.md\nA .task/artifacts/iam-i1-stage8/dev-final-source-equivalence-v2.json\nA .task/artifacts/iam-i1-stage8/dev-merge-response.json\nA .task/artifacts/iam-i1-stage8/dev-published-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/dev-stage9-independent-sync-review.json\nA .task/artifacts/iam-i1-stage8/docs-review.md\nA .task/artifacts/iam-i1-stage8/documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/documents-merge-response.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v2.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v3.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-approved-snapshot-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.md\nA .task/artifacts/iam-i1-stage8/projection-documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/projection-documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/projection-source-link-verified.json\nA .task/artifacts/iam-i1-stage8/rdm-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-final-gate-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-merge-response-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-resynced-review-replay.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-review.md\nA .task/artifacts/iam-i1-stage8/rdm-card-close.json\nA .task/artifacts/iam-i1-stage8/rdm-final-gate.json\nA .task/artifacts/iam-i1-stage8/rdm-final-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/rdm-merge-response.json\nA .task/artifacts/project-member-access-receipts/downstream-final-records-manifest.json\nA .task/artifacts/project-member-access-receipts/project-member-actual-merge.json\nA .task/artifacts/project-member-access-receipts/project-member-archive-check.py\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-check.json\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-sync.json\nA .task/artifacts/project-member-access-receipts/project-member-final-gate.json\nA .task/artifacts/project-member-access-receipts/project-member-merged-components.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-actual-merge-354.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-final-gate-2973.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-synced-final-test.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-tag-final-review.md\nA .task/artifacts/project-member-access-receipts/project-member-rdm-upstream-final-review.md\n M .task/feature-dependency-workspace.md\nA .task/feature-merge-queue-policy-draft.md\nM AGENTS.md\nM Makefile\nM PROJECT.md\n M components.lock.json\nM policy/adoption.md\nM policy/delivery.md\nM policy/governance.md\nA policy/merge-queue.md\nM policy/platform-admission.md\nM policy/tool-adaptation-matrix.md\nMM scripts/evidence.py\nM scripts/task.sh\nM tests/integration/rdm-increment/acceptance_scenarios.sh\n M tests/test_component_governance.py\nM tests/test_evidence.py\nA tests/test_merge_queue_trial.py\nM tests/test_task.py\nAM tests/test_task_recovery.py\n", + "tracked_diff_sha256": "fb7b1579e69e584c1a0eabb026236ba1ed4cebd1d79686222be1031a9058f6c8", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "after": { + "head": "7a1ff23341f535483c8abcb8ce3fee67b13519c7", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "R .task/feature-d1-closeout-evidence.md -> .task/archive/feature-d1-closeout-evidence.md\nA .task/archive/feature-iam-i1-permission-boundaries.md\nR .task/feature-project-member-access.md -> .task/archive/feature-project-member-access.md\nR .task/feature-rdm-increment-settings-duties.md -> .task/archive/feature-rdm-increment-settings-duties.md\nA .task/artifacts/iam-i1-stage8/dev-actual-merge.json\nA .task/artifacts/iam-i1-stage8/dev-before-merge-sync.json\nA .task/artifacts/iam-i1-stage8/dev-before-pr-sync.json\nA .task/artifacts/iam-i1-stage8/dev-final-composition-test.json\nA .task/artifacts/iam-i1-stage8/dev-final-gate.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-doccheck.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-check.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-v2.json\nA .task/artifacts/iam-i1-stage8/dev-final-review.md\nA .task/artifacts/iam-i1-stage8/dev-final-source-equivalence-v2.json\nA .task/artifacts/iam-i1-stage8/dev-merge-response.json\nA .task/artifacts/iam-i1-stage8/dev-published-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/dev-stage9-independent-sync-review.json\nA .task/artifacts/iam-i1-stage8/docs-review.md\nA .task/artifacts/iam-i1-stage8/documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/documents-merge-response.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v2.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v3.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-approved-snapshot-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.md\nA .task/artifacts/iam-i1-stage8/projection-documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/projection-documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/projection-source-link-verified.json\nA .task/artifacts/iam-i1-stage8/rdm-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-final-gate-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-merge-response-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-resynced-review-replay.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-review.md\nA .task/artifacts/iam-i1-stage8/rdm-card-close.json\nA .task/artifacts/iam-i1-stage8/rdm-final-gate.json\nA .task/artifacts/iam-i1-stage8/rdm-final-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/rdm-merge-response.json\nA .task/artifacts/project-member-access-receipts/downstream-final-records-manifest.json\nA .task/artifacts/project-member-access-receipts/project-member-actual-merge.json\nA .task/artifacts/project-member-access-receipts/project-member-archive-check.py\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-check.json\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-sync.json\nA .task/artifacts/project-member-access-receipts/project-member-final-gate.json\nA .task/artifacts/project-member-access-receipts/project-member-merged-components.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-actual-merge-354.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-final-gate-2973.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-synced-final-test.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-tag-final-review.md\nA .task/artifacts/project-member-access-receipts/project-member-rdm-upstream-final-review.md\n M .task/feature-dependency-workspace.md\nA .task/feature-merge-queue-policy-draft.md\nM AGENTS.md\nM Makefile\nM PROJECT.md\n M components.lock.json\nM policy/adoption.md\nM policy/delivery.md\nM policy/governance.md\nA policy/merge-queue.md\nM policy/platform-admission.md\nM policy/tool-adaptation-matrix.md\nMM scripts/evidence.py\nM scripts/task.sh\nM tests/integration/rdm-increment/acceptance_scenarios.sh\n M tests/test_component_governance.py\nM tests/test_evidence.py\nA tests/test_merge_queue_trial.py\nM tests/test_task.py\nAM tests/test_task_recovery.py\n", + "tracked_diff_sha256": "fb7b1579e69e584c1a0eabb026236ba1ed4cebd1d79686222be1031a9058f6c8", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "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_new_layout_cannot_use_receipt_without_component_identity (test_component_governance.ComponentGovernanceTests.test_new_layout_cannot_use_receipt_without_component_identity) ... ok\ntest_receipts_reject_component_path_escape (test_component_governance.ComponentGovernanceTests.test_receipts_reject_component_path_escape) ... ok\ntest_startup_receipt_rejects_changed_ignored_component_objects (test_component_governance.ComponentGovernanceTests.test_startup_receipt_rejects_changed_ignored_component_objects) ... ok\n\n----------------------------------------------------------------------\nRan 5 tests in 0.374s\n\nOK\n", + "output_sha256": "4213c6f805ee08deeab4844b9abb9fc01d965190252353668f5d412985141734", + "receipt_sha256": "7ef330e608df2955baeb27a8e6f32de087b0d4bc3e1b6a2be213f8c54e731913" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:35:16.893701+00:00", + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_evidence.py -v", + "command_sha256": "1b4ded68a6722bae73cb4621aafe2c771e0231106f440ba1931e04c42b1c6993", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "7a1ff23341f535483c8abcb8ce3fee67b13519c7", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "R .task/feature-d1-closeout-evidence.md -> .task/archive/feature-d1-closeout-evidence.md\nA .task/archive/feature-iam-i1-permission-boundaries.md\nR .task/feature-project-member-access.md -> .task/archive/feature-project-member-access.md\nR .task/feature-rdm-increment-settings-duties.md -> .task/archive/feature-rdm-increment-settings-duties.md\nA .task/artifacts/iam-i1-stage8/dev-actual-merge.json\nA .task/artifacts/iam-i1-stage8/dev-before-merge-sync.json\nA .task/artifacts/iam-i1-stage8/dev-before-pr-sync.json\nA .task/artifacts/iam-i1-stage8/dev-final-composition-test.json\nA .task/artifacts/iam-i1-stage8/dev-final-gate.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-doccheck.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-check.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-v2.json\nA .task/artifacts/iam-i1-stage8/dev-final-review.md\nA .task/artifacts/iam-i1-stage8/dev-final-source-equivalence-v2.json\nA .task/artifacts/iam-i1-stage8/dev-merge-response.json\nA .task/artifacts/iam-i1-stage8/dev-published-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/dev-stage9-independent-sync-review.json\nA .task/artifacts/iam-i1-stage8/docs-review.md\nA .task/artifacts/iam-i1-stage8/documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/documents-merge-response.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v2.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v3.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-approved-snapshot-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.md\nA .task/artifacts/iam-i1-stage8/projection-documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/projection-documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/projection-source-link-verified.json\nA .task/artifacts/iam-i1-stage8/rdm-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-final-gate-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-merge-response-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-resynced-review-replay.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-review.md\nA .task/artifacts/iam-i1-stage8/rdm-card-close.json\nA .task/artifacts/iam-i1-stage8/rdm-final-gate.json\nA .task/artifacts/iam-i1-stage8/rdm-final-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/rdm-merge-response.json\nA .task/artifacts/project-member-access-receipts/downstream-final-records-manifest.json\nA .task/artifacts/project-member-access-receipts/project-member-actual-merge.json\nA .task/artifacts/project-member-access-receipts/project-member-archive-check.py\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-check.json\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-sync.json\nA .task/artifacts/project-member-access-receipts/project-member-final-gate.json\nA .task/artifacts/project-member-access-receipts/project-member-merged-components.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-actual-merge-354.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-final-gate-2973.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-synced-final-test.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-tag-final-review.md\nA .task/artifacts/project-member-access-receipts/project-member-rdm-upstream-final-review.md\n M .task/feature-dependency-workspace.md\nA .task/feature-merge-queue-policy-draft.md\nM AGENTS.md\nM Makefile\nM PROJECT.md\n M components.lock.json\nM policy/adoption.md\nM policy/delivery.md\nM policy/governance.md\nA policy/merge-queue.md\nM policy/platform-admission.md\nM policy/tool-adaptation-matrix.md\nMM scripts/evidence.py\nM scripts/task.sh\nM tests/integration/rdm-increment/acceptance_scenarios.sh\n M tests/test_component_governance.py\nM tests/test_evidence.py\nA tests/test_merge_queue_trial.py\nM tests/test_task.py\nAM tests/test_task_recovery.py\n", + "tracked_diff_sha256": "3acf05a851a18e7d1f68bd8623001a841207b8af4665f754de47791e61b68d8e", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "after": { + "head": "7a1ff23341f535483c8abcb8ce3fee67b13519c7", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "R .task/feature-d1-closeout-evidence.md -> .task/archive/feature-d1-closeout-evidence.md\nA .task/archive/feature-iam-i1-permission-boundaries.md\nR .task/feature-project-member-access.md -> .task/archive/feature-project-member-access.md\nR .task/feature-rdm-increment-settings-duties.md -> .task/archive/feature-rdm-increment-settings-duties.md\nA .task/artifacts/iam-i1-stage8/dev-actual-merge.json\nA .task/artifacts/iam-i1-stage8/dev-before-merge-sync.json\nA .task/artifacts/iam-i1-stage8/dev-before-pr-sync.json\nA .task/artifacts/iam-i1-stage8/dev-final-composition-test.json\nA .task/artifacts/iam-i1-stage8/dev-final-gate.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-doccheck.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-check.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-v2.json\nA .task/artifacts/iam-i1-stage8/dev-final-review.md\nA .task/artifacts/iam-i1-stage8/dev-final-source-equivalence-v2.json\nA .task/artifacts/iam-i1-stage8/dev-merge-response.json\nA .task/artifacts/iam-i1-stage8/dev-published-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/dev-stage9-independent-sync-review.json\nA .task/artifacts/iam-i1-stage8/docs-review.md\nA .task/artifacts/iam-i1-stage8/documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/documents-merge-response.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v2.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v3.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-approved-snapshot-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.md\nA .task/artifacts/iam-i1-stage8/projection-documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/projection-documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/projection-source-link-verified.json\nA .task/artifacts/iam-i1-stage8/rdm-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-final-gate-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-merge-response-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-resynced-review-replay.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-review.md\nA .task/artifacts/iam-i1-stage8/rdm-card-close.json\nA .task/artifacts/iam-i1-stage8/rdm-final-gate.json\nA .task/artifacts/iam-i1-stage8/rdm-final-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/rdm-merge-response.json\nA .task/artifacts/project-member-access-receipts/downstream-final-records-manifest.json\nA .task/artifacts/project-member-access-receipts/project-member-actual-merge.json\nA .task/artifacts/project-member-access-receipts/project-member-archive-check.py\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-check.json\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-sync.json\nA .task/artifacts/project-member-access-receipts/project-member-final-gate.json\nA .task/artifacts/project-member-access-receipts/project-member-merged-components.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-actual-merge-354.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-final-gate-2973.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-synced-final-test.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-tag-final-review.md\nA .task/artifacts/project-member-access-receipts/project-member-rdm-upstream-final-review.md\n M .task/feature-dependency-workspace.md\nA .task/feature-merge-queue-policy-draft.md\nM AGENTS.md\nM Makefile\nM PROJECT.md\n M components.lock.json\nM policy/adoption.md\nM policy/delivery.md\nM policy/governance.md\nA policy/merge-queue.md\nM policy/platform-admission.md\nM policy/tool-adaptation-matrix.md\nMM scripts/evidence.py\nM scripts/task.sh\nM tests/integration/rdm-increment/acceptance_scenarios.sh\n M tests/test_component_governance.py\nM tests/test_evidence.py\nA tests/test_merge_queue_trial.py\nM tests/test_task.py\nAM tests/test_task_recovery.py\n", + "tracked_diff_sha256": "3acf05a851a18e7d1f68bd8623001a841207b8af4665f754de47791e61b68d8e", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_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_fixed_candidate_capture_preserves_checkout (test_evidence.EvidenceTests.test_fixed_candidate_capture_preserves_checkout) ... 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\ntest_validation_purpose_is_not_injected_into_measured_command (test_evidence.EvidenceTests.test_validation_purpose_is_not_injected_into_measured_command) ... ok\n\n----------------------------------------------------------------------\nRan 33 tests in 4.004s\n\nOK\n", + "output_sha256": "127878268d0ab7659c9f40e2b3d0489c0cd5df0b3c92b849ff0895ae100ac8f1", + "receipt_sha256": "824adfc92d549d7c8031c1349d6ff97489ce489e94ec210ed9c399d4af9a9b90" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:37:19.209871+00:00", + "command": "git diff --check", + "command_sha256": "466c2f308b48c7661d646fdd068fbecea974c665fe65dbf8ed508f224180ce0b", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "7a1ff23341f535483c8abcb8ce3fee67b13519c7", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "R .task/feature-d1-closeout-evidence.md -> .task/archive/feature-d1-closeout-evidence.md\nA .task/archive/feature-iam-i1-permission-boundaries.md\nR .task/feature-project-member-access.md -> .task/archive/feature-project-member-access.md\nR .task/feature-rdm-increment-settings-duties.md -> .task/archive/feature-rdm-increment-settings-duties.md\nA .task/artifacts/iam-i1-stage8/dev-actual-merge.json\nA .task/artifacts/iam-i1-stage8/dev-before-merge-sync.json\nA .task/artifacts/iam-i1-stage8/dev-before-pr-sync.json\nA .task/artifacts/iam-i1-stage8/dev-final-composition-test.json\nA .task/artifacts/iam-i1-stage8/dev-final-gate.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-doccheck.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-check.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-v2.json\nA .task/artifacts/iam-i1-stage8/dev-final-review.md\nA .task/artifacts/iam-i1-stage8/dev-final-source-equivalence-v2.json\nA .task/artifacts/iam-i1-stage8/dev-merge-response.json\nA .task/artifacts/iam-i1-stage8/dev-published-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/dev-stage9-independent-sync-review.json\nA .task/artifacts/iam-i1-stage8/docs-review.md\nA .task/artifacts/iam-i1-stage8/documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/documents-merge-response.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v2.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v3.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-approved-snapshot-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.md\nA .task/artifacts/iam-i1-stage8/projection-documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/projection-documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/projection-source-link-verified.json\nA .task/artifacts/iam-i1-stage8/rdm-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-final-gate-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-merge-response-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-resynced-review-replay.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-review.md\nA .task/artifacts/iam-i1-stage8/rdm-card-close.json\nA .task/artifacts/iam-i1-stage8/rdm-final-gate.json\nA .task/artifacts/iam-i1-stage8/rdm-final-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/rdm-merge-response.json\nA .task/artifacts/project-member-access-receipts/downstream-final-records-manifest.json\nA .task/artifacts/project-member-access-receipts/project-member-actual-merge.json\nA .task/artifacts/project-member-access-receipts/project-member-archive-check.py\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-check.json\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-sync.json\nA .task/artifacts/project-member-access-receipts/project-member-final-gate.json\nA .task/artifacts/project-member-access-receipts/project-member-merged-components.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-actual-merge-354.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-final-gate-2973.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-synced-final-test.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-tag-final-review.md\nA .task/artifacts/project-member-access-receipts/project-member-rdm-upstream-final-review.md\n M .task/feature-dependency-workspace.md\nA .task/feature-merge-queue-policy-draft.md\nM AGENTS.md\nM Makefile\nM PROJECT.md\n M components.lock.json\nMM policy/adoption.md\nM policy/delivery.md\nM policy/governance.md\nAM policy/merge-queue.md\nM policy/platform-admission.md\nM policy/tool-adaptation-matrix.md\nMM scripts/evidence.py\nM scripts/task.sh\nM tests/integration/rdm-increment/acceptance_scenarios.sh\n M tests/test_component_governance.py\nM tests/test_evidence.py\nA tests/test_merge_queue_trial.py\nM tests/test_task.py\nAM tests/test_task_recovery.py\n", + "tracked_diff_sha256": "9239af815fe3ee8133c873887d83c36a6ed7525587839a7605df670e67aca889", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "after": { + "head": "7a1ff23341f535483c8abcb8ce3fee67b13519c7", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "R .task/feature-d1-closeout-evidence.md -> .task/archive/feature-d1-closeout-evidence.md\nA .task/archive/feature-iam-i1-permission-boundaries.md\nR .task/feature-project-member-access.md -> .task/archive/feature-project-member-access.md\nR .task/feature-rdm-increment-settings-duties.md -> .task/archive/feature-rdm-increment-settings-duties.md\nA .task/artifacts/iam-i1-stage8/dev-actual-merge.json\nA .task/artifacts/iam-i1-stage8/dev-before-merge-sync.json\nA .task/artifacts/iam-i1-stage8/dev-before-pr-sync.json\nA .task/artifacts/iam-i1-stage8/dev-final-composition-test.json\nA .task/artifacts/iam-i1-stage8/dev-final-gate.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-doccheck.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-check.json\nA .task/artifacts/iam-i1-stage8/dev-final-independent-metadata-v2.json\nA .task/artifacts/iam-i1-stage8/dev-final-review.md\nA .task/artifacts/iam-i1-stage8/dev-final-source-equivalence-v2.json\nA .task/artifacts/iam-i1-stage8/dev-merge-response.json\nA .task/artifacts/iam-i1-stage8/dev-published-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/dev-stage9-independent-sync-review.json\nA .task/artifacts/iam-i1-stage8/docs-review.md\nA .task/artifacts/iam-i1-stage8/documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/documents-merge-response.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v2.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review-v3.json\nA .task/artifacts/iam-i1-stage8/independent-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-approved-snapshot-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.json\nA .task/artifacts/iam-i1-stage8/projection-docs-review.md\nA .task/artifacts/iam-i1-stage8/projection-documents-actual-merge.json\nA .task/artifacts/iam-i1-stage8/projection-documents-final-gate.json\nA .task/artifacts/iam-i1-stage8/projection-source-link-verified.json\nA .task/artifacts/iam-i1-stage8/rdm-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-actual-merge.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-final-gate-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-merge-response-v2.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-resynced-review-replay.json\nA .task/artifacts/iam-i1-stage8/rdm-card-close-review.md\nA .task/artifacts/iam-i1-stage8/rdm-card-close.json\nA .task/artifacts/iam-i1-stage8/rdm-final-gate.json\nA .task/artifacts/iam-i1-stage8/rdm-final-source-equivalence.json\nA .task/artifacts/iam-i1-stage8/rdm-merge-response.json\nA .task/artifacts/project-member-access-receipts/downstream-final-records-manifest.json\nA .task/artifacts/project-member-access-receipts/project-member-actual-merge.json\nA .task/artifacts/project-member-access-receipts/project-member-archive-check.py\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-check.json\nA .task/artifacts/project-member-access-receipts/project-member-dev-archive-sync.json\nA .task/artifacts/project-member-access-receipts/project-member-final-gate.json\nA .task/artifacts/project-member-access-receipts/project-member-merged-components.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-actual-merge-354.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-final-gate-2973.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-synced-final-test.json\nA .task/artifacts/project-member-access-receipts/project-member-rdm-tag-final-review.md\nA .task/artifacts/project-member-access-receipts/project-member-rdm-upstream-final-review.md\n M .task/feature-dependency-workspace.md\nA .task/feature-merge-queue-policy-draft.md\nM AGENTS.md\nM Makefile\nM PROJECT.md\n M components.lock.json\nMM policy/adoption.md\nM policy/delivery.md\nM policy/governance.md\nAM policy/merge-queue.md\nM policy/platform-admission.md\nM policy/tool-adaptation-matrix.md\nMM scripts/evidence.py\nM scripts/task.sh\nM tests/integration/rdm-increment/acceptance_scenarios.sh\n M tests/test_component_governance.py\nM tests/test_evidence.py\nA tests/test_merge_queue_trial.py\nM tests/test_task.py\nAM tests/test_task_recovery.py\n", + "tracked_diff_sha256": "9239af815fe3ee8133c873887d83c36a6ed7525587839a7605df670e67aca889", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "after_error": null, + "exit_code": 0, + "output": "", + "output_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "receipt_sha256": "11be0539e5d021b0ceda9d1e9d1859457e95b8b39dc8d5ca1b48c9108f4f8f12" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:38:24.747474+00:00", + "command": "make workspace-prepare NAME=Agent-System-Documents REFRESH_FIXED=1", + "command_sha256": "36a84ee2d289271f066fc128912915be2c59969ca14571934279234009baf6eb", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "98d08347bd24ece91df108f4fc34bf2d94783676", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "7ba50e5b2dce226b4b962ea787222a4b08f0e94c", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "ac06a71f0e86aa99311f2ccdf0cff3ba6aed282080c7c57b767317a2ec8d14cd" + } + }, + "after": { + "head": "98d08347bd24ece91df108f4fc34bf2d94783676", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "4a26798000c39cc59ba0c2cc6328f5c8f10dcb32", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "198817d990551226344f2e531f14c5e1924b6dcba2425ff3feb60233625c8bd4" + } + }, + "after_error": null, + "exit_code": 0, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n{\n \"components\": {\n \"Agent-System-Documents\": {\n \"actual\": {\n \"branch\": null,\n \"changes\": [],\n \"common_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Documents/.git\",\n \"dirty\": false,\n \"git_dir\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Documents/.git\",\n \"head\": \"4a26798000c39cc59ba0c2cc6328f5c8f10dcb32\",\n \"ignored\": [],\n \"locks\": [],\n \"operations\": [],\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Documents.git\",\n \"worktrees\": [\n \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/.workspace/Agent-System-Documents\"\n ]\n },\n \"declared\": {\n \"commit\": \"4a26798000c39cc59ba0c2cc6328f5c8f10dcb32\"\n },\n \"path\": \".workspace/Agent-System-Documents\",\n \"registered\": {\n \"baseline\": \"4a26798000c39cc59ba0c2cc6328f5c8f10dcb32\",\n \"branch\": null,\n \"linked\": false,\n \"mode\": \"versioned\",\n \"origin\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Documents.git\",\n \"owner_root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"path\": \".workspace/Agent-System-Documents\",\n \"previous_sources\": [\n {\n \"commit\": \"7ba50e5b2dce226b4b962ea787222a4b08f0e94c\",\n \"ref\": \"refs/workspace/fixed/7ba50e5b2dce226b4b962ea787222a4b08f0e94c\",\n \"source\": {\n \"kind\": \"source-lock\"\n }\n }\n ],\n \"source\": {\n \"kind\": \"source-lock\"\n }\n },\n \"repo\": \"ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Documents.git\",\n \"role\": \"documentation\"\n }\n },\n \"go_work\": null,\n \"root\": \"/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace\",\n \"schema\": 1\n}\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "56a7d5dfbd72f11b0f2d69053e5c7baf400b411260e680f6ba1cf9c80b07e23c", + "receipt_sha256": "f5e64d80b5794267f13013ae9003d560549f6f14817f6053faa8f9d32d828d7c" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:48:18.142925+00:00", + "command": "cd \"$(cat /tmp/dependency-ci-archive-root)\" && python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -q", + "command_sha256": "bb0a56da82933a4d847392fd3ab7c507441f7852be1670900d89de7e0cab5d10", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "98d08347bd24ece91df108f4fc34bf2d94783676", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "9010d1a0c6b7886fd4966b35b3bd91b22968b90fb4830201cbab93987df2f643", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "4a26798000c39cc59ba0c2cc6328f5c8f10dcb32", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "198817d990551226344f2e531f14c5e1924b6dcba2425ff3feb60233625c8bd4" + } + }, + "after": { + "head": "98d08347bd24ece91df108f4fc34bf2d94783676", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "9010d1a0c6b7886fd4966b35b3bd91b22968b90fb4830201cbab93987df2f643", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "4a26798000c39cc59ba0c2cc6328f5c8f10dcb32", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "198817d990551226344f2e531f14c5e1924b6dcba2425ff3feb60233625c8bd4" + } + }, + "after_error": null, + "exit_code": 1, + "output": "======================================================================\nERROR: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) (repo='Logging-System')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 190, in test_component_checkout_removes_tokens_before_candidate_executes\n result = self.run_phase(\"Checkout\", workflow=MIGRATION / repo / \".gitea/workflows/ci.yml\",\n extra={\"TOKEN\": , \"GITHUB_SHA\": sha, \"GITHUB_REPOSITORY\": \"weichen/\" + repo},\n after=\"python3 probe.py\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Logging-System/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) (repo='Error-Code-System')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 190, in test_component_checkout_removes_tokens_before_candidate_executes\n result = self.run_phase(\"Checkout\", workflow=MIGRATION / repo / \".gitea/workflows/ci.yml\",\n extra={\"TOKEN\": , \"GITHUB_SHA\": sha, \"GITHUB_REPOSITORY\": \"weichen/\" + repo},\n after=\"python3 probe.py\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Error-Code-System/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) (repo='Agent-System-Core')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 190, in test_component_checkout_removes_tokens_before_candidate_executes\n result = self.run_phase(\"Checkout\", workflow=MIGRATION / repo / \".gitea/workflows/ci.yml\",\n extra={\"TOKEN\": , \"GITHUB_SHA\": sha, \"GITHUB_REPOSITORY\": \"weichen/\" + repo},\n after=\"python3 probe.py\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-System-Core/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) (repo='Agent-Native')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 190, in test_component_checkout_removes_tokens_before_candidate_executes\n result = self.run_phase(\"Checkout\", workflow=MIGRATION / repo / \".gitea/workflows/ci.yml\",\n extra={\"TOKEN\": , \"GITHUB_SHA\": sha, \"GITHUB_REPOSITORY\": \"weichen/\" + repo},\n after=\"python3 probe.py\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-Native/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) (repo='Agent-Intent')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 190, in test_component_checkout_removes_tokens_before_candidate_executes\n result = self.run_phase(\"Checkout\", workflow=MIGRATION / repo / \".gitea/workflows/ci.yml\",\n extra={\"TOKEN\": , \"GITHUB_SHA\": sha, \"GITHUB_REPOSITORY\": \"weichen/\" + repo},\n after=\"python3 probe.py\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-Intent/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) (repo='Agent-Command')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 190, in test_component_checkout_removes_tokens_before_candidate_executes\n result = self.run_phase(\"Checkout\", workflow=MIGRATION / repo / \".gitea/workflows/ci.yml\",\n extra={\"TOKEN\": , \"GITHUB_SHA\": sha, \"GITHUB_REPOSITORY\": \"weichen/\" + repo},\n after=\"python3 probe.py\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-Command/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) (repo='Agent-Squad')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 190, in test_component_checkout_removes_tokens_before_candidate_executes\n result = self.run_phase(\"Checkout\", workflow=MIGRATION / repo / \".gitea/workflows/ci.yml\",\n extra={\"TOKEN\": , \"GITHUB_SHA\": sha, \"GITHUB_REPOSITORY\": \"weichen/\" + repo},\n after=\"python3 probe.py\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-Squad/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) (repo='Agent-System-Backend')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 190, in test_component_checkout_removes_tokens_before_candidate_executes\n result = self.run_phase(\"Checkout\", workflow=MIGRATION / repo / \".gitea/workflows/ci.yml\",\n extra={\"TOKEN\": , \"GITHUB_SHA\": sha, \"GITHUB_REPOSITORY\": \"weichen/\" + repo},\n after=\"python3 probe.py\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-System-Backend/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) (repo='Agent-System-UI')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 190, in test_component_checkout_removes_tokens_before_candidate_executes\n result = self.run_phase(\"Checkout\", workflow=MIGRATION / repo / \".gitea/workflows/ci.yml\",\n extra={\"TOKEN\": , \"GITHUB_SHA\": sha, \"GITHUB_REPOSITORY\": \"weichen/\" + repo},\n after=\"python3 probe.py\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-System-UI/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) (repo='Agent-System-Frontend')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 190, in test_component_checkout_removes_tokens_before_candidate_executes\n result = self.run_phase(\"Checkout\", workflow=MIGRATION / repo / \".gitea/workflows/ci.yml\",\n extra={\"TOKEN\": , \"GITHUB_SHA\": sha, \"GITHUB_REPOSITORY\": \"weichen/\" + repo},\n after=\"python3 probe.py\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-System-Frontend/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) (repo='Agent-System-RDM')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 190, in test_component_checkout_removes_tokens_before_candidate_executes\n result = self.run_phase(\"Checkout\", workflow=MIGRATION / repo / \".gitea/workflows/ci.yml\",\n extra={\"TOKEN\": , \"GITHUB_SHA\": sha, \"GITHUB_REPOSITORY\": \"weichen/\" + repo},\n after=\"python3 probe.py\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-System-RDM/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) (repo='Logging-System')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 222, in test_component_ci_executes_nested_go_module_tests\n lines = (MIGRATION / repo / \".gitea/workflows/ci.yml\").read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Logging-System/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) (repo='Agent-Squad')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 222, in test_component_ci_executes_nested_go_module_tests\n lines = (MIGRATION / repo / \".gitea/workflows/ci.yml\").read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-Squad/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_go_prefetch_covers_logging_trace_module (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 243, in test_go_prefetch_covers_logging_trace_module\n result = self.run_phase(\"Prefetch Go modules without executing candidate code\",\n workflow=MIGRATION / \"Logging-System/.gitea/workflows/ci.yml\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Logging-System/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_rdm_composition_lock_fetches_fixed_dev_without_executing_code (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 264, in test_rdm_composition_lock_fetches_fixed_dev_without_executing_code\n result = self.run_phase(\"Prefetch fixed Dev product composition\",\n workflow=MIGRATION / \"Agent-System-RDM/.gitea/workflows/ci.yml\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-System-RDM/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) (lock={'schema': 1, 'repo': 'http://127.0.0.1:37187/untrusted/receiver', 'commit': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 279, in test_rdm_composition_lock_rejects_external_missing_and_malformed_commits\n result = self.run_phase(\"Prefetch fixed Dev product composition\",\n workflow=MIGRATION / \"Agent-System-RDM/.gitea/workflows/ci.yml\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-System-RDM/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) (lock={'schema': 1, 'repo': 'ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git'})\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 279, in test_rdm_composition_lock_rejects_external_missing_and_malformed_commits\n result = self.run_phase(\"Prefetch fixed Dev product composition\",\n workflow=MIGRATION / \"Agent-System-RDM/.gitea/workflows/ci.yml\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-System-RDM/.gitea/workflows/ci.yml'\n\n======================================================================\nERROR: test_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) (lock={'schema': 1, 'repo': 'ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git', 'commit': 'main'})\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 279, in test_rdm_composition_lock_rejects_external_missing_and_malformed_commits\n result = self.run_phase(\"Prefetch fixed Dev product composition\",\n workflow=MIGRATION / \"Agent-System-RDM/.gitea/workflows/ci.yml\")\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 33, in run_phase\n return subprocess.run([\"bash\", \"-c\", phase(workflow, name) + \"\\n\" + after],\n ~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_dependency_ci.py\", line 18, in phase\n return fixture.workflow_script(workflow, name)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/tmp/dependency-ci-archive-red-nobngl54/tests/test_ci_credentials.py\", line 22, in workflow_script\n lines = workflow.read_text().splitlines()\n ~~~~~~~~~~~~~~~~~~^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 787, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/pathlib/__init__.py\", line 771, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/dependency-ci-archive-red-nobngl54/.migration/Agent-System-RDM/.gitea/workflows/ci.yml'\n\n----------------------------------------------------------------------\nRan 24 tests in 14.320s\n\nFAILED (errors=18)\n", + "output_sha256": "297a2275277501862110428373b3eeacf91fdcc2d849fc75a100a1d191145aa5", + "receipt_sha256": "f661504cc6ace0a185448d0cdf867c23b57f933bdb7b52cdea9c6f2bdd5d62aa" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:52:08.248128+00:00", + "command": "python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -v", + "command_sha256": "aec96627d88bea7de31c0a9715632d3316431ef9b5cd6d15741cb16317092664", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "98d08347bd24ece91df108f4fc34bf2d94783676", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n M tests/test_ci_credentials.py\n M tests/test_dependency_ci.py\n?? tests/fixtures/component-ci/Agent-Command/ci.yml\n?? tests/fixtures/component-ci/Agent-Intent/ci.yml\n?? tests/fixtures/component-ci/Agent-Native/ci.yml\n?? tests/fixtures/component-ci/Agent-Squad/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Backend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Core/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Frontend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-RDM/ci.yml\n?? tests/fixtures/component-ci/Agent-System-UI/ci.yml\n?? tests/fixtures/component-ci/Error-Code-System/ci.yml\n?? tests/fixtures/component-ci/Logging-System/ci.yml\n?? tests/fixtures/component-ci/provenance.json\n", + "tracked_diff_sha256": "a3ecc3fb7019b47b4294c1d84cedcc6f99353328c1d49b00d511b8c23afa97a1", + "untracked": { + "tests/fixtures/component-ci/Agent-Command/ci.yml": "b12f615219a32dc4c477658e9abedbbe250aee260baf9c8cbffdb9a9d645f24e", + "tests/fixtures/component-ci/Agent-Intent/ci.yml": "c15dde13c41be0437db8d5b7e7e99c4ff37cab1af66515971400bfd7e5c94c55", + "tests/fixtures/component-ci/Agent-Native/ci.yml": "8d0cdab26b2758318b3bffeeb90b9c1ae947bc3f232e89e56ebf2f8edf45420d", + "tests/fixtures/component-ci/Agent-Squad/ci.yml": "641f7e84fae05b99397ffc3b311031099526a29e8c6e39ae6b43617e7e4b9fd4", + "tests/fixtures/component-ci/Agent-System-Backend/ci.yml": "c14a60739881d243cf459e05e8859976e6e86e6df3a272410cd2df3e0d43d063", + "tests/fixtures/component-ci/Agent-System-Core/ci.yml": "6b0b5568bffa26709469fc655dee61210300156dba79bb619a7017162b1846a6", + "tests/fixtures/component-ci/Agent-System-Frontend/ci.yml": "51aeaa0e2ced11bb36fd6b66ac8da66a1f2efdbd6a5d6036302159646cabc3be", + "tests/fixtures/component-ci/Agent-System-RDM/ci.yml": "47693ea41584cae52a32e291fae5fa995b5ca746b41cf150d6dac709e6a83b55", + "tests/fixtures/component-ci/Agent-System-UI/ci.yml": "ef41bf7d981c37246d71fe80c09fa077341802442aad213b14c9f18a17a58694", + "tests/fixtures/component-ci/Error-Code-System/ci.yml": "3fbbc1a91412bcac32a9eec8deaded8ce1b5151e512987a4669030a2cf5b776e", + "tests/fixtures/component-ci/Logging-System/ci.yml": "163d62d87654c98506a97bff6188c6d4c2338c3abfce1bec110b1de6c872cb24", + "tests/fixtures/component-ci/provenance.json": "a396986aa6cbec95e4398f7d480ca4a8adfa48e30940982585310f5de41ee0bf" + }, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "4a26798000c39cc59ba0c2cc6328f5c8f10dcb32", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "198817d990551226344f2e531f14c5e1924b6dcba2425ff3feb60233625c8bd4" + } + }, + "after": { + "head": "98d08347bd24ece91df108f4fc34bf2d94783676", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n M tests/test_ci_credentials.py\n M tests/test_dependency_ci.py\n?? tests/fixtures/component-ci/Agent-Command/ci.yml\n?? tests/fixtures/component-ci/Agent-Intent/ci.yml\n?? tests/fixtures/component-ci/Agent-Native/ci.yml\n?? tests/fixtures/component-ci/Agent-Squad/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Backend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Core/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Frontend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-RDM/ci.yml\n?? tests/fixtures/component-ci/Agent-System-UI/ci.yml\n?? tests/fixtures/component-ci/Error-Code-System/ci.yml\n?? tests/fixtures/component-ci/Logging-System/ci.yml\n?? tests/fixtures/component-ci/provenance.json\n", + "tracked_diff_sha256": "a3ecc3fb7019b47b4294c1d84cedcc6f99353328c1d49b00d511b8c23afa97a1", + "untracked": { + "tests/fixtures/component-ci/Agent-Command/ci.yml": "b12f615219a32dc4c477658e9abedbbe250aee260baf9c8cbffdb9a9d645f24e", + "tests/fixtures/component-ci/Agent-Intent/ci.yml": "c15dde13c41be0437db8d5b7e7e99c4ff37cab1af66515971400bfd7e5c94c55", + "tests/fixtures/component-ci/Agent-Native/ci.yml": "8d0cdab26b2758318b3bffeeb90b9c1ae947bc3f232e89e56ebf2f8edf45420d", + "tests/fixtures/component-ci/Agent-Squad/ci.yml": "641f7e84fae05b99397ffc3b311031099526a29e8c6e39ae6b43617e7e4b9fd4", + "tests/fixtures/component-ci/Agent-System-Backend/ci.yml": "c14a60739881d243cf459e05e8859976e6e86e6df3a272410cd2df3e0d43d063", + "tests/fixtures/component-ci/Agent-System-Core/ci.yml": "6b0b5568bffa26709469fc655dee61210300156dba79bb619a7017162b1846a6", + "tests/fixtures/component-ci/Agent-System-Frontend/ci.yml": "51aeaa0e2ced11bb36fd6b66ac8da66a1f2efdbd6a5d6036302159646cabc3be", + "tests/fixtures/component-ci/Agent-System-RDM/ci.yml": "47693ea41584cae52a32e291fae5fa995b5ca746b41cf150d6dac709e6a83b55", + "tests/fixtures/component-ci/Agent-System-UI/ci.yml": "ef41bf7d981c37246d71fe80c09fa077341802442aad213b14c9f18a17a58694", + "tests/fixtures/component-ci/Error-Code-System/ci.yml": "3fbbc1a91412bcac32a9eec8deaded8ce1b5151e512987a4669030a2cf5b776e", + "tests/fixtures/component-ci/Logging-System/ci.yml": "163d62d87654c98506a97bff6188c6d4c2338c3abfce1bec110b1de6c872cb24", + "tests/fixtures/component-ci/provenance.json": "a396986aa6cbec95e4398f7d480ca4a8adfa48e30940982585310f5de41ee0bf" + }, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "4a26798000c39cc59ba0c2cc6328f5c8f10dcb32", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "198817d990551226344f2e531f14c5e1924b6dcba2425ff3feb60233625c8bd4" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_all_required_component_snapshots_have_fixed_provenance (tests.test_dependency_ci.ComponentWorkflowFixtureTests.test_all_required_component_snapshots_have_fixed_provenance) ... ok\ntest_missing_component_snapshot_is_not_skipped (tests.test_dependency_ci.ComponentWorkflowFixtureTests.test_missing_component_snapshot_is_not_skipped) ... ok\ntest_modified_workflow_snapshot_is_rejected_before_execution (tests.test_dependency_ci.ComponentWorkflowFixtureTests.test_modified_workflow_snapshot_is_rejected_before_execution) ... ok\ntest_omitted_repository_provenance_is_rejected (tests.test_dependency_ci.ComponentWorkflowFixtureTests.test_omitted_repository_provenance_is_rejected) ... ok\ntest_optional_source_validation_uses_immutable_commit_and_rejects_stale_head (tests.test_dependency_ci.ComponentWorkflowFixtureTests.test_optional_source_validation_uses_immutable_commit_and_rejects_stale_head) ... ok\ntest_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\ntest_go_prefetch_covers_logging_trace_module (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module) ... ok\ntest_go_prefetch_rejects_mutation_of_committed_checksums (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums) ... ok\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) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (tests.test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (tests.test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_rdm_composition_lock_fetches_fixed_dev_without_executing_code (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code) ... ok\ntest_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) ... ok\ntest_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\ntest_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\n\n----------------------------------------------------------------------\nRan 29 tests in 18.032s\n\nOK\n", + "output_sha256": "f0a243199114694538ed7550c1c00f9b5be172d60c5b5d5fdec558094b4e7c2f", + "receipt_sha256": "3bc436be6880d5319b08903a9d6f22d8479e0879b362240a6c47db12a6d4aea9" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:53:15.894648+00:00", + "command": "cd \"$(cat /tmp/dependency-ci-archive-root)\" && python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -v", + "command_sha256": "599252c8726aff0b66579d30437c1b5553dcef7392ac085efe39b409bd83605e", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "98d08347bd24ece91df108f4fc34bf2d94783676", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n M tests/test_ci_credentials.py\n M tests/test_dependency_ci.py\n?? tests/fixtures/component-ci/Agent-Command/ci.yml\n?? tests/fixtures/component-ci/Agent-Intent/ci.yml\n?? tests/fixtures/component-ci/Agent-Native/ci.yml\n?? tests/fixtures/component-ci/Agent-Squad/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Backend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Core/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Frontend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-RDM/ci.yml\n?? tests/fixtures/component-ci/Agent-System-UI/ci.yml\n?? tests/fixtures/component-ci/Error-Code-System/ci.yml\n?? tests/fixtures/component-ci/Logging-System/ci.yml\n?? tests/fixtures/component-ci/provenance.json\n", + "tracked_diff_sha256": "8031ac6a1dd1115a4859c40a446f1cc91c397581770908dca53f01ab90b58a05", + "untracked": { + "tests/fixtures/component-ci/Agent-Command/ci.yml": "b12f615219a32dc4c477658e9abedbbe250aee260baf9c8cbffdb9a9d645f24e", + "tests/fixtures/component-ci/Agent-Intent/ci.yml": "c15dde13c41be0437db8d5b7e7e99c4ff37cab1af66515971400bfd7e5c94c55", + "tests/fixtures/component-ci/Agent-Native/ci.yml": "8d0cdab26b2758318b3bffeeb90b9c1ae947bc3f232e89e56ebf2f8edf45420d", + "tests/fixtures/component-ci/Agent-Squad/ci.yml": "641f7e84fae05b99397ffc3b311031099526a29e8c6e39ae6b43617e7e4b9fd4", + "tests/fixtures/component-ci/Agent-System-Backend/ci.yml": "c14a60739881d243cf459e05e8859976e6e86e6df3a272410cd2df3e0d43d063", + "tests/fixtures/component-ci/Agent-System-Core/ci.yml": "6b0b5568bffa26709469fc655dee61210300156dba79bb619a7017162b1846a6", + "tests/fixtures/component-ci/Agent-System-Frontend/ci.yml": "51aeaa0e2ced11bb36fd6b66ac8da66a1f2efdbd6a5d6036302159646cabc3be", + "tests/fixtures/component-ci/Agent-System-RDM/ci.yml": "47693ea41584cae52a32e291fae5fa995b5ca746b41cf150d6dac709e6a83b55", + "tests/fixtures/component-ci/Agent-System-UI/ci.yml": "ef41bf7d981c37246d71fe80c09fa077341802442aad213b14c9f18a17a58694", + "tests/fixtures/component-ci/Error-Code-System/ci.yml": "3fbbc1a91412bcac32a9eec8deaded8ce1b5151e512987a4669030a2cf5b776e", + "tests/fixtures/component-ci/Logging-System/ci.yml": "163d62d87654c98506a97bff6188c6d4c2338c3abfce1bec110b1de6c872cb24", + "tests/fixtures/component-ci/provenance.json": "a396986aa6cbec95e4398f7d480ca4a8adfa48e30940982585310f5de41ee0bf" + }, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "4a26798000c39cc59ba0c2cc6328f5c8f10dcb32", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "198817d990551226344f2e531f14c5e1924b6dcba2425ff3feb60233625c8bd4" + } + }, + "after": { + "head": "98d08347bd24ece91df108f4fc34bf2d94783676", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n M tests/test_ci_credentials.py\n M tests/test_dependency_ci.py\n?? tests/fixtures/component-ci/Agent-Command/ci.yml\n?? tests/fixtures/component-ci/Agent-Intent/ci.yml\n?? tests/fixtures/component-ci/Agent-Native/ci.yml\n?? tests/fixtures/component-ci/Agent-Squad/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Backend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Core/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Frontend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-RDM/ci.yml\n?? tests/fixtures/component-ci/Agent-System-UI/ci.yml\n?? tests/fixtures/component-ci/Error-Code-System/ci.yml\n?? tests/fixtures/component-ci/Logging-System/ci.yml\n?? tests/fixtures/component-ci/provenance.json\n", + "tracked_diff_sha256": "8031ac6a1dd1115a4859c40a446f1cc91c397581770908dca53f01ab90b58a05", + "untracked": { + "tests/fixtures/component-ci/Agent-Command/ci.yml": "b12f615219a32dc4c477658e9abedbbe250aee260baf9c8cbffdb9a9d645f24e", + "tests/fixtures/component-ci/Agent-Intent/ci.yml": "c15dde13c41be0437db8d5b7e7e99c4ff37cab1af66515971400bfd7e5c94c55", + "tests/fixtures/component-ci/Agent-Native/ci.yml": "8d0cdab26b2758318b3bffeeb90b9c1ae947bc3f232e89e56ebf2f8edf45420d", + "tests/fixtures/component-ci/Agent-Squad/ci.yml": "641f7e84fae05b99397ffc3b311031099526a29e8c6e39ae6b43617e7e4b9fd4", + "tests/fixtures/component-ci/Agent-System-Backend/ci.yml": "c14a60739881d243cf459e05e8859976e6e86e6df3a272410cd2df3e0d43d063", + "tests/fixtures/component-ci/Agent-System-Core/ci.yml": "6b0b5568bffa26709469fc655dee61210300156dba79bb619a7017162b1846a6", + "tests/fixtures/component-ci/Agent-System-Frontend/ci.yml": "51aeaa0e2ced11bb36fd6b66ac8da66a1f2efdbd6a5d6036302159646cabc3be", + "tests/fixtures/component-ci/Agent-System-RDM/ci.yml": "47693ea41584cae52a32e291fae5fa995b5ca746b41cf150d6dac709e6a83b55", + "tests/fixtures/component-ci/Agent-System-UI/ci.yml": "ef41bf7d981c37246d71fe80c09fa077341802442aad213b14c9f18a17a58694", + "tests/fixtures/component-ci/Error-Code-System/ci.yml": "3fbbc1a91412bcac32a9eec8deaded8ce1b5151e512987a4669030a2cf5b776e", + "tests/fixtures/component-ci/Logging-System/ci.yml": "163d62d87654c98506a97bff6188c6d4c2338c3abfce1bec110b1de6c872cb24", + "tests/fixtures/component-ci/provenance.json": "a396986aa6cbec95e4398f7d480ca4a8adfa48e30940982585310f5de41ee0bf" + }, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "4a26798000c39cc59ba0c2cc6328f5c8f10dcb32", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "198817d990551226344f2e531f14c5e1924b6dcba2425ff3feb60233625c8bd4" + } + }, + "after_error": null, + "exit_code": 0, + "output": "test_all_required_component_snapshots_have_fixed_provenance (tests.test_dependency_ci.ComponentWorkflowFixtureTests.test_all_required_component_snapshots_have_fixed_provenance) ... ok\ntest_missing_component_snapshot_is_not_skipped (tests.test_dependency_ci.ComponentWorkflowFixtureTests.test_missing_component_snapshot_is_not_skipped) ... ok\ntest_modified_workflow_snapshot_is_rejected_before_execution (tests.test_dependency_ci.ComponentWorkflowFixtureTests.test_modified_workflow_snapshot_is_rejected_before_execution) ... ok\ntest_omitted_repository_provenance_is_rejected (tests.test_dependency_ci.ComponentWorkflowFixtureTests.test_omitted_repository_provenance_is_rejected) ... ok\ntest_optional_source_validation_uses_immutable_commit_and_rejects_stale_head (tests.test_dependency_ci.ComponentWorkflowFixtureTests.test_optional_source_validation_uses_immutable_commit_and_rejects_stale_head) ... ok\ntest_component_checkout_removes_tokens_before_candidate_executes (tests.test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_component_ci_executes_nested_go_module_tests (tests.test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\ntest_go_prefetch_covers_logging_trace_module (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module) ... ok\ntest_go_prefetch_rejects_mutation_of_committed_checksums (tests.test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums) ... ok\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) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (tests.test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (tests.test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (tests.test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (tests.test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_rdm_composition_lock_fetches_fixed_dev_without_executing_code (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code) ... ok\ntest_rdm_composition_lock_rejects_external_missing_and_malformed_commits (tests.test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) ... ok\ntest_registered_application_lock_materializes_fixed_source (tests.test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (tests.test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (tests.test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\ntest_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\n\n----------------------------------------------------------------------\nRan 29 tests in 17.877s\n\nOK\n", + "output_sha256": "ef9779c04148ddd73b94d6697d09a2cf47a663e32cbc41cd1006b8aa010e8fa6", + "receipt_sha256": "66f01970885b34bbb0f9a2dfb244e4a58618b725e600f85fe765099cf2f3bd36" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-13T17:55:07.434798+00:00", + "command": "COMPONENT_CI_SOURCE_ROOT=\"$PWD/.migration\" python3 -m unittest tests.test_dependency_ci tests.test_ci_credentials -q", + "command_sha256": "f420f3db87d816349ae2773d8c3efc540d3a2408dfbc1a4d8f22db7f5fbd8edb", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "98d08347bd24ece91df108f4fc34bf2d94783676", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n M tests/test_ci_credentials.py\n M tests/test_dependency_ci.py\n?? tests/fixtures/component-ci/Agent-Command/ci.yml\n?? tests/fixtures/component-ci/Agent-Intent/ci.yml\n?? tests/fixtures/component-ci/Agent-Native/ci.yml\n?? tests/fixtures/component-ci/Agent-Squad/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Backend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Core/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Frontend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-RDM/ci.yml\n?? tests/fixtures/component-ci/Agent-System-UI/ci.yml\n?? tests/fixtures/component-ci/Error-Code-System/ci.yml\n?? tests/fixtures/component-ci/Logging-System/ci.yml\n?? tests/fixtures/component-ci/provenance.json\n", + "tracked_diff_sha256": "fc9ca183867f2332ca6bdc07d315cf6ad2476f42473b32ecbcd3fd7348c963cf", + "untracked": { + "tests/fixtures/component-ci/Agent-Command/ci.yml": "b12f615219a32dc4c477658e9abedbbe250aee260baf9c8cbffdb9a9d645f24e", + "tests/fixtures/component-ci/Agent-Intent/ci.yml": "c15dde13c41be0437db8d5b7e7e99c4ff37cab1af66515971400bfd7e5c94c55", + "tests/fixtures/component-ci/Agent-Native/ci.yml": "8d0cdab26b2758318b3bffeeb90b9c1ae947bc3f232e89e56ebf2f8edf45420d", + "tests/fixtures/component-ci/Agent-Squad/ci.yml": "641f7e84fae05b99397ffc3b311031099526a29e8c6e39ae6b43617e7e4b9fd4", + "tests/fixtures/component-ci/Agent-System-Backend/ci.yml": "c14a60739881d243cf459e05e8859976e6e86e6df3a272410cd2df3e0d43d063", + "tests/fixtures/component-ci/Agent-System-Core/ci.yml": "6b0b5568bffa26709469fc655dee61210300156dba79bb619a7017162b1846a6", + "tests/fixtures/component-ci/Agent-System-Frontend/ci.yml": "51aeaa0e2ced11bb36fd6b66ac8da66a1f2efdbd6a5d6036302159646cabc3be", + "tests/fixtures/component-ci/Agent-System-RDM/ci.yml": "47693ea41584cae52a32e291fae5fa995b5ca746b41cf150d6dac709e6a83b55", + "tests/fixtures/component-ci/Agent-System-UI/ci.yml": "ef41bf7d981c37246d71fe80c09fa077341802442aad213b14c9f18a17a58694", + "tests/fixtures/component-ci/Error-Code-System/ci.yml": "3fbbc1a91412bcac32a9eec8deaded8ce1b5151e512987a4669030a2cf5b776e", + "tests/fixtures/component-ci/Logging-System/ci.yml": "163d62d87654c98506a97bff6188c6d4c2338c3abfce1bec110b1de6c872cb24", + "tests/fixtures/component-ci/provenance.json": "a396986aa6cbec95e4398f7d480ca4a8adfa48e30940982585310f5de41ee0bf" + }, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "4a26798000c39cc59ba0c2cc6328f5c8f10dcb32", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "198817d990551226344f2e531f14c5e1924b6dcba2425ff3feb60233625c8bd4" + } + }, + "after": { + "head": "98d08347bd24ece91df108f4fc34bf2d94783676", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "57bcb17ea212a531186b6e21617a7f3bea65a791", + "status": " M .task/feature-dependency-workspace.md\n M tests/test_ci_credentials.py\n M tests/test_dependency_ci.py\n?? tests/fixtures/component-ci/Agent-Command/ci.yml\n?? tests/fixtures/component-ci/Agent-Intent/ci.yml\n?? tests/fixtures/component-ci/Agent-Native/ci.yml\n?? tests/fixtures/component-ci/Agent-Squad/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Backend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Core/ci.yml\n?? tests/fixtures/component-ci/Agent-System-Frontend/ci.yml\n?? tests/fixtures/component-ci/Agent-System-RDM/ci.yml\n?? tests/fixtures/component-ci/Agent-System-UI/ci.yml\n?? tests/fixtures/component-ci/Error-Code-System/ci.yml\n?? tests/fixtures/component-ci/Logging-System/ci.yml\n?? tests/fixtures/component-ci/provenance.json\n", + "tracked_diff_sha256": "fc9ca183867f2332ca6bdc07d315cf6ad2476f42473b32ecbcd3fd7348c963cf", + "untracked": { + "tests/fixtures/component-ci/Agent-Command/ci.yml": "b12f615219a32dc4c477658e9abedbbe250aee260baf9c8cbffdb9a9d645f24e", + "tests/fixtures/component-ci/Agent-Intent/ci.yml": "c15dde13c41be0437db8d5b7e7e99c4ff37cab1af66515971400bfd7e5c94c55", + "tests/fixtures/component-ci/Agent-Native/ci.yml": "8d0cdab26b2758318b3bffeeb90b9c1ae947bc3f232e89e56ebf2f8edf45420d", + "tests/fixtures/component-ci/Agent-Squad/ci.yml": "641f7e84fae05b99397ffc3b311031099526a29e8c6e39ae6b43617e7e4b9fd4", + "tests/fixtures/component-ci/Agent-System-Backend/ci.yml": "c14a60739881d243cf459e05e8859976e6e86e6df3a272410cd2df3e0d43d063", + "tests/fixtures/component-ci/Agent-System-Core/ci.yml": "6b0b5568bffa26709469fc655dee61210300156dba79bb619a7017162b1846a6", + "tests/fixtures/component-ci/Agent-System-Frontend/ci.yml": "51aeaa0e2ced11bb36fd6b66ac8da66a1f2efdbd6a5d6036302159646cabc3be", + "tests/fixtures/component-ci/Agent-System-RDM/ci.yml": "47693ea41584cae52a32e291fae5fa995b5ca746b41cf150d6dac709e6a83b55", + "tests/fixtures/component-ci/Agent-System-UI/ci.yml": "ef41bf7d981c37246d71fe80c09fa077341802442aad213b14c9f18a17a58694", + "tests/fixtures/component-ci/Error-Code-System/ci.yml": "3fbbc1a91412bcac32a9eec8deaded8ce1b5151e512987a4669030a2cf5b776e", + "tests/fixtures/component-ci/Logging-System/ci.yml": "163d62d87654c98506a97bff6188c6d4c2338c3abfce1bec110b1de6c872cb24", + "tests/fixtures/component-ci/provenance.json": "a396986aa6cbec95e4398f7d480ca4a8adfa48e30940982585310f5de41ee0bf" + }, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "4a26798000c39cc59ba0c2cc6328f5c8f10dcb32", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "198817d990551226344f2e531f14c5e1924b6dcba2425ff3feb60233625c8bd4" + } + }, + "after_error": null, + "exit_code": 0, + "output": "----------------------------------------------------------------------\nRan 29 tests in 18.422s\n\nOK\n", + "output_sha256": "44e4b3c2ff58a1619287e9391a0866f0e06bc0ea8d2a5a02726baa671aa5d027", + "receipt_sha256": "6ac47142d9a15eb30f87ecac499a27fc6c75f216bcfd9b7acc5f46c9ffd53628" +} +``` +| 同步(记录前对象) | add097d06137c4912a4ed9279e98ca353e4e4cf1 | 87c2b9861cdca6f7785d8e1d4e6f7e37a0f1c9fe | 2026-10-13T18:45:36Z | + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-14T01:05:01.446125+00:00", + "command": "make precheck", + "command_sha256": "8fd03cdee8adbb8562846a1a114cc0623779a8654412cd20aac9b495e7eb0450", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "0676f30c7bd0eaffa6db4ba6b14beef2978e2e02", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "add097d06137c4912a4ed9279e98ca353e4e4cf1", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "4a26798000c39cc59ba0c2cc6328f5c8f10dcb32", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "198817d990551226344f2e531f14c5e1924b6dcba2425ff3feb60233625c8bd4" + } + }, + "after": { + "head": "0676f30c7bd0eaffa6db4ba6b14beef2978e2e02", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "add097d06137c4912a4ed9279e98ca353e4e4cf1", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": "", + "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": { + "head": "6ed7b9322c5733f76b206a35cd78649ba385d83b", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "1a842553b6a7432e5a85aaae43a45a7a7ea58195", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "4a26798000c39cc59ba0c2cc6328f5c8f10dcb32", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "5492ea46784fcb12d1b93d2cf940bc9bcb20ffc414faab2c7a456460ad21f6f7", + "state_sha256": "198817d990551226344f2e531f14c5e1924b6dcba2425ff3feb60233625c8bd4" + } + }, + "after_error": null, + "exit_code": 0, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n[repo] branch=feature/dependency-workspace head=0676f30c7b\n[remote] origin/main=add097d061 ahead=20 behind=0\n[tree] clean submodules_drift=0 uninit=0\n[worktrees] linked=17\n[recycle] merged un-recycled branches: feature/card-close-20261012-054727Z feature/card-close-20261012-055452Z feature/card-close-20261012-062835Z feature/card-close-20261012-065217Z feature/card-close-20261012-095620Z feature/card-close-20261012-130704Z feature/card-close-20261012-133217Z feature/card-close-20261012-140049Z feature/card-close-20261012-150228Z feature/card-close-20261012-164920Z feature/card-close-20261012-static-pidcheck feature/card-close-20261013-021816Z feature/card-close-20261013-052211Z feature/card-close-20261013-065538Z feature/card-close-20261013-152849Z feature/card-close-20261013-153026Z feature/card-close-svc-d3-real-scenarios feature/card-close-u7-release-roadmap feature/card-close-u7-release-roadmap-record feature/d1-closeout-evidence feature/iam-i1-permission-boundaries feature/project-member-access feature/rdm-increment-acceptance-note feature/rdm-increment-release-plan feature/svc-d1-identity-flow feature/svc-d3-real-scenarios feature/svc-db-config-recover feature/svc-login-recovery-followup feature/sync-dhf-templates fix/genui-children-repair\n[cards] 闭合分支超过 24 小时未合入:feature/card-close-20261012-123313Z\n[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)\n[facts] WARN 过期事实:F6(日期格式)——引用前先 make facts-verify 重验并更新登记表\n[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md\n[R0] add097d061(完整:add097d06137c4912a4ed9279e98ca353e4e4cf1)\n[worktree] before-sync: recursive component checks passed\n[rules] path=/home/weichen/.cache/agent-system/rules/c56b0cd9c8ed88482c9c31e57cd1687ea221738b355e672bcd4982d32558ff58 commit=1a842553b6a7432e5a85aaae43a45a7a7ea58195; required-reading root verified\n[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "c7a6bf82d686115383e37a256f3bd5f8ce5019d63289f9896b909a8de36a828d", + "receipt_sha256": "c24e4d9fe2938806963fd58bf3261dd0e4fcb6bd59a94db61feac60695a286c9" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-14T05:11:42.000751+00:00", + "command": "make task-sync", + "command_sha256": "6c0e3c8fbb3f43d01548180c9d9c147ce1c1c32ba1e78d3383961de470fe0d52", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "6160dae6fb0d591ccbfc2d2c17fc003a2ce209b0", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "4f84c2e1630cd0311643529fae1c3a99f1dd5d64", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": "", + "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": { + "head": "74511db9a6fb12e17954cb0c3f8e8846a6ecf831", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "48649a37ee92373c639a384a2c5a9dfaa2ec4bbb", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "db3824bfdbfdcad91d0941495719f04dbeaca053", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "1de7d17110efaa5ed2ed30a44d415f28987f89f3", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "9075ff0f527b00ef8767db99d2e2a11783deace76babbffbff04cfdc5c8d255f", + "state_sha256": "00077b52438250f37b217eb353c2927c17350ca6e5d5ec8249f5f98f02873e2f" + } + }, + "after": { + "head": "6160dae6fb0d591ccbfc2d2c17fc003a2ce209b0", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "4f84c2e1630cd0311643529fae1c3a99f1dd5d64", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {}, + "submodules": "", + "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": { + "head": "74511db9a6fb12e17954cb0c3f8e8846a6ecf831", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "48649a37ee92373c639a384a2c5a9dfaa2ec4bbb", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "db3824bfdbfdcad91d0941495719f04dbeaca053", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "1de7d17110efaa5ed2ed30a44d415f28987f89f3", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "9075ff0f527b00ef8767db99d2e2a11783deace76babbffbff04cfdc5c8d255f", + "state_sha256": "00077b52438250f37b217eb353c2927c17350ca6e5d5ec8249f5f98f02873e2f" + } + }, + "after_error": null, + "exit_code": 0, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n[worktree] before-sync: recursive component checks passed\n[worktree] before-update: recursive component checks passed\n[workspace] fixed application, documentation and guidelines sources prepared; edit branches preserved\n[transition] retained legacy source deps/logging-system; inspect make workspace-transition NAME=Logging-System before explicit ARGS=--apply\n[transition] retained legacy source deps/error-code-system; inspect make workspace-transition NAME=Error-Code-System before explicit ARGS=--apply\n[transition] retained legacy source modules/core; inspect make workspace-transition NAME=Agent-System-Core before explicit ARGS=--apply\n[transition] retained legacy source modules/ui; inspect make workspace-transition NAME=Agent-System-UI before explicit ARGS=--apply\n[transition] retained legacy source modules/frontend; inspect make workspace-transition NAME=Agent-System-Frontend before explicit ARGS=--apply\n[transition] retained legacy source deps/agent-native; inspect make workspace-transition NAME=Agent-Native before explicit ARGS=--apply\n[transition] retained legacy source deps/agent-intent; inspect make workspace-transition NAME=Agent-Intent before explicit ARGS=--apply\n[transition] retained legacy source deps/agent-command; inspect make workspace-transition NAME=Agent-Command before explicit ARGS=--apply\n[transition] retained legacy source deps/agent-squad; inspect make workspace-transition NAME=Agent-Squad before explicit ARGS=--apply\n[transition] retained legacy source modules/backend; inspect make workspace-transition NAME=Agent-System-Backend before explicit ARGS=--apply\n[transition] retained legacy source deps/development-guidelines; inspect make workspace-transition NAME=Development-Guidelines before explicit ARGS=--apply\n[transition] retained legacy source modules/documents; inspect make workspace-transition NAME=Agent-System-Documents before explicit ARGS=--apply\n[worktree] materialize: recursive component checks passed\n[worktree] after-sync: recursive component checks passed\n[evidence] WARN JSON receipt line 123: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 162: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 200: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 238: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 276: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 314: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 352: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 391: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 429: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 468: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 506: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 544: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 582: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 620: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 658: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 696: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 758: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 820: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 884: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 944: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 1004: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 1070: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 1135: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 1287: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 1439: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 1591: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 1743: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 1873: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 2005: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 2149: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 2291: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 2443: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 2595: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 2747: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 2903: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 3063: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 3229: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 3397: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 3561: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 3725: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 3890: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 4056: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 4222: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 4388: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 4556: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 4724: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 4892: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 5060: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 5228: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 5398: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 5568: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 5736: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 5906: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 6078: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 6250: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 6422: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 6594: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 6766: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 6938: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 7110: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 7282: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 7454: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 7626: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 7798: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 7970: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 8142: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 8314: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 8486: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 8658: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 8830: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 9002: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 9174: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 9346: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 9518: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 9666: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 9822: unverified: receipt has no complete after object ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 9914: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 10078: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 10242: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 10406: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 10570: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 10734: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 10898: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 11062: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 11252: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 11442: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[evidence] WARN JSON receipt line 11633: unverified: recorded ordinary component/source-lock objects differ from the current objects ——关键检查须重跑并以 make evidence 重新写入\n[synced] sync_base=4f84c2e1630cd0311643529fae1c3a99f1dd5d64 tested_head=6160dae6fb0d591ccbfc2d2c17fc003a2ce209b0 checked_at=2026-10-14T05:11:50Z changed=0\n[next] 跑正式验收(make test 等),证据写入任务卡\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "87dd9f3157056783642fc531a1658071089ff2196164645a6e851fb540829e38", + "receipt_sha256": "7c6335d5e41b3c288b828a2d0c3fa058f1af5ede2e5b6a207f94a97d2cd79a8c" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-14T05:12:21.813701+00:00", + "command": "make test", + "command_sha256": "22cc66aa7d2624b4eb4d5b61658614cd6c32477b123afbf7dbc7fc3d7d0f3713", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "6160dae6fb0d591ccbfc2d2c17fc003a2ce209b0", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "4f84c2e1630cd0311643529fae1c3a99f1dd5d64", + "status": " M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "2539ef0c86ceaf82a2d9bb5b3651e5bf14c986190a4d9f244911048847ecb783", + "untracked": {}, + "submodules": "", + "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": { + "head": "74511db9a6fb12e17954cb0c3f8e8846a6ecf831", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "48649a37ee92373c639a384a2c5a9dfaa2ec4bbb", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "db3824bfdbfdcad91d0941495719f04dbeaca053", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "1de7d17110efaa5ed2ed30a44d415f28987f89f3", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "9075ff0f527b00ef8767db99d2e2a11783deace76babbffbff04cfdc5c8d255f", + "state_sha256": "00077b52438250f37b217eb353c2927c17350ca6e5d5ec8249f5f98f02873e2f" + } + }, + "after": { + "head": "6160dae6fb0d591ccbfc2d2c17fc003a2ce209b0", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "4f84c2e1630cd0311643529fae1c3a99f1dd5d64", + "status": " M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "2539ef0c86ceaf82a2d9bb5b3651e5bf14c986190a4d9f244911048847ecb783", + "untracked": {}, + "submodules": "", + "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": { + "head": "74511db9a6fb12e17954cb0c3f8e8846a6ecf831", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "48649a37ee92373c639a384a2c5a9dfaa2ec4bbb", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "db3824bfdbfdcad91d0941495719f04dbeaca053", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "1de7d17110efaa5ed2ed30a44d415f28987f89f3", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "9075ff0f527b00ef8767db99d2e2a11783deace76babbffbff04cfdc5c8d255f", + "state_sha256": "00077b52438250f37b217eb353c2927c17350ca6e5d5ec8249f5f98f02873e2f" + } + }, + "after_error": null, + "exit_code": 2, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\npython3 scripts/build-composition.py --root . --target test\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git /tmp/agent-system-composition-e2fpjxpc/Agent-System-Frontend-git\nCloning into '/tmp/agent-system-composition-e2fpjxpc/Agent-System-Frontend-git'...\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git /tmp/agent-system-composition-e2fpjxpc/Agent-System-Backend-git\nCloning into '/tmp/agent-system-composition-e2fpjxpc/Agent-System-Backend-git'...\n[composition] npm ci --ignore-scripts --no-audit --no-fund\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 4s\n[composition] npm cache add @babel/code-frame@7.29.7 @babel/compat-data@7.29.7 @babel/core@7.29.7 @babel/generator@7.29.8 @babel/helper-compilation-targets@7.29.7 @babel/helper-globals@7.29.7 @babel/helper-module-imports@7.29.7 @babel/helper-module-transforms@7.29.7 @babel/helper-plugin-utils@7.29.7 @babel/helper-string-parser@7.29.7 @babel/helper-validator-identifier@7.29.7 @babel/helper-validator-option@7.29.7 @babel/helpers@7.29.7 @babel/parser@7.29.9 @babel/plugin-transform-react-jsx-self@7.29.7 @babel/plugin-transform-react-jsx-source@7.29.7 @babel/template@7.29.7 @babel/traverse@7.29.8 @babel/types@7.29.8 @esbuild/linux-x64@0.25.12 @jridgewell/gen-mapping@0.3.13 @jridgewell/remapping@2.3.5 @jridgewell/resolve-uri@3.1.2 @jridgewell/sourcemap-codec@1.6.0 @jridgewell/trace-mapping@0.3.31 @napi-rs/lzma-linux-x64-gnu@1.5.1 @nodelib/fs.scandir@2.1.5 @nodelib/fs.stat@2.0.5 @nodelib/fs.walk@1.2.8 @oxc-resolver/binding-linux-x64-gnu@11.24.2 @playwright/test@1.64.0 @rolldown/pluginutils@1.0.0-beta.27 @rollup/rollup-linux-x64-gnu@4.63.5 @standard-schema/spec@1.1.0 @types/babel__core@7.20.5 @types/babel__generator@7.27.0 @types/babel__template@7.4.4 @types/babel__traverse@7.28.0 @types/chai@5.2.3 @types/deep-eql@4.0.2 @types/estree@1.0.9 @types/node@22.20.4 @types/react-dom@19.3.0 @types/react@19.3.0 @types/trusted-types@2.0.7 @vitejs/plugin-react@4.7.0 @vitest/expect@4.1.11 @vitest/mocker@4.1.11 @vitest/pretty-format@4.1.11 @vitest/runner@4.1.11 @vitest/snapshot@4.1.11 @vitest/spy@4.1.11 @vitest/utils@4.1.11 @xmldom/xmldom@0.8.15 adler-32@1.3.1 argparse@1.0.10 assertion-error@2.0.1 base64-js@1.5.1 baseline-browser-mapping@2.11.26 braces@3.0.3 browserslist@4.29.3 caniuse-lite@1.0.30001813 cfb@1.2.2 chai@6.2.2 codepage@1.15.0 convert-source-map@2.0.0 core-util-is@1.0.3 crc-32@1.2.2 csstype@3.2.3 debug@4.4.3 dingbat-to-unicode@1.0.2 docx-preview@0.4.1 dompurify@3.4.16 duck@0.1.12 echarts@5.6.0 electron-to-chromium@1.5.440 es-module-lexer@2.3.2 esbuild@0.25.12 escalade@3.2.0 estree-walker@3.0.3 expect-type@1.4.0 fast-glob@3.3.3 fastq@1.20.3 fd-package-json@2.0.0 fdir@6.5.0 fill-range@7.1.1 formatly@0.3.0 frac@1.1.2 gensync@1.0.0-beta.2 glob-parent@5.1.2 immediate@3.0.6 inherits@2.0.4 is-extglob@2.1.1 is-glob@4.0.3 is-number@7.0.0 isarray@1.0.0 jiti@2.7.0 js-tokens@4.0.0 jsesc@3.1.0 json5@2.2.3 jszip@3.10.2 knip@5.88.1 lie@3.3.0 lodash@4.18.1 lop@0.4.2 lru-cache@5.1.1 magic-string@0.30.21 mammoth@1.13.0 marked@15.0.12 merge2@1.4.1 micromatch@4.0.8 minimist@1.2.8 ms@2.1.3 nanoid@3.3.19 node-releases@2.0.57 obug@2.2.1 option@0.2.4 oxc-resolver@11.24.2 pako@1.0.11 pathe@2.0.3 picocolors@1.1.1 picomatch@2.3.2 picomatch@4.0.7 playwright-core@1.64.0 playwright@1.64.0 postcss@8.5.28 pptx-preview@1.0.7 process-nextick-args@2.0.1 queue-microtask@1.2.3 react-dom@19.3.0 react-refresh@0.17.0 react@19.3.0 readable-stream@2.3.8 reusify@1.1.0 rollup@4.63.5 run-parallel@1.2.0 safe-buffer@5.1.2 scheduler@0.28.0 semver@6.3.1 setimmediate@1.0.5 siginfo@2.0.0 smol-toml@1.9.0 source-map-js@1.2.1 sprintf-js@1.0.3 ssf@0.11.2 stackback@0.0.2 std-env@4.3.0 string_decoder@1.1.1 strip-json-comments@5.0.3 tinybench@2.9.0 tinyexec@1.3.1 tinyglobby@0.2.17 tinyrainbow@3.2.0 to-regex-range@5.0.1 tslib@2.3.0 tslib@2.8.1 typescript@5.9.3 unbash@2.2.0 underscore@1.13.8 undici-types@6.21.0 update-browserslist-db@1.3.3 util-deprecate@1.0.2 uuid@10.0.0 vite@6.4.3 vitest@4.1.11 walk-up-path@4.0.0 why-is-node-running@2.3.0 wmf@1.0.2 word@0.3.0 xlsx@0.18.5 xmlbuilder@10.1.1 yallist@3.1.1 yaml@2.9.1 zod@4.6.5 zrender@5.6.1 --ignore-scripts --registry=https://registry.npmjs.org --userconfig=/dev/null --globalconfig=/tmp/composition-npm-metadata-ul904q78/empty-global.npmrc\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Logging-System.git /tmp/agent-system-composition-e2fpjxpc/Logging-System-git\nCloning into '/tmp/agent-system-composition-e2fpjxpc/Logging-System-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Error-Code-System.git /tmp/agent-system-composition-e2fpjxpc/Error-Code-System-git\nCloning into '/tmp/agent-system-composition-e2fpjxpc/Error-Code-System-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Core.git /tmp/agent-system-composition-e2fpjxpc/Agent-System-Core-git\nCloning into '/tmp/agent-system-composition-e2fpjxpc/Agent-System-Core-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git /tmp/agent-system-composition-e2fpjxpc/Agent-Native-git\nCloning into '/tmp/agent-system-composition-e2fpjxpc/Agent-Native-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Intent.git /tmp/agent-system-composition-e2fpjxpc/Agent-Intent-git\nCloning into '/tmp/agent-system-composition-e2fpjxpc/Agent-Intent-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Command.git /tmp/agent-system-composition-e2fpjxpc/Agent-Command-git\nCloning into '/tmp/agent-system-composition-e2fpjxpc/Agent-Command-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Squad.git /tmp/agent-system-composition-e2fpjxpc/Agent-Squad-git\nCloning into '/tmp/agent-system-composition-e2fpjxpc/Agent-Squad-git'...\n[composition] go mod verify\nall modules verified\n[composition] go mod verify\nall modules verified\n[composition] go mod verify\nall modules verified\n[composition] go mod verify\nall modules verified\n[composition] go mod verify\nall modules verified\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-UI.git /tmp/agent-system-composition-e2fpjxpc/Agent-System-UI-git\nCloning into '/tmp/agent-system-composition-e2fpjxpc/Agent-System-UI-git'...\n[composition] npm ci --ignore-scripts --no-audit --no-fund\n\nadded 1 package in 235ms\n[composition] npm cache add typescript@5.9.3 --ignore-scripts --registry=https://registry.npmjs.org --userconfig=/dev/null --globalconfig=/tmp/composition-npm-metadata-ri6ys0x9/empty-global.npmrc\n[composition] npm ci --ignore-scripts --no-audit --no-fund\nnpm warn deprecated whatwg-encoding@3.1.1: Use @exodus/bytes instead for a more spec-conformant and faster implementation\nnpm error An unknown git error occurred\nnpm error signal SIGTERM\nnpm error command git --no-replace-objects ls-remote ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Core.git\nnpm error Terminated\nnpm error A complete log of this run can be found in: /home/weichen/.npm/_logs/2026-10-14T05_12_41_927Z-debug-0.log\ncomposition: command failed (1): npm npm warn deprecated whatwg-encoding@3.1.1: Use @exodus/bytes instead for a more spec-conformant and faster implementation\nnpm error An unknown git error occurred\nnpm error signal SIGTERM\nnpm error command git --no-replace-objects ls-remote ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Core.git\nnpm error Terminated\nnpm error A complete log of this run can be found in: /home/weichen/.npm/_logs/2026-10-14T05_12_41_927Z-debug-0.log\nmake[1]: *** [Makefile:273: test] Error 2\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "0ae17f6ae23e2660a932af98302cd45b1f7ca1f391947351ef7e464b4153d047", + "receipt_sha256": "4089679f6f14bdc8d9da7ac0d28092864d791d72efcdfda47d9b6ad2d042b772" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-14T05:23:30.802885+00:00", + "command": "GIT_SSH_COMMAND='timeout 180 ssh -o BatchMode=yes -o ConnectTimeout=15 -o ServerAliveInterval=10 -o ServerAliveCountMax=3' make test", + "command_sha256": "16376cc333739a39cd6b975fafed44b0c42239393f8a749e5ac16daf2ac5759f", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "6160dae6fb0d591ccbfc2d2c17fc003a2ce209b0", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "4f84c2e1630cd0311643529fae1c3a99f1dd5d64", + "status": " M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "1b8fbd6f4eb75be43fe127a9d6859d24b90db60192148fb2b365def2aea80c50", + "untracked": {}, + "submodules": "", + "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": { + "head": "74511db9a6fb12e17954cb0c3f8e8846a6ecf831", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "48649a37ee92373c639a384a2c5a9dfaa2ec4bbb", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "db3824bfdbfdcad91d0941495719f04dbeaca053", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "1de7d17110efaa5ed2ed30a44d415f28987f89f3", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "9075ff0f527b00ef8767db99d2e2a11783deace76babbffbff04cfdc5c8d255f", + "state_sha256": "00077b52438250f37b217eb353c2927c17350ca6e5d5ec8249f5f98f02873e2f" + } + }, + "after": { + "head": "6160dae6fb0d591ccbfc2d2c17fc003a2ce209b0", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "4f84c2e1630cd0311643529fae1c3a99f1dd5d64", + "status": " M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "1b8fbd6f4eb75be43fe127a9d6859d24b90db60192148fb2b365def2aea80c50", + "untracked": {}, + "submodules": "", + "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": { + "head": "74511db9a6fb12e17954cb0c3f8e8846a6ecf831", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "48649a37ee92373c639a384a2c5a9dfaa2ec4bbb", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "db3824bfdbfdcad91d0941495719f04dbeaca053", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "1de7d17110efaa5ed2ed30a44d415f28987f89f3", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "9075ff0f527b00ef8767db99d2e2a11783deace76babbffbff04cfdc5c8d255f", + "state_sha256": "00077b52438250f37b217eb353c2927c17350ca6e5d5ec8249f5f98f02873e2f" + } + }, + "after_error": null, + "exit_code": 2, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\npython3 scripts/build-composition.py --root . --target test\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git /tmp/agent-system-composition-b5be4j99/Agent-System-Frontend-git\nCloning into '/tmp/agent-system-composition-b5be4j99/Agent-System-Frontend-git'...\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git /tmp/agent-system-composition-b5be4j99/Agent-System-Backend-git\nCloning into '/tmp/agent-system-composition-b5be4j99/Agent-System-Backend-git'...\n[composition] npm ci --ignore-scripts --no-audit --no-fund\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 3s\n[composition] npm cache add @babel/code-frame@7.29.7 @babel/compat-data@7.29.7 @babel/core@7.29.7 @babel/generator@7.29.8 @babel/helper-compilation-targets@7.29.7 @babel/helper-globals@7.29.7 @babel/helper-module-imports@7.29.7 @babel/helper-module-transforms@7.29.7 @babel/helper-plugin-utils@7.29.7 @babel/helper-string-parser@7.29.7 @babel/helper-validator-identifier@7.29.7 @babel/helper-validator-option@7.29.7 @babel/helpers@7.29.7 @babel/parser@7.29.9 @babel/plugin-transform-react-jsx-self@7.29.7 @babel/plugin-transform-react-jsx-source@7.29.7 @babel/template@7.29.7 @babel/traverse@7.29.8 @babel/types@7.29.8 @esbuild/linux-x64@0.25.12 @jridgewell/gen-mapping@0.3.13 @jridgewell/remapping@2.3.5 @jridgewell/resolve-uri@3.1.2 @jridgewell/sourcemap-codec@1.6.0 @jridgewell/trace-mapping@0.3.31 @napi-rs/lzma-linux-x64-gnu@1.5.1 @nodelib/fs.scandir@2.1.5 @nodelib/fs.stat@2.0.5 @nodelib/fs.walk@1.2.8 @oxc-resolver/binding-linux-x64-gnu@11.24.2 @playwright/test@1.64.0 @rolldown/pluginutils@1.0.0-beta.27 @rollup/rollup-linux-x64-gnu@4.63.5 @standard-schema/spec@1.1.0 @types/babel__core@7.20.5 @types/babel__generator@7.27.0 @types/babel__template@7.4.4 @types/babel__traverse@7.28.0 @types/chai@5.2.3 @types/deep-eql@4.0.2 @types/estree@1.0.9 @types/node@22.20.4 @types/react-dom@19.3.0 @types/react@19.3.0 @types/trusted-types@2.0.7 @vitejs/plugin-react@4.7.0 @vitest/expect@4.1.11 @vitest/mocker@4.1.11 @vitest/pretty-format@4.1.11 @vitest/runner@4.1.11 @vitest/snapshot@4.1.11 @vitest/spy@4.1.11 @vitest/utils@4.1.11 @xmldom/xmldom@0.8.15 adler-32@1.3.1 argparse@1.0.10 assertion-error@2.0.1 base64-js@1.5.1 baseline-browser-mapping@2.11.26 braces@3.0.3 browserslist@4.29.3 caniuse-lite@1.0.30001813 cfb@1.2.2 chai@6.2.2 codepage@1.15.0 convert-source-map@2.0.0 core-util-is@1.0.3 crc-32@1.2.2 csstype@3.2.3 debug@4.4.3 dingbat-to-unicode@1.0.2 docx-preview@0.4.1 dompurify@3.4.16 duck@0.1.12 echarts@5.6.0 electron-to-chromium@1.5.440 es-module-lexer@2.3.2 esbuild@0.25.12 escalade@3.2.0 estree-walker@3.0.3 expect-type@1.4.0 fast-glob@3.3.3 fastq@1.20.3 fd-package-json@2.0.0 fdir@6.5.0 fill-range@7.1.1 formatly@0.3.0 frac@1.1.2 gensync@1.0.0-beta.2 glob-parent@5.1.2 immediate@3.0.6 inherits@2.0.4 is-extglob@2.1.1 is-glob@4.0.3 is-number@7.0.0 isarray@1.0.0 jiti@2.7.0 js-tokens@4.0.0 jsesc@3.1.0 json5@2.2.3 jszip@3.10.2 knip@5.88.1 lie@3.3.0 lodash@4.18.1 lop@0.4.2 lru-cache@5.1.1 magic-string@0.30.21 mammoth@1.13.0 marked@15.0.12 merge2@1.4.1 micromatch@4.0.8 minimist@1.2.8 ms@2.1.3 nanoid@3.3.19 node-releases@2.0.57 obug@2.2.1 option@0.2.4 oxc-resolver@11.24.2 pako@1.0.11 pathe@2.0.3 picocolors@1.1.1 picomatch@2.3.2 picomatch@4.0.7 playwright-core@1.64.0 playwright@1.64.0 postcss@8.5.28 pptx-preview@1.0.7 process-nextick-args@2.0.1 queue-microtask@1.2.3 react-dom@19.3.0 react-refresh@0.17.0 react@19.3.0 readable-stream@2.3.8 reusify@1.1.0 rollup@4.63.5 run-parallel@1.2.0 safe-buffer@5.1.2 scheduler@0.28.0 semver@6.3.1 setimmediate@1.0.5 siginfo@2.0.0 smol-toml@1.9.0 source-map-js@1.2.1 sprintf-js@1.0.3 ssf@0.11.2 stackback@0.0.2 std-env@4.3.0 string_decoder@1.1.1 strip-json-comments@5.0.3 tinybench@2.9.0 tinyexec@1.3.1 tinyglobby@0.2.17 tinyrainbow@3.2.0 to-regex-range@5.0.1 tslib@2.3.0 tslib@2.8.1 typescript@5.9.3 unbash@2.2.0 underscore@1.13.8 undici-types@6.21.0 update-browserslist-db@1.3.3 util-deprecate@1.0.2 uuid@10.0.0 vite@6.4.3 vitest@4.1.11 walk-up-path@4.0.0 why-is-node-running@2.3.0 wmf@1.0.2 word@0.3.0 xlsx@0.18.5 xmlbuilder@10.1.1 yallist@3.1.1 yaml@2.9.1 zod@4.6.5 zrender@5.6.1 --ignore-scripts --registry=https://registry.npmjs.org --userconfig=/dev/null --globalconfig=/tmp/composition-npm-metadata-onlxupxw/empty-global.npmrc\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Logging-System.git /tmp/agent-system-composition-b5be4j99/Logging-System-git\nCloning into '/tmp/agent-system-composition-b5be4j99/Logging-System-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Error-Code-System.git /tmp/agent-system-composition-b5be4j99/Error-Code-System-git\nCloning into '/tmp/agent-system-composition-b5be4j99/Error-Code-System-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Core.git /tmp/agent-system-composition-b5be4j99/Agent-System-Core-git\nCloning into '/tmp/agent-system-composition-b5be4j99/Agent-System-Core-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git /tmp/agent-system-composition-b5be4j99/Agent-Native-git\nCloning into '/tmp/agent-system-composition-b5be4j99/Agent-Native-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Intent.git /tmp/agent-system-composition-b5be4j99/Agent-Intent-git\nCloning into '/tmp/agent-system-composition-b5be4j99/Agent-Intent-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Command.git /tmp/agent-system-composition-b5be4j99/Agent-Command-git\nCloning into '/tmp/agent-system-composition-b5be4j99/Agent-Command-git'...\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Squad.git /tmp/agent-system-composition-b5be4j99/Agent-Squad-git\nCloning into '/tmp/agent-system-composition-b5be4j99/Agent-Squad-git'...\n[composition] go mod verify\nall modules verified\n[composition] go mod verify\nall modules verified\n[composition] go mod verify\nall modules verified\n[composition] go mod verify\nall modules verified\n[composition] go mod verify\nall modules verified\n[composition] go mod verify\nall modules verified\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-UI.git /tmp/agent-system-composition-b5be4j99/Agent-System-UI-git\nCloning into '/tmp/agent-system-composition-b5be4j99/Agent-System-UI-git'...\n[composition] npm ci --ignore-scripts --no-audit --no-fund\n\nadded 1 package in 158ms\n[composition] npm cache add typescript@5.9.3 --ignore-scripts --registry=https://registry.npmjs.org --userconfig=/dev/null --globalconfig=/tmp/composition-npm-metadata-qu2kyfo2/empty-global.npmrc\n[composition] npm ci --ignore-scripts --no-audit --no-fund\nnpm warn deprecated whatwg-encoding@3.1.1: Use @exodus/bytes instead for a more spec-conformant and faster implementation\n\nadded 163 packages in 1s\n[composition] npm cache add @asamuzakjp/css-color@3.2.0 @babel/code-frame@7.29.7 @babel/helper-validator-identifier@7.29.7 @babel/runtime@7.29.7 @csstools/color-helpers@5.1.0 @csstools/css-calc@2.1.4 @csstools/css-color-parser@3.1.0 @csstools/css-parser-algorithms@3.0.5 @csstools/css-tokenizer@3.0.4 @jridgewell/sourcemap-codec@1.6.0 @nodelib/fs.scandir@2.1.5 @nodelib/fs.stat@2.0.5 @nodelib/fs.walk@1.2.8 @oxc-project/types@0.152.0 @oxc-resolver/binding-linux-x64-gnu@11.24.2 @rolldown/binding-linux-x64-gnu@1.2.12 @rolldown/pluginutils@1.0.1 @standard-schema/spec@1.1.0 @testing-library/dom@10.4.2 @testing-library/react@16.3.3 @types/aria-query@5.0.4 @types/chai@5.2.3 @types/deep-eql@4.0.2 @types/estree@1.0.9 @types/node@22.20.4 @types/react-dom@19.3.0 @types/react@19.3.0 @types/trusted-types@2.0.7 @vitest/expect@4.1.11 @vitest/mocker@4.1.11 @vitest/pretty-format@4.1.11 @vitest/runner@4.1.11 @vitest/snapshot@4.1.11 @vitest/spy@4.1.11 @vitest/utils@4.1.11 agent-base@7.1.4 ansi-regex@5.0.1 ansi-styles@5.2.0 aria-query@5.3.0 assertion-error@2.0.1 asynckit@0.4.0 braces@3.0.3 call-bind-apply-helpers@1.0.2 chai@6.2.2 combined-stream@1.0.8 convert-source-map@2.0.0 cssstyle@4.6.0 csstype@3.2.3 data-urls@5.0.0 debug@4.4.3 decimal.js@10.6.0 delayed-stream@1.0.0 dequal@2.0.3 detect-libc@2.1.2 dom-accessibility-api@0.5.16 dompurify@3.4.16 dunder-proto@1.0.1 entities@6.0.1 es-define-property@1.0.1 es-errors@1.3.0 es-module-lexer@2.3.2 es-object-atoms@1.1.2 es-set-tostringtag@2.1.0 estree-walker@3.0.3 expect-type@1.4.0 fast-glob@3.3.3 fastq@1.20.3 fd-package-json@2.0.0 fdir@6.5.0 fill-range@7.1.1 form-data@4.0.6 formatly@0.3.0 function-bind@1.1.2 get-intrinsic@1.3.0 get-proto@1.0.1 glob-parent@5.1.2 gopd@1.2.0 has-symbols@1.1.0 has-tostringtag@1.0.2 hasown@2.0.4 html-encoding-sniffer@4.0.0 http-proxy-agent@7.0.2 https-proxy-agent@7.0.6 iconv-lite@0.6.3 is-extglob@2.1.1 is-glob@4.0.3 is-number@7.0.0 is-potential-custom-element-name@1.0.1 jiti@2.7.0 js-tokens@4.0.0 jsdom@25.0.1 knip@5.88.1 lightningcss-linux-x64-gnu@1.33.0 lightningcss@1.33.0 lru-cache@10.4.3 lz-string@1.5.0 magic-string@0.30.21 marked@15.0.12 math-intrinsics@1.1.0 merge2@1.4.1 micromatch@4.0.8 mime-db@1.52.0 mime-types@2.1.35 minimist@1.2.8 ms@2.1.3 nanoid@3.3.19 nwsapi@2.2.28 obug@2.2.1 oxc-resolver@11.24.2 parse5@7.3.0 pathe@2.0.3 picocolors@1.1.1 picomatch@2.3.2 picomatch@4.0.7 postcss@8.5.28 pretty-format@27.5.1 punycode@2.3.1 queue-microtask@1.2.3 react-dom@19.3.0 react-is@17.0.2 react@19.3.0 reusify@1.1.0 rolldown@1.2.12 rrweb-cssom@0.7.1 rrweb-cssom@0.8.0 run-parallel@1.2.0 safer-buffer@2.1.2 saxes@6.0.0 scheduler@0.28.0 siginfo@2.0.0 smol-toml@1.9.0 source-map-js@1.2.2 stackback@0.0.2 std-env@4.3.0 strip-json-comments@5.0.3 symbol-tree@3.2.4 tinybench@2.9.0 tinyexec@1.3.1 tinyglobby@0.2.17 tinyrainbow@3.2.0 tldts-core@6.1.86 tldts@6.1.86 to-regex-range@5.0.1 tough-cookie@5.1.2 tr46@5.1.1 typescript@5.9.3 unbash@2.2.0 undici-types@6.21.0 vite@8.3.1 vitest@4.1.11 w3c-xmlserializer@5.0.0 walk-up-path@4.0.0 webidl-conversions@7.0.0 whatwg-encoding@3.1.1 whatwg-mimetype@4.0.0 whatwg-url@14.2.0 why-is-node-running@2.3.0 ws@8.22.0 xml-name-validator@5.0.0 xmlchars@2.2.0 yaml@2.9.1 zod@4.6.5 --ignore-scripts --registry=https://registry.npmjs.org --userconfig=/dev/null --globalconfig=/tmp/composition-npm-metadata-31teyflk/empty-global.npmrc\n[composition] npm run build\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\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-BWPiL_PS.css 93.18 kB │ gzip: 16.04 kB\ndist/assets/jszip.min-d-4Zmon1.js 0.12 kB │ gzip: 0.12 kB\ndist/assets/docx-preview-6sU_ku0G.js 77.41 kB │ gzip: 21.29 kB\ndist/assets/jszip.min-kSHCEEHx.js 97.26 kB │ gzip: 30.16 kB\ndist/assets/index-DoGujINZ.js 213.14 kB │ gzip: 70.03 kB\ndist/assets/xlsx-CkFp8p6R.js 429.53 kB │ gzip: 143.07 kB\ndist/assets/index-Ctb2bcvo.js 561.83 kB │ gzip: 175.12 kB\ndist/assets/pptx-preview.es-Dtz_cWFU.js 1,255.23 kB │ gzip: 401.46 kB\n✓ built in 4.71s\n[composition] npm test\n(node:2364427) 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:2364340) 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:2364335) 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:2364336) 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:2364423) 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:2364432) 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:2364433) 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:2364435) 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:2364520) 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:2364337) 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:2364341) 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> agent-system-frontend@0.1.0 test\n> vitest run && npm run test:packages\n\n\n RUN v4.1.11 /tmp/agent-system-composition-b5be4j99/Agent-System-Frontend\n\n\n Test Files 33 passed (33)\n Tests 264 passed (264)\n Start at 05:24:00\n Duration 582ms (transform 2.51s, setup 0ms, import 4.41s, tests 555ms, environment 2ms)\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 952ms\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-BWPiL_PS.css 93.18 kB │ gzip: 16.04 kB\ndist/assets/jszip.min-d-4Zmon1.js 0.12 kB │ gzip: 0.12 kB\ndist/assets/docx-preview-6sU_ku0G.js 77.41 kB │ gzip: 21.29 kB\ndist/assets/jszip.min-kSHCEEHx.js 97.26 kB │ gzip: 30.16 kB\ndist/assets/index-DoGujINZ.js 213.14 kB │ gzip: 70.03 kB\ndist/assets/xlsx-CkFp8p6R.js 429.53 kB │ gzip: 143.07 kB\ndist/assets/index-Ctb2bcvo.js 561.83 kB │ gzip: 175.12 kB\ndist/assets/pptx-preview.es-Dtz_cWFU.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 4.69s\n✔ the application builds from packed dependencies without UI or Core source siblings (8556.699826ms)\nℹ tests 1\nℹ suites 0\nℹ pass 1\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 8594.745333\n[composition] go test -mod=readonly ./...\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/agent-system\t0.274s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/cmd/storage-migrate\t0.045s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/eval\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/app\t0.483s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/blobstore\t0.005s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/bus\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cardsvc\t0.180s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/cmdbus\t0.025s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/config\t0.005s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ctxasm\t0.005s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/docgen\t0.007s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/evalgold\t0.004s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/genui\t0.105s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/hostapi\t0.044s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ingest\t0.833s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentgate\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/intentsem\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/pgbus\t0.004s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/plugins\t0.311s\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/profiles\t[no test files]\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/projectscope\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/prompts\t0.078s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/quality\t0.193s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/rag\t0.183s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ratelimit\t0.254s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/route\t0.004s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runmgr\t1.179s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/runtime\t1.701s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/server\t9.135s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/settings\t0.020s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/skills\t1.805s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/squadadapter\t0.170s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/store\t4.627s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/surfacesvc\t0.213s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/tools\t13.315s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/wfcompile\t0.049s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/workflow\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension\t0.003s\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension/link\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/identity\t0.041s\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/web\t[no test files]\n[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\n? \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/cli\t0.004s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/config\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/conformance\t0.041s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/logsys\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/redact\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/server\t0.054s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/sink\t0.013s\nok \tgit-ssh.u1680832.nyat.app/weichen/Logging-System.git/slogadapter\t0.002s\n[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\n? \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/cli\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/conformance\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/domains\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/errcode\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/httpx\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Error-Code-System.git/server\t0.003s\n[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git\t0.003s\n[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/adapters/native\t0.213s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/adapters/pitransport\t0.043s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/catalogcheck\t0.002s\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.151s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/rpc\t0.004s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime\t1.398s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/agentspec\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/checkpoint\t0.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/codeorch\t0.104s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/ext\t0.024s\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.022s\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.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/hooks\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/llm\t0.242s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/mcp\t13.246s\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.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/resources\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Native.git/runtime/session\t0.009s\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.002s\n[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\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.003s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/conformance\t0.003s\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.006s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Intent.git/schema\t0.002s\n[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Command.git\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Command.git/conformance\t0.001s\n[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/schema\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/squad\t0.957s\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[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/native\t0.002s\n[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/intent\t0.008s\n[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/sqlite\t0.017s\n[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\n? \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/cmd/agent-squad\t[no test files]\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/cmd/agent-squad/cli\t0.002s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/cmd/agent-squad/conformance\t0.004s\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/cmd/agent-squad/server\t0.568s\n[composition] go vet -mod=readonly ./...\n[composition] go test -mod=readonly ./...\nok \tgit-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/a2a\t0.020s\n[composition] go vet -mod=readonly ./...\n[composition] npm run typecheck\n\n> @agent-system/contracts@0.1.0 typecheck\n> tsc -p tsconfig.package.json --noEmit\n\n[composition] npm run test\n\n> @agent-system/contracts@0.1.0 test\n> npm run check:package && node --test scripts/test-package.mjs\n\n\n> @agent-system/contracts@0.1.0 check:package\n> node scripts/build-package.mjs --check\n\n✔ packed contracts compile in a consumer without the Core checkout (850.069094ms)\nℹ tests 1\nℹ suites 0\nℹ pass 1\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 891.610684\n[composition] npm run typecheck\n\n> @agent-system/ui@0.1.0 typecheck\n> tsc --noEmit\n\n[composition] npm run test\n\n> @agent-system/ui@0.1.0 test\n> vitest run && npm run test:package\n\n\n RUN v4.1.11 /tmp/agent-system-composition-b5be4j99/Agent-System-UI\n\n\n Test Files 18 passed (18)\n Tests 162 passed (162)\n Start at 05:24:49\n Duration 1.15s (transform 995ms, setup 0ms, import 2.51s, tests 2.30s, environment 5.17s)\n\n\n> @agent-system/ui@0.1.0 test:package\n> npm run check:package && node --test scripts/test-package.mjs\n\n\n> @agent-system/ui@0.1.0 check:package\n> node scripts/build-package.mjs --check\n\n✔ packed UI renders and exposes CSS and types without adjacent source checkouts (1446.962577ms)\nℹ tests 1\nℹ suites 0\nℹ pass 1\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 1490.06076\n[composition] bash scripts/lint-boundaries.sh\narchitecture ok (85 edges)\narchitecture negative ok\nboundaries ok\n[composition] bash scripts/check-pins.sh\nok fixed source Agent-System-Frontend\nok fixed source Agent-System-Backend\nok fixed source Logging-System\nok fixed source Error-Code-System\nok fixed source Agent-System-Core\nok fixed source Agent-Native\nok fixed source Agent-Intent\nok fixed source Agent-Command\nok fixed source Agent-Squad\nok fixed source Agent-System-UI\nversion authorities ok (source lock / go.mod / npm lock; no gitlink alignment)\n[composition] make test-governance\ntest_candidate_cannot_read_checkout_credentials (test_ci_credentials.CheckoutTests.test_candidate_cannot_read_checkout_credentials) ... ok\ntest_candidate_submodule_update_commands_are_rejected (test_ci_credentials.CheckoutTests.test_candidate_submodule_update_commands_are_rejected) ... ok\ntest_credential_destination_confined_to_injected_server (test_ci_credentials.CheckoutTests.test_credential_destination_confined_to_injected_server) ... ok\ntest_external_or_unlisted_urls_are_rejected_before_component_fetch (test_ci_credentials.CheckoutTests.test_external_or_unlisted_urls_are_rejected_before_component_fetch) ... ok\ntest_inherited_template_hook_does_not_execute_with_credentials (test_ci_credentials.CheckoutTests.test_inherited_template_hook_does_not_execute_with_credentials) ... ok\ntest_nested_external_url_is_rejected_before_authenticated_fetch (test_ci_credentials.CheckoutTests.test_nested_external_url_is_rejected_before_authenticated_fetch) ... ok\ntest_rdm_pin_fetch_is_three_shas_on_the_allowlist (test_ci_credentials.CheckoutTests.test_rdm_pin_fetch_is_three_shas_on_the_allowlist) ... ok\ntest_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials (test_ci_credentials.CheckoutTests.test_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials) ... ok\ntest_redirects_do_not_forward_credential_or_fetch_unlisted_target (test_ci_credentials.CheckoutTests.test_redirects_do_not_forward_credential_or_fetch_unlisted_target) ... ok\ntest_backend_check_prepares_fixed_source_and_replays_owner_edits (test_component_checks.ComponentCheckTests.test_backend_check_prepares_fixed_source_and_replays_owner_edits) ... ok\ntest_explicit_overlay_uses_registered_workspace_and_preserves_default_version_mode (test_component_checks.ComponentCheckTests.test_explicit_overlay_uses_registered_workspace_and_preserves_default_version_mode) ... ok\ntest_fixed_go_checks_keep_source_clean_across_pg_and_multi_instance (test_component_checks.ComponentCheckTests.test_fixed_go_checks_keep_source_clean_across_pg_and_multi_instance) ... ok\ntest_fixed_go_checks_refuse_and_preserve_owner_changes_and_ignored_files (test_component_checks.ComponentCheckTests.test_fixed_go_checks_refuse_and_preserve_owner_changes_and_ignored_files) ... ok\ntest_fixed_go_failure_is_reported_without_polluting_source (test_component_checks.ComponentCheckTests.test_fixed_go_failure_is_reported_without_polluting_source) ... ok\ntest_make_pin_gate_uses_map_in_gitless_formal_root_and_ignores_external_rdm_identity (test_component_checks.ComponentCheckTests.test_make_pin_gate_uses_map_in_gitless_formal_root_and_ignores_external_rdm_identity) ... ok\ntest_multi_instance_binary_is_built_inside_dev_root_and_reached_by_suite (test_component_checks.ComponentCheckTests.test_multi_instance_binary_is_built_inside_dev_root_and_reached_by_suite) ... ok\ntest_new_pin_gate_validates_fixed_sources_and_rejects_local_replaces (test_component_checks.ComponentCheckTests.test_new_pin_gate_validates_fixed_sources_and_rejects_local_replaces) ... ok\ntest_pg_and_multi_instance_prerequisites_still_refuse_before_preparing_sources (test_component_checks.ComponentCheckTests.test_pg_and_multi_instance_prerequisites_still_refuse_before_preparing_sources) ... ok\ntest_pg_gate_requires_environment_and_forwards_it_to_real_go_tests (test_component_checks.ComponentCheckTests.test_pg_gate_requires_environment_and_forwards_it_to_real_go_tests) ... ok\ntest_registered_private_transport_reaches_real_go_process_without_global_change (test_component_checks.ComponentCheckTests.test_registered_private_transport_reaches_real_go_process_without_global_change) ... ok\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_new_layout_cannot_use_receipt_without_component_identity (test_component_governance.ComponentGovernanceTests.test_new_layout_cannot_use_receipt_without_component_identity) ... ok\ntest_receipts_reject_component_path_escape (test_component_governance.ComponentGovernanceTests.test_receipts_reject_component_path_escape) ... ok\ntest_startup_receipt_rejects_changed_ignored_component_objects (test_component_governance.ComponentGovernanceTests.test_startup_receipt_rejects_changed_ignored_component_objects) ... ok\ntest_all_product_acquisition_precedes_candidate_execution (test_composition.CompositionTests.test_all_product_acquisition_precedes_candidate_execution) ... ok\ntest_developer_package_tarball_overrides_do_not_reach_formal_tests (test_composition.CompositionTests.test_developer_package_tarball_overrides_do_not_reach_formal_tests) ... ok\ntest_dirty_root_composer_cannot_publish_under_committed_identity (test_composition.CompositionTests.test_dirty_root_composer_cannot_publish_under_committed_identity) ... ok\ntest_dirty_root_lock_is_rejected (test_composition.CompositionTests.test_dirty_root_lock_is_rejected) ... ok\ntest_dirty_root_transport_is_refused_before_import (test_composition.CompositionTests.test_dirty_root_transport_is_refused_before_import) ... ok\ntest_fixed_commits_embed_assets_without_touching_developer_checkout (test_composition.CompositionTests.test_fixed_commits_embed_assets_without_touching_developer_checkout) ... ok\ntest_fixed_root_governance_and_boundaries_receive_proven_source_map (test_composition.CompositionTests.test_fixed_root_governance_and_boundaries_receive_proven_source_map) ... ok\ntest_frontend_dist_symlink_cannot_import_assets_from_outside_source (test_composition.CompositionTests.test_frontend_dist_symlink_cannot_import_assets_from_outside_source) ... ok\ntest_historical_rdm_product_still_builds_from_legacy_pins (test_composition.CompositionTests.test_historical_rdm_product_still_builds_from_legacy_pins) ... ok\ntest_local_go_replace_is_rejected (test_composition.CompositionTests.test_local_go_replace_is_rejected) ... ok\ntest_locked_missing_revision_is_rejected (test_composition.CompositionTests.test_locked_missing_revision_is_rejected) ... ok\ntest_missing_frontend_assets_fails_before_publishing_binary (test_composition.CompositionTests.test_missing_frontend_assets_fails_before_publishing_binary) ... ok\ntest_modified_go_module_cache_is_rejected_before_product_publication (test_composition.CompositionTests.test_modified_go_module_cache_is_rejected_before_product_publication) ... ok\ntest_npm_local_dependency_overlay_is_rejected (test_composition.CompositionTests.test_npm_local_dependency_overlay_is_rejected) ... ok\ntest_project_test_mode_refuses_missing_boundary_gate (test_composition.CompositionTests.test_project_test_mode_refuses_missing_boundary_gate) ... ok\ntest_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock (test_composition.CompositionTests.test_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock) ... ok\ntest_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache (test_composition.CompositionTests.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache) ... ok\ntest_source_path_escape_is_rejected (test_composition.CompositionTests.test_source_path_escape_is_rejected) ... ok\ntest_test_target_checks_fixed_go_library_and_ui_sources (test_composition.CompositionTests.test_test_target_checks_fixed_go_library_and_ui_sources) ... ok\ntest_test_target_runs_real_frontend_and_go_tests (test_composition.CompositionTests.test_test_target_runs_real_frontend_and_go_tests) ... ok\ntest_unused_transitive_zip_does_not_require_consumer_sum_rewrite (test_composition.CompositionTests.test_unused_transitive_zip_does_not_require_consumer_sum_rewrite) ... ok\ntest_version_and_plugin_assets_come_from_committed_root (test_composition.CompositionTests.test_version_and_plugin_assets_come_from_committed_root) ... ok\ntest_versioned_rdm_product_entry_uses_fixed_composer (test_composition.CompositionTests.test_versioned_rdm_product_entry_uses_fixed_composer) ... skipped 'external RDM source was not supplied; host must replay the actual wrapper'\ntest_locked_metadata_is_acquired_before_offline_consumer_without_credentials (test_composition.NpmAcquisitionTests.test_locked_metadata_is_acquired_before_offline_consumer_without_credentials) ... ok\ntest_unreviewed_tarball_source_is_refused_before_acquisition (test_composition.NpmAcquisitionTests.test_unreviewed_tarball_source_is_refused_before_acquisition) ... ok\ntest_all_required_component_snapshots_have_fixed_provenance (test_dependency_ci.ComponentWorkflowFixtureTests.test_all_required_component_snapshots_have_fixed_provenance) ... ok\ntest_missing_component_snapshot_is_not_skipped (test_dependency_ci.ComponentWorkflowFixtureTests.test_missing_component_snapshot_is_not_skipped) ... ok\ntest_modified_workflow_snapshot_is_rejected_before_execution (test_dependency_ci.ComponentWorkflowFixtureTests.test_modified_workflow_snapshot_is_rejected_before_execution) ... ok\ntest_omitted_repository_provenance_is_rejected (test_dependency_ci.ComponentWorkflowFixtureTests.test_omitted_repository_provenance_is_rejected) ... ok\ntest_optional_source_validation_uses_immutable_commit_and_rejects_stale_head (test_dependency_ci.ComponentWorkflowFixtureTests.test_optional_source_validation_uses_immutable_commit_and_rejects_stale_head) ... ok\ntest_boundary_gate_refuses_missing_ripgrep_before_resolving_sources (test_dependency_ci.DependencyCITests.test_boundary_gate_refuses_missing_ripgrep_before_resolving_sources) ... ok\ntest_component_checkout_removes_tokens_before_candidate_executes (test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_component_ci_executes_nested_go_module_tests (test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\ntest_go_prefetch_covers_logging_trace_module (test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module) ... ok\ntest_go_prefetch_rejects_mutation_of_committed_checksums (test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums) ... ok\ntest_go_prefetch_uses_only_registered_private_repo_and_local_toolchain (test_dependency_ci.DependencyCITests.test_go_prefetch_uses_only_registered_private_repo_and_local_toolchain) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_metadata_version_cannot_be_a_destination (test_dependency_ci.DependencyCITests.test_npm_metadata_version_cannot_be_a_destination) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_prefetch_populates_cold_offline_resolver_metadata_without_credentials (test_dependency_ci.DependencyCITests.test_npm_prefetch_populates_cold_offline_resolver_metadata_without_credentials) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_privileged_acquisition_finishes_before_candidate_execution_in_each_job (test_dependency_ci.DependencyCITests.test_privileged_acquisition_finishes_before_candidate_execution_in_each_job) ... ok\ntest_rdm_composition_lock_fetches_fixed_dev_without_executing_code (test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code) ... ok\ntest_rdm_composition_lock_rejects_external_missing_and_malformed_commits (test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) ... ok\ntest_registered_application_lock_materializes_fixed_source (test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\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_fixed_candidate_capture_preserves_checkout (test_evidence.EvidenceTests.test_fixed_candidate_capture_preserves_checkout) ... 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\ntest_validation_purpose_is_not_injected_into_measured_command (test_evidence.EvidenceTests.test_validation_purpose_is_not_injected_into_measured_command) ... ok\ntest_pin_is_three_fixed_shas (test_lifecycle_pin.RdmPinTests.test_pin_is_three_fixed_shas) ... ok\ntest_rejects_url_and_short_sha (test_lifecycle_pin.RdmPinTests.test_rejects_url_and_short_sha) ... ok\ntest_conflicted_task_does_not_block_an_independent_healthy_task (test_merge_queue_trial.QueueTrialTests.test_conflicted_task_does_not_block_an_independent_healthy_task) ... ok\ntest_external_target_advance_requires_a_new_candidate (test_merge_queue_trial.QueueTrialTests.test_external_target_advance_requires_a_new_candidate) ... ok\ntest_sequential_delivery_does_not_sync_waiting_branches (test_merge_queue_trial.QueueTrialTests.test_sequential_delivery_does_not_sync_waiting_branches) ... ok\ntest_addr_change_keeps_database_and_auth (test_svc.SvcDbRecoveryTests.test_addr_change_keeps_database_and_auth) ... ok\ntest_auth_preflight_aligns_with_effective_env_dsn (test_svc.SvcDbRecoveryTests.test_auth_preflight_aligns_with_effective_env_dsn) ... FAIL\ntest_batch_update_stops_second_service_despite_prior_pidcheck (test_svc.SvcDbRecoveryTests.test_batch_update_stops_second_service_despite_prior_pidcheck)\n批量 update 不得用上一服务的 SVC_PIDCHECK 误判下一服务进程。 ... ok\ntest_dbref_binding_survives_bare_restart_and_redeploy (test_svc.SvcDbRecoveryTests.test_dbref_binding_survives_bare_restart_and_redeploy) ... ok\ntest_explicit_unbind_blocks_residual_env_dsn (test_svc.SvcDbRecoveryTests.test_explicit_unbind_blocks_residual_env_dsn) ... ok\ntest_external_dsn_and_conffile_recover_on_bare_start (test_svc.SvcDbRecoveryTests.test_external_dsn_and_conffile_recover_on_bare_start) ... ok\ntest_legacy_exec_dsn_survives_consecutive_restarts (test_svc.SvcDbRecoveryTests.test_legacy_exec_dsn_survives_consecutive_restarts) ... ok\ntest_mock_conflict_and_legacy_binary_refuse (test_svc.SvcDbRecoveryTests.test_mock_conflict_and_legacy_binary_refuse) ... ok\ntest_rdm_companion_missing_web_fails_deploy (test_svc.SvcDbRecoveryTests.test_rdm_companion_missing_web_fails_deploy) ... ok\ntest_rdm_source_commits_and_update_track (test_svc.SvcDbRecoveryTests.test_rdm_source_commits_and_update_track) ... To /tmp/svc-db-regress-_9hozas8/rdmremote.git\n 8dff2e3..6681a9a main -> main\nok\ntest_rdm_source_deploy_end_to_end (test_svc.SvcDbRecoveryTests.test_rdm_source_deploy_end_to_end) ... ok\ntest_refusals_keep_registration_without_sqlite_fallback (test_svc.SvcDbRecoveryTests.test_refusals_keep_registration_without_sqlite_fallback) ... ok\ntest_restart_refusal_happens_before_stopping_running_service (test_svc.SvcDbRecoveryTests.test_restart_refusal_happens_before_stopping_running_service) ... ok\ntest_seed_owner_override_skips_account_lookup (test_svc.SvcDbRecoveryTests.test_seed_owner_override_skips_account_lookup) ... ok\ntest_seed_puts_with_temporary_bearer_key_when_auth_on (test_svc.SvcDbRecoveryTests.test_seed_puts_with_temporary_bearer_key_when_auth_on) ... ok\ntest_seed_puts_without_credentials_when_auth_off (test_svc.SvcDbRecoveryTests.test_seed_puts_without_credentials_when_auth_off) ... ok\ntest_sequential_restarts_no_cross_dsn_and_no_secret_leak (test_svc.SvcDbRecoveryTests.test_sequential_restarts_no_cross_dsn_and_no_secret_leak) ... ok\ntest_source_switch_requires_flag (test_svc.SvcDbRecoveryTests.test_source_switch_requires_flag) ... ok\ntest_static_fresh_deploy_registers_pidcheck_and_starts (test_svc.SvcDbRecoveryTests.test_static_fresh_deploy_registers_pidcheck_and_starts)\n全新 static --dir:登记须含 pidcheck;首启探活不得把 http.server 判死。 ... ok\ntest_update_preserves_binding (test_svc.SvcDbRecoveryTests.test_update_preserves_binding) ... ok\ntest_backup_custom_out_not_pruned (test_svc_backup.SvcAgentBackupTests.test_backup_custom_out_not_pruned) ... ok\ntest_backup_event_recorded (test_svc_backup.SvcAgentBackupTests.test_backup_event_recorded) ... ok\ntest_backup_live_writer_consistent_and_outside_runtime (test_svc_backup.SvcAgentBackupTests.test_backup_live_writer_consistent_and_outside_runtime)\n活跃 WAL 写入者:快照可读、行在、integrity ok;-wal/-shm 不入快照。 ... ok\n/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/suite.py:107: ResourceWarning: unclosed file <_io.TextIOWrapper name=3 encoding='UTF-8'>\n for index, test in enumerate(self):\nResourceWarning: Enable tracemalloc to get the object allocation traceback\ntest_backup_manifest_sha_matches (test_svc_backup.SvcAgentBackupTests.test_backup_manifest_sha_matches) ... ok\ntest_backup_non_sqlite_db_kept_raw_without_leftovers (test_svc_backup.SvcAgentBackupTests.test_backup_non_sqlite_db_kept_raw_without_leftovers) ... ok\ntest_backup_rejects_postgres_with_db_hint (test_svc_backup.SvcAgentBackupTests.test_backup_rejects_postgres_with_db_hint) ... ok\ntest_backup_requires_registration (test_svc_backup.SvcAgentBackupTests.test_backup_requires_registration) ... ok\ntest_backup_target_exists_refused (test_svc_backup.SvcAgentBackupTests.test_backup_target_exists_refused) ... ok\ntest_backup_without_sqlite3_refuses (test_svc_backup.SvcAgentBackupTests.test_backup_without_sqlite3_refuses)\nPATH 无 sqlite3 → 拒绝(不回退裸拷贝)。重建与真实 PATH 等价的工具目录、 ... ok\ntest_retention_and_listing (test_svc_backup.SvcAgentBackupTests.test_retention_and_listing) ... ok\ntest_rm_purge_removes_snapshots (test_svc_backup.SvcAgentBackupTests.test_rm_purge_removes_snapshots) ... ok\ntest_cache_recycling_preserves_ignored_unique_files (test_svc_build_cutover.SvcBuildCutoverTests.test_cache_recycling_preserves_ignored_unique_files) ... ok\ntest_e2e_build_only_uses_versioned_sources_without_runtime_or_api_calls (test_svc_build_cutover.SvcBuildCutoverTests.test_e2e_build_only_uses_versioned_sources_without_runtime_or_api_calls) ... ok\ntest_mismatched_existing_cache_is_rejected_before_candidate_build (test_svc_build_cutover.SvcBuildCutoverTests.test_mismatched_existing_cache_is_rejected_before_candidate_build) ... ok\ntest_versioned_dev_materialization_uses_composer_without_submodules (test_svc_build_cutover.SvcBuildCutoverTests.test_versioned_dev_materialization_uses_composer_without_submodules) ... ok\ntest_versioned_rdm_adapter_passes_fixed_dev_root_to_product_wrapper (test_svc_build_cutover.SvcBuildCutoverTests.test_versioned_rdm_adapter_passes_fixed_dev_root_to_product_wrapper) ... ok\ntest_versioned_static_adapter_resolves_published_frontend_artifact (test_svc_build_cutover.SvcBuildCutoverTests.test_versioned_static_adapter_resolves_published_frontend_artifact) ... ok\ntest_forward_only_requires_confirm_and_backup (test_svc_deploy_txn.DeployTxnTests.test_forward_only_requires_confirm_and_backup) ... ok\ntest_schema_incompatible_refuses_before_stop (test_svc_deploy_txn.DeployTxnTests.test_schema_incompatible_refuses_before_stop) ... ok\ntest_replace_failure_keeps_original (test_svc_identity.AtomicWriteTests.test_replace_failure_keeps_original) ... ok\ntest_I3_start_ensures_sqlite_identity (test_svc_identity.IdentityTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_identity.IdentityTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_identity.IdentityTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_identity.IdentityTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_identity.IdentityTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_identity.IdentityTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_identity.IdentityTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_identity.IdentityTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_identity.IdentityTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_identity.IdentityTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_identity.IdentityTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_identity.IdentityTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_identity.IdentityTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_identity.IdentityTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_identity.IdentityTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_Z_real_pg_not_run (test_svc_identity.IdentityTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_identity.IdentityTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_identity.IdentityTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_identity.IdentityTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_identity.IdentityTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_identity.IdentityTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_identity.IdentityTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_identity.IdentityTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_identity.IdentityTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_identity.IdentityTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_identity.IdentityTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_identity.IdentityTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_identity.IdentityTests.test_watchdog_print_plan) ... ok\ntest_caller_identity_env_does_not_reach_serve (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_caller_identity_env_does_not_reach_serve) ... FAIL\ntest_recover_fails_when_port_stolen (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_two_bare_restarts_keep_identity (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_two_bare_restarts_keep_identity) ... ok\ntest_watchdog_print_plan (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_watchdog_print_plan) ... ok\ntest_addr_defaults_to_default_addr (test_svc_precheck.AgentListenRejectedPrecheck.test_addr_defaults_to_default_addr) ... ok\ntest_incident_combo_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_incident_combo_not_rejected) ... ok\ntest_insecure_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_insecure_not_rejected) ... ok\ntest_loopback_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_loopback_not_rejected) ... ok\ntest_nonloop_auth_off_with_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_auth_off_with_dsn_rejected) ... ok\ntest_nonloop_no_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_no_dsn_rejected) ... ok\ntest_auth_off_beats_dsn (test_svc_precheck.DbAuthEnabledMatrix.test_auth_off_beats_dsn) ... ok\ntest_auth_on_explicit (test_svc_precheck.DbAuthEnabledMatrix.test_auth_on_explicit) ... ok\ntest_auto_with_effective_dsn_is_authed (test_svc_precheck.DbAuthEnabledMatrix.test_auto_with_effective_dsn_is_authed) ... ok\ntest_auto_without_dsn_is_denied (test_svc_precheck.DbAuthEnabledMatrix.test_auto_without_dsn_is_denied) ... ok\ntest_no_auth_no_dsn_denied (test_svc_precheck.DbAuthEnabledMatrix.test_no_auth_no_dsn_denied) ... ok\ntest_broken_dbref_refuses (test_svc_precheck.ResolveDbConfigFixtures.test_broken_dbref_refuses) ... ok\ntest_legacy_exec_dsn_migrates_to_recoverable_keys (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_migrates_to_recoverable_keys) ... ok\ntest_legacy_exec_dsn_without_instance_goes_to_dsn_key (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_without_instance_goes_to_dsn_key) ... ok\ntest_migration_is_idempotent (test_svc_precheck.ResolveDbConfigFixtures.test_migration_is_idempotent) ... ok\ntest_no_dsn_no_dbref_is_sqlite (test_svc_precheck.ResolveDbConfigFixtures.test_no_dsn_no_dbref_is_sqlite) ... ok\ntest_post_g17_exec_restores_dsn_from_dbref (test_svc_precheck.ResolveDbConfigFixtures.test_post_g17_exec_restores_dsn_from_dbref) ... ok\ntest_env_config_resets_identity_env (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_identity_env) ... ok\ntest_env_config_resets_pidcheck_runtime_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_pidcheck_runtime_state) ... ok\ntest_env_config_resets_resolver_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_resolver_state) ... ok\ntest_help_topic_lists_rdm_admin (test_svc_rdm_admin.RdmAdminTests.test_help_topic_lists_rdm_admin) ... ok\ntest_recover_fails_when_port_stolen (test_svc_rdm_admin.RdmAdminTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_rdm_admin.RdmAdminTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_rdm_admin.RdmAdminTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_rdm_admin.RdmAdminTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_rdm_admin.RdmAdminTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_rdm_admin.RdmAdminTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_rdm_admin.RdmAdminTests.test_recover_skips_when_lock_held) ... ok\ntest_refuses_when_base_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_base_db_missing) ... ok\ntest_refuses_when_rdm_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_rdm_db_missing) ... ok\ntest_show_empty_ledger_hint (test_svc_rdm_admin.RdmAdminTests.test_show_empty_ledger_hint) ... ok\ntest_show_known_owner_no_warning (test_svc_rdm_admin.RdmAdminTests.test_show_known_owner_no_warning) ... ok\ntest_show_prints_ledger_and_flags_unknown_owner (test_svc_rdm_admin.RdmAdminTests.test_show_prints_ledger_and_flags_unknown_owner) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_rdm_admin.RdmAdminTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_rdm_admin.RdmAdminTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_rdm_admin.RdmAdminTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_status_lists_rdm_admin_row_and_warning (test_svc_rdm_admin.RdmAdminTests.test_status_lists_rdm_admin_row_and_warning) ... ok\ntest_status_silent_without_rdm_db (test_svc_rdm_admin.RdmAdminTests.test_status_silent_without_rdm_db) ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_rdm_admin.RdmAdminTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_transfer_idempotent_when_already_owner (test_svc_rdm_admin.RdmAdminTests.test_transfer_idempotent_when_already_owner) ... ok\ntest_transfer_rejects_empty_ledger (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_empty_ledger) ... ok\ntest_transfer_rejects_owner_missing_from_base_users (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_owner_missing_from_base_users) ... ok\ntest_transfer_rewrites_single_row_with_provenance (test_svc_rdm_admin.RdmAdminTests.test_transfer_rewrites_single_row_with_provenance) ... ok\ntest_unknown_subcommand_usage_exit_2 (test_svc_rdm_admin.RdmAdminTests.test_unknown_subcommand_usage_exit_2) ... ok\ntest_watchdog_print_plan (test_svc_rdm_admin.RdmAdminTests.test_watchdog_print_plan) ... ok\ntest_U3_real_agent_identity_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_agent_identity_lifecycle_sqlite)\n真实组合二进制:领养 ensure → verify → 两次裸重启身份/锚点稳定; ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_pg_identity_env_delivery (test_svc_realcombo.RealComboTests.test_U3_real_pg_identity_env_delivery)\n真实 PostgreSQL:AGENT_SYSTEM_DSN 环境交付 ensure/verify(凭据不进 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_binary_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_rdm_binary_lifecycle_sqlite)\n真实 RDM 组合二进制:identity 接线(Backend 公共 CLI)→ serve 门禁 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_full_deploy_track (test_svc_realcombo.RealComboTests.test_U3_real_rdm_full_deploy_track)\n全轨:materialize(真实 make build)→ 候选身份门禁 → release 切换 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_realcombo.RealComboTests.test_recover_fails_when_port_stolen) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_ignores_never_started_service (test_svc_realcombo.RealComboTests.test_recover_ignores_never_started_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_noop_while_running (test_svc_realcombo.RealComboTests.test_recover_noop_while_running) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_reserved_name_rejected (test_svc_realcombo.RealComboTests.test_recover_reserved_name_rejected) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_respects_explicit_stop (test_svc_realcombo.RealComboTests.test_recover_respects_explicit_stop) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_restarts_sigkilled_service (test_svc_realcombo.RealComboTests.test_recover_restarts_sigkilled_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_skips_when_lock_held (test_svc_realcombo.RealComboTests.test_recover_skips_when_lock_held) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_realcombo.RealComboTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_records_autostart_and_stop_clears (test_svc_realcombo.RealComboTests.test_start_records_autostart_and_stop_clears) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_rejects_foreign_port_occupant (test_svc_realcombo.RealComboTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_stop_on_dead_process_clears_autostart (test_svc_realcombo.RealComboTests.test_stop_on_dead_process_clears_autostart) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_watchdog_print_plan (test_svc_realcombo.RealComboTests.test_watchdog_print_plan) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_recover.SvcAutoRecoverTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_recover.SvcAutoRecoverTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_recover.SvcAutoRecoverTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_recover.SvcAutoRecoverTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_recover.SvcAutoRecoverTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_recover.SvcAutoRecoverTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_recover.SvcAutoRecoverTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_recover.SvcAutoRecoverTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... FAIL\ntest_start_records_autostart_and_stop_clears (test_svc_recover.SvcAutoRecoverTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_recover.SvcAutoRecoverTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_recover.SvcAutoRecoverTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_recover.SvcAutoRecoverTests.test_watchdog_print_plan) ... ok\ntest_I3_start_ensures_sqlite_identity (test_svc_u2.U2ReleaseTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_u2.U2ReleaseTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_u2.U2ReleaseTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_u2.U2ReleaseTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_u2.U2ReleaseTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_u2.U2ReleaseTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_u2.U2ReleaseTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_u2.U2ReleaseTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_u2.U2ReleaseTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_u2.U2ReleaseTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_u2.U2ReleaseTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_u2.U2ReleaseTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_u2.U2ReleaseTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_U2_build_failure_keeps_old_running (test_svc_u2.U2ReleaseTests.test_U2_build_failure_keeps_old_running) ... ok\ntest_U2_fault_after_switch_rolls_back_on_next_start (test_svc_u2.U2ReleaseTests.test_U2_fault_after_switch_rolls_back_on_next_start) ... ok\ntest_U2_health_timeout_rolls_back (test_svc_u2.U2ReleaseTests.test_U2_health_timeout_rolls_back) ... ok\ntest_U2_journal_interrupt_resolved_on_start (test_svc_u2.U2ReleaseTests.test_U2_journal_interrupt_resolved_on_start) ... ok\ntest_U2_layout_switch_and_rollback_on_start_failure (test_svc_u2.U2ReleaseTests.test_U2_layout_switch_and_rollback_on_start_failure) ... ok\ntest_U2_legacy_layout_bare_lifecycle_still_works (test_svc_u2.U2ReleaseTests.test_U2_legacy_layout_bare_lifecycle_still_works) ... ok\ntest_U2_schema_advance_blocks_rollback (test_svc_u2.U2ReleaseTests.test_U2_schema_advance_blocks_rollback) ... ok\ntest_Z_real_pg_not_run (test_svc_u2.U2ReleaseTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_u2.U2ReleaseTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_u2.U2ReleaseTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_u2.U2ReleaseTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_u2.U2ReleaseTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_u2.U2ReleaseTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_u2.U2ReleaseTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_u2.U2ReleaseTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_u2.U2ReleaseTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_u2.U2ReleaseTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_u2.U2ReleaseTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_u2.U2ReleaseTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_u2.U2ReleaseTests.test_watchdog_print_plan) ... ok\ntest_T1_user_list_binds_manifest_data (test_svc_user_binding.UserBindingTests.test_T1_user_list_binds_manifest_data) ... ok\ntest_T2_reject_override_data_flag (test_svc_user_binding.UserBindingTests.test_T2_reject_override_data_flag) ... ok\ntest_T2b_reject_literal_default_data (test_svc_user_binding.UserBindingTests.test_T2b_reject_literal_default_data) ... ok\ntest_T3_missing_data_root_rejected (test_svc_user_binding.UserBindingTests.test_T3_missing_data_root_rejected) ... ok\ntest_T4_no_flock_rejects_user_and_deploy (test_svc_user_binding.UserBindingTests.test_T4_no_flock_rejects_user_and_deploy) ... ok\ntest_T5_identity_regression_smoke (test_svc_user_binding.UserBindingTests.test_T5_identity_regression_smoke) ... ok\ntest_recover_fails_when_port_stolen (test_svc_user_binding.UserBindingTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_user_binding.UserBindingTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_user_binding.UserBindingTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_user_binding.UserBindingTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_user_binding.UserBindingTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_user_binding.UserBindingTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_user_binding.UserBindingTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_user_binding.UserBindingTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_user_binding.UserBindingTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_user_binding.UserBindingTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_user_binding.UserBindingTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_user_binding.UserBindingTests.test_watchdog_print_plan) ... ok\ntest_full_help_mentions_user_binding (test_svc_user_help.UserHelpTests.test_full_help_mentions_user_binding) ... ok\ntest_help_accounts_lists_six_commands (test_svc_user_help.UserHelpTests.test_help_accounts_lists_six_commands) ... ok\ntest_topics_and_short_and_lifecycle_mention_accounts (test_svc_user_help.UserHelpTests.test_topics_and_short_and_lifecycle_mention_accounts) ... ok\ntest_ide_lock_in_git_dir_does_not_block_finish (test_task.FinishGuardFixTests.test_ide_lock_in_git_dir_does_not_block_finish) ... ok\ntest_local_default_branch_at_origin_main_does_not_block (test_task.FinishGuardFixTests.test_local_default_branch_at_origin_main_does_not_block)\n克隆默认分支停在 origin/main 顶端(pin 为 feature 顶端时不在其历史内) ... ok\ntest_local_unique_commit_still_preserved (test_task.FinishGuardFixTests.test_local_unique_commit_still_preserved) ... ok\ntest_real_git_lock_still_blocks_finish (test_task.FinishGuardFixTests.test_real_git_lock_still_blocks_finish) ... ok\ntest_remote_tracking_refs_do_not_block_finish (test_task.FinishGuardFixTests.test_remote_tracking_refs_do_not_block_finish) ... ok\ntest_finish_abandon_retains_local_remote_tips_and_reason (test_task.TaskLifecycleTests.test_finish_abandon_retains_local_remote_tips_and_reason) ... ok\ntest_finish_abandon_without_reason_preserves_checkout_and_refs (test_task.TaskLifecycleTests.test_finish_abandon_without_reason_preserves_checkout_and_refs) ... ok\ntest_finish_clean_worktree_has_accurate_remote_result (test_task.TaskLifecycleTests.test_finish_clean_worktree_has_accurate_remote_result) ... ok\ntest_finish_deletes_only_merged_remote_branch (test_task.TaskLifecycleTests.test_finish_deletes_only_merged_remote_branch) ... ok\ntest_finish_preserves_component_commits_off_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_component_commits_off_the_pinned_head) ... ok\ntest_finish_preserves_component_untracked_file (test_task.TaskLifecycleTests.test_finish_preserves_component_untracked_file) ... ok\ntest_finish_preserves_linked_component_worktrees_at_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_linked_component_worktrees_at_the_pinned_head) ... ok\ntest_finish_preserves_linked_nested_component_worktree (test_task.TaskLifecycleTests.test_finish_preserves_linked_nested_component_worktree) ... ok\ntest_finish_preserves_locked_worktree (test_task.TaskLifecycleTests.test_finish_preserves_locked_worktree) ... ok\ntest_finish_preserves_main_and_active_index_lock (test_task.TaskLifecycleTests.test_finish_preserves_main_and_active_index_lock) ... ok\ntest_finish_preserves_modified_untracked_and_ignored_files (test_task.TaskLifecycleTests.test_finish_preserves_modified_untracked_and_ignored_files) ... ok\ntest_finish_preserves_remote_unmerged_tip (test_task.TaskLifecycleTests.test_finish_preserves_remote_unmerged_tip) ... ok\ntest_finish_recycles_clean_submodule_without_shared_config_changes (test_task.TaskLifecycleTests.test_finish_recycles_clean_submodule_without_shared_config_changes) ... ok\ntest_finish_rejects_subdirectory_without_deleting_it (test_task.TaskLifecycleTests.test_finish_rejects_subdirectory_without_deleting_it) ... ok\ntest_finish_remote_deletion_lease_preserves_concurrent_update (test_task.TaskLifecycleTests.test_finish_remote_deletion_lease_preserves_concurrent_update) ... ok\ntest_finish_requires_writer_exit_confirmation (test_task.TaskLifecycleTests.test_finish_requires_writer_exit_confirmation) ... ok\ntest_long_merge_history_keeps_merged_card_visible_and_closable (test_task.TaskLifecycleTests.test_long_merge_history_keeps_merged_card_visible_and_closable) ... ok\ntest_post_merge_is_silent_outside_main_checkout (test_task.TaskLifecycleTests.test_post_merge_is_silent_outside_main_checkout) ... ok\ntest_post_merge_main_merge_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_merge_only_reminds_owner) ... ok\ntest_post_merge_main_pull_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_pull_only_reminds_owner) ... ok\ntest_precheck_feature_behind_requires_sync (test_task.TaskLifecycleTests.test_precheck_feature_behind_requires_sync) ... ok\ntest_precheck_rejects_unreachable_authority (test_task.TaskLifecycleTests.test_precheck_rejects_unreachable_authority) ... ok\ntest_precheck_routes_existing_project_delivery_policy (test_task.TaskLifecycleTests.test_precheck_routes_existing_project_delivery_policy) ... ok\ntest_start_imports_precheck_and_creates_four_part_commit (test_task.TaskLifecycleTests.test_start_imports_precheck_and_creates_four_part_commit) ... ok\ntest_start_offline_does_not_create_worktree (test_task.TaskLifecycleTests.test_start_offline_does_not_create_worktree) ... ok\ntest_start_preserves_merged_local_and_remote_branch_names (test_task.TaskLifecycleTests.test_start_preserves_merged_local_and_remote_branch_names) ... ok\ntest_start_rejects_receipt_when_authoritative_base_changed (test_task.TaskLifecycleTests.test_start_rejects_receipt_when_authoritative_base_changed) ... ok\ntest_start_requires_precheck_receipt_before_creating_worktree (test_task.TaskLifecycleTests.test_start_requires_precheck_receipt_before_creating_worktree) ... ok\ntest_start_stacked_branch_records_parent_and_main_baseline (test_task.TaskLifecycleTests.test_start_stacked_branch_records_parent_and_main_baseline) ... ok\ntest_sync_commit_failure_never_reports_synced (test_task.TaskLifecycleTests.test_sync_commit_failure_never_reports_synced) ... ok\ntest_sync_conflict_is_not_reported_as_synced (test_task.TaskLifecycleTests.test_sync_conflict_is_not_reported_as_synced) ... ok\ntest_sync_does_not_execute_json_receipt_command (test_task.TaskLifecycleTests.test_sync_does_not_execute_json_receipt_command) ... ok\ntest_sync_keeps_json_evidence_fresh_after_metadata_only_changes (test_task.TaskLifecycleTests.test_sync_keeps_json_evidence_fresh_after_metadata_only_changes) ... ok\ntest_sync_keeps_unchanged_component_branch (test_task.TaskLifecycleTests.test_sync_keeps_unchanged_component_branch) ... ok\ntest_sync_materializes_nested_detached_components (test_task.TaskLifecycleTests.test_sync_materializes_nested_detached_components) ... ok\ntest_sync_materializes_updated_component (test_task.TaskLifecycleTests.test_sync_materializes_updated_component) ... ok\ntest_sync_new_base_reports_actual_final_head (test_task.TaskLifecycleTests.test_sync_new_base_reports_actual_final_head) ... ok\ntest_sync_preserves_component_feature_branch (test_task.TaskLifecycleTests.test_sync_preserves_component_feature_branch) ... ok\ntest_sync_preserves_dirty_child (test_task.TaskLifecycleTests.test_sync_preserves_dirty_child) ... ok\ntest_sync_preserves_dirty_parent_and_staged_changes (test_task.TaskLifecycleTests.test_sync_preserves_dirty_parent_and_staged_changes) ... ok\ntest_sync_preserves_nested_feature_branch_when_parent_pin_changes (test_task.TaskLifecycleTests.test_sync_preserves_nested_feature_branch_when_parent_pin_changes) ... ok\ntest_sync_reads_legacy_commands_with_escaped_pipes (test_task.TaskLifecycleTests.test_sync_reads_legacy_commands_with_escaped_pipes) ... ok\ntest_sync_rejects_unreachable_target_without_changing_head (test_task.TaskLifecycleTests.test_sync_rejects_unreachable_target_without_changing_head) ... ok\ntest_sync_same_base_preserves_head_and_card (test_task.TaskLifecycleTests.test_sync_same_base_preserves_head_and_card) ... ok\ntest_sync_still_warns_for_stale_legacy_table_evidence (test_task.TaskLifecycleTests.test_sync_still_warns_for_stale_legacy_table_evidence) ... ok\ntest_sync_warns_for_malformed_json_evidence (test_task.TaskLifecycleTests.test_sync_warns_for_malformed_json_evidence) ... ok\ntest_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum (test_task.TaskLifecycleTests.test_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum) ... ok\ntest_sync_warns_for_unresolved_json_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_json_evidence_head) ... ok\ntest_sync_warns_for_unresolved_legacy_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_legacy_evidence_head) ... ok\ntest_sync_warns_when_json_after_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_after_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_before_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_before_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_evidence_predates_noncard_changes (test_task.TaskLifecycleTests.test_sync_warns_when_json_evidence_predates_noncard_changes) ... ok\ntest_verify_rejects_recursive_drift_even_when_root_has_local_edits (test_task.TaskLifecycleTests.test_verify_rejects_recursive_drift_even_when_root_has_local_edits) ... ok\ntest_verify_rejects_uninitialized_component (test_task.TaskLifecycleTests.test_verify_rejects_uninitialized_component) ... ok\ntest_local_precheck_allows_known_lag_without_changing_head (test_task_recovery.TaskRecoveryTests.test_local_precheck_allows_known_lag_without_changing_head) ... ok\ntest_local_precheck_never_advertises_delivery_even_when_current (test_task_recovery.TaskRecoveryTests.test_local_precheck_never_advertises_delivery_even_when_current) ... ok\ntest_local_precheck_rejects_dirty_state_and_unknown_remote (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_dirty_state_and_unknown_remote) ... ok\ntest_local_precheck_rejects_foreign_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_foreign_registration) ... ok\ntest_local_precheck_rejects_invalid_baseline (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_invalid_baseline) ... ok\ntest_local_precheck_rejects_main_and_missing_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_main_and_missing_registration) ... ok\ntest_local_precheck_rejects_wrong_branch_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_wrong_branch_registration) ... ok\ntest_local_receipt_cannot_start_a_task_or_resume_for_delivery (test_task_recovery.TaskRecoveryTests.test_local_receipt_cannot_start_a_task_or_resume_for_delivery) ... ok\ntest_local_resume_imports_original_receipt_without_sync (test_task_recovery.TaskRecoveryTests.test_local_resume_imports_original_receipt_without_sync) ... ok\ntest_local_resume_rejects_divergent_target_before_import (test_task_recovery.TaskRecoveryTests.test_local_resume_rejects_divergent_target_before_import) ... ok\ntest_local_resume_rejects_target_rewind_before_import (test_task_recovery.TaskRecoveryTests.test_local_resume_rejects_target_rewind_before_import) ... ok\ntest_make_resume_exports_the_selected_mode_and_receipt (test_task_recovery.TaskRecoveryTests.test_make_resume_exports_the_selected_mode_and_receipt) ... ok\ntest_resume_rejects_another_worktree_with_same_head (test_task_recovery.TaskRecoveryTests.test_resume_rejects_another_worktree_with_same_head) ... ok\ntest_resume_rejects_changed_source_head (test_task_recovery.TaskRecoveryTests.test_resume_rejects_changed_source_head) ... ok\ntest_strict_resume_imports_current_ready_receipt (test_task_recovery.TaskRecoveryTests.test_strict_resume_imports_current_ready_receipt) ... ok\ntest_strict_resume_rejects_target_advance (test_task_recovery.TaskRecoveryTests.test_strict_resume_rejects_target_advance) ... ok\ntest_unknown_validation_purpose_is_rejected (test_task_recovery.TaskRecoveryTests.test_unknown_validation_purpose_is_rejected) ... ok\ntest_unknown_work_mode_is_rejected (test_task_recovery.TaskRecoveryTests.test_unknown_work_mode_is_rejected) ... ok\ntest_local_recovery_refuses_missing_fixed_rules_before_readiness (test_task_recovery.WorkspaceRecoveryTests.test_local_recovery_refuses_missing_fixed_rules_before_readiness) ... ok\ntest_local_recovery_verifies_fixed_rules_without_sync_or_application_materialization (test_task_recovery.WorkspaceRecoveryTests.test_local_recovery_verifies_fixed_rules_without_sync_or_application_materialization) ... ok\ntest_local_resume_preserves_registered_edit_branch_and_unsaved_component (test_task_recovery.WorkspaceRecoveryTests.test_local_resume_preserves_registered_edit_branch_and_unsaved_component) ... ok\ntest_resume_rechecks_fixed_rules_before_importing_receipt (test_task_recovery.WorkspaceRecoveryTests.test_resume_rechecks_fixed_rules_before_importing_receipt) ... ok\ntest_credentials_in_transport_url_are_rejected (test_transport.TransportTests.test_credentials_in_transport_url_are_rejected) ... ok\ntest_inherited_http_source_must_match_injected_server_owner_and_repository (test_transport.TransportTests.test_inherited_http_source_must_match_injected_server_owner_and_repository) ... ok\ntest_injected_http_server_maps_to_verified_local_mirror_without_authentication (test_transport.TransportTests.test_injected_http_server_maps_to_verified_local_mirror_without_authentication) ... ok\ntest_ordinary_config_cannot_enable_http_transport (test_transport.TransportTests.test_ordinary_config_cannot_enable_http_transport) ... 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\ntest_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_explicit_fixed_refresh_preserves_old_commit_refs_and_reflog (test_workspace.WorkspaceTests.test_explicit_fixed_refresh_preserves_old_commit_refs_and_reflog) ... ok\ntest_explicit_fixed_refresh_refuses_dirty_ignored_edited_and_locked_sources (test_workspace.WorkspaceTests.test_explicit_fixed_refresh_refuses_dirty_ignored_edited_and_locked_sources) ... ok\ntest_explicit_fixed_refresh_refuses_index_flags_hiding_owner_changes (test_workspace.WorkspaceTests.test_explicit_fixed_refresh_refuses_index_flags_hiding_owner_changes) ... ok\ntest_explicit_fixed_refresh_refuses_shared_or_unregistered_ownership (test_workspace.WorkspaceTests.test_explicit_fixed_refresh_refuses_shared_or_unregistered_ownership) ... ok\ntest_failed_explicit_fixed_refresh_keeps_old_binding_and_can_retry (test_workspace.WorkspaceTests.test_failed_explicit_fixed_refresh_keeps_old_binding_and_can_retry) ... 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_partial_nested_transition_keeps_originals_and_owner_recovery_state (test_workspace.WorkspaceTests.test_partial_nested_transition_keeps_originals_and_owner_recovery_state) ... workspace: injected partial nested copy failure\nok\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_repeated_transition_keeps_alias_tag_versions_and_snapshot_history (test_workspace.WorkspaceTests.test_repeated_transition_keeps_alias_tag_versions_and_snapshot_history) ... ok\ntest_repeated_transition_preserves_dirty_index_ignored_and_external_git_metadata (test_workspace.WorkspaceTests.test_repeated_transition_preserves_dirty_index_ignored_and_external_git_metadata) ... ok\ntest_repeated_transition_rejects_a_new_source_head_without_switching_destination (test_workspace.WorkspaceTests.test_repeated_transition_rejects_a_new_source_head_without_switching_destination) ... 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\ntest_architecture_gate_preserves_edges_under_workspace_paths_and_new_module_identity (test_workspace_cutover.WorkspaceCutoverTests.test_architecture_gate_preserves_edges_under_workspace_paths_and_new_module_identity) ... ok\ntest_boundary_gate_uses_isolated_map_and_rejects_new_backend_internal_import (test_workspace_cutover.WorkspaceCutoverTests.test_boundary_gate_uses_isolated_map_and_rejects_new_backend_internal_import) ... ok\ntest_finish_preserves_absorbed_metadata_after_legacy_checkout_disappears (test_workspace_cutover.WorkspaceCutoverTests.test_finish_preserves_absorbed_metadata_after_legacy_checkout_disappears) ... ok\ntest_finish_preserves_external_worktree_of_retired_legacy_checkout (test_workspace_cutover.WorkspaceCutoverTests.test_finish_preserves_external_worktree_of_retired_legacy_checkout) ... ok\ntest_finish_preserves_nonbranch_legacy_refs_without_remote_backup (test_workspace_cutover.WorkspaceCutoverTests.test_finish_preserves_nonbranch_legacy_refs_without_remote_backup) ... ok\ntest_make_workspace_commands_prepare_edit_unlink_and_report (test_workspace_cutover.WorkspaceCutoverTests.test_make_workspace_commands_prepare_edit_unlink_and_report) ... ok\ntest_old_task_sync_adopts_new_sources_and_reports_explicit_transition (test_workspace_cutover.WorkspaceCutoverTests.test_old_task_sync_adopts_new_sources_and_reports_explicit_transition) ... ok\ntest_old_task_sync_preserves_unique_legacy_commit_staging_dirty_and_ignored_files (test_workspace_cutover.WorkspaceCutoverTests.test_old_task_sync_preserves_unique_legacy_commit_staging_dirty_and_ignored_files) ... ok\ntest_old_task_text_conflict_keeps_legacy_source_and_reports_no_success (test_workspace_cutover.WorkspaceCutoverTests.test_old_task_text_conflict_keeps_legacy_source_and_reports_no_success) ... ok\ntest_precheck_never_claims_ready_for_unavailable_fixed_rules (test_workspace_cutover.WorkspaceCutoverTests.test_precheck_never_claims_ready_for_unavailable_fixed_rules) ... ok\ntest_precheck_prepares_fixed_rules_outside_project_before_ready (test_workspace_cutover.WorkspaceCutoverTests.test_precheck_prepares_fixed_rules_outside_project_before_ready) ... ok\ntest_precheck_rejects_borrowed_rules_cache_symlink (test_workspace_cutover.WorkspaceCutoverTests.test_precheck_rejects_borrowed_rules_cache_symlink) ... ok\ntest_start_prepares_fixed_sources_without_recursive_submodule_init (test_workspace_cutover.WorkspaceCutoverTests.test_start_prepares_fixed_sources_without_recursive_submodule_init) ... ok\ntest_sync_preserves_edit_branch_and_refuses_changed_declared_source (test_workspace_cutover.WorkspaceCutoverTests.test_sync_preserves_edit_branch_and_refuses_changed_declared_source) ... ok\ntest_verify_detects_active_git_operation_in_nested_retired_root (test_workspace_cutover.WorkspaceCutoverTests.test_verify_detects_active_git_operation_in_nested_retired_root) ... ok\ntest_verify_detects_nested_git_operation_inside_new_workspace (test_workspace_cutover.WorkspaceCutoverTests.test_verify_detects_nested_git_operation_inside_new_workspace) ... ok\ntest_deleting_main_symlink_to_outside_is_denied (test_write_guard.WriteGuardTests.test_deleting_main_symlink_to_outside_is_denied) ... ok\ntest_detached_and_bad_branches_are_denied (test_write_guard.WriteGuardTests.test_detached_and_bad_branches_are_denied) ... ok\ntest_every_patch_file_and_move_destination_is_checked (test_write_guard.WriteGuardTests.test_every_patch_file_and_move_destination_is_checked) ... ok\ntest_feature_missing_parent_is_allowed (test_write_guard.WriteGuardTests.test_feature_missing_parent_is_allowed) ... ok\ntest_invalid_json_is_denied (test_write_guard.WriteGuardTests.test_invalid_json_is_denied) ... ok\ntest_missing_parent_on_main_is_denied (test_write_guard.WriteGuardTests.test_missing_parent_on_main_is_denied) ... ok\ntest_missing_unknown_and_malformed_write_input_are_denied (test_write_guard.WriteGuardTests.test_missing_unknown_and_malformed_write_input_are_denied) ... ok\ntest_non_git_destination_is_explicitly_outside_scope (test_write_guard.WriteGuardTests.test_non_git_destination_is_explicitly_outside_scope) ... ok\ntest_nonwrite_tools_are_outside_scope (test_write_guard.WriteGuardTests.test_nonwrite_tools_are_outside_scope) ... ok\ntest_relative_path_uses_hook_cwd_not_process_cwd (test_write_guard.WriteGuardTests.test_relative_path_uses_hook_cwd_not_process_cwd) ... ok\ntest_symlink_into_main_with_missing_parents_is_denied (test_write_guard.WriteGuardTests.test_symlink_into_main_with_missing_parents_is_denied) ... ok\ntest_valid_multi_file_patch_on_feature_is_allowed (test_write_guard.WriteGuardTests.test_valid_multi_file_patch_on_feature_is_allowed) ... ok\n\n======================================================================\nFAIL: test_auth_preflight_aligns_with_effective_env_dsn (test_svc.SvcDbRecoveryTests.test_auth_preflight_aligns_with_effective_env_dsn)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc.py\", line 474, in test_auth_preflight_aligns_with_effective_env_dsn\n self.assertIn(\"拒绝启动\", result.stdout)\n ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: '拒绝启动' not found in '\\x1b[1;33m[svc]\\x1b[0m [nl3] 跳过 manifest 迁移:需 python3 与 scripts/svc_manifest.py\\n\\x1b[1;31m[svc]\\x1b[0m [nl3] 端口被占用(非本服务):LISTEN 0 5 127.0.0.1:18803 0.0.0.0:* users:((\"python3\",pid=2487150,fd=3)) \\n\\x1b[1;31m[svc]\\x1b[0m 处理:停掉该进程,或换端口(--port / --addr)\\n'\n\n======================================================================\nFAIL: test_caller_identity_env_does_not_reach_serve (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_caller_identity_env_does_not_reach_serve)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc_lifecycle_isolation.py\", line 25, in test_caller_identity_env_does_not_reach_serve\n self.svc(\"iso\", \"start\", env=env)\n ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc_recover.py\", line 248, in svc\n self.assertEqual(proc.returncode, 0, proc.stdout)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 1 != 0 : \u001b[1;32m[svc]\u001b[0m [iso] manifest:已迁移 rev=1 instance_id=svc-iso-7ecae8f6eb14 data=/tmp/svc-autorecover-w1qcsyvk/runtime/iso/data\n\u001b[1;31m[svc]\u001b[0m [iso] 端口被占用(非本服务):LISTEN 0 5 127.0.0.1:9461 0.0.0.0:* users:((\"python3\",pid=2550772,fd=3)) \n\u001b[1;31m[svc]\u001b[0m 处理:停掉该进程,或换端口(--port / --addr)\n\n\n======================================================================\nFAIL: test_start_reclaims_own_orphan_without_pidfile (test_svc_recover.SvcAutoRecoverTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc_recover.py\", line 484, in test_start_reclaims_own_orphan_without_pidfile\n self.start_ok(\"dev\")\n ~~~~~~~~~~~~~^^^^^^^\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc_recover.py\", line 279, in start_ok\n result = self.svc(name, \"start\")\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc_recover.py\", line 248, in svc\n self.assertEqual(proc.returncode, 0, proc.stdout)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 1 != 0 : \u001b[1;33m[svc]\u001b[0m [dev] 跳过 manifest 迁移:需 python3 与 scripts/svc_manifest.py\n\u001b[1;31m[svc]\u001b[0m [dev] 端口被占用(非本服务):LISTEN 0 5 127.0.0.1:18812 0.0.0.0:* users:((\"python3\",pid=2577636,fd=3)) \n\u001b[1;31m[svc]\u001b[0m 处理:停掉该进程,或换端口(--port / --addr)\n\n\n----------------------------------------------------------------------\nRan 476 tests in 300.750s\n\nFAILED (failures=3, skipped=19)\nmake[2]: *** [Makefile:254: test-governance] Error 1\ncomposition: command failed (2): make test_candidate_cannot_read_checkout_credentials (test_ci_credentials.CheckoutTests.test_candidate_cannot_read_checkout_credentials) ... ok\ntest_candidate_submodule_update_commands_are_rejected (test_ci_credentials.CheckoutTests.test_candidate_submodule_update_commands_are_rejected) ... ok\ntest_credential_destination_confined_to_injected_server (test_ci_credentials.CheckoutTests.test_credential_destination_confined_to_injected_server) ... ok\ntest_external_or_unlisted_urls_are_rejected_before_component_fetch (test_ci_credentials.CheckoutTests.test_external_or_unlisted_urls_are_rejected_before_component_fetch) ... ok\ntest_inherited_template_hook_does_not_execute_with_credentials (test_ci_credentials.CheckoutTests.test_inherited_template_hook_does_not_execute_with_credentials) ... ok\ntest_nested_external_url_is_rejected_before_authenticated_fetch (test_ci_credentials.CheckoutTests.test_nested_external_url_is_rejected_before_authenticated_fetch) ... ok\ntest_rdm_pin_fetch_is_three_shas_on_the_allowlist (test_ci_credentials.CheckoutTests.test_rdm_pin_fetch_is_three_shas_on_the_allowlist) ... ok\ntest_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials (test_ci_credentials.CheckoutTests.test_recursive_gitlinks_materialize_exact_sha_without_persisting_credentials) ... ok\ntest_redirects_do_not_forward_credential_or_fetch_unlisted_target (test_ci_credentials.CheckoutTests.test_redirects_do_not_forward_credential_or_fetch_unlisted_target) ... ok\ntest_backend_check_prepares_fixed_source_and_replays_owner_edits (test_component_checks.ComponentCheckTests.test_backend_check_prepares_fixed_source_and_replays_owner_edits) ... ok\ntest_explicit_overlay_uses_registered_workspace_and_preserves_default_version_mode (test_component_checks.ComponentCheckTests.test_explicit_overlay_uses_registered_workspace_and_preserves_default_version_mode) ... ok\ntest_fixed_go_checks_keep_source_clean_across_pg_and_multi_instance (test_component_checks.ComponentCheckTests.test_fixed_go_checks_keep_source_clean_across_pg_and_multi_instance) ... ok\ntest_fixed_go_checks_refuse_and_preserve_owner_changes_and_ignored_files (test_component_checks.ComponentCheckTests.test_fixed_go_checks_refuse_and_preserve_owner_changes_and_ignored_files) ... ok\ntest_fixed_go_failure_is_reported_without_polluting_source (test_component_checks.ComponentCheckTests.test_fixed_go_failure_is_reported_without_polluting_source) ... ok\ntest_make_pin_gate_uses_map_in_gitless_formal_root_and_ignores_external_rdm_identity (test_component_checks.ComponentCheckTests.test_make_pin_gate_uses_map_in_gitless_formal_root_and_ignores_external_rdm_identity) ... ok\ntest_multi_instance_binary_is_built_inside_dev_root_and_reached_by_suite (test_component_checks.ComponentCheckTests.test_multi_instance_binary_is_built_inside_dev_root_and_reached_by_suite) ... ok\ntest_new_pin_gate_validates_fixed_sources_and_rejects_local_replaces (test_component_checks.ComponentCheckTests.test_new_pin_gate_validates_fixed_sources_and_rejects_local_replaces) ... ok\ntest_pg_and_multi_instance_prerequisites_still_refuse_before_preparing_sources (test_component_checks.ComponentCheckTests.test_pg_and_multi_instance_prerequisites_still_refuse_before_preparing_sources) ... ok\ntest_pg_gate_requires_environment_and_forwards_it_to_real_go_tests (test_component_checks.ComponentCheckTests.test_pg_gate_requires_environment_and_forwards_it_to_real_go_tests) ... ok\ntest_registered_private_transport_reaches_real_go_process_without_global_change (test_component_checks.ComponentCheckTests.test_registered_private_transport_reaches_real_go_process_without_global_change) ... ok\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_new_layout_cannot_use_receipt_without_component_identity (test_component_governance.ComponentGovernanceTests.test_new_layout_cannot_use_receipt_without_component_identity) ... ok\ntest_receipts_reject_component_path_escape (test_component_governance.ComponentGovernanceTests.test_receipts_reject_component_path_escape) ... ok\ntest_startup_receipt_rejects_changed_ignored_component_objects (test_component_governance.ComponentGovernanceTests.test_startup_receipt_rejects_changed_ignored_component_objects) ... ok\ntest_all_product_acquisition_precedes_candidate_execution (test_composition.CompositionTests.test_all_product_acquisition_precedes_candidate_execution) ... ok\ntest_developer_package_tarball_overrides_do_not_reach_formal_tests (test_composition.CompositionTests.test_developer_package_tarball_overrides_do_not_reach_formal_tests) ... ok\ntest_dirty_root_composer_cannot_publish_under_committed_identity (test_composition.CompositionTests.test_dirty_root_composer_cannot_publish_under_committed_identity) ... ok\ntest_dirty_root_lock_is_rejected (test_composition.CompositionTests.test_dirty_root_lock_is_rejected) ... ok\ntest_dirty_root_transport_is_refused_before_import (test_composition.CompositionTests.test_dirty_root_transport_is_refused_before_import) ... ok\ntest_fixed_commits_embed_assets_without_touching_developer_checkout (test_composition.CompositionTests.test_fixed_commits_embed_assets_without_touching_developer_checkout) ... ok\ntest_fixed_root_governance_and_boundaries_receive_proven_source_map (test_composition.CompositionTests.test_fixed_root_governance_and_boundaries_receive_proven_source_map) ... ok\ntest_frontend_dist_symlink_cannot_import_assets_from_outside_source (test_composition.CompositionTests.test_frontend_dist_symlink_cannot_import_assets_from_outside_source) ... ok\ntest_historical_rdm_product_still_builds_from_legacy_pins (test_composition.CompositionTests.test_historical_rdm_product_still_builds_from_legacy_pins) ... ok\ntest_local_go_replace_is_rejected (test_composition.CompositionTests.test_local_go_replace_is_rejected) ... ok\ntest_locked_missing_revision_is_rejected (test_composition.CompositionTests.test_locked_missing_revision_is_rejected) ... ok\ntest_missing_frontend_assets_fails_before_publishing_binary (test_composition.CompositionTests.test_missing_frontend_assets_fails_before_publishing_binary) ... ok\ntest_modified_go_module_cache_is_rejected_before_product_publication (test_composition.CompositionTests.test_modified_go_module_cache_is_rejected_before_product_publication) ... ok\ntest_npm_local_dependency_overlay_is_rejected (test_composition.CompositionTests.test_npm_local_dependency_overlay_is_rejected) ... ok\ntest_project_test_mode_refuses_missing_boundary_gate (test_composition.CompositionTests.test_project_test_mode_refuses_missing_boundary_gate) ... ok\ntest_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock (test_composition.CompositionTests.test_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock) ... ok\ntest_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache (test_composition.CompositionTests.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache) ... ok\ntest_source_path_escape_is_rejected (test_composition.CompositionTests.test_source_path_escape_is_rejected) ... ok\ntest_test_target_checks_fixed_go_library_and_ui_sources (test_composition.CompositionTests.test_test_target_checks_fixed_go_library_and_ui_sources) ... ok\ntest_test_target_runs_real_frontend_and_go_tests (test_composition.CompositionTests.test_test_target_runs_real_frontend_and_go_tests) ... ok\ntest_unused_transitive_zip_does_not_require_consumer_sum_rewrite (test_composition.CompositionTests.test_unused_transitive_zip_does_not_require_consumer_sum_rewrite) ... ok\ntest_version_and_plugin_assets_come_from_committed_root (test_composition.CompositionTests.test_version_and_plugin_assets_come_from_committed_root) ... ok\ntest_versioned_rdm_product_entry_uses_fixed_composer (test_composition.CompositionTests.test_versioned_rdm_product_entry_uses_fixed_composer) ... skipped 'external RDM source was not supplied; host must replay the actual wrapper'\ntest_locked_metadata_is_acquired_before_offline_consumer_without_credentials (test_composition.NpmAcquisitionTests.test_locked_metadata_is_acquired_before_offline_consumer_without_credentials) ... ok\ntest_unreviewed_tarball_source_is_refused_before_acquisition (test_composition.NpmAcquisitionTests.test_unreviewed_tarball_source_is_refused_before_acquisition) ... ok\ntest_all_required_component_snapshots_have_fixed_provenance (test_dependency_ci.ComponentWorkflowFixtureTests.test_all_required_component_snapshots_have_fixed_provenance) ... ok\ntest_missing_component_snapshot_is_not_skipped (test_dependency_ci.ComponentWorkflowFixtureTests.test_missing_component_snapshot_is_not_skipped) ... ok\ntest_modified_workflow_snapshot_is_rejected_before_execution (test_dependency_ci.ComponentWorkflowFixtureTests.test_modified_workflow_snapshot_is_rejected_before_execution) ... ok\ntest_omitted_repository_provenance_is_rejected (test_dependency_ci.ComponentWorkflowFixtureTests.test_omitted_repository_provenance_is_rejected) ... ok\ntest_optional_source_validation_uses_immutable_commit_and_rejects_stale_head (test_dependency_ci.ComponentWorkflowFixtureTests.test_optional_source_validation_uses_immutable_commit_and_rejects_stale_head) ... ok\ntest_boundary_gate_refuses_missing_ripgrep_before_resolving_sources (test_dependency_ci.DependencyCITests.test_boundary_gate_refuses_missing_ripgrep_before_resolving_sources) ... ok\ntest_component_checkout_removes_tokens_before_candidate_executes (test_dependency_ci.DependencyCITests.test_component_checkout_removes_tokens_before_candidate_executes) ... ok\ntest_component_ci_executes_nested_go_module_tests (test_dependency_ci.DependencyCITests.test_component_ci_executes_nested_go_module_tests) ... ok\ntest_external_npm_git_source_rejected_before_authenticated_request (test_dependency_ci.DependencyCITests.test_external_npm_git_source_rejected_before_authenticated_request) ... ok\ntest_go_prefetch_covers_logging_trace_module (test_dependency_ci.DependencyCITests.test_go_prefetch_covers_logging_trace_module) ... ok\ntest_go_prefetch_rejects_mutation_of_committed_checksums (test_dependency_ci.DependencyCITests.test_go_prefetch_rejects_mutation_of_committed_checksums) ... ok\ntest_go_prefetch_uses_only_registered_private_repo_and_local_toolchain (test_dependency_ci.DependencyCITests.test_go_prefetch_uses_only_registered_private_repo_and_local_toolchain) ... ok\ntest_go_requirement_for_new_toolchain_fails_without_downloading_one (test_dependency_ci.DependencyCITests.test_go_requirement_for_new_toolchain_fails_without_downloading_one) ... ok\ntest_npm_git_package_installs_committed_output_without_prepare (test_dependency_ci.DependencyCITests.test_npm_git_package_installs_committed_output_without_prepare) ... ok\ntest_npm_metadata_version_cannot_be_a_destination (test_dependency_ci.DependencyCITests.test_npm_metadata_version_cannot_be_a_destination) ... ok\ntest_npm_nonregistry_tarball_rejected_before_request (test_dependency_ci.DependencyCITests.test_npm_nonregistry_tarball_rejected_before_request) ... ok\ntest_npm_prefetch_populates_cold_offline_resolver_metadata_without_credentials (test_dependency_ci.DependencyCITests.test_npm_prefetch_populates_cold_offline_resolver_metadata_without_credentials) ... ok\ntest_npm_provider_prepare_is_rejected_without_execution (test_dependency_ci.DependencyCITests.test_npm_provider_prepare_is_rejected_without_execution) ... ok\ntest_privileged_acquisition_finishes_before_candidate_execution_in_each_job (test_dependency_ci.DependencyCITests.test_privileged_acquisition_finishes_before_candidate_execution_in_each_job) ... ok\ntest_rdm_composition_lock_fetches_fixed_dev_without_executing_code (test_dependency_ci.DependencyCITests.test_rdm_composition_lock_fetches_fixed_dev_without_executing_code) ... ok\ntest_rdm_composition_lock_rejects_external_missing_and_malformed_commits (test_dependency_ci.DependencyCITests.test_rdm_composition_lock_rejects_external_missing_and_malformed_commits) ... ok\ntest_registered_application_lock_materializes_fixed_source (test_dependency_ci.DependencyCITests.test_registered_application_lock_materializes_fixed_source) ... ok\ntest_unregistered_go_module_rejected_before_authenticated_request (test_dependency_ci.DependencyCITests.test_unregistered_go_module_rejected_before_authenticated_request) ... ok\ntest_unregistered_source_lock_is_rejected_before_component_fetch (test_dependency_ci.DependencyCITests.test_unregistered_source_lock_is_rejected_before_component_fetch) ... ok\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_fixed_candidate_capture_preserves_checkout (test_evidence.EvidenceTests.test_fixed_candidate_capture_preserves_checkout) ... 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\ntest_validation_purpose_is_not_injected_into_measured_command (test_evidence.EvidenceTests.test_validation_purpose_is_not_injected_into_measured_command) ... ok\ntest_pin_is_three_fixed_shas (test_lifecycle_pin.RdmPinTests.test_pin_is_three_fixed_shas) ... ok\ntest_rejects_url_and_short_sha (test_lifecycle_pin.RdmPinTests.test_rejects_url_and_short_sha) ... ok\ntest_conflicted_task_does_not_block_an_independent_healthy_task (test_merge_queue_trial.QueueTrialTests.test_conflicted_task_does_not_block_an_independent_healthy_task) ... ok\ntest_external_target_advance_requires_a_new_candidate (test_merge_queue_trial.QueueTrialTests.test_external_target_advance_requires_a_new_candidate) ... ok\ntest_sequential_delivery_does_not_sync_waiting_branches (test_merge_queue_trial.QueueTrialTests.test_sequential_delivery_does_not_sync_waiting_branches) ... ok\ntest_addr_change_keeps_database_and_auth (test_svc.SvcDbRecoveryTests.test_addr_change_keeps_database_and_auth) ... ok\ntest_auth_preflight_aligns_with_effective_env_dsn (test_svc.SvcDbRecoveryTests.test_auth_preflight_aligns_with_effective_env_dsn) ... FAIL\ntest_batch_update_stops_second_service_despite_prior_pidcheck (test_svc.SvcDbRecoveryTests.test_batch_update_stops_second_service_despite_prior_pidcheck)\n批量 update 不得用上一服务的 SVC_PIDCHECK 误判下一服务进程。 ... ok\ntest_dbref_binding_survives_bare_restart_and_redeploy (test_svc.SvcDbRecoveryTests.test_dbref_binding_survives_bare_restart_and_redeploy) ... ok\ntest_explicit_unbind_blocks_residual_env_dsn (test_svc.SvcDbRecoveryTests.test_explicit_unbind_blocks_residual_env_dsn) ... ok\ntest_external_dsn_and_conffile_recover_on_bare_start (test_svc.SvcDbRecoveryTests.test_external_dsn_and_conffile_recover_on_bare_start) ... ok\ntest_legacy_exec_dsn_survives_consecutive_restarts (test_svc.SvcDbRecoveryTests.test_legacy_exec_dsn_survives_consecutive_restarts) ... ok\ntest_mock_conflict_and_legacy_binary_refuse (test_svc.SvcDbRecoveryTests.test_mock_conflict_and_legacy_binary_refuse) ... ok\ntest_rdm_companion_missing_web_fails_deploy (test_svc.SvcDbRecoveryTests.test_rdm_companion_missing_web_fails_deploy) ... ok\ntest_rdm_source_commits_and_update_track (test_svc.SvcDbRecoveryTests.test_rdm_source_commits_and_update_track) ... To /tmp/svc-db-regress-_9hozas8/rdmremote.git\n 8dff2e3..6681a9a main -> main\nok\ntest_rdm_source_deploy_end_to_end (test_svc.SvcDbRecoveryTests.test_rdm_source_deploy_end_to_end) ... ok\ntest_refusals_keep_registration_without_sqlite_fallback (test_svc.SvcDbRecoveryTests.test_refusals_keep_registration_without_sqlite_fallback) ... ok\ntest_restart_refusal_happens_before_stopping_running_service (test_svc.SvcDbRecoveryTests.test_restart_refusal_happens_before_stopping_running_service) ... ok\ntest_seed_owner_override_skips_account_lookup (test_svc.SvcDbRecoveryTests.test_seed_owner_override_skips_account_lookup) ... ok\ntest_seed_puts_with_temporary_bearer_key_when_auth_on (test_svc.SvcDbRecoveryTests.test_seed_puts_with_temporary_bearer_key_when_auth_on) ... ok\ntest_seed_puts_without_credentials_when_auth_off (test_svc.SvcDbRecoveryTests.test_seed_puts_without_credentials_when_auth_off) ... ok\ntest_sequential_restarts_no_cross_dsn_and_no_secret_leak (test_svc.SvcDbRecoveryTests.test_sequential_restarts_no_cross_dsn_and_no_secret_leak) ... ok\ntest_source_switch_requires_flag (test_svc.SvcDbRecoveryTests.test_source_switch_requires_flag) ... ok\ntest_static_fresh_deploy_registers_pidcheck_and_starts (test_svc.SvcDbRecoveryTests.test_static_fresh_deploy_registers_pidcheck_and_starts)\n全新 static --dir:登记须含 pidcheck;首启探活不得把 http.server 判死。 ... ok\ntest_update_preserves_binding (test_svc.SvcDbRecoveryTests.test_update_preserves_binding) ... ok\ntest_backup_custom_out_not_pruned (test_svc_backup.SvcAgentBackupTests.test_backup_custom_out_not_pruned) ... ok\ntest_backup_event_recorded (test_svc_backup.SvcAgentBackupTests.test_backup_event_recorded) ... ok\ntest_backup_live_writer_consistent_and_outside_runtime (test_svc_backup.SvcAgentBackupTests.test_backup_live_writer_consistent_and_outside_runtime)\n活跃 WAL 写入者:快照可读、行在、integrity ok;-wal/-shm 不入快照。 ... ok\n/home/linuxbrew/.linuxbrew/Cellar/python@3.14/3.14.8/lib/python3.14/unittest/suite.py:107: ResourceWarning: unclosed file <_io.TextIOWrapper name=3 encoding='UTF-8'>\n for index, test in enumerate(self):\nResourceWarning: Enable tracemalloc to get the object allocation traceback\ntest_backup_manifest_sha_matches (test_svc_backup.SvcAgentBackupTests.test_backup_manifest_sha_matches) ... ok\ntest_backup_non_sqlite_db_kept_raw_without_leftovers (test_svc_backup.SvcAgentBackupTests.test_backup_non_sqlite_db_kept_raw_without_leftovers) ... ok\ntest_backup_rejects_postgres_with_db_hint (test_svc_backup.SvcAgentBackupTests.test_backup_rejects_postgres_with_db_hint) ... ok\ntest_backup_requires_registration (test_svc_backup.SvcAgentBackupTests.test_backup_requires_registration) ... ok\ntest_backup_target_exists_refused (test_svc_backup.SvcAgentBackupTests.test_backup_target_exists_refused) ... ok\ntest_backup_without_sqlite3_refuses (test_svc_backup.SvcAgentBackupTests.test_backup_without_sqlite3_refuses)\nPATH 无 sqlite3 → 拒绝(不回退裸拷贝)。重建与真实 PATH 等价的工具目录、 ... ok\ntest_retention_and_listing (test_svc_backup.SvcAgentBackupTests.test_retention_and_listing) ... ok\ntest_rm_purge_removes_snapshots (test_svc_backup.SvcAgentBackupTests.test_rm_purge_removes_snapshots) ... ok\ntest_cache_recycling_preserves_ignored_unique_files (test_svc_build_cutover.SvcBuildCutoverTests.test_cache_recycling_preserves_ignored_unique_files) ... ok\ntest_e2e_build_only_uses_versioned_sources_without_runtime_or_api_calls (test_svc_build_cutover.SvcBuildCutoverTests.test_e2e_build_only_uses_versioned_sources_without_runtime_or_api_calls) ... ok\ntest_mismatched_existing_cache_is_rejected_before_candidate_build (test_svc_build_cutover.SvcBuildCutoverTests.test_mismatched_existing_cache_is_rejected_before_candidate_build) ... ok\ntest_versioned_dev_materialization_uses_composer_without_submodules (test_svc_build_cutover.SvcBuildCutoverTests.test_versioned_dev_materialization_uses_composer_without_submodules) ... ok\ntest_versioned_rdm_adapter_passes_fixed_dev_root_to_product_wrapper (test_svc_build_cutover.SvcBuildCutoverTests.test_versioned_rdm_adapter_passes_fixed_dev_root_to_product_wrapper) ... ok\ntest_versioned_static_adapter_resolves_published_frontend_artifact (test_svc_build_cutover.SvcBuildCutoverTests.test_versioned_static_adapter_resolves_published_frontend_artifact) ... ok\ntest_forward_only_requires_confirm_and_backup (test_svc_deploy_txn.DeployTxnTests.test_forward_only_requires_confirm_and_backup) ... ok\ntest_schema_incompatible_refuses_before_stop (test_svc_deploy_txn.DeployTxnTests.test_schema_incompatible_refuses_before_stop) ... ok\ntest_replace_failure_keeps_original (test_svc_identity.AtomicWriteTests.test_replace_failure_keeps_original) ... ok\ntest_I3_start_ensures_sqlite_identity (test_svc_identity.IdentityTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_identity.IdentityTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_identity.IdentityTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_identity.IdentityTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_identity.IdentityTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_identity.IdentityTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_identity.IdentityTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_identity.IdentityTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_identity.IdentityTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_identity.IdentityTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_identity.IdentityTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_identity.IdentityTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_identity.IdentityTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_identity.IdentityTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_identity.IdentityTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_Z_real_pg_not_run (test_svc_identity.IdentityTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_identity.IdentityTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_identity.IdentityTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_identity.IdentityTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_identity.IdentityTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_identity.IdentityTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_identity.IdentityTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_identity.IdentityTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_identity.IdentityTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_identity.IdentityTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_identity.IdentityTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_identity.IdentityTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_identity.IdentityTests.test_watchdog_print_plan) ... ok\ntest_caller_identity_env_does_not_reach_serve (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_caller_identity_env_does_not_reach_serve) ... FAIL\ntest_recover_fails_when_port_stolen (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_two_bare_restarts_keep_identity (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_two_bare_restarts_keep_identity) ... ok\ntest_watchdog_print_plan (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_watchdog_print_plan) ... ok\ntest_addr_defaults_to_default_addr (test_svc_precheck.AgentListenRejectedPrecheck.test_addr_defaults_to_default_addr) ... ok\ntest_incident_combo_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_incident_combo_not_rejected) ... ok\ntest_insecure_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_insecure_not_rejected) ... ok\ntest_loopback_not_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_loopback_not_rejected) ... ok\ntest_nonloop_auth_off_with_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_auth_off_with_dsn_rejected) ... ok\ntest_nonloop_no_dsn_rejected (test_svc_precheck.AgentListenRejectedPrecheck.test_nonloop_no_dsn_rejected) ... ok\ntest_auth_off_beats_dsn (test_svc_precheck.DbAuthEnabledMatrix.test_auth_off_beats_dsn) ... ok\ntest_auth_on_explicit (test_svc_precheck.DbAuthEnabledMatrix.test_auth_on_explicit) ... ok\ntest_auto_with_effective_dsn_is_authed (test_svc_precheck.DbAuthEnabledMatrix.test_auto_with_effective_dsn_is_authed) ... ok\ntest_auto_without_dsn_is_denied (test_svc_precheck.DbAuthEnabledMatrix.test_auto_without_dsn_is_denied) ... ok\ntest_no_auth_no_dsn_denied (test_svc_precheck.DbAuthEnabledMatrix.test_no_auth_no_dsn_denied) ... ok\ntest_broken_dbref_refuses (test_svc_precheck.ResolveDbConfigFixtures.test_broken_dbref_refuses) ... ok\ntest_legacy_exec_dsn_migrates_to_recoverable_keys (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_migrates_to_recoverable_keys) ... ok\ntest_legacy_exec_dsn_without_instance_goes_to_dsn_key (test_svc_precheck.ResolveDbConfigFixtures.test_legacy_exec_dsn_without_instance_goes_to_dsn_key) ... ok\ntest_migration_is_idempotent (test_svc_precheck.ResolveDbConfigFixtures.test_migration_is_idempotent) ... ok\ntest_no_dsn_no_dbref_is_sqlite (test_svc_precheck.ResolveDbConfigFixtures.test_no_dsn_no_dbref_is_sqlite) ... ok\ntest_post_g17_exec_restores_dsn_from_dbref (test_svc_precheck.ResolveDbConfigFixtures.test_post_g17_exec_restores_dsn_from_dbref) ... ok\ntest_env_config_resets_identity_env (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_identity_env) ... ok\ntest_env_config_resets_pidcheck_runtime_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_pidcheck_runtime_state) ... ok\ntest_env_config_resets_resolver_state (test_svc_precheck.ResolverStateIsolation.test_env_config_resets_resolver_state) ... ok\ntest_help_topic_lists_rdm_admin (test_svc_rdm_admin.RdmAdminTests.test_help_topic_lists_rdm_admin) ... ok\ntest_recover_fails_when_port_stolen (test_svc_rdm_admin.RdmAdminTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_rdm_admin.RdmAdminTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_rdm_admin.RdmAdminTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_rdm_admin.RdmAdminTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_rdm_admin.RdmAdminTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_rdm_admin.RdmAdminTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_rdm_admin.RdmAdminTests.test_recover_skips_when_lock_held) ... ok\ntest_refuses_when_base_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_base_db_missing) ... ok\ntest_refuses_when_rdm_db_missing (test_svc_rdm_admin.RdmAdminTests.test_refuses_when_rdm_db_missing) ... ok\ntest_show_empty_ledger_hint (test_svc_rdm_admin.RdmAdminTests.test_show_empty_ledger_hint) ... ok\ntest_show_known_owner_no_warning (test_svc_rdm_admin.RdmAdminTests.test_show_known_owner_no_warning) ... ok\ntest_show_prints_ledger_and_flags_unknown_owner (test_svc_rdm_admin.RdmAdminTests.test_show_prints_ledger_and_flags_unknown_owner) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_rdm_admin.RdmAdminTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_rdm_admin.RdmAdminTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_rdm_admin.RdmAdminTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_status_lists_rdm_admin_row_and_warning (test_svc_rdm_admin.RdmAdminTests.test_status_lists_rdm_admin_row_and_warning) ... ok\ntest_status_silent_without_rdm_db (test_svc_rdm_admin.RdmAdminTests.test_status_silent_without_rdm_db) ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_rdm_admin.RdmAdminTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_transfer_idempotent_when_already_owner (test_svc_rdm_admin.RdmAdminTests.test_transfer_idempotent_when_already_owner) ... ok\ntest_transfer_rejects_empty_ledger (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_empty_ledger) ... ok\ntest_transfer_rejects_owner_missing_from_base_users (test_svc_rdm_admin.RdmAdminTests.test_transfer_rejects_owner_missing_from_base_users) ... ok\ntest_transfer_rewrites_single_row_with_provenance (test_svc_rdm_admin.RdmAdminTests.test_transfer_rewrites_single_row_with_provenance) ... ok\ntest_unknown_subcommand_usage_exit_2 (test_svc_rdm_admin.RdmAdminTests.test_unknown_subcommand_usage_exit_2) ... ok\ntest_watchdog_print_plan (test_svc_rdm_admin.RdmAdminTests.test_watchdog_print_plan) ... ok\ntest_U3_real_agent_identity_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_agent_identity_lifecycle_sqlite)\n真实组合二进制:领养 ensure → verify → 两次裸重启身份/锚点稳定; ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_pg_identity_env_delivery (test_svc_realcombo.RealComboTests.test_U3_real_pg_identity_env_delivery)\n真实 PostgreSQL:AGENT_SYSTEM_DSN 环境交付 ensure/verify(凭据不进 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_binary_lifecycle_sqlite (test_svc_realcombo.RealComboTests.test_U3_real_rdm_binary_lifecycle_sqlite)\n真实 RDM 组合二进制:identity 接线(Backend 公共 CLI)→ serve 门禁 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_U3_real_rdm_full_deploy_track (test_svc_realcombo.RealComboTests.test_U3_real_rdm_full_deploy_track)\n全轨:materialize(真实 make build)→ 候选身份门禁 → release 切换 → ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_realcombo.RealComboTests.test_recover_fails_when_port_stolen) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_ignores_never_started_service (test_svc_realcombo.RealComboTests.test_recover_ignores_never_started_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_noop_while_running (test_svc_realcombo.RealComboTests.test_recover_noop_while_running) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_reserved_name_rejected (test_svc_realcombo.RealComboTests.test_recover_reserved_name_rejected) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_respects_explicit_stop (test_svc_realcombo.RealComboTests.test_recover_respects_explicit_stop) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_restarts_sigkilled_service (test_svc_realcombo.RealComboTests.test_recover_restarts_sigkilled_service) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_skips_when_lock_held (test_svc_realcombo.RealComboTests.test_recover_skips_when_lock_held) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_realcombo.RealComboTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_records_autostart_and_stop_clears (test_svc_realcombo.RealComboTests.test_start_records_autostart_and_stop_clears) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_start_rejects_foreign_port_occupant (test_svc_realcombo.RealComboTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_stop_on_dead_process_clears_autostart (test_svc_realcombo.RealComboTests.test_stop_on_dead_process_clears_autostart) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_watchdog_print_plan (test_svc_realcombo.RealComboTests.test_watchdog_print_plan) ... skipped '真实组合专项 NOT_RUN:需 SVC_TEST_REAL=1(详见文件头运行条件)'\ntest_recover_fails_when_port_stolen (test_svc_recover.SvcAutoRecoverTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_recover.SvcAutoRecoverTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_recover.SvcAutoRecoverTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_recover.SvcAutoRecoverTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_recover.SvcAutoRecoverTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_recover.SvcAutoRecoverTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_recover.SvcAutoRecoverTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_recover.SvcAutoRecoverTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... FAIL\ntest_start_records_autostart_and_stop_clears (test_svc_recover.SvcAutoRecoverTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_recover.SvcAutoRecoverTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_recover.SvcAutoRecoverTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_recover.SvcAutoRecoverTests.test_watchdog_print_plan) ... ok\ntest_I3_start_ensures_sqlite_identity (test_svc_u2.U2ReleaseTests.test_I3_start_ensures_sqlite_identity) ... ok\ntest_I3_wrong_db_identity_blocks_start (test_svc_u2.U2ReleaseTests.test_I3_wrong_db_identity_blocks_start) ... ok\ntest_T1_bare_restart_stable_identity (test_svc_u2.U2ReleaseTests.test_T1_bare_restart_stable_identity) ... ok\ntest_T2_port_change_keeps_anchors (test_svc_u2.U2ReleaseTests.test_T2_port_change_keeps_anchors) ... ok\ntest_T3_data_drift_rejected (test_svc_u2.U2ReleaseTests.test_T3_data_drift_rejected) ... ok\ntest_T4a_leftover_new_file_ignored (test_svc_u2.U2ReleaseTests.test_T4a_leftover_new_file_ignored) ... ok\ntest_T4b_corrupt_manifest_blocks (test_svc_u2.U2ReleaseTests.test_T4b_corrupt_manifest_blocks) ... ok\ntest_T5a_missing_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5a_missing_marker_blocks) ... ok\ntest_T5b_foreign_marker_blocks (test_svc_u2.U2ReleaseTests.test_T5b_foreign_marker_blocks) ... ok\ntest_T5c_lost_manifest_blocks_not_rebuild (test_svc_u2.U2ReleaseTests.test_T5c_lost_manifest_blocks_not_rebuild) ... ok\ntest_T6_cwd_independent_identity (test_svc_u2.U2ReleaseTests.test_T6_cwd_independent_identity) ... ok\ntest_U1_bare_start_missing_row_is_event_init_recovers (test_svc_u2.U2ReleaseTests.test_U1_bare_start_missing_row_is_event_init_recovers)\n普通启动只验证不补行:DB 行缺失 → 拒绝且不建空行(缺行即事件); ... ok\ntest_U1_capability_probe_no_false_positive_no_hang (test_svc_u2.U2ReleaseTests.test_U1_capability_probe_no_false_positive_no_hang)\n能力探测无副作用:含 ensure 字样的服务态门禁报错不算能力(旧实现 ... ok\ntest_U1_update_ensures_missing_row_before_stop (test_svc_u2.U2ReleaseTests.test_U1_update_ensures_missing_row_before_stop)\n已建立身份后删行:update 在停服前拒绝,不自动补行,旧进程保持。 ... ok\ntest_U1_update_refuses_identityless_candidate_keeps_old_state (test_svc_u2.U2ReleaseTests.test_U1_update_refuses_identityless_candidate_keeps_old_state)\nmanifest 治理实例 × 无 identity 候选(RDM 旧形态):停服前拒绝—— ... ok\ntest_U2_build_failure_keeps_old_running (test_svc_u2.U2ReleaseTests.test_U2_build_failure_keeps_old_running) ... ok\ntest_U2_fault_after_switch_rolls_back_on_next_start (test_svc_u2.U2ReleaseTests.test_U2_fault_after_switch_rolls_back_on_next_start) ... ok\ntest_U2_health_timeout_rolls_back (test_svc_u2.U2ReleaseTests.test_U2_health_timeout_rolls_back) ... ok\ntest_U2_journal_interrupt_resolved_on_start (test_svc_u2.U2ReleaseTests.test_U2_journal_interrupt_resolved_on_start) ... ok\ntest_U2_layout_switch_and_rollback_on_start_failure (test_svc_u2.U2ReleaseTests.test_U2_layout_switch_and_rollback_on_start_failure) ... ok\ntest_U2_legacy_layout_bare_lifecycle_still_works (test_svc_u2.U2ReleaseTests.test_U2_legacy_layout_bare_lifecycle_still_works) ... ok\ntest_U2_schema_advance_blocks_rollback (test_svc_u2.U2ReleaseTests.test_U2_schema_advance_blocks_rollback) ... ok\ntest_Z_real_pg_not_run (test_svc_u2.U2ReleaseTests.test_Z_real_pg_not_run) ... skipped '真实 PG 身份专项 NOT_RUN:需真实实例(SVC_TEST_PG=1 + AGENT_PG_TEST_DSN)'\ntest_recover_fails_when_port_stolen (test_svc_u2.U2ReleaseTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_u2.U2ReleaseTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_u2.U2ReleaseTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_u2.U2ReleaseTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_u2.U2ReleaseTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_u2.U2ReleaseTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_u2.U2ReleaseTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_u2.U2ReleaseTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_u2.U2ReleaseTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_u2.U2ReleaseTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_u2.U2ReleaseTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_u2.U2ReleaseTests.test_watchdog_print_plan) ... ok\ntest_T1_user_list_binds_manifest_data (test_svc_user_binding.UserBindingTests.test_T1_user_list_binds_manifest_data) ... ok\ntest_T2_reject_override_data_flag (test_svc_user_binding.UserBindingTests.test_T2_reject_override_data_flag) ... ok\ntest_T2b_reject_literal_default_data (test_svc_user_binding.UserBindingTests.test_T2b_reject_literal_default_data) ... ok\ntest_T3_missing_data_root_rejected (test_svc_user_binding.UserBindingTests.test_T3_missing_data_root_rejected) ... ok\ntest_T4_no_flock_rejects_user_and_deploy (test_svc_user_binding.UserBindingTests.test_T4_no_flock_rejects_user_and_deploy) ... ok\ntest_T5_identity_regression_smoke (test_svc_user_binding.UserBindingTests.test_T5_identity_regression_smoke) ... ok\ntest_recover_fails_when_port_stolen (test_svc_user_binding.UserBindingTests.test_recover_fails_when_port_stolen) ... ok\ntest_recover_ignores_never_started_service (test_svc_user_binding.UserBindingTests.test_recover_ignores_never_started_service) ... ok\ntest_recover_noop_while_running (test_svc_user_binding.UserBindingTests.test_recover_noop_while_running) ... ok\ntest_recover_reserved_name_rejected (test_svc_user_binding.UserBindingTests.test_recover_reserved_name_rejected) ... ok\ntest_recover_respects_explicit_stop (test_svc_user_binding.UserBindingTests.test_recover_respects_explicit_stop) ... ok\ntest_recover_restarts_sigkilled_service (test_svc_user_binding.UserBindingTests.test_recover_restarts_sigkilled_service) ... ok\ntest_recover_skips_when_lock_held (test_svc_user_binding.UserBindingTests.test_recover_skips_when_lock_held) ... ok\ntest_start_reclaims_own_orphan_without_pidfile (test_svc_user_binding.UserBindingTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。 ... ok\ntest_start_records_autostart_and_stop_clears (test_svc_user_binding.UserBindingTests.test_start_records_autostart_and_stop_clears) ... ok\ntest_start_rejects_foreign_port_occupant (test_svc_user_binding.UserBindingTests.test_start_rejects_foreign_port_occupant)\n外部 python http.server 占口:start 必须失败并提示非本服务。 ... ok\ntest_stop_on_dead_process_clears_autostart (test_svc_user_binding.UserBindingTests.test_stop_on_dead_process_clears_autostart) ... ok\ntest_watchdog_print_plan (test_svc_user_binding.UserBindingTests.test_watchdog_print_plan) ... ok\ntest_full_help_mentions_user_binding (test_svc_user_help.UserHelpTests.test_full_help_mentions_user_binding) ... ok\ntest_help_accounts_lists_six_commands (test_svc_user_help.UserHelpTests.test_help_accounts_lists_six_commands) ... ok\ntest_topics_and_short_and_lifecycle_mention_accounts (test_svc_user_help.UserHelpTests.test_topics_and_short_and_lifecycle_mention_accounts) ... ok\ntest_ide_lock_in_git_dir_does_not_block_finish (test_task.FinishGuardFixTests.test_ide_lock_in_git_dir_does_not_block_finish) ... ok\ntest_local_default_branch_at_origin_main_does_not_block (test_task.FinishGuardFixTests.test_local_default_branch_at_origin_main_does_not_block)\n克隆默认分支停在 origin/main 顶端(pin 为 feature 顶端时不在其历史内) ... ok\ntest_local_unique_commit_still_preserved (test_task.FinishGuardFixTests.test_local_unique_commit_still_preserved) ... ok\ntest_real_git_lock_still_blocks_finish (test_task.FinishGuardFixTests.test_real_git_lock_still_blocks_finish) ... ok\ntest_remote_tracking_refs_do_not_block_finish (test_task.FinishGuardFixTests.test_remote_tracking_refs_do_not_block_finish) ... ok\ntest_finish_abandon_retains_local_remote_tips_and_reason (test_task.TaskLifecycleTests.test_finish_abandon_retains_local_remote_tips_and_reason) ... ok\ntest_finish_abandon_without_reason_preserves_checkout_and_refs (test_task.TaskLifecycleTests.test_finish_abandon_without_reason_preserves_checkout_and_refs) ... ok\ntest_finish_clean_worktree_has_accurate_remote_result (test_task.TaskLifecycleTests.test_finish_clean_worktree_has_accurate_remote_result) ... ok\ntest_finish_deletes_only_merged_remote_branch (test_task.TaskLifecycleTests.test_finish_deletes_only_merged_remote_branch) ... ok\ntest_finish_preserves_component_commits_off_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_component_commits_off_the_pinned_head) ... ok\ntest_finish_preserves_component_untracked_file (test_task.TaskLifecycleTests.test_finish_preserves_component_untracked_file) ... ok\ntest_finish_preserves_linked_component_worktrees_at_the_pinned_head (test_task.TaskLifecycleTests.test_finish_preserves_linked_component_worktrees_at_the_pinned_head) ... ok\ntest_finish_preserves_linked_nested_component_worktree (test_task.TaskLifecycleTests.test_finish_preserves_linked_nested_component_worktree) ... ok\ntest_finish_preserves_locked_worktree (test_task.TaskLifecycleTests.test_finish_preserves_locked_worktree) ... ok\ntest_finish_preserves_main_and_active_index_lock (test_task.TaskLifecycleTests.test_finish_preserves_main_and_active_index_lock) ... ok\ntest_finish_preserves_modified_untracked_and_ignored_files (test_task.TaskLifecycleTests.test_finish_preserves_modified_untracked_and_ignored_files) ... ok\ntest_finish_preserves_remote_unmerged_tip (test_task.TaskLifecycleTests.test_finish_preserves_remote_unmerged_tip) ... ok\ntest_finish_recycles_clean_submodule_without_shared_config_changes (test_task.TaskLifecycleTests.test_finish_recycles_clean_submodule_without_shared_config_changes) ... ok\ntest_finish_rejects_subdirectory_without_deleting_it (test_task.TaskLifecycleTests.test_finish_rejects_subdirectory_without_deleting_it) ... ok\ntest_finish_remote_deletion_lease_preserves_concurrent_update (test_task.TaskLifecycleTests.test_finish_remote_deletion_lease_preserves_concurrent_update) ... ok\ntest_finish_requires_writer_exit_confirmation (test_task.TaskLifecycleTests.test_finish_requires_writer_exit_confirmation) ... ok\ntest_long_merge_history_keeps_merged_card_visible_and_closable (test_task.TaskLifecycleTests.test_long_merge_history_keeps_merged_card_visible_and_closable) ... ok\ntest_post_merge_is_silent_outside_main_checkout (test_task.TaskLifecycleTests.test_post_merge_is_silent_outside_main_checkout) ... ok\ntest_post_merge_main_merge_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_merge_only_reminds_owner) ... ok\ntest_post_merge_main_pull_only_reminds_owner (test_task.TaskLifecycleTests.test_post_merge_main_pull_only_reminds_owner) ... ok\ntest_precheck_feature_behind_requires_sync (test_task.TaskLifecycleTests.test_precheck_feature_behind_requires_sync) ... ok\ntest_precheck_rejects_unreachable_authority (test_task.TaskLifecycleTests.test_precheck_rejects_unreachable_authority) ... ok\ntest_precheck_routes_existing_project_delivery_policy (test_task.TaskLifecycleTests.test_precheck_routes_existing_project_delivery_policy) ... ok\ntest_start_imports_precheck_and_creates_four_part_commit (test_task.TaskLifecycleTests.test_start_imports_precheck_and_creates_four_part_commit) ... ok\ntest_start_offline_does_not_create_worktree (test_task.TaskLifecycleTests.test_start_offline_does_not_create_worktree) ... ok\ntest_start_preserves_merged_local_and_remote_branch_names (test_task.TaskLifecycleTests.test_start_preserves_merged_local_and_remote_branch_names) ... ok\ntest_start_rejects_receipt_when_authoritative_base_changed (test_task.TaskLifecycleTests.test_start_rejects_receipt_when_authoritative_base_changed) ... ok\ntest_start_requires_precheck_receipt_before_creating_worktree (test_task.TaskLifecycleTests.test_start_requires_precheck_receipt_before_creating_worktree) ... ok\ntest_start_stacked_branch_records_parent_and_main_baseline (test_task.TaskLifecycleTests.test_start_stacked_branch_records_parent_and_main_baseline) ... ok\ntest_sync_commit_failure_never_reports_synced (test_task.TaskLifecycleTests.test_sync_commit_failure_never_reports_synced) ... ok\ntest_sync_conflict_is_not_reported_as_synced (test_task.TaskLifecycleTests.test_sync_conflict_is_not_reported_as_synced) ... ok\ntest_sync_does_not_execute_json_receipt_command (test_task.TaskLifecycleTests.test_sync_does_not_execute_json_receipt_command) ... ok\ntest_sync_keeps_json_evidence_fresh_after_metadata_only_changes (test_task.TaskLifecycleTests.test_sync_keeps_json_evidence_fresh_after_metadata_only_changes) ... ok\ntest_sync_keeps_unchanged_component_branch (test_task.TaskLifecycleTests.test_sync_keeps_unchanged_component_branch) ... ok\ntest_sync_materializes_nested_detached_components (test_task.TaskLifecycleTests.test_sync_materializes_nested_detached_components) ... ok\ntest_sync_materializes_updated_component (test_task.TaskLifecycleTests.test_sync_materializes_updated_component) ... ok\ntest_sync_new_base_reports_actual_final_head (test_task.TaskLifecycleTests.test_sync_new_base_reports_actual_final_head) ... ok\ntest_sync_preserves_component_feature_branch (test_task.TaskLifecycleTests.test_sync_preserves_component_feature_branch) ... ok\ntest_sync_preserves_dirty_child (test_task.TaskLifecycleTests.test_sync_preserves_dirty_child) ... ok\ntest_sync_preserves_dirty_parent_and_staged_changes (test_task.TaskLifecycleTests.test_sync_preserves_dirty_parent_and_staged_changes) ... ok\ntest_sync_preserves_nested_feature_branch_when_parent_pin_changes (test_task.TaskLifecycleTests.test_sync_preserves_nested_feature_branch_when_parent_pin_changes) ... ok\ntest_sync_reads_legacy_commands_with_escaped_pipes (test_task.TaskLifecycleTests.test_sync_reads_legacy_commands_with_escaped_pipes) ... ok\ntest_sync_rejects_unreachable_target_without_changing_head (test_task.TaskLifecycleTests.test_sync_rejects_unreachable_target_without_changing_head) ... ok\ntest_sync_same_base_preserves_head_and_card (test_task.TaskLifecycleTests.test_sync_same_base_preserves_head_and_card) ... ok\ntest_sync_still_warns_for_stale_legacy_table_evidence (test_task.TaskLifecycleTests.test_sync_still_warns_for_stale_legacy_table_evidence) ... ok\ntest_sync_warns_for_malformed_json_evidence (test_task.TaskLifecycleTests.test_sync_warns_for_malformed_json_evidence) ... ok\ntest_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum (test_task.TaskLifecycleTests.test_sync_warns_for_missing_json_receipt_fields_even_with_valid_checksum) ... ok\ntest_sync_warns_for_unresolved_json_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_json_evidence_head) ... ok\ntest_sync_warns_for_unresolved_legacy_evidence_head (test_task.TaskLifecycleTests.test_sync_warns_for_unresolved_legacy_evidence_head) ... ok\ntest_sync_warns_when_json_after_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_after_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_before_state_contains_uncommitted_code (test_task.TaskLifecycleTests.test_sync_warns_when_json_before_state_contains_uncommitted_code) ... ok\ntest_sync_warns_when_json_evidence_predates_noncard_changes (test_task.TaskLifecycleTests.test_sync_warns_when_json_evidence_predates_noncard_changes) ... ok\ntest_verify_rejects_recursive_drift_even_when_root_has_local_edits (test_task.TaskLifecycleTests.test_verify_rejects_recursive_drift_even_when_root_has_local_edits) ... ok\ntest_verify_rejects_uninitialized_component (test_task.TaskLifecycleTests.test_verify_rejects_uninitialized_component) ... ok\ntest_local_precheck_allows_known_lag_without_changing_head (test_task_recovery.TaskRecoveryTests.test_local_precheck_allows_known_lag_without_changing_head) ... ok\ntest_local_precheck_never_advertises_delivery_even_when_current (test_task_recovery.TaskRecoveryTests.test_local_precheck_never_advertises_delivery_even_when_current) ... ok\ntest_local_precheck_rejects_dirty_state_and_unknown_remote (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_dirty_state_and_unknown_remote) ... ok\ntest_local_precheck_rejects_foreign_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_foreign_registration) ... ok\ntest_local_precheck_rejects_invalid_baseline (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_invalid_baseline) ... ok\ntest_local_precheck_rejects_main_and_missing_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_main_and_missing_registration) ... ok\ntest_local_precheck_rejects_wrong_branch_registration (test_task_recovery.TaskRecoveryTests.test_local_precheck_rejects_wrong_branch_registration) ... ok\ntest_local_receipt_cannot_start_a_task_or_resume_for_delivery (test_task_recovery.TaskRecoveryTests.test_local_receipt_cannot_start_a_task_or_resume_for_delivery) ... ok\ntest_local_resume_imports_original_receipt_without_sync (test_task_recovery.TaskRecoveryTests.test_local_resume_imports_original_receipt_without_sync) ... ok\ntest_local_resume_rejects_divergent_target_before_import (test_task_recovery.TaskRecoveryTests.test_local_resume_rejects_divergent_target_before_import) ... ok\ntest_local_resume_rejects_target_rewind_before_import (test_task_recovery.TaskRecoveryTests.test_local_resume_rejects_target_rewind_before_import) ... ok\ntest_make_resume_exports_the_selected_mode_and_receipt (test_task_recovery.TaskRecoveryTests.test_make_resume_exports_the_selected_mode_and_receipt) ... ok\ntest_resume_rejects_another_worktree_with_same_head (test_task_recovery.TaskRecoveryTests.test_resume_rejects_another_worktree_with_same_head) ... ok\ntest_resume_rejects_changed_source_head (test_task_recovery.TaskRecoveryTests.test_resume_rejects_changed_source_head) ... ok\ntest_strict_resume_imports_current_ready_receipt (test_task_recovery.TaskRecoveryTests.test_strict_resume_imports_current_ready_receipt) ... ok\ntest_strict_resume_rejects_target_advance (test_task_recovery.TaskRecoveryTests.test_strict_resume_rejects_target_advance) ... ok\ntest_unknown_validation_purpose_is_rejected (test_task_recovery.TaskRecoveryTests.test_unknown_validation_purpose_is_rejected) ... ok\ntest_unknown_work_mode_is_rejected (test_task_recovery.TaskRecoveryTests.test_unknown_work_mode_is_rejected) ... ok\ntest_local_recovery_refuses_missing_fixed_rules_before_readiness (test_task_recovery.WorkspaceRecoveryTests.test_local_recovery_refuses_missing_fixed_rules_before_readiness) ... ok\ntest_local_recovery_verifies_fixed_rules_without_sync_or_application_materialization (test_task_recovery.WorkspaceRecoveryTests.test_local_recovery_verifies_fixed_rules_without_sync_or_application_materialization) ... ok\ntest_local_resume_preserves_registered_edit_branch_and_unsaved_component (test_task_recovery.WorkspaceRecoveryTests.test_local_resume_preserves_registered_edit_branch_and_unsaved_component) ... ok\ntest_resume_rechecks_fixed_rules_before_importing_receipt (test_task_recovery.WorkspaceRecoveryTests.test_resume_rechecks_fixed_rules_before_importing_receipt) ... ok\ntest_credentials_in_transport_url_are_rejected (test_transport.TransportTests.test_credentials_in_transport_url_are_rejected) ... ok\ntest_inherited_http_source_must_match_injected_server_owner_and_repository (test_transport.TransportTests.test_inherited_http_source_must_match_injected_server_owner_and_repository) ... ok\ntest_injected_http_server_maps_to_verified_local_mirror_without_authentication (test_transport.TransportTests.test_injected_http_server_maps_to_verified_local_mirror_without_authentication) ... ok\ntest_ordinary_config_cannot_enable_http_transport (test_transport.TransportTests.test_ordinary_config_cannot_enable_http_transport) ... 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\ntest_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_explicit_fixed_refresh_preserves_old_commit_refs_and_reflog (test_workspace.WorkspaceTests.test_explicit_fixed_refresh_preserves_old_commit_refs_and_reflog) ... ok\ntest_explicit_fixed_refresh_refuses_dirty_ignored_edited_and_locked_sources (test_workspace.WorkspaceTests.test_explicit_fixed_refresh_refuses_dirty_ignored_edited_and_locked_sources) ... ok\ntest_explicit_fixed_refresh_refuses_index_flags_hiding_owner_changes (test_workspace.WorkspaceTests.test_explicit_fixed_refresh_refuses_index_flags_hiding_owner_changes) ... ok\ntest_explicit_fixed_refresh_refuses_shared_or_unregistered_ownership (test_workspace.WorkspaceTests.test_explicit_fixed_refresh_refuses_shared_or_unregistered_ownership) ... ok\ntest_failed_explicit_fixed_refresh_keeps_old_binding_and_can_retry (test_workspace.WorkspaceTests.test_failed_explicit_fixed_refresh_keeps_old_binding_and_can_retry) ... 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_partial_nested_transition_keeps_originals_and_owner_recovery_state (test_workspace.WorkspaceTests.test_partial_nested_transition_keeps_originals_and_owner_recovery_state) ... workspace: injected partial nested copy failure\nok\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_repeated_transition_keeps_alias_tag_versions_and_snapshot_history (test_workspace.WorkspaceTests.test_repeated_transition_keeps_alias_tag_versions_and_snapshot_history) ... ok\ntest_repeated_transition_preserves_dirty_index_ignored_and_external_git_metadata (test_workspace.WorkspaceTests.test_repeated_transition_preserves_dirty_index_ignored_and_external_git_metadata) ... ok\ntest_repeated_transition_rejects_a_new_source_head_without_switching_destination (test_workspace.WorkspaceTests.test_repeated_transition_rejects_a_new_source_head_without_switching_destination) ... 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\ntest_architecture_gate_preserves_edges_under_workspace_paths_and_new_module_identity (test_workspace_cutover.WorkspaceCutoverTests.test_architecture_gate_preserves_edges_under_workspace_paths_and_new_module_identity) ... ok\ntest_boundary_gate_uses_isolated_map_and_rejects_new_backend_internal_import (test_workspace_cutover.WorkspaceCutoverTests.test_boundary_gate_uses_isolated_map_and_rejects_new_backend_internal_import) ... ok\ntest_finish_preserves_absorbed_metadata_after_legacy_checkout_disappears (test_workspace_cutover.WorkspaceCutoverTests.test_finish_preserves_absorbed_metadata_after_legacy_checkout_disappears) ... ok\ntest_finish_preserves_external_worktree_of_retired_legacy_checkout (test_workspace_cutover.WorkspaceCutoverTests.test_finish_preserves_external_worktree_of_retired_legacy_checkout) ... ok\ntest_finish_preserves_nonbranch_legacy_refs_without_remote_backup (test_workspace_cutover.WorkspaceCutoverTests.test_finish_preserves_nonbranch_legacy_refs_without_remote_backup) ... ok\ntest_make_workspace_commands_prepare_edit_unlink_and_report (test_workspace_cutover.WorkspaceCutoverTests.test_make_workspace_commands_prepare_edit_unlink_and_report) ... ok\ntest_old_task_sync_adopts_new_sources_and_reports_explicit_transition (test_workspace_cutover.WorkspaceCutoverTests.test_old_task_sync_adopts_new_sources_and_reports_explicit_transition) ... ok\ntest_old_task_sync_preserves_unique_legacy_commit_staging_dirty_and_ignored_files (test_workspace_cutover.WorkspaceCutoverTests.test_old_task_sync_preserves_unique_legacy_commit_staging_dirty_and_ignored_files) ... ok\ntest_old_task_text_conflict_keeps_legacy_source_and_reports_no_success (test_workspace_cutover.WorkspaceCutoverTests.test_old_task_text_conflict_keeps_legacy_source_and_reports_no_success) ... ok\ntest_precheck_never_claims_ready_for_unavailable_fixed_rules (test_workspace_cutover.WorkspaceCutoverTests.test_precheck_never_claims_ready_for_unavailable_fixed_rules) ... ok\ntest_precheck_prepares_fixed_rules_outside_project_before_ready (test_workspace_cutover.WorkspaceCutoverTests.test_precheck_prepares_fixed_rules_outside_project_before_ready) ... ok\ntest_precheck_rejects_borrowed_rules_cache_symlink (test_workspace_cutover.WorkspaceCutoverTests.test_precheck_rejects_borrowed_rules_cache_symlink) ... ok\ntest_start_prepares_fixed_sources_without_recursive_submodule_init (test_workspace_cutover.WorkspaceCutoverTests.test_start_prepares_fixed_sources_without_recursive_submodule_init) ... ok\ntest_sync_preserves_edit_branch_and_refuses_changed_declared_source (test_workspace_cutover.WorkspaceCutoverTests.test_sync_preserves_edit_branch_and_refuses_changed_declared_source) ... ok\ntest_verify_detects_active_git_operation_in_nested_retired_root (test_workspace_cutover.WorkspaceCutoverTests.test_verify_detects_active_git_operation_in_nested_retired_root) ... ok\ntest_verify_detects_nested_git_operation_inside_new_workspace (test_workspace_cutover.WorkspaceCutoverTests.test_verify_detects_nested_git_operation_inside_new_workspace) ... ok\ntest_deleting_main_symlink_to_outside_is_denied (test_write_guard.WriteGuardTests.test_deleting_main_symlink_to_outside_is_denied) ... ok\ntest_detached_and_bad_branches_are_denied (test_write_guard.WriteGuardTests.test_detached_and_bad_branches_are_denied) ... ok\ntest_every_patch_file_and_move_destination_is_checked (test_write_guard.WriteGuardTests.test_every_patch_file_and_move_destination_is_checked) ... ok\ntest_feature_missing_parent_is_allowed (test_write_guard.WriteGuardTests.test_feature_missing_parent_is_allowed) ... ok\ntest_invalid_json_is_denied (test_write_guard.WriteGuardTests.test_invalid_json_is_denied) ... ok\ntest_missing_parent_on_main_is_denied (test_write_guard.WriteGuardTests.test_missing_parent_on_main_is_denied) ... ok\ntest_missing_unknown_and_malformed_write_input_are_denied (test_write_guard.WriteGuardTests.test_missing_unknown_and_malformed_write_input_are_denied) ... ok\ntest_non_git_destination_is_explicitly_outside_scope (test_write_guard.WriteGuardTests.test_non_git_destination_is_explicitly_outside_scope) ... ok\ntest_nonwrite_tools_are_outside_scope (test_write_guard.WriteGuardTests.test_nonwrite_tools_are_outside_scope) ... ok\ntest_relative_path_uses_hook_cwd_not_process_cwd (test_write_guard.WriteGuardTests.test_relative_path_uses_hook_cwd_not_process_cwd) ... ok\ntest_symlink_into_main_with_missing_parents_is_denied (test_write_guard.WriteGuardTests.test_symlink_into_main_with_missing_parents_is_denied) ... ok\ntest_valid_multi_file_patch_on_feature_is_allowed (test_write_guard.WriteGuardTests.test_valid_multi_file_patch_on_feature_is_allowed) ... ok\n\n======================================================================\nFAIL: test_auth_preflight_aligns_with_effective_env_dsn (test_svc.SvcDbRecoveryTests.test_auth_preflight_aligns_with_effective_env_dsn)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc.py\", line 474, in test_auth_preflight_aligns_with_effective_env_dsn\n self.assertIn(\"拒绝启动\", result.stdout)\n ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: '拒绝启动' not found in '\\x1b[1;33m[svc]\\x1b[0m [nl3] 跳过 manifest 迁移:需 python3 与 scripts/svc_manifest.py\\n\\x1b[1;31m[svc]\\x1b[0m [nl3] 端口被占用(非本服务):LISTEN 0 5 127.0.0.1:18803 0.0.0.0:* users:((\"python3\",pid=2487150,fd=3)) \\n\\x1b[1;31m[svc]\\x1b[0m 处理:停掉该进程,或换端口(--port / --addr)\\n'\n\n======================================================================\nFAIL: test_caller_identity_env_does_not_reach_serve (test_svc_lifecycle_isolation.LifecycleIsolationTests.test_caller_identity_env_does_not_reach_serve)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc_lifecycle_isolation.py\", line 25, in test_caller_identity_env_does_not_reach_serve\n self.svc(\"iso\", \"start\", env=env)\n ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc_recover.py\", line 248, in svc\n self.assertEqual(proc.returncode, 0, proc.stdout)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 1 != 0 : \u001b[1;32m[svc]\u001b[0m [iso] manifest:已迁移 rev=1 instance_id=svc-iso-7ecae8f6eb14 data=/tmp/svc-autorecover-w1qcsyvk/runtime/iso/data\n\u001b[1;31m[svc]\u001b[0m [iso] 端口被占用(非本服务):LISTEN 0 5 127.0.0.1:9461 0.0.0.0:* users:((\"python3\",pid=2550772,fd=3)) \n\u001b[1;31m[svc]\u001b[0m 处理:停掉该进程,或换端口(--port / --addr)\n\n\n======================================================================\nFAIL: test_start_reclaims_own_orphan_without_pidfile (test_svc_recover.SvcAutoRecoverTests.test_start_reclaims_own_orphan_without_pidfile)\n模拟 update 误清 pidfile 后本 bin 仍占口:裸 start 应回收并拉起新进程。\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc_recover.py\", line 484, in test_start_reclaims_own_orphan_without_pidfile\n self.start_ok(\"dev\")\n ~~~~~~~~~~~~~^^^^^^^\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc_recover.py\", line 279, in start_ok\n result = self.svc(name, \"start\")\n File \"/tmp/agent-system-composition-b5be4j99/Dev-test-root/tests/test_svc_recover.py\", line 248, in svc\n self.assertEqual(proc.returncode, 0, proc.stdout)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 1 != 0 : \u001b[1;33m[svc]\u001b[0m [dev] 跳过 manifest 迁移:需 python3 与 scripts/svc_manifest.py\n\u001b[1;31m[svc]\u001b[0m [dev] 端口被占用(非本服务):LISTEN 0 5 127.0.0.1:18812 0.0.0.0:* users:((\"python3\",pid=2577636,fd=3)) \n\u001b[1;31m[svc]\u001b[0m 处理:停掉该进程,或换端口(--port / --addr)\n\n\n----------------------------------------------------------------------\nRan 476 tests in 300.750s\n\nFAILED (failures=3, skipped=19)\nmake[2]: *** [Makefile:254: test-governance] Error 1\nmake[2]: Entering directory '/tmp/agent-system-composition-b5be4j99/Dev-test-root'\nPYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p 'test_*.py' -v\nfixed checkout byproducts after PostgreSQL fixture: ''\n[composition] npm ci --ignore-scripts --no-audit --no-fund\n\nadded 1 package in 94ms\n[composition] npm cache add composition-cold-fixture@1.0.0 --ignore-scripts --registry=https://registry.npmjs.org --userconfig=/dev/null --globalconfig=/tmp/composition-npm-metadata-imsmcb7b/empty-global.npmrc\n[main 6681a9a] rdm v2\n 1 file changed, 1 insertion(+)\n create mode 100644 marker\nmake[2]: Leaving directory '/tmp/agent-system-composition-b5be4j99/Dev-test-root'\nmake[1]: *** [Makefile:273: test] Error 2\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "3964f57f5c36d760750e89a90f04400325b5524b54e531cf465d5c45848e5bc6", + "receipt_sha256": "8af14b7b1f30aadbc6a5d99cea322502b3ba172b0cbaa87d953930c65b1da9df" +} +``` + + +```json +{ + "schema": 1, + "source": "SELF", + "timestamp": "2026-10-14T05:30:21.396999+00:00", + "command": "GIT_SSH_COMMAND='timeout 180 ssh -o BatchMode=yes -o ConnectTimeout=15 -o ServerAliveInterval=10 -o ServerAliveCountMax=3' make build", + "command_sha256": "0cb93883f389c8d32c3dec87c3988326a4195b80f19fe7e005a220b58fb2694d", + "cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace", + "common_dir": "/home/weichen/projects/Agent-System-Dev/.git", + "before": { + "head": "6160dae6fb0d591ccbfc2d2c17fc003a2ce209b0", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "4f84c2e1630cd0311643529fae1c3a99f1dd5d64", + "status": " M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "ca5c9578bb242503eb2cf1125eb998b7b9e81f4324babb60bd1e206b8a13b638", + "untracked": {}, + "submodules": "", + "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": { + "head": "74511db9a6fb12e17954cb0c3f8e8846a6ecf831", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "48649a37ee92373c639a384a2c5a9dfaa2ec4bbb", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "db3824bfdbfdcad91d0941495719f04dbeaca053", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "1de7d17110efaa5ed2ed30a44d415f28987f89f3", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "9075ff0f527b00ef8767db99d2e2a11783deace76babbffbff04cfdc5c8d255f", + "state_sha256": "00077b52438250f37b217eb353c2927c17350ca6e5d5ec8249f5f98f02873e2f" + } + }, + "after": { + "head": "6160dae6fb0d591ccbfc2d2c17fc003a2ce209b0", + "branch": "feature/dependency-workspace", + "target_branch": "main", + "target_head": "4f84c2e1630cd0311643529fae1c3a99f1dd5d64", + "status": " M .task/feature-dependency-workspace.md\n", + "tracked_diff_sha256": "ca5c9578bb242503eb2cf1125eb998b7b9e81f4324babb60bd1e206b8a13b638", + "untracked": {}, + "submodules": "", + "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": { + "head": "74511db9a6fb12e17954cb0c3f8e8846a6ecf831", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Native": { + "head": "6ddd3da8df5ccc532f5b06f0aa8d49662e6f049e", + "branch": "feature/dependency-live-edit-probe", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-Intent": { + "state": "missing" + }, + "Agent-Command": { + "state": "missing" + }, + "Agent-Squad": { + "state": "missing" + }, + "Agent-System-Backend": { + "head": "48649a37ee92373c639a384a2c5a9dfaa2ec4bbb", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Development-Guidelines": { + "head": "db3824bfdbfdcad91d0941495719f04dbeaca053", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + }, + "Agent-System-Documents": { + "head": "1de7d17110efaa5ed2ed30a44d415f28987f89f3", + "branch": "", + "status": "", + "tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "untracked": {} + } + }, + "lock_sha256": "9075ff0f527b00ef8767db99d2e2a11783deace76babbffbff04cfdc5c8d255f", + "state_sha256": "00077b52438250f37b217eb353c2927c17350ca6e5d5ec8249f5f98f02873e2f" + } + }, + "after_error": null, + "exit_code": 0, + "output": "make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\npython3 scripts/build-composition.py --root . --target build\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git /tmp/agent-system-composition-963wuwfl/Agent-System-Frontend-git\nCloning into '/tmp/agent-system-composition-963wuwfl/Agent-System-Frontend-git'...\n[composition] git clone --no-checkout --no-hardlinks -- ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git /tmp/agent-system-composition-963wuwfl/Agent-System-Backend-git\nCloning into '/tmp/agent-system-composition-963wuwfl/Agent-System-Backend-git'...\n[composition] npm ci --ignore-scripts --no-audit --no-fund\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 3s\n[composition] npm cache add @babel/code-frame@7.29.7 @babel/compat-data@7.29.7 @babel/core@7.29.7 @babel/generator@7.29.8 @babel/helper-compilation-targets@7.29.7 @babel/helper-globals@7.29.7 @babel/helper-module-imports@7.29.7 @babel/helper-module-transforms@7.29.7 @babel/helper-plugin-utils@7.29.7 @babel/helper-string-parser@7.29.7 @babel/helper-validator-identifier@7.29.7 @babel/helper-validator-option@7.29.7 @babel/helpers@7.29.7 @babel/parser@7.29.9 @babel/plugin-transform-react-jsx-self@7.29.7 @babel/plugin-transform-react-jsx-source@7.29.7 @babel/template@7.29.7 @babel/traverse@7.29.8 @babel/types@7.29.8 @esbuild/linux-x64@0.25.12 @jridgewell/gen-mapping@0.3.13 @jridgewell/remapping@2.3.5 @jridgewell/resolve-uri@3.1.2 @jridgewell/sourcemap-codec@1.6.0 @jridgewell/trace-mapping@0.3.31 @napi-rs/lzma-linux-x64-gnu@1.5.1 @nodelib/fs.scandir@2.1.5 @nodelib/fs.stat@2.0.5 @nodelib/fs.walk@1.2.8 @oxc-resolver/binding-linux-x64-gnu@11.24.2 @playwright/test@1.64.0 @rolldown/pluginutils@1.0.0-beta.27 @rollup/rollup-linux-x64-gnu@4.63.5 @standard-schema/spec@1.1.0 @types/babel__core@7.20.5 @types/babel__generator@7.27.0 @types/babel__template@7.4.4 @types/babel__traverse@7.28.0 @types/chai@5.2.3 @types/deep-eql@4.0.2 @types/estree@1.0.9 @types/node@22.20.4 @types/react-dom@19.3.0 @types/react@19.3.0 @types/trusted-types@2.0.7 @vitejs/plugin-react@4.7.0 @vitest/expect@4.1.11 @vitest/mocker@4.1.11 @vitest/pretty-format@4.1.11 @vitest/runner@4.1.11 @vitest/snapshot@4.1.11 @vitest/spy@4.1.11 @vitest/utils@4.1.11 @xmldom/xmldom@0.8.15 adler-32@1.3.1 argparse@1.0.10 assertion-error@2.0.1 base64-js@1.5.1 baseline-browser-mapping@2.11.26 braces@3.0.3 browserslist@4.29.3 caniuse-lite@1.0.30001813 cfb@1.2.2 chai@6.2.2 codepage@1.15.0 convert-source-map@2.0.0 core-util-is@1.0.3 crc-32@1.2.2 csstype@3.2.3 debug@4.4.3 dingbat-to-unicode@1.0.2 docx-preview@0.4.1 dompurify@3.4.16 duck@0.1.12 echarts@5.6.0 electron-to-chromium@1.5.440 es-module-lexer@2.3.2 esbuild@0.25.12 escalade@3.2.0 estree-walker@3.0.3 expect-type@1.4.0 fast-glob@3.3.3 fastq@1.20.3 fd-package-json@2.0.0 fdir@6.5.0 fill-range@7.1.1 formatly@0.3.0 frac@1.1.2 gensync@1.0.0-beta.2 glob-parent@5.1.2 immediate@3.0.6 inherits@2.0.4 is-extglob@2.1.1 is-glob@4.0.3 is-number@7.0.0 isarray@1.0.0 jiti@2.7.0 js-tokens@4.0.0 jsesc@3.1.0 json5@2.2.3 jszip@3.10.2 knip@5.88.1 lie@3.3.0 lodash@4.18.1 lop@0.4.2 lru-cache@5.1.1 magic-string@0.30.21 mammoth@1.13.0 marked@15.0.12 merge2@1.4.1 micromatch@4.0.8 minimist@1.2.8 ms@2.1.3 nanoid@3.3.19 node-releases@2.0.57 obug@2.2.1 option@0.2.4 oxc-resolver@11.24.2 pako@1.0.11 pathe@2.0.3 picocolors@1.1.1 picomatch@2.3.2 picomatch@4.0.7 playwright-core@1.64.0 playwright@1.64.0 postcss@8.5.28 pptx-preview@1.0.7 process-nextick-args@2.0.1 queue-microtask@1.2.3 react-dom@19.3.0 react-refresh@0.17.0 react@19.3.0 readable-stream@2.3.8 reusify@1.1.0 rollup@4.63.5 run-parallel@1.2.0 safe-buffer@5.1.2 scheduler@0.28.0 semver@6.3.1 setimmediate@1.0.5 siginfo@2.0.0 smol-toml@1.9.0 source-map-js@1.2.1 sprintf-js@1.0.3 ssf@0.11.2 stackback@0.0.2 std-env@4.3.0 string_decoder@1.1.1 strip-json-comments@5.0.3 tinybench@2.9.0 tinyexec@1.3.1 tinyglobby@0.2.17 tinyrainbow@3.2.0 to-regex-range@5.0.1 tslib@2.3.0 tslib@2.8.1 typescript@5.9.3 unbash@2.2.0 underscore@1.13.8 undici-types@6.21.0 update-browserslist-db@1.3.3 util-deprecate@1.0.2 uuid@10.0.0 vite@6.4.3 vitest@4.1.11 walk-up-path@4.0.0 why-is-node-running@2.3.0 wmf@1.0.2 word@0.3.0 xlsx@0.18.5 xmlbuilder@10.1.1 yallist@3.1.1 yaml@2.9.1 zod@4.6.5 zrender@5.6.1 --ignore-scripts --registry=https://registry.npmjs.org --userconfig=/dev/null --globalconfig=/tmp/composition-npm-metadata-v8qyfz1u/empty-global.npmrc\n[composition] go mod verify\nall modules verified\n[composition] npm run build\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\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-BWPiL_PS.css 93.18 kB │ gzip: 16.04 kB\ndist/assets/jszip.min-d-4Zmon1.js 0.12 kB │ gzip: 0.12 kB\ndist/assets/docx-preview-6sU_ku0G.js 77.41 kB │ gzip: 21.29 kB\ndist/assets/jszip.min-kSHCEEHx.js 97.26 kB │ gzip: 30.16 kB\ndist/assets/index-DoGujINZ.js 213.14 kB │ gzip: 70.03 kB\ndist/assets/xlsx-CkFp8p6R.js 429.53 kB │ gzip: 143.07 kB\ndist/assets/index-Ctb2bcvo.js 561.83 kB │ gzip: 175.12 kB\ndist/assets/pptx-preview.es-Dtz_cWFU.js 1,255.23 kB │ gzip: 401.46 kB\n✓ built in 4.84s\n[composition] go build -mod=readonly -trimpath -buildvcs=false -ldflags=-s -w -X main.version=6160dae6fb0d+backend=48649a37ee92+frontend=74511db9a6fb+deps=1771de583882 -o /tmp/agent-system-composition-963wuwfl/products/agent-system ./cmd/agent-system\n[composition] go build -mod=readonly -trimpath -buildvcs=false -ldflags=-s -w -o /tmp/agent-system-composition-963wuwfl/products/storage-migrate ./cmd/storage-migrate\n[composition] complete: build; manifest=/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace/bin/resolved-manifest.json\nmake[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-dependency-workspace'\n", + "output_sha256": "1cb9224a3d153b958f332cd3d1820d6a66e0186f621d528444d833127fc2d379", + "receipt_sha256": "0d58ae51c1379b7ef56233bf957b7f732077ba4141ff2425d96ceb5138d23d42" +} +``` + +## 2026-10-14 #537 正式窗口与阶段 7 待验收对象 + +用户授权本会话在 #518 先完成 #538 窗口交接,再接管 #537;该授权只覆盖 #537 的最终同步与验证,不替代阶段 7 人工验收。权威窗口 `mq-dev-20261014-537-01` 已领取,前一任务卡闭合 PR #538 实际合入后,Dev main=`4f84c2e1630cd0311643529fae1c3a99f1dd5d64`。本任务的正式合并提交 `6160dae6fb0d591ccbfc2d2c17fc003a2ce209b0` 包含该 main 和迁移候选 `3270abff016f2227b8a3894fa69645a5b61c6664`;当前阶段 7 结论仍为未评审,迁移 PR 未合入。 + +冲突处理只将旧 `modules/backend`、`modules/frontend` gitlink 从主仓索引退役,原物理目录与各自 `.git` 保留;`scripts/e2e.sh` 采用此前隔离浏览器重放过的语义合并,保留 #488 的首次设密、显式 `audit.read`、进程 PID 清理、审计与普通基座浏览器用例,并改用固定依赖构建。#538 对该脚本无新增修改;其任务卡闭合、`scripts/task.sh` 与治理回归已纳入。`make task-sync` 的初次冲突和固定 Frontend 工作区旧版拒绝原始收据分别在 `/tmp/dependency-537-final-sync-20261014-01a1345f.json`、`/tmp/dependency-537-sync-confirm-20261014-01a1345f.json`;旧版以显式 `REFRESH_FIXED=1` 保留引用后刷新到 `74511db9a6fb12e17954cb0c3f8e8846a6ecf831`,再跑同基线 task-sync 得 `changed=0`。成功的完整 SELF 输出已由 `IMPORT_RECEIPT` 原样导入本卡;外部原件 `/tmp/dependency-537-sync-confirm-2-20261014-01a1345f.json`。 + +当前固定的提供方版本:Frontend `74511db9a6fb12e17954cb0c3f8e8846a6ecf831`、Backend `48649a37ee92373c639a384a2c5a9dfaa2ec4bbb`、Guidelines `db3824bfdbfdcad91d0941495719f04dbeaca053`、Documents `1de7d17110efaa5ed2ed30a44d415f28987f89f3`;版本来源与 14 条消费记录的先前审计见 `/tmp/dependency-versioned-source-reachability-20261014-01a1345f.json`,最终提交仍需重验。RDM 本地 `1844df1d3ec453f8d1a4097596fa9b787c05d1c9` 已含上游业务及任务卡归档,但远端 #363 尚未推此对象;其固定 Dev composer `c5068ed` 待本分支正常推送后才能在平台取得。 + +本地 `make build` 在合并提交 6160dae 上通过,完整 SELF 输出已由 `make evidence` 写入本卡,receipt_sha256=`0d58ae51c1379b7ef56233bf957b7f732077ba4141ff2425d96ceb5138d23d42`。首次完整测试在私有 Core SSH 连接长时间无收发后受控退出,原始失败 SELF receipt_sha256=`4089679f6f14bdc8d9da7ac0d28092864d791d72efcdfda47d9b6ad2d042b772`;Core 单独 SSH 读取随后成功,原件 `/tmp/dependency-537-core-ssh-probe-20261014-01a1345f.json`。有界 SSH 的完整测试继续到 476 项治理回归,19 项显式跳过、3 项因固定端口 `18803`、`9461`、`18812` 被 Python 进程占用失败;同一时段另有其他工作区测试并行,具体占口 PID 归属未固化。该次失败完整 SELF 输出亦由 `make evidence` 写入本卡,receipt_sha256=`8af14b7b1f30aadbc6a5d99cea322502b3ba172b0cbaa87d953930c65b1da9df`,不标为通过。 + +阶段 7 仍需:当前最终 HEAD 的受信 CI(test、test-pg、svc-realcombo),固定组合清单与必要局部重放,RDM 当前 HEAD 的实际 GATE,以及 R1–R15 的完整证据/缺项表。源码外阶段 7 索引为 `/tmp/dependency-stage7-readiness-20261014-01a1345f.md`,将按最终 SHA、平台结果更新后提交人工审阅。前述隔离普通克隆、按需 Native 修改与解除、旧 gitlink 候选重建、浏览器 5+2 重放仍只属于各自原对象的 SELF/REPLAY,不能代替当前候选的 CI 或人工结论。共享服务、业务数据、发布、历史改写、保护设置、迁移 PR 合入及工作区回收均未执行。 diff --git a/AGENTS.md b/AGENTS.md index bcc40c3a..2c012648 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,9 @@ # Agent 工作说明(Agent-System-Dev) -本仓开发遵循 Development-Guidelines(见 `deps/development-guidelines`,gitlink 固定版本): +本仓开发遵循固定 Development-Guidelines:新布局从 `components.lock.json` 准备 +`.workspace/Development-Guidelines`(启动检查可先提供仓外固定缓存);旧提交仍读 +`deps/development-guidelines` 的 gitlink。规则载入、版本权威及分支过渡见 +[policy/dependencies.md](policy/dependencies.md),首次准备失败不得跳过必读。 核心规则与术语见其 `core/`,按任务触发阅读 `standards/` 专题;通用交付依据为 `workflows/delivery.md`。 本项目的需求、设计试验、实施调整及交付**必读 [policy/delivery.md](policy/delivery.md)**: 需求、方案、实施与验收默认逐阶段人工评审,阶段内迭代、按影响回退;代码 Review 与 PR @@ -15,7 +18,7 @@ `@ui/motion.css` 的 `mk-*` 工具类;折叠一律用 `@ui` Collapsible 原语,禁止 `
`。 - 守护测试(UI 仓与 Frontend 仓各一份 `design-guard.test.ts`)以棘轮拦截新增裸色值、 私有 `@keyframes` 与行内字号;风格调整须在同一变更集中关联 UI 令牌 PR 与 Dev 的 - `DESIGN.md`/gitlink 组合 PR,并验证精确组件 SHA(跨仓不要求两个文件出现在同一 PR)。 + `DESIGN.md`/依赖锁组合 PR,并验证精确组件 SHA(跨仓不要求两个文件出现在同一 PR)。 - 异步状态只有一个所有者。事件按 seq 处理,过期事件丢弃。 ## 任务启动门禁(强制) @@ -81,7 +84,10 @@ - 主题行:英文祈使句一行(≤100 列,不以句点结尾);body 写 `Why: / Evidence: / Impact: / Refs:` 四段;任务卡与 PR 描述为同一份文档。 -- 跨仓 gitlink 变更须经组合验证(`make test`)后在 Dev 仓推进;受保护分支经 PR 合入。 +- 跨仓语言依赖/应用源码锁变更须经固定组合验证(`make test`)后在 Dev 仓推进; + 旧布局 gitlink 变更仍按其固定组合核验。受保护分支经 PR 合入。 + 功能仓源码只提交到所属仓;按需编辑、开发覆盖与旧任务显式过渡遵循 + [依赖与过渡入口](policy/dependencies.md)。不得修改其他活动工作区或删除仍被引用的 Git 管理数据。 - **高后果操作双钥匙**:改写历史、解除/变更分支保护、删除归档引用、发布版本——Agent 只准备 方案与命令,由用户确认并亲手执行;Agent 不得自行实施(baseline 硬边界 1 的授权范围要求)。 - 模块边界、公开契约与隔离档位见 `policy/modules/`(如有)与 PROJECT.md。 @@ -102,7 +108,7 @@ - **Web / API(HTTPS)**:`https://git-home.u1680832.nyat.app:30319`(Gitea 1.27.3, API 前缀 `/api/v1`;偶发 broken pipe / 超时,重试即可)。 - **Git over SSH**:`ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/.git` - (.gitmodules 与各仓 origin 均为此格式)。 + (components.json 与各仓 origin 使用此传输格式)。 - **API token**:`~/.secrets/gitea`,两行键值 `URL_PREFIX=…` 与 `ACCESS_TOKEN=<40 位 hex>`;取值 `grep ACCESS_TOKEN ~/.secrets/gitea | cut -d= -f2-`, 用作 `Authorization: token <值>` 请求头。**token 值不入仓、不回显、不写进产出物** diff --git a/Makefile b/Makefile index c77f55d0..25f2e2c9 100644 --- a/Makefile +++ b/Makefile @@ -2,18 +2,36 @@ # 部署约束:非容器化;默认产物为单二进制(modules/backend,内嵌前端与嵌入式存储)。 SHELL := /bin/bash +SOURCE_MODE := $(if $(wildcard components.json),workspace,legacy) +ifeq ($(SOURCE_MODE),workspace) +CORE := .workspace/Agent-System-Core +BACKEND := .workspace/Agent-System-Backend +FRONTEND := .workspace/Agent-System-Frontend +UI := .workspace/Agent-System-UI +NATIVE := .workspace/Agent-Native +INTENT := .workspace/Agent-Intent +SQUAD := .workspace/Agent-Squad +COMMAND := .workspace/Agent-Command +DOCUMENTS := .workspace/Agent-System-Documents +else CORE := modules/core BACKEND := modules/backend FRONTEND := modules/frontend UI := modules/ui +NATIVE := deps/agent-native +INTENT := deps/agent-intent +SQUAD := deps/agent-squad +COMMAND := deps/agent-command +DOCUMENTS := modules/documents +endif BIN := bin/agent-system EMBED_DIR := $(BACKEND)/web/dist PLUGINS := plugins # 版本溯源(release-operations:运行制品须可对上固定组合)。无 tag 时 --always 给短 SHA。 -COMBO := core=$(shell git -C $(CORE) rev-parse --short HEAD 2>/dev/null)+backend=$(shell git -C $(BACKEND) rev-parse --short HEAD 2>/dev/null)+frontend=$(shell git -C $(FRONTEND) rev-parse --short HEAD 2>/dev/null)+ui=$(shell git -C $(UI) rev-parse --short HEAD 2>/dev/null)+agentcmd=$(shell git -C deps/agent-command rev-parse --short HEAD 2>/dev/null)+documents=$(shell git -C modules/documents rev-parse --short HEAD 2>/dev/null)+native=$(shell git -C deps/agent-native rev-parse --short HEAD 2>/dev/null)+squad=$(shell git -C deps/agent-squad rev-parse --short HEAD 2>/dev/null)+intent=$(shell git -C deps/agent-intent rev-parse --short HEAD 2>/dev/null) +COMBO := core=$(shell git -C $(CORE) rev-parse --short HEAD 2>/dev/null)+backend=$(shell git -C $(BACKEND) rev-parse --short HEAD 2>/dev/null)+frontend=$(shell git -C $(FRONTEND) rev-parse --short HEAD 2>/dev/null)+ui=$(shell git -C $(UI) rev-parse --short HEAD 2>/dev/null)+agentcmd=$(shell git -C $(COMMAND) rev-parse --short HEAD 2>/dev/null)+documents=$(shell git -C $(DOCUMENTS) rev-parse --short HEAD 2>/dev/null)+native=$(shell git -C $(NATIVE) rev-parse --short HEAD 2>/dev/null)+squad=$(shell git -C $(SQUAD) rev-parse --short HEAD 2>/dev/null)+intent=$(shell git -C $(INTENT) rev-parse --short HEAD 2>/dev/null) VERSION := $(shell git describe --tags --always --dirty 2>/dev/null)+$(COMBO) -.PHONY: help sync status build frontend svc svc-list svc-info svc-commits svc-history svc-update svc-recover svc-watchdog test-backend test-backend-pg test-multi-instance test-lifecycle test-frontend test-ui test-core test-agentcmd test-pins test-libs dev pin clean setup precheck task-start task-resume task-sync task-close task-finish facts-verify evidence version +.PHONY: help sync status workspace-prepare component-edit component-unlink workspace-status workspace-transition build frontend svc svc-list svc-info svc-commits svc-history svc-update svc-recover svc-watchdog test-backend test-backend-pg test-multi-instance test-lifecycle test-frontend test-ui test-core test-agentcmd test-pins test-libs dev pin clean setup precheck task-start task-resume task-sync task-close task-finish facts-verify evidence version version: @echo "agent-system $(VERSION)" @@ -57,14 +75,33 @@ task-finish: evidence: @SRC='$(SRC)' TAIL='$(TAIL)' bash scripts/evidence.sh +# workspace.py owns source identity, locks and development overlays. +workspace-prepare: + @python3 scripts/workspace.py --root . prepare $(if $(NAME),--name "$(NAME)") $(if $(filter 1,$(REFRESH_FIXED)),--refresh-fixed) + +component-edit: + @test -n "$(NAME)" || { echo "usage: make component-edit NAME= [BRANCH=feature/]"; exit 2; } + @python3 scripts/workspace.py --root . edit --name "$(NAME)" $(if $(BRANCH),--branch "$(BRANCH)") + +component-unlink: + @test -n "$(NAME)" || { echo "usage: make component-unlink NAME="; exit 2; } + @python3 scripts/workspace.py --root . unlink --name "$(NAME)" + +workspace-status: + @python3 scripts/workspace.py --root . status $(if $(NAME),--name "$(NAME)") + +# Default report is read-only. Only explicit ARGS=--apply copies into new roots. +workspace-transition: + @python3 scripts/workspace.py --root . transition $(if $(NAME),--name "$(NAME)") $(ARGS) + # 外部事实登记表逐条重验(--update 刷新 PASS 项 last_verified)。 facts-verify: @bash scripts/facts-verify.sh $(ARGS) help: - @echo "make sync 物化全部 submodule(递归)" - @echo "make build 构建单二进制 bin/agent-system(契约同步→前端构建→embed→静态链接)" - @echo "make test 全量测试(boundaries + pins + libs + core + backend + frontend + ui + agent-command)" + @echo "make sync 准备固定应用/资料/规则源码(旧提交保留 submodule 模式)" + @echo "make build 固定版本隔离构建 bin/agent-system(前端资产→embed→单二进制)" + @echo "make test 固定组合测试(治理 + boundaries/architecture + 组件与前端测试)" @echo "make test-governance 临时真实仓库中的任务、证据、写守卫与 CI 凭据回归" @echo "make svc 服务级操作:make svc ENV= [ACTION=deploy|start|stop|restart|status|logs] [ARGS='--from dev@ --tag ...']" @echo "make svc-list 服务总览:make svc-list [ARGS='--tag core'];数据库运维:scripts/svc.sh db create|dsn|backup|backups|restore|clone|copy|ls|set" @@ -75,16 +112,32 @@ help: @echo "make svc-recover 自恢复:拉回 autostart=1 但已死的服务:make svc-recover [ARGS='dev --quiet']" @echo "make svc-watchdog 自恢复看护:make svc-watchdog ARGS='install|remove|status'(systemd 用户 timer)" @echo "make dev 开发模式说明(前后端分离热更新)" - @echo "make pin 推进 submodule 指针到各仓远端 main(提交前须 make test 通过)" - @echo "make status submodule 状态" + @echo "make workspace-prepare 准备固定源码;component-edit NAME= 按需编辑" + @echo "make workspace-transition [NAME=] 默认只报告;ARGS=--apply 显式准备新现场" +ifeq ($(SOURCE_MODE),workspace) +sync: workspace-prepare + +status: workspace-status +else sync: git submodule update --init --recursive status: @git submodule status +endif # 契约同步:Core 的 TS 类型镜像到前端与 UI 组件库(Core 为权威,单一来源)。 +ifeq ($(SOURCE_MODE),workspace) +# Contracts are versioned npm package exports; frontend builds materialize them. +contracts: frontend + +frontend: + python3 scripts/build-composition.py --root . --target frontend + +build: + python3 scripts/build-composition.py --root . --target build +else contracts: test-worktree cp $(CORE)/ts/types.ts $(FRONTEND)/src/contracts.ts.tmp { echo "// 从 Agent-System-Core ts/types.ts 同步(make contracts 生成;Core 为权威)。"; cat $(FRONTEND)/src/contracts.ts.tmp; } > $(FRONTEND)/src/contracts.ts @@ -103,6 +156,22 @@ build: frontend cd $(BACKEND) && CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o ../../bin/storage-migrate ./cmd/storage-migrate @echo "OK: $(BIN)(版本 $(VERSION);随附插件目录 $(PLUGINS)/)+ bin/storage-migrate(协作存储 U4 迁移工具)" +endif + +ifeq ($(SOURCE_MODE),workspace) +# Named checks exercise developer sources, prepare selected versions, and keep +# GOWORK=off unless LOCAL_OVERLAY=1 explicitly selects registered component links. +.PHONY: dev-backend dev-frontend +LOCAL_CHECK := python3 scripts/component-check.py --root . +test-lifecycle: + @test -n "$${AGENT_PG_TEST_DSN}" || { echo "test-lifecycle: AGENT_PG_TEST_DSN 未设置(真实 PostgreSQL 必需,不静默跳过)"; exit 1; } + @test -n "$${SVC_RDM_SRC_DIR}" || { echo "test-lifecycle: SVC_RDM_SRC_DIR 未设置(RDM 检出必需,不静默跳过)"; exit 1; } + bash scripts/fetch-rdm-pin.sh tests/integration/lifecycle/rdm.pin >/dev/null + python3 tests/integration/lifecycle/lifecycle_suite.py + +test-core test-backend test-backend-pg test-multi-instance test-frontend test-ui test-agentcmd eval-deliverables dev-backend dev-frontend: + $(LOCAL_CHECK) --target $@ $(if $(filter 1,$(LOCAL_OVERLAY)),--overlay) +else test-core: cd $(CORE) && go test ./... @@ -143,24 +212,37 @@ test-ui: contracts cd $(UI) && npm ci --no-fund --no-audit && npx tsc --noEmit && npx vitest run && node scripts/check-knip.mjs test-agentcmd: - cd deps/agent-command && go vet ./... && go test -count=1 ./... + cd $(COMMAND) && go vet ./... && go test -count=1 ./... + +endif test-boundaries: bash scripts/lint-boundaries.sh # 容器仓 deps/ gitlink 与 Dev 顶层指针一致。读索引中的 gitlink。 +ifeq ($(SOURCE_MODE),workspace) +test-pins: + @if [ -n "$${COMPOSITION_SOURCE_MAP:-}" ]; then bash scripts/check-pins.sh; else python3 scripts/workspace.py --root . verify; fi +else test-pins: bash scripts/check-pins.sh +endif # 三个库在各自模块内测试。不用 go.work:工作区 MVS 会抬高 golang.org/x 版本。 +ifeq ($(SOURCE_MODE),workspace) test-libs: - cd deps/agent-intent && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... - cd deps/agent-native && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... - cd deps/agent-squad && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... - cd deps/agent-squad/adapters/intent && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... - cd deps/agent-squad/adapters/native && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... - cd deps/agent-squad/adapters/sqlite && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... - cd deps/agent-squad/cmd/agent-squad && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + $(LOCAL_CHECK) --target $@ $(if $(filter 1,$(LOCAL_OVERLAY)),--overlay) +else +test-libs: + cd $(INTENT) && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd $(NATIVE) && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd $(SQUAD) && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd $(SQUAD)/adapters/intent && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd $(SQUAD)/adapters/native && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd $(SQUAD)/adapters/sqlite && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + cd $(SQUAD)/cmd/agent-squad && GOWORK=off go vet ./... && GOWORK=off go test -count=1 ./... + +endif plugin-new: @test -n "$(NAME)" || (echo "用法:make plugin-new NAME="; exit 2) @@ -175,9 +257,23 @@ test-worktree: python3 scripts/check-worktree.py verify # 即使 make -j,也先确认实际被测子仓与固定组合一致。 +ifeq ($(SOURCE_MODE),workspace) +test-libs test-core test-backend test-frontend test-ui test-agentcmd: | test-worktree +ifeq ($(COMPOSITION_SOURCE_MAP),) +test-boundaries test-pins: | test-worktree +endif +else test-boundaries test-pins test-libs test-core test-backend test-frontend test-ui test-agentcmd: | test-worktree +endif +ifeq ($(SOURCE_MODE),workspace) +# Formal composition uses isolated sources and GOWORK=off. Developer overlays +# remain untouched; the composition executor runs the component gates. +test: + python3 scripts/build-composition.py --root . --target test +else test: test-worktree test-governance test-boundaries test-pins test-libs test-core test-backend test-frontend test-ui test-agentcmd +endif # 运行演示(mock 模式):单二进制 + 示例插件 + 嵌入式存储,浏览器 http://127.0.0.1:8787 # 环境服务管理(scripts/svc.sh):deploy = 停旧 → 构建 → 启动;dev/prod 相互隔离。 @@ -210,6 +306,10 @@ svc-update: demo: build $(BIN) serve --addr 127.0.0.1:8787 --data ./data --plugins $(PLUGINS) --mock +ifeq ($(SOURCE_MODE),workspace) +dev: + $(LOCAL_CHECK) --target dev $(if $(filter 1,$(LOCAL_OVERLAY)),--overlay) +else dev: @echo "开发模式(原生,非容器):" @echo " 1. make sync && make contracts" @@ -217,7 +317,14 @@ dev: @echo " 3. 终端 B:cd $(FRONTEND) && npm ci && npm run dev # Vite 代理到 8787" @echo " 4. mock 演示:设置→运行时→演示模式;或终端 A 加 --mock" +endif + # 推进指针(多仓纪律:先验证后固定)。 +ifeq ($(SOURCE_MODE),workspace) +pin: + @echo "pin: update consumer go.mod/package-lock.json or components.lock.json explicitly, then verify the fixed composition" >&2 + @exit 2 +else pin: @for m in modules/core modules/backend modules/frontend modules/ui modules/documents deps/agent-native deps/agent-squad deps/agent-intent deps/error-code-system deps/logging-system deps/development-guidelines deps/agent-command; do \ (git -C $$m fetch -q origin && git -C $$m checkout -q origin/main) || echo "skip $$m"; \ @@ -225,5 +332,12 @@ pin: @echo "submodule 指针已推进;请 make test 后 git add .gitmodules modules deps && git commit" @scripts/check-pins.sh || echo "pin: check-pins 未通过,上面列出的容器需要重钉;pin 本身不失败" +endif + +ifeq ($(SOURCE_MODE),workspace) +clean: + rm -f $(BIN) bin/storage-migrate +else clean: rm -rf $(BIN) $(FRONTEND)/dist $(FRONTEND)/node_modules $(UI)/node_modules data +endif diff --git a/PROJECT.md b/PROJECT.md index 10eba341..d93022ce 100644 --- a/PROJECT.md +++ b/PROJECT.md @@ -1,53 +1,59 @@ # Agent-System-Dev 项目事实 -- 用途:开发集成父仓(gitlink 权威);非分发单元。 -- 组合:modules/{core,backend,frontend,ui,documents} + deps/{development-guidelines,agent-native,agent-squad,agent-intent,agent-command,error-code-system,logging-system}。 +- 用途:独立功能仓的开发与固定组合入口;非分发单元。 +- 组合:组件身份见 components.json;应用/规范/资料提交见 components.lock.json,Go/npm 库版本由消费方语言锁决定。按需源码位于被忽略的 .workspace/。 - 部署:非容器;Releases 仓从本仓固定提交导出版本。 ## 方向与规划入口 -长期方向、目标及跨任务规划从过程仓的 [项目方向与规划索引](modules/documents/docs/proposals/INDEX.md) -查找主记录、里程碑和关联任务;原始正文沿用 [方案与规划目录](modules/documents/docs/proposals/)。 +长期方向、目标及跨任务规划从过程仓的 [项目方向与规划索引](.workspace/Agent-System-Documents/docs/proposals/INDEX.md) +查找主记录、里程碑和关联任务;原始正文沿用 [方案与规划目录](.workspace/Agent-System-Documents/docs/proposals/)。 确立或调整具体方向时,在本入口维护其主记录链接;正文、确认依据和进展仍以该主记录为准。 目录中的既有文档不因被收录而自动成为已批准规划。记录、任务关联及收尾建议按 [交付规范的长期方向与任务衔接](policy/delivery.md#长期方向与任务衔接) 执行。 -- [用户、职位角色与分层权限统一方案 r1](modules/documents/docs/proposals/2026-10-13-identity-role-permission-plan.md):用户已批准,首批仅 I1(U1–U2); - [权限合同](modules/documents/docs/proposals/2026-10-13-iam-i1-permission-contract.md) 冻结边界, - [I1 实施候选与评审记录](modules/documents/docs/proposals/2026-10-13-iam-i1-review.md) 维护实际结果与剩余限制;后续单元须另行授权。 +- [版本化依赖与按需源码工作区改造任务](.task/feature-dependency-workspace.md): + 已批准方案和实施计划由固定 Documents 的 `docs/proposals/2026-10-13-versioned-dependencies-and-workspaces.md` + 与对应 `-implementation-plan.md` 保存。用户授权重构与自检连续推进,特别要求在途分支平稳过渡; + 实施进展和命令证据见任务卡,正式验收、共享部署及发布仍按原审批边界。 + [项目依赖与过渡规则](policy/dependencies.md) 是具体工作入口。 -- [快慢通道展示与动态工作摘要方案 r1.1](modules/documents/docs/proposals/2026-10-12-fast-slow-channel-display.md): +- [用户、职位角色与分层权限统一方案 r1](.workspace/Agent-System-Documents/docs/proposals/2026-10-13-identity-role-permission-plan.md):用户已批准,首批仅 I1(U1–U2); + [权限合同](.workspace/Agent-System-Documents/docs/proposals/2026-10-13-iam-i1-permission-contract.md) 冻结边界, + [I1 实施候选与评审记录](.workspace/Agent-System-Documents/docs/proposals/2026-10-13-iam-i1-review.md) 维护实际结果与剩余限制;后续单元须另行授权。 + +- [快慢通道展示与动态工作摘要方案 r1.1](.workspace/Agent-System-Documents/docs/proposals/2026-10-12-fast-slow-channel-display.md): 对话即时答复、后台动态发现与来源、四层阅读、真实状态、并发/恢复及 U1–U4; 2026-10-12 方案设计已批准(阶段 1–4),首批仅 U1; - [U1 实施计划](modules/documents/docs/proposals/2026-10-12-fast-slow-channel-display-u1-plan.md) 待阶段 5 批准后启动业务代码; + [U1 实施计划](.workspace/Agent-System-Documents/docs/proposals/2026-10-12-fast-slow-channel-display-u1-plan.md) 待阶段 5 批准后启动业务代码; 业务实施、模型实验、运行验收与部署 NOT_RUN。 -新增方向:[Generative UI 调研与插件方案 r2](modules/documents/docs/proposals/2026-10-10-generative-ui-plugin.md)。 +新增方向:[Generative UI 调研与插件方案 r2](.workspace/Agent-System-Documents/docs/proposals/2026-10-10-generative-ui-plugin.md)。 2026-10-11 用户裁定首试点(对话内分析页)、可信编译插件交付与试验参数;U1 受控试验当日完成 (结构分化 6/6、生成走工具参数通道、首期自研 renderer,详见方案「U1 结果与 r2 修订」); U2 起实施与部署分别评审。 -- [多人协作存储与分布式演进方案](modules/documents/docs/proposals/2026-10-11-collaboration-storage-and-distribution.md): +- [多人协作存储与分布式演进方案](.workspace/Agent-System-Documents/docs/proposals/2026-10-11-collaboration-storage-and-distribution.md): 10–100 人、多项目、多会话并行;PostgreSQL 团队档、迁移恢复与多实例执行。方案 r1 已批准 (2026-10-11,用户指示「按方案开始改造」),实施自首选增量 U1+U2 启动。 -- [RDM 两树一网集成、完善与追溯审计展示方案](modules/documents/docs/proposals/2026-10-11-rdm-two-trees-trace-audit-integration.md): +- [RDM 两树一网集成、完善与追溯审计展示方案](.workspace/Agent-System-Documents/docs/proposals/2026-10-11-rdm-two-trees-trace-audit-integration.md): 每项目一套笔记树、文档树与追溯网;项目绑定与读取授权闭环、原子事件历史、统一审计读服务 与四入口工作区。方案 r1 已获用户评审通过(2026-10-11,五阶段一并,KTD4 双层管理员裁定); U1–U5 全部实施合入(RDM PR #195/#197/#201/#213;Dev PR #368,2026-10-11;超管槽待基座能力 接线,申请见 RDM 仓 docs/proposals/2026-10-11-u1-base-extension-requests.md); U6 团队存储独立后续;运行验收属部署环境。 -- [RDM 模板与两树一网对话文档生成方案 r1.1](modules/documents/docs/proposals/2026-10-11-rdm-template-dialog-generation.md):69 类历史资产盘点、模板版本与章节实例化、持久提案、文档级审签及 DOCX;待用户评审,业务实施与运行验收 NOT_RUN。 首批项目建议书/竞品分析、随后扩展全部文档已确认(2026-10-11),其余方案与实施仍待评审。 +- [RDM 模板与两树一网对话文档生成方案 r1.1](.workspace/Agent-System-Documents/docs/proposals/2026-10-11-rdm-template-dialog-generation.md):69 类历史资产盘点、模板版本与章节实例化、持久提案、文档级审签及 DOCX;待用户评审,业务实施与运行验收 NOT_RUN。 首批项目建议书/竞品分析、随后扩展全部文档已确认(2026-10-11),其余方案与实施仍待评审。 -- [RDM 最终目标核对与完整交付方案 r1](modules/documents/docs/proposals/2026-10-11-rdm-final-target-completion.md):系统级项目、上限内权限覆盖、私域协作、全部文档三权与完整业务链;34 UR/68 SR/10 F 逐条映射;方案已随 #340 合入(2026-10-11),U1 需求基线核对经 RDM #199/#200 落地,U2 起未启动。 +- [RDM 最终目标核对与完整交付方案 r1](.workspace/Agent-System-Documents/docs/proposals/2026-10-11-rdm-final-target-completion.md):系统级项目、上限内权限覆盖、私域协作、全部文档三权与完整业务链;34 UR/68 SR/10 F 逐条映射;方案已随 #340 合入(2026-10-11),U1 需求基线核对经 RDM #199/#200 落地,U2 起未启动。 -- [服务重启与全量数据恢复方案 r3.1](modules/documents/docs/proposals/2026-10-12-service-restart-data-recovery.md): +- [服务重启与全量数据恢复方案 r3.1](.workspace/Agent-System-Documents/docs/proposals/2026-10-12-service-restart-data-recovery.md): svc 启停、异常进程/主机退出后的依赖、配置/数据身份、任务/HITL/副作用、文件与组合备份恢复; r2 已批准。r3.1 增补 D1 实例身份收尾、D2 可回滚切换、D3 真实组合门禁,并记录 2026-10-12 rdmcand 数据归属:会话不在 dev 库的 rdmcand 窗口内,领域事件为空,不跨实例搬迁。 D1 与 D2 已合入 Backend #184、RDM #291、Dev #485。D3 的 `make test-lifecycle` 跑真实组合用例;登录仍是 NOT_RUN,依赖账户方案 U7/U5,不在本轮公共化账户 CLI。r3 其余未批条款仍待人工评审。 -- [svc 统一部署与一次性登录 Key 方案 r1](modules/documents/docs/proposals/2026-10-12-svc-unified-deploy-and-login-key.md): +- [svc 统一部署与一次性登录 Key 方案 r1](.workspace/Agent-System-Documents/docs/proposals/2026-10-12-svc-unified-deploy-and-login-key.md): 二进制/源码统一部署、环境准备、无初始密码开户与账户恢复;一次性 Key 仅兑换设密受限会话; 2026-10-12 已批准;U1/U4 实施启动中;规格见 `docs/svc-deploy/`。 @@ -55,19 +61,25 @@ U2 起实施与部署分别评审。 ## 验证 -规范修订:[最终验证与合入调度 r1](policy/merge-queue.md) 及[U1–U6 实施计划](modules/documents/docs/proposals/2026-10-13-merge-queue-implementation-plan.md)已批准。通用规范与计划已分别经 PR 合入,本候选组合固定实际合入 SHA,见[采纳记录](policy/adoption.md)。同步幂等化、显式局部恢复和源码外证据基础已实施;Dev 最新组合验收及平台调度模式启用仍按各自门禁办理。 +规范修订:[最终验证与合入调度 r1](policy/merge-queue.md) 及[U1–U6 实施计划](.workspace/Agent-System-Documents/docs/proposals/2026-10-13-merge-queue-implementation-plan.md)已批准。通用规范与计划已分别经 PR 合入,本候选组合固定实际合入 SHA,见[采纳记录](policy/adoption.md)。同步幂等化、显式局部恢复和源码外证据基础已实施;Dev 最新组合验收及平台调度模式启用仍按各自门禁办理。 -`make test` 先核对子模块工作树与固定指针,再运行治理脚本、公开边界、跨仓指针、库及各模块 -测试。实际目标以根 Makefile 为准。`make test-governance` 可独立检查开发门禁,使用临时 -真实仓库,不访问生产数据;操作与证据要求见 [开发门禁](policy/governance.md)。 +`make setup` 启用钩子。新 clone 无需递归克隆;启动门禁提供固定规则, +`make workspace-prepare` 准备固定应用与资料。`make component-edit NAME=Agent-Native` +按消费方实际版本创建功能仓编辑分支并生成本地 go.work;解除用 `make component-unlink`。 -`make build` 在 backend 模块内编译,replace 指向该模块自己的 `deps/`; -`scripts/check-pins.sh` 核对这些 gitlink 与 Dev 顶层指针,`make test-worktree` 另核对 -真正被测的组件工作树。两者分别验证固定组合与实际检出,不能相互替代。 +`make test` / `make build` 在隔离目录使用已提交的清单、应用源码、语言依赖和前端包, +关闭 Go 开发覆盖,拒绝本地 replace/link,构建 frontend dist 后装配 backend embed。 +输出 bin/resolved-manifest.json,含实际来源、解析版本及资产摘要;工作区本地覆盖不会改变正式候选。 -未加 go.work:工作区最小版本选择会抬高 backend 单独构建使用的部分 `golang.org/x` 版本。 -发布消费方须从固定 Dev 提交递归物化后运行 `make build`,再核验制品与实际运行状态。 +`make test-governance` 在临时真实仓库验证启动、任务同步、证据、迁移保留和拒绝路径; +`make test-pins` 在新布局核验固定来源,历史提交仍执行旧 gitlink 检查。 +公开边界与架构检查使用组合器的固定来源映射,详细操作见 [开发门禁](policy/governance.md)。 -- [渐进工作台界面重设计 r0.2](modules/documents/docs/proposals/2026-10-12-work-companion-ui-design.md):用户已授权连续实施;[计划 r1](modules/documents/docs/proposals/2026-10-12-work-companion-ui-plan.md)覆盖任务摘要、对话/输入、窄屏和真实状态投影;进展见对应任务卡。 +RDM 从自身 go.mod 消费远端 Backend,`COMPOSITION_ROOT=<已提交 Dev 根目录> make product` +隔离 vendor 并注入固定前端资产,随产物记录其实际 Backend 版本;不改模块缓存。 +`product-smoke` 的临时运行验证与正式验收、共享部署分开记录。真实 PG/Redis、生命周期等 +专项门禁保持原环境要求;未提供环境不会由本地组合测试冒充通过。 -- [系统项目、成员工作入口与私域协作闭环 r1](modules/documents/docs/proposals/2026-10-13-system-project-membership.md):2026-10-13 用户批准阶段 1–9 连续推进;统一全局项目身份与名称、成员个人会话、每项目两树一网和私域权限;当前组合验证/CI/tag 消费推进中,部署与线上修复未授权。 +- [渐进工作台界面重设计 r0.2](.workspace/Agent-System-Documents/docs/proposals/2026-10-12-work-companion-ui-design.md):用户已授权连续实施;[计划 r1](.workspace/Agent-System-Documents/docs/proposals/2026-10-12-work-companion-ui-plan.md)覆盖任务摘要、对话/输入、窄屏和真实状态投影;进展见对应任务卡。 + +- [系统项目、成员工作入口与私域协作闭环 r1](.workspace/Agent-System-Documents/docs/proposals/2026-10-13-system-project-membership.md):2026-10-13 用户批准阶段 1–9 连续推进;统一全局项目身份与名称、成员个人会话、每项目两树一网和私域权限;当前组合验证/CI/tag 消费推进中,部署与线上修复未授权。 diff --git a/README.md b/README.md index a9874688..6a3979fb 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,30 @@ # Agent-System-Dev -Agent-System 的开发集成仓(父仓):以 submodule 固定全部模块组合,承载跨仓构建、测试编排与原生(非容器)开发环境。**非分发单元**——发布物在 Agent-System-Releases。 +Agent-System 的开发集成入口,组织独立功能仓、固定依赖和跨仓构建。只需手动 clone 本仓;应用与资料由源码清单准备,Go/npm 库由消费方下载。发布物仍在 Agent-System-Releases,默认采用原生单二进制。 -## 组合结构 - -``` -modules/core Agent-System-Core 核心契约(领域模型/事件协议/插件 API/设置与 UI 词汇) -modules/backend Agent-System-Backend 后端单二进制(内嵌前端与嵌入式 SQLite) -modules/frontend Agent-System-Frontend 前端(React 19 + Vite + TS) -modules/documents Agent-System-Documents 系统文档与过程记录 -modules/ui Agent-System-UI UI 组件库(词汇渲染器/设计令牌/收件箱卡片工作区组件) -deps/development-guidelines 开发规范(gitlink 固定版本) -deps/agent-native deps/agent-squad deps/agent-intent 生态执行/编排/意图 -deps/agent-command Agent-Command 命令总线基础库(spec/注册表/危险分级/审计信封) -deps/error-code-system deps/logging-system 基础设施 -plugins/ 示例插件与插件开发参考(P4 起填充) -``` - -父仓 gitlink 是各组件源码版本的权威;构建、审核与发布固定提交,不执行 `submodule update --remote`。 - -## 常用命令 +## 开始开发 ```bash -make sync # 物化全部 submodule(递归) -make build # 构建单二进制 bin/agent-system -make test # 全量测试 -make dev # 开发模式说明(前后端分离热更新) +make setup +RECEIPT=/tmp/my-task-precheck.json CMD="make precheck" make evidence +make task-start NAME=feature/my-task PRECHECK_RECEIPT=/tmp/my-task-precheck.json +# 在返回的任务 worktree 中执行 +make workspace-prepare +make component-edit NAME=Agent-Native BRANCH=feature/my-native-change +make workspace-status +make component-unlink NAME=Agent-Native ``` -## 约束(全局) +按需源码是 .workspace 下的普通独立 Git 仓。功能修改提交到所属仓;消费方通过依赖 PR 采用新版本,不需要为了保存源码提交而同步推进全部仓库。 -- 非容器化部署:默认单二进制,必要时拆分多个原生二进制;不发布容器镜像。 -- 依赖方向:frontend→core←backend;插件只依赖 core;生态仓依赖纪律沿用各仓既有约定。 -- 开发规范:`deps/development-guidelines`(见各仓 AGENTS.md)。 +`make test` 与 `make build` 使用已提交的固定组合,在隔离目录关闭开发覆盖,生成 bin/agent-system、storage-migrate 与 resolved-manifest.json。源码身份见 components.json;应用/规范/资料提交见 components.lock.json;库的实际版本见消费方 go.mod/go.sum、package-lock.json。 -## 文档 +## 规范与过渡 -设计方案:`modules/documents/docs/proposals/2026-09-29-system-skeleton-design-and-plan.md`(含 D1–D16 决策记录)。 -本机服务管理(后端/前端/数据库部署、生命周期、备份克隆):`docs/svc.md`(`scripts/svc.sh`)。 +- [项目事实与验证入口](PROJECT.md) +- [版本依赖、按需编辑和旧分支过渡](policy/dependencies.md) +- [阶段交付](policy/delivery.md)与[开发门禁](policy/governance.md) + +旧提交继续采用自己的 submodule 模式;旧任务同步新主干前由 owner 保存现场并显式过渡。迁移工具默认只报告,不改动其他活动工作区。规范来自固定 Development-Guidelines,过程文档来自固定 Agent-System-Documents;新项目通过独立采纳采用通用规则。 + +本机服务管理见 [docs/svc.md](docs/svc.md)。依赖改造不授权共享服务部署、数据库操作或发布。 diff --git a/components.json b/components.json new file mode 100644 index 00000000..7090f737 --- /dev/null +++ b/components.json @@ -0,0 +1,198 @@ +{ + "schema": 1, + "components": [ + { + "id": "Logging-System", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Logging-System.git", + "path": ".workspace/Logging-System", + "legacy_path": "deps/logging-system", + "role": "go-library", + "modules": [ + { + "path": "git-ssh.u1680832.nyat.app/weichen/Logging-System.git", + "legacy": "logging-system", + "directory": "." + } + ], + "target": "main" + }, + { + "id": "Error-Code-System", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Error-Code-System.git", + "path": ".workspace/Error-Code-System", + "legacy_path": "deps/error-code-system", + "role": "go-library", + "modules": [ + { + "path": "git-ssh.u1680832.nyat.app/weichen/Error-Code-System.git", + "legacy": "error-code-system", + "directory": "." + } + ], + "target": "main" + }, + { + "id": "Agent-System-Core", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Core.git", + "path": ".workspace/Agent-System-Core", + "legacy_path": "modules/core", + "role": "go-library", + "modules": [ + { + "path": "git-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git", + "legacy": "agent-system-core", + "directory": "." + } + ], + "target": "main" + }, + { + "id": "Agent-System-UI", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-UI.git", + "path": ".workspace/Agent-System-UI", + "legacy_path": "modules/ui", + "role": "npm-library", + "modules": [], + "target": "main", + "package_name": "@agent-system/ui" + }, + { + "id": "Agent-System-Frontend", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git", + "path": ".workspace/Agent-System-Frontend", + "legacy_path": "modules/frontend", + "role": "application", + "modules": [], + "target": "main" + }, + { + "id": "Agent-Native", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git", + "path": ".workspace/Agent-Native", + "legacy_path": "deps/agent-native", + "role": "go-library", + "modules": [ + { + "path": "git-ssh.u1680832.nyat.app/weichen/Agent-Native.git", + "legacy": "agent-native", + "directory": "." + } + ], + "target": "main" + }, + { + "id": "Agent-Intent", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Intent.git", + "path": ".workspace/Agent-Intent", + "legacy_path": "deps/agent-intent", + "role": "go-library", + "modules": [ + { + "path": "git-ssh.u1680832.nyat.app/weichen/Agent-Intent.git", + "legacy": "agent-intent", + "directory": "." + } + ], + "target": "main" + }, + { + "id": "Agent-Command", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Command.git", + "path": ".workspace/Agent-Command", + "legacy_path": "deps/agent-command", + "role": "go-library", + "modules": [ + { + "path": "git-ssh.u1680832.nyat.app/weichen/Agent-Command.git", + "legacy": "agent-command", + "directory": "." + } + ], + "target": "main" + }, + { + "id": "Agent-Squad", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Squad.git", + "path": ".workspace/Agent-Squad", + "legacy_path": "deps/agent-squad", + "role": "go-library", + "modules": [ + { + "path": "git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git", + "legacy": "agent-squad", + "directory": "." + }, + { + "path": "git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/native", + "legacy": "agent-squad/adapters/native", + "directory": "adapters/native" + }, + { + "path": "git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/intent", + "legacy": "agent-squad/adapters/intent", + "directory": "adapters/intent" + }, + { + "path": "git-ssh.u1680832.nyat.app/weichen/Agent-Squad.git/adapters/sqlite", + "legacy": "agent-squad/adapters/sqlite", + "directory": "adapters/sqlite" + }, + { + "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" + }, + { + "id": "Agent-System-Backend", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git", + "path": ".workspace/Agent-System-Backend", + "legacy_path": "modules/backend", + "role": "application", + "modules": [ + { + "path": "git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git", + "legacy": "agent-system-backend", + "directory": "." + } + ], + "target": "main" + }, + { + "id": "Development-Guidelines", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Development-Guidelines.git", + "path": ".workspace/Development-Guidelines", + "legacy_path": "deps/development-guidelines", + "role": "guidelines", + "modules": [], + "target": "main" + }, + { + "id": "Agent-System-Documents", + "repo": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Documents.git", + "path": ".workspace/Agent-System-Documents", + "legacy_path": "modules/documents", + "role": "documentation", + "modules": [], + "target": "main" + } + ], + "transport": { + "go_private": [ + "git-ssh.u1680832.nyat.app/weichen" + ], + "git_rewrites": [ + { + "from": "https://git-ssh.u1680832.nyat.app/weichen/", + "to": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + } + ] + } +} diff --git a/components.lock.json b/components.lock.json new file mode 100644 index 00000000..40ba6924 --- /dev/null +++ b/components.lock.json @@ -0,0 +1,17 @@ +{ + "schema": 1, + "components": { + "Agent-System-Frontend": { + "commit": "74511db9a6fb12e17954cb0c3f8e8846a6ecf831" + }, + "Agent-System-Backend": { + "commit": "48649a37ee92373c639a384a2c5a9dfaa2ec4bbb" + }, + "Development-Guidelines": { + "commit": "db3824bfdbfdcad91d0941495719f04dbeaca053" + }, + "Agent-System-Documents": { + "commit": "1de7d17110efaa5ed2ed30a44d415f28987f89f3" + } + } +} diff --git a/deps/agent-command b/deps/agent-command deleted file mode 160000 index 4f583ca3..00000000 --- a/deps/agent-command +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4f583ca3eeeb07a56a714c5086de84dcd6ad2980 diff --git a/deps/agent-intent b/deps/agent-intent deleted file mode 160000 index 343b1e6d..00000000 --- a/deps/agent-intent +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 343b1e6d9a5b58e47bf7e594826221036ae8175c diff --git a/deps/agent-native b/deps/agent-native deleted file mode 160000 index c3484416..00000000 --- a/deps/agent-native +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c348441691e8bdab784a03aa9be64d53dacff341 diff --git a/deps/agent-squad b/deps/agent-squad deleted file mode 160000 index 490b0b2d..00000000 --- a/deps/agent-squad +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 490b0b2dfa1567cb16ff7a7230fd78e52bc2938e diff --git a/deps/development-guidelines b/deps/development-guidelines deleted file mode 160000 index 2f5b1987..00000000 --- a/deps/development-guidelines +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2f5b19872be2a4597838a4131ad75d1be089ee5e diff --git a/deps/error-code-system b/deps/error-code-system deleted file mode 160000 index a3ee67bb..00000000 --- a/deps/error-code-system +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a3ee67bba269e1276c14e22c026171ecf2cf6190 diff --git a/deps/logging-system b/deps/logging-system deleted file mode 160000 index 49b5d8be..00000000 --- a/deps/logging-system +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 49b5d8be604d05e4246dffa0d10fa1c2b7ad45d7 diff --git a/examples/downstream-rdm/README.md b/examples/downstream-rdm/README.md index cb3f4347..c2b0b09c 100644 --- a/examples/downstream-rdm/README.md +++ b/examples/downstream-rdm/README.md @@ -1,9 +1,5 @@ -# 下游薄切片 +# 独立下游扩展示例 -本目录模拟独立仓库 `Agent-System-Plugin-RDM`。它只 import `agent-system-backend/pkg/extension`,不改基座。 +本目录模拟独立功能仓,通过 Backend 的公开 pkg/extension 注册扩展。go.mod/go.sum 固定远端依赖,普通 clone 即可下载和测试,不要求相邻源码目录或复制 replace。需要完整产品时空白导入公开 pkg/extension/link,并通过 Dev 的固定组合器装配前端资产,具体见 policy/dependencies.md。 -把本目录搬到新仓库时,由 owner 创建 Git 仓库。`replace` 改成基座检出路径或已发布版本。需要拉起完整二进制时再空白导入 `agent-system-backend/pkg/extension/link`,并复制基座 `go.mod` 的 replace(下游模块不会继承它们)。 - -``` -go test . -``` +版本采用由 Go 生成的提交版本;更新消费方依赖后独立测试,再对实际固定组合审阅。本地源码联调用工作区覆盖,正式构建使用 GOWORK=off。 diff --git a/examples/downstream-rdm/go.mod b/examples/downstream-rdm/go.mod index 6a050575..68a1cf64 100644 --- a/examples/downstream-rdm/go.mod +++ b/examples/downstream-rdm/go.mod @@ -3,13 +3,6 @@ module example.com/agent-system-plugin-rdm go 1.27 require ( - agent-system-backend v0.0.0 - agent-system-core v0.0.0 + git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git v0.4.1-0.20261013154716-f1302ed5b395 + git-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git v0.4.1-0.20261013151137-f32d4317846f ) - -// 声明式路径(仅 pkg/extension 根包)只需下面两条 replace。 -// 空白导入 pkg/extension/link 拉起完整后端时,须复制基座 go.mod 的 -// 全部 8 条 deps replace——见 README 与 extension-compat-policy §4。 -replace agent-system-backend => ../../modules/backend - -replace agent-system-core => ../../modules/backend/deps/agent-system-core diff --git a/examples/downstream-rdm/go.sum b/examples/downstream-rdm/go.sum new file mode 100644 index 00000000..1c1e0ad6 --- /dev/null +++ b/examples/downstream-rdm/go.sum @@ -0,0 +1,4 @@ +git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git v0.4.1-0.20261013154716-f1302ed5b395 h1:Ij/SYy1bNdlteFZeCSBFUEEFbhwd3srpAOwSIjhbpsI= +git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git v0.4.1-0.20261013154716-f1302ed5b395/go.mod h1:ipD03jF1IpqWwU7m+verjzgnOYVc7Tau9xz9mJKKn8s= +git-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git v0.4.1-0.20261013151137-f32d4317846f h1:39RW0R6zmtXLNbLQaqFCmtZ6zjEs2lhDLb9YLhudIiM= +git-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git v0.4.1-0.20261013151137-f32d4317846f/go.mod h1:T3FU9NsngaxF/1C2ISi02fV7+aqNepOEvX0QhswA70Y= diff --git a/examples/downstream-rdm/plugin.go b/examples/downstream-rdm/plugin.go index 19a89b07..a131c8f0 100644 --- a/examples/downstream-rdm/plugin.go +++ b/examples/downstream-rdm/plugin.go @@ -4,7 +4,7 @@ import ( "context" "encoding/json" - "agent-system-backend/pkg/extension" + "git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension" ) func init() { diff --git a/examples/downstream-rdm/plugin_test.go b/examples/downstream-rdm/plugin_test.go index bd785ff7..d3f2e90b 100644 --- a/examples/downstream-rdm/plugin_test.go +++ b/examples/downstream-rdm/plugin_test.go @@ -6,8 +6,8 @@ import ( "errors" "testing" - "agent-system-backend/pkg/extension" - core "agent-system-core" + "git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/pkg/extension" + core "git-ssh.u1680832.nyat.app/weichen/Agent-System-Core.git" ) func TestCompiledSkillRegistration(t *testing.T) { @@ -24,6 +24,7 @@ func TestCompiledSkillRegistration(t *testing.T) { // fakeRegistry 记录 register() 的登记动作,不拉起基座。 type fakeRegistry struct { + extension.Registry // Unused capabilities fail if this example starts calling them. skills []string commands []string handlers int @@ -64,7 +65,10 @@ func TestRegisterBindsPingHandler(t *testing.T) { } // fakeHost 是下游测试里的最小句柄替身:只实现 rdm.ping 用到的能力。 -type fakeHost struct{ owner string } +type fakeHost struct { + extension.Host + owner string +} func (f fakeHost) PluginID() string { return "rdm" } func (f fakeHost) Owner() string { return f.owner } diff --git a/modules/backend b/modules/backend deleted file mode 160000 index 8e80e261..00000000 --- a/modules/backend +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8e80e2618eb7471dd12d5f172ff3cd23622b7d2f diff --git a/modules/core b/modules/core deleted file mode 160000 index 5773e740..00000000 --- a/modules/core +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5773e74086791731059730bd3726dc8c9cd1381f diff --git a/modules/documents b/modules/documents deleted file mode 160000 index 7bd4e178..00000000 --- a/modules/documents +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7bd4e17827d4c7c88647bf3c9199c495b60cb107 diff --git a/modules/frontend b/modules/frontend deleted file mode 160000 index 5313cfad..00000000 --- a/modules/frontend +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5313cfad4e633d0909ed40dcdfa28a11bc1902c0 diff --git a/modules/ui b/modules/ui deleted file mode 160000 index 2c4322ef..00000000 --- a/modules/ui +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2c4322ef56df64ad72f65907d25b048a74bb5ffc diff --git a/policy/adoption.md b/policy/adoption.md index 4680737a..7cd0186e 100644 --- a/policy/adoption.md +++ b/policy/adoption.md @@ -2,12 +2,12 @@ - 项目/负责人:Agent-System 组合 / weichen - 状态:active(2026-09-30 经 PR weichen/Development-Guidelines#1 采纳 draft.7;机制经 Dev PR#1 合入 ef89fc8) -- 规范位置:deps/development-guidelines(gitlink 固定版本) -- 过程文档位置:modules/documents(docs/records/) -- 版本权威:父仓 gitlink +- 规范位置:.workspace/Development-Guidelines(components.lock.json 固定源码;首次启动可读仓外固定缓存) +- 过程文档位置:.workspace/Agent-System-Documents(docs/records/) +- 版本权威:components.lock.json;规则内容版本由该提交的 VERSION 标识,历史提交保留原 gitlink - 批准/生效依据:Dev PR#1(19/19 正负例 + make test);guidelines PR#1 -- 本次升级候选:`0.1.0-draft.11`,实际合入提交 `2f5b19872be2a4597838a4131ad75d1be089ee5e`(Guidelines PR #5);本候选父仓固定该源码版本。基础门禁继续执行,合入调度流程单独记 approved/pending-activation;Dev 组合验收、平台正负例和全部写入者覆盖完成前不切换交付模式。 -- 过程计划固定:Documents PR #96 实际合入 `129cc3579d9c9e3edfb46c99270d65f3e1dad0a0`,包含既有主干文档及获批 U1–U6 计划;当前进展以任务/PR 记录为准。 +- 合入调度采纳基线:`0.1.0-draft.11`,实际合入提交 `2f5b19872be2a4597838a4131ad75d1be089ee5e`(Guidelines PR #5);本次依赖候选的固定规范包含该提交;最终来源仅由 components.lock.json 决定。基础门禁继续执行,合入调度流程单独记 approved/pending-activation;Dev 组合验收、平台正负例和全部写入者覆盖完成前不切换交付模式。 +- 合入调度过程计划来源:Documents PR #96 实际合入 `129cc3579d9c9e3edfb46c99270d65f3e1dad0a0`,包含既有主干文档及获批 U1–U6 计划;当前进展以任务/PR 记录为准。 | 规范/工作流 | 适用条件与范围 | 执行方式/证据 | |---|---|---| @@ -16,7 +16,7 @@ | standards/collaboration.md | 并行/同步节点 | **enforced(本地命令)**:分支、现场、组件检查;task-sync 实际合并时记录,同基线只核验。最终平台与阶段授权另验 | | 提交格式(主题行/四段 body) | 全部提交 | 主题行 enforced(local),body manual;任务工具生成四段 body,历史 PR 仅作旧版本证据 | | standards/verification.md | 验收 | 本地 make test-governance + 组合测试;当前证据与历史 scratch 记录分开 | -| standards/multi-repo.md | 跨仓/gitlink | manual;受控历史迁移通道已于 2026-09-30 行使一次(documents/records/2026-09-30-history-migration.md) | +| standards/multi-repo.md | 跨仓/版本依赖 | manual;受控历史迁移通道已于 2026-09-30 行使一次(documents/records/2026-09-30-history-migration.md) | | 工作区回收 | 交付终点 | advisory(task-finish);负例:合入前 finish 拒绝输出 | | policy/delivery.md(项目收紧) | 需求、长期方向、试验、实施迭代及交付 | manual(人工/Agent 执行):前序人工决策与有范围的连续推进授权;智能体完成 Review、冲突处置和当前 HEAD 的 CI 核验后合入;任务卡提供记录,post-merge 默认只提示,行为回归见 tests/test_task.py | | standards/tool-adaptation.md(draft.8) | 为工具创建规则/钩子实例 | 本组合 CLI/git 级实例已登记:policy/tool-adaptation-matrix.md(A1–A7 逐行定级+正负例证据) | @@ -32,4 +32,14 @@ | delivery.md §2、design-verification.md 的轻量流程默认做法 | 按 [policy/delivery.md](delivery.md) 保留需求、方案、实施与验收的人工节点;代码 Review 与 PR 合入交由智能体,冲突解决且当前 HEAD 的 CI 通过后合入;小任务简化篇幅,阶段内可迭代 | 2026-10-12 用户明确要求智能体 Review 后合入,合入前解决冲突且 CI 通过;其他人工决策与高后果双钥匙边界保留 | weichen;Review、CI 或平台准入条件变化时复查 | - 历史记录(2026-09-30)报告 11 个组合仓 main 禁直推、拒绝陈旧候选;当前平台能力须独立重验,本地脚本测试不替代远端证据。 -- 规范源码以 gitlink 及其 VERSION 为准,流程启用以本采纳状态及项目条件为准;固定源码版本不代替实际能力证明。治理可靠性修复的命令与证据约定见 [开发门禁](governance.md),本地与客户端/平台能力分别登记;本轮不改变分支保护或发布授权。 +- 规范源码以 components.lock.json 固定内容及其 VERSION 为准;流程启用以本采纳状态及项目条件为准,固定源码不代替实际能力证明。治理可靠性修复的命令与证据约定见 [开发门禁](governance.md),本地与客户端/平台能力分别登记;本轮不改变分支保护、发布授权或通用库版本。 + +## 2026-10-13 版本依赖采纳增量 + +用户批准版本依赖与按需工作区方案 r1,并授权重构与自检连续推进、保护在途分支。 +固定 draft.12 内容延续已固定上游规则;本次采纳将 Go/npm 库的版本权威交给消费方, +应用、规范与资料交给源码锁。具体组件、命令、旧任务同步及回退见 [依赖规则](dependencies.md)。 + +启动取源、组件编辑/解除、固定组合与旧现场保留由本地工具和真实仓库回归验证,证据为 SELF。 +平台 runner 隔离、token scope、受信工作流来源、分支保护和精确 HEAD CI 仍须 GATE/REPLAY 核验; +本文件不宣称平台合并队列或发布能力已就位。其他项目须独立采纳,不因本轮升级自动改变规则。 diff --git a/policy/architecture.yaml b/policy/architecture.yaml index 06af4c4e..0f3f9e9d 100644 --- a/policy/architecture.yaml +++ b/policy/architecture.yaml @@ -4,10 +4,10 @@ # it queries store metadata and does not depend on either transport/composition root. # Approved membership proposal r1 adds app/server -> projectscope -> store. backend: - root: modules/backend/internal - import_prefix: agent-system-backend/internal/ + root: .workspace/Agent-System-Backend/internal + import_prefix: git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/ frontend: - root: modules/frontend/src + root: .workspace/Agent-System-Frontend/src groups: - name: app dir: . diff --git a/policy/delivery.md b/policy/delivery.md index 252aa9c2..b70a585b 100644 --- a/policy/delivery.md +++ b/policy/delivery.md @@ -1,7 +1,7 @@ # 需求、试验与迭代交付 适用:本项目的需求、修复、规范修改和其他交付任务。依据固定版本的 -[通用交付流程](../deps/development-guidelines/workflows/delivery.md),本项目收紧为 +[通用交付流程](../.workspace/Development-Guidelines/workflows/delivery.md),本项目收紧为 **需求、方案、实施与验收默认逐阶段人工评审;代码 Review 与 PR 合入由智能体完成; 阶段内迭代,按影响回退,按增量交付**。 本文件是阶段与评审的权威表述;启动、同步、命令证据和回收操作见 diff --git a/policy/dependencies.md b/policy/dependencies.md new file mode 100644 index 00000000..d0a9882a --- /dev/null +++ b/policy/dependencies.md @@ -0,0 +1,54 @@ +# 版本依赖、源码编辑与分支过渡 + +适用:组件版本升级、功能仓编辑、新 clone、旧任务同步和源码候选构建。通用原则见固定 Development-Guidelines 的 multi-repo/collaboration/adoption;本文件只规定项目映射、命令和过渡入口。 + +## 版本权威 + +- `components.json`:逻辑组件、批准的仓库、职责、模块/包身份与消费路径,不存凭据。 +- `components.lock.json`:应用、规范和过程资料的完整提交;Go/npm 库不另设可竞争的源码锁。 +- Go:消费方 go.mod 的实际模块图决定版本,go.sum 校验内容。模块路径为 `git-ssh.u1680832.nyat.app/weichen/.git`,子模块追加目录;端口仅属于传输配置。 +- npm:消费方 package-lock 固定 Git 提交及包完整性信息;契约由 Core 单一 TS 源码产生,UI 与 Frontend 消费 `@agent-system/contracts`,Frontend 消费 `@agent-system/ui`。 +- 正式产物:隔离固定源码装配 frontend dist/backend embed,自动导出解析清单与摘要。RDM 使用隔离 vendor 构建注入固定前端资产,不改 Go module cache,不写本地路径 replace。 + +采用的提交在功能仓合入后仍须从批准来源获取。合入方式须保留已锁定的提交对象;回收功能分支前核对这些提交已在主干或受保护归档中可达,不用 squash 或删除唯一引用使现有语言版本失效。发布 tag 与归档删除仍保留原双钥匙边界。 + +新模式是否存在以该提交的 `components.json`/锁为准。历史提交没有这两份文件时继续按照其旧 gitlinks 与脚本构建;不能套用最新来源改变历史候选。 + +## 从 Dev 按需编辑 + +1. 从普通 clone 开始,按项目启动门禁执行 precheck/task-start;新布局由固定清单准备应用和规范,普通库按语言依赖下载。 +2. `make component-edit NAME=Agent-Native` 取得消费方实际使用的源版本,创建所属功能仓的独立编辑分支并接入本地 go.work。 +3. 在返回的目录修改、局部验证、提交及创建功能仓 PR;Dev 不提交复制的功能仓源码。 +4. `make component-unlink NAME=Agent-Native` 解除开发覆盖,保留源码和分支;采用新版本由消费方依赖 PR 决定。 + +`make test-backend LOCAL_OVERLAY=1` 可明确使用已登记 Go 开发覆盖做局部检查,默认局部入口 GOWORK=off;结果仍为开发对象,不能代替固定组合。 + +`make workspace-status` 是只读状态;`make workspace-prepare` 准备固定来源。正式 build/test 与局部开发验证分开,不能把存在 go.work/npm 链接的工作树当发布候选。Go 正式消费 `GOWORK=off`,候选代码执行环境没有 checkout token;源码获取和执行阶段分离。 + +依赖锁变更后,owner 可用 `make workspace-prepare NAME=Agent-System-Backend REFRESH_FIXED=1` +显式刷新已登记、干净且处于原基线的 detached 检出,旧提交仍由本地保存引用保留。编辑分支、 +未保存或 ignored 唯一文件、Git 操作和共享归属均拒绝刷新;不会切换已编辑组件。 + +UI 源码编辑从 Frontend 锁中解析实际 Git 提交;其包构建是显式命令。当前工作区工具的源码编辑/版本解析与 Go 覆盖分别验证,不能仅凭 UI 仓被检出就声称 npm 开发链接已生效。 + +## 在途分支与迁移 + +本轮切换不 checkout/reset/stash/clean 其他活动工作区,不批量 rebase,不重写旧提交和 tag,不删除旧物理目录或 Git 管理数据。 + +- 未同步的旧任务继续用旧提交、旧脚本和固定 gitlinks;新功能分支从最新权威 main 起步。 +- 旧任务纳入新 main 前先核对父仓与组件状态;有当前写者、Git 锁、未提交或唯一文件时由 owner 保存并安排安全同步点。文本和 API 冲突分别处理,不把旧 pin/锁批量覆盖新组合。 +- `make workspace-transition` 默认只报告迁移计划;`NAME=<组件>` 可限定范围。确认归属后显式 `ARGS=--apply` 才在新工作区准备独立源码。原仓、refs、reflog、暂存/工作树/未跟踪和 ignored 唯一文件保留。 +- 已登记嵌套组件独立保存;相同内容的重复来源可去重,但引用仍按来源保存。未知归属、冲突的重复组件、外借对象库、逃逸 symlink 或目标已有他人现场拒绝并报告,不能称迁移成功。 +- 组件分支仍是所属仓的代码;来源/命名变化后按已合入接口进行正常合并和审阅。原分支或数据不被自动删除;不能将“已复制保存”解释为语义迁移已完成。 + +迁移后的库版本以消费方实际解析为准,主干前进时不隐式切换已编辑组件。旧组件目录的 .git common-dir 可能供外部 worktree 使用;task-finish 必须核对依赖及唯一成果,删除被拒就保留现场。 + +## 验证与回退 + +真实 Git/Go fixture 验证固定取源、编辑/解除、嵌套组件、dirty/index/ignored/ref 保留、冲突、锁和越界拒绝。新 clone 的固定产品构建、RDM 完整前端二进制、当前组合和历史组合分别重放;文档检查不能替代这些能力。 + +回退用普通 PR 恢复已批准依赖、源码锁和构建规则,并重建同一解析组合;不改历史、不推断业务数据库可以逆迁移。正式验收与合入仍按 policy/delivery.md,SELF 不提升为 GATE/REPLAY,发布与共享部署保留原授权边界。 + +## 后续项目采纳 + +通用规则只维护在 Development-Guidelines;新项目固定审阅过的规范来源并填写采纳模板,选择自己的仓库映射、读取目录、编辑命令和正式构建入口。现存项目不会因上游规则合入或新包可用而自动升级、自动移除 submodule 或自动改变审批权限。 diff --git a/policy/governance.md b/policy/governance.md index 8a11844e..2280d9d9 100644 --- a/policy/governance.md +++ b/policy/governance.md @@ -1,7 +1,7 @@ # 开发门禁的执行与证据 本文件细化根 AGENTS.md 的启动、验证和回收规则。通用语义以固定的 -`deps/development-guidelines` 为准;门禁实现及回归用例随本仓版本管理。 +`components.lock.json` 固定的 Development-Guidelines 为准;门禁实现及回归用例随本仓版本管理。 需求表、设计试验、迭代调整、阶段产物、人工决策及智能体 Review/合入按 [迭代交付](delivery.md) 执行。任务卡分别记录人工批准、智能体审阅者及对象版本; 本地 evidence 仅记录 SELF 命令,不能证明人工批准或提升为 CI/独立审阅证据。 @@ -42,13 +42,15 @@ LOCAL_READY 只用于局部恢复;新任务入口始终校验严格 READY, ## 被测对象 -`make task-sync` 在父仓合并后按固定 gitlink 物化未修改组件,并核对实际组件工作树。 -组件 feature 分支若与新指针不同,先保留其分支,交给 owner 显式同步并更新组合; -不能用自动 checkout 丢弃组件分支现场。任何失败都保留现场并阻止同步成功声明。 +`make task-sync` 在父仓合并后按该提交的模式准备来源:新布局读取固定清单, +历史布局读取原 gitlink。主干前进不会自动切换已编辑组件;来源变化、未保存修改或 Git 操作 +由 owner 先处理,任何失败保留现场并阻止同步成功声明。旧目录仍可能支撑其他 worktree, +显式过渡与保存要求见 [依赖规则](dependencies.md)。 -`make test-worktree` 核对递归子模块:未初始化、冲突、指针漂移及子仓未保存改动均拒绝。 -它是组合测试和构建的前置检查。父仓未提交改动可以局部测试,但证据必须记录实际对象状态; -正式验收使用已提交的固定对象,不能仅写一个与工作树不同的 HEAD。 +`make test-worktree` 验证当前模式中的已登记来源与实际工作树;新布局的本地编辑状态可记录, +但正式 `make test/build` 从已提交的固定源码与语言图隔离物化。evidence 同时记录忽略目录中 +已登记组件的 HEAD、分支、dirty/差异与唯一内容摘要,不能只用父仓 HEAD 代表开发组合。 +历史布局继续拒绝未初始化、冲突、指针漂移及未保存子仓改动。 `task-sync` 对同一基线重复调用只核验,保留 HEAD、索引和卡片;实际合并新目标才追加一次记录。 输出完整 sync_base、记录完成后的 tested_head、checked_at 及 changed;changed 表示是否实际纳入新目标,组件仍须核对。 diff --git a/policy/merge-queue.md b/policy/merge-queue.md index 9047c747..50178684 100644 --- a/policy/merge-queue.md +++ b/policy/merge-queue.md @@ -2,7 +2,7 @@ 状态:approved(r1 条文作为实施计划基线);执行模式:manual 受控试行;更新日期:2026-10-14(Asia/Shanghai);规范采纳负责人:weichen。实际启用时间、对象和窗口以调度记录 #518 为准,候选文件不代替当前平台准入。 r1 条文来源提交为 913b214f2826a50b3dab65f79d9ebf83e84f2519;Documents 实施与测试计划 r1@ba4044d57e38d0887dd425d052abf26b20a28bf4 已于 2026-10-13 获用户「批准」。阶段结论与执行进展按 [迭代交付](delivery.md) 记录在任务主记录,候选固定后的结论保存在关联 PR 与源码外收据中;规范及计划批准不等于模式已启用。 -现行规则仍以根 AGENTS.md、[迭代交付](delivery.md)、[开发门禁](governance.md) 和已采纳 gitlink 为准。 +现行规则仍以根 AGENTS.md、[迭代交付](delivery.md)、[开发门禁](governance.md) 和已采纳的固定规范来源为准。 本分支已实施 CLI 同步/恢复及源码外证据基础,自检依据见任务主记录及固定后记录;通用条文和实施计划已经各自 PR 合入,本候选组合固定实际合入版本。用户已于 2026-10-14 明确授权当前智能体接管 #489/#488/#486,完成平台验证、试行、实际合入与清理。平台所有者操作已实际回读,隔离正反例及独立重放已完成;本轮使用单一智能体协调的 manual 窗口,原 CI 触发和全部必需作业保持,未建设自动调度。 ## 通用规范与项目职责 @@ -10,10 +10,10 @@ r1 条文来源提交为 913b214f2826a50b3dab65f79d9ebf83e84f2519;Documents 通用正文的唯一候选来源是 Development-Guidelines 的 `standards/merge-queue.md`, 配套模板为该仓 `templates/merge-queue.md`,候选内容版本 `0.1.0-draft.11`。 本仓仅细化目标、入口、阶段、预算和采纳条件,不复制通用调度正文。 -通用候选已经 [Guidelines PR #5](https://git-home.u1680832.nyat.app:30319/weichen/Development-Guidelines/pulls/5) 合入为 `2f5b19872be2a4597838a4131ad75d1be089ee5e`;本候选 `deps/development-guidelines` 已物化该固定版本及上述文件。Dev 已经 #519/#536 固定采纳并通过其精确 HEAD 的全部必需 CI。平台机制与手动写者覆盖的实际依据见 #518;受控试行的当前候选仍须独立组合测试、当前 HEAD CI 与平台准入,不把已采纳规范标成自动 enforced。 +通用候选已经 [Guidelines PR #5](https://git-home.u1680832.nyat.app:30319/weichen/Development-Guidelines/pulls/5) 合入为 `2f5b19872be2a4597838a4131ad75d1be089ee5e`;本候选 components.lock.json 固定的规范来源包含该版本及上述文件。Dev 已经 #519/#536 固定采纳并通过其精确 HEAD 的全部必需 CI。平台机制与手动写者覆盖的实际依据见 #518;受控试行的当前候选仍须独立组合测试、当前 HEAD CI 与平台准入,不把已采纳规范标成自动 enforced。 Dev 目标身份使用实际托管实例、仓库 ID 与 `refs/heads/main`;其他组件仓各有自己的目标队列。 -跨仓组合按任务中的依赖关系先交付组件,再固定父仓组合;保留其他任务已经合入的 gitlink 能力。 +跨仓组合按任务中的依赖关系先交付组件,再固定父仓组合;保留其他任务已经合入的依赖和治理能力。 队列仅安排工作,受保护分支最终准入继续由 Gitea 或等价受信入口负责。 ## 项目调度记录 @@ -113,7 +113,7 @@ SYNC_REQUIRED 不整体降级为 READY;local 与 delivery 用独立结果和 2. 在通用仓完成候选修订 Review 与其文档验证,按授权经 PR 合入;宿主采纳完整固定 SHA。 3. 另行提交实施计划,覆盖 task-sync 幂等化、恢复/写守卫兼容、源码外收据、CI 分配和能力矩阵。 4. 在隔离场景完成治理脚本正负例;涉及脚本必须运行 `make test-governance`。 -5. 跨仓 gitlink 正式推进前运行 Dev `make test`;最终对象的 CI/构建及平台准入遵循现行规则。 +5. 跨仓语言依赖或应用源码锁正式推进前运行 Dev `make test`;最终对象的 CI/构建及平台准入遵循现行规则。 6. 完成所有者平台操作和对应验证,登记真实协调者与调度 Issue,才切换新交付模式。 7. 用三个就绪任务试行,记录同步轮数、CI 次数/耗时、废弃运行、排队和恢复,复盘后决定扩大。 diff --git a/scripts/build-composition.py b/scripts/build-composition.py new file mode 100644 index 00000000..21e06406 --- /dev/null +++ b/scripts/build-composition.py @@ -0,0 +1,624 @@ +#!/usr/bin/env python3 +"""Build immutable application commits without developer workspace overlays. + +Go versions remain authoritative in go.mod; npm versions in package-lock.json. +The output manifest records the selected graph rather than creating another lock. +""" +import argparse +import hashlib +import importlib.util +import io +import json +import os +from pathlib import Path, PurePosixPath +import re +import shutil +import subprocess +import sys +import tarfile +import tempfile +from urllib.parse import urlsplit + + + +SHA = re.compile(r"[0-9a-f]{40}\Z") +IDS = re.compile(r"[A-Za-z0-9][A-Za-z0-9_-]*\Z") +BACKEND = "Agent-System-Backend" +FRONTEND = "Agent-System-Frontend" +NPM_NAME = re.compile(r"(?:@[a-z0-9][a-z0-9._~-]*/)?[a-z0-9][a-z0-9._~-]*\Z") +NPM_VERSION = re.compile(r"[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?\Z") + + +class CompositionError(Exception): + pass + + +def run(command, cwd, env, *, binary=False, quiet=False): + if not quiet: + print("[composition] " + " ".join(map(str, command)), flush=True) + result = subprocess.run(command, cwd=cwd, env=env, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, text=not binary) + if not quiet and not binary: + sys.stdout.write(result.stdout) + sys.stderr.write(result.stderr) + if result.returncode: + detail = result.stderr.decode(errors="replace") if binary else result.stderr + raise CompositionError(f"command failed ({result.returncode}): {command[0]} {detail.strip()}") + return result.stdout + + +def digest(path): + # The composer also supports standalone fixed-root wrapper fixtures. + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def tree_digest(root): + if root.is_symlink(): + raise CompositionError(f"artifact root symlink is forbidden: {root.name}") + entries = [] + for path in sorted(root.rglob("*")): + if path.is_symlink(): + raise CompositionError(f"artifact symlink is forbidden: {path.name}") + if path.is_file(): + entries.append({"path": path.relative_to(root).as_posix(), "sha256": digest(path), "size": path.stat().st_size}) + encoded = json.dumps(entries, sort_keys=True, separators=(",", ":")).encode() + return {"sha256": hashlib.sha256(encoded).hexdigest(), "files": entries} + + +def safe_relative(root, value): + if not isinstance(value, str) or not value or "\\" in value: + raise CompositionError("invalid component path") + relative = PurePosixPath(value) + if relative.is_absolute() or ".." in relative.parts or (root / value).resolve().is_relative_to(root) is False: + raise CompositionError("component path escapes root") + + +def validate_repo(repo): + if not isinstance(repo, str) or not repo or repo.startswith("-") or any(c.isspace() for c in repo): + raise CompositionError("invalid repository source") + if "://" not in repo: + if not Path(repo).is_absolute(): + raise CompositionError("repository must be an approved URL or absolute local path") + return + parsed = urlsplit(repo) + if parsed.scheme not in {"ssh", "https", "file"} or parsed.password or parsed.query or parsed.fragment: + raise CompositionError("repository URL contains credentials or unsupported transport") + if parsed.scheme == "https" and parsed.username: + raise CompositionError("repository credentials are forbidden") + if parsed.scheme == "file" and parsed.netloc not in {"", "localhost"}: + raise CompositionError("file repository must be local") + + +def tooling_identity(root, environment=None): + """Bind executed tools before importing acquisition configuration.""" + env = (os.environ if environment is None else environment).copy() + for key in ("GIT_DIR", "GIT_WORK_TREE", "GIT_INDEX_FILE", "GIT_COMMON_DIR"): + env.pop(key, None) + commit = run(["git", "rev-parse", "HEAD"], root, env, quiet=True).strip() + result = {"root_commit": commit, "files": {}} + for relative in ("scripts/build-composition.py", "scripts/workspace/transport.py"): + executing = Path(__file__).resolve().parent / relative.removeprefix("scripts/") + fixed = subprocess.run(["git", "show", f"{commit}:{relative}"], cwd=root, env=env, + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if fixed.returncode == 0: + if executing.is_symlink() or executing.read_bytes() != fixed.stdout: + raise CompositionError(f"executing tooling differs from committed source: {relative}") + mode = "committed-root" + elif (root / relative).exists(): + raise CompositionError(f"root tooling has no committed identity: {relative}") + else: + # A standalone consumer fixture can use an external composer. Its + # exact tool bytes are a separate identity, never the consumer SHA. + mode = "external-tool" + result["files"][relative] = {"sha256": digest(executing), "source": mode} + return result + + +def inputs(root, env): + commit = run(["git", "rev-parse", "HEAD"], root, env, quiet=True).strip() + if not SHA.fullmatch(commit): + raise CompositionError("root must have a committed Git revision") + documents = {} + hashes = {} + for name in ("components.json", "components.lock.json"): + committed = run(["git", "show", f"{commit}:{name}"], root, env, binary=True, quiet=True) + path = root / name + if path.is_symlink() or path.read_bytes() != committed: + raise CompositionError(f"{name} differs from committed root {commit}") + documents[name] = json.loads(committed) + hashes[name] = hashlib.sha256(committed).hexdigest() + manifest, lock = documents["components.json"], documents["components.lock.json"] + if manifest.get("schema") != 1 or not isinstance(manifest.get("components"), list): + raise CompositionError("unsupported components schema") + if lock.get("schema") != 1 or not isinstance(lock.get("components"), dict): + raise CompositionError("unsupported component lock schema") + components = {} + for item in manifest["components"]: + name = item.get("id") + if not isinstance(name, str) or not IDS.fullmatch(name) or name in components: + raise CompositionError("invalid or duplicate component id") + if item.get("path") != f".workspace/{name}": + raise CompositionError(f"invalid component path: {name}") + safe_relative(root, item["path"]) + if item.get("legacy_path"): + safe_relative(root, item["legacy_path"]) + validate_repo(item.get("repo")) + for module in item.get("modules", []): + safe_relative(root, module.get("directory", ".")) + components[name] = item + for name, value in lock["components"].items(): + if name not in components or not isinstance(value, dict) or not SHA.fullmatch(value.get("commit", "")): + raise CompositionError(f"invalid locked component: {name}") + if components[name].get("role") in {"go-library", "npm-library"}: + raise CompositionError(f"language library cannot have a competing source lock: {name}") + for name in (BACKEND, FRONTEND): + if name not in components or components[name].get("role") != "application" or name not in lock["components"]: + raise CompositionError(f"missing fixed application source: {name}") + return commit, components, lock["components"], hashes + + +def execution_environment(env): + """Acquisition-only authentication/transport never reaches npm/Go candidate code.""" + clean = env.copy() + for key in list(clean): + upper = key.upper() + if (any(word in upper for word in ("TOKEN", "SECRET", "PASSWORD", "CREDENTIAL", "API_KEY", "ACCESS_KEY")) + or upper.startswith(("GIT_CONFIG_", "GIT_SSH", "NPM_CONFIG_", "BASH_FUNC_")) + or upper in {"SSH_AUTH_SOCK", "SSH_AGENT_PID", "NODE_OPTIONS", "BASH_ENV", "ENV", "GOFLAGS", "GIT_ASKPASS", "SSH_ASKPASS", "CONTRACTS_TARBALL", "UI_TARBALL"}): + del clean[key] + clean.update(GOWORK="off", GOTOOLCHAIN="local", GOFLAGS="", CGO_ENABLED="0") + # Cache location is transport-independent state, shared by acquisition and + # offline consumers. Other npm settings can carry credentials or hooks. + for key in ("npm_config_cache", "NPM_CONFIG_CACHE"): + if env.get(key): + clean[key] = env[key] + return clean + + +def export_source(repo, commit, destination, temporary, env, *, abbreviated=False): + validate_repo(repo) + clone = temporary / (destination.name + "-git") + run(["git", "clone", "--no-checkout", "--no-hardlinks", "--", repo, str(clone)], temporary, env) + exists = subprocess.run(["git", "cat-file", "-e", commit + "^{commit}"], cwd=clone, env=env, + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL).returncode == 0 + if not exists: + run(["git", "fetch", "--no-tags", "origin", commit], clone, env) + actual = run(["git", "rev-parse", commit + "^{commit}"], clone, env, quiet=True).strip() + if not SHA.fullmatch(actual) or (actual != commit and not (abbreviated and len(commit) == 12 and actual.startswith(commit))): + raise CompositionError("application revision is not an immutable full commit") + archive = run(["git", "archive", "--format=tar", actual], clone, env, binary=True, quiet=True) + extract_archive(archive, destination) + return {"repo": repo, "commit": actual, "archive_sha256": hashlib.sha256(archive).hexdigest()} + + +def extract_archive(archive, destination): + destination.mkdir() + with tarfile.open(fileobj=io.BytesIO(archive)) as tar: + for entry in tar.getmembers(): + safe_relative(destination, entry.name) + if not (entry.isfile() or entry.isdir()): + raise CompositionError(f"source archive contains an unsupported link: {entry.name}") + tar.extractall(destination, filter="data") + + +def version(manifest, lock, *, backend_commit=None, resolved_go=None): + resolved = json.dumps({"go": manifest["go"] if resolved_go is None else resolved_go, + "npm_lock": manifest["npm"]["lock_sha256"]}, + sort_keys=True, separators=(",", ":")).encode() + return (manifest["root"]["commit"][:12] + "+backend=" + (backend_commit or lock[BACKEND]["commit"])[:12] + + "+frontend=" + lock[FRONTEND]["commit"][:12] + + "+deps=" + hashlib.sha256(resolved).hexdigest()[:12]) + + +def json_stream(output): + decoder = json.JSONDecoder() + result = [] + while output.strip(): + value, end = decoder.raw_decode(output.lstrip()) + result.append(value) + output = output.lstrip()[end:] + return result + + +def go_dependencies(source, fetch_env): + document = json.loads(run(["go", "mod", "edit", "-json"], source, fetch_env, quiet=True)) + for replacement in document.get("Replace") or []: + if not replacement["New"].get("Version"): + raise CompositionError("formal Go build forbids local directory replace") + original = {name: (source / name).read_bytes() if (source / name).exists() else None for name in ("go.mod", "go.sum")} + # Tidy locks need sums for consumed packages, not unused transitive zip files. + # Load actual build/test metadata before ending acquisition; no tests execute. + # Download may normalize sum lines even for a valid readonly consumer. Keep + # that package-manager bookkeeping in an identical disposable manifest. + with tempfile.TemporaryDirectory(prefix="composition-go-prefetch-") as directory: + isolated = Path(directory) + for name, content in original.items(): + if content is not None: + (isolated / name).write_bytes(content) + downloads = json_stream(run(["go", "mod", "download", "-json"], isolated, fetch_env, quiet=True)) + run(["go", "list", "-mod=readonly", "-deps", "-test", "./..."], source, + fetch_env | {"CGO_ENABLED": "0"}, quiet=True) + run(["go", "mod", "verify"], source, fetch_env) + modules = json_stream(run(["go", "list", "-mod=readonly", "-m", "-json", "all"], source, fetch_env, quiet=True)) + selected = [] + for module in modules: + item = {key: module[key] for key in ("Path", "Version", "Main", "Sum", "GoModSum", "GoVersion") if key in module} + if "Replace" in module: + replacement = module["Replace"] + if not replacement.get("Version"): + raise CompositionError("resolved Go graph contains a local replace") + item["Replace"] = {key: replacement[key] for key in ("Path", "Version", "Sum", "GoModSum") if key in replacement} + selected.append(item) + for name, content in original.items(): + actual = (source / name).read_bytes() if (source / name).exists() else None + if actual != content: + raise CompositionError(f"Go acquisition changed committed {name}; update the consumer first") + return {"modules": selected, "go_mod_sha256": digest(source / "go.mod"), + "go_sum_sha256": digest(source / "go.sum") if (source / "go.sum").exists() else None, + "downloads": [{key: value[key] for key in ("Path", "Version", "Sum", "GoModSum", "Origin") if key in value} for value in downloads]} + + +def npm_registry_package(location, package): + resolved = package.get("resolved", "") + if not isinstance(resolved, str): + raise CompositionError("invalid npm lock dependency") + if not resolved.startswith(("https://", "http://")): + return None + registry = urlsplit(resolved) + if (registry.scheme != "https" or registry.netloc != "registry.npmjs.org" or + registry.username or registry.password or registry.query or registry.fragment): + raise CompositionError("npm tarball source is outside the reviewed public registry") + name = package.get("name") or location.rsplit("node_modules/", 1)[-1] + version = package.get("version", "") + if (not isinstance(name, str) or not NPM_NAME.fullmatch(name) or + not isinstance(version, str) or not NPM_VERSION.fullmatch(version)): + raise CompositionError("invalid locked registry package name or version") + return name + "@" + version + + +def npm_dependencies(source, components, fetch_env): + path = source / "package-lock.json" + lock = json.loads(path.read_text()) + if lock.get("lockfileVersion", 0) < 2 or not isinstance(lock.get("packages"), dict): + raise CompositionError("frontend requires a complete npm lock") + approved = {component["repo"] for component in components.values()} + packages = {} + registry_packages = [] + for name, package in lock["packages"].items(): + if name: + safe_relative(source, name) + registry_package = npm_registry_package(name, package) + if registry_package: + registry_packages.append((name, registry_package)) + if package.get("link"): + raise CompositionError("formal npm build forbids workspace links") + for value in [package.get("resolved", ""), *package.get("dependencies", {}).values()]: + if not isinstance(value, str): + raise CompositionError("invalid npm lock dependency") + if value.startswith(("file:", "link:", "workspace:")): + raise CompositionError("formal npm build forbids local dependency overlays") + if value.startswith(("git+", "git:", "ssh:")): + repo, sep, revision = value.removeprefix("git+").rpartition("#") + if not sep or not SHA.fullmatch(revision) or repo not in approved: + raise CompositionError("npm Git dependency must use an approved source and full commit") + packages[name] = {key: package[key] for key in ("version", "resolved", "integrity") if key in package} + before = digest(path) + run(["npm", "ci", "--ignore-scripts", "--no-audit", "--no-fund"], source, fetch_env) + # npm ci normally stores tarballs without the packuments required when a + # disposable packed-package consumer re-resolves peers offline. Fetch the + # installed locked versions before candidate execution, from a fixed public + # registry with empty config and no acquisition credentials or candidate rc. + metadata_env = execution_environment(fetch_env) + with tempfile.TemporaryDirectory(prefix="composition-npm-metadata-") as directory: + isolated = Path(directory) + global_config = isolated / "empty-global.npmrc" + global_config.write_text("") + selected = {spec for location, spec in registry_packages if (source / location).is_dir()} + if selected: + run(["npm", "cache", "add", *sorted(selected), "--ignore-scripts", + "--registry=https://registry.npmjs.org", "--userconfig=/dev/null", + "--globalconfig=" + str(global_config)], isolated, metadata_env) + if digest(path) != before: + raise CompositionError("npm acquisition changed committed lock") + result = {"lock_sha256": before, "packages": packages} + contract = source / "node_modules/@agent-system/contracts" + if contract.is_dir(): + result["contracts"] = tree_digest(contract) + return result + + +def frontend_assets(source, clean_env): + dist = source / "dist" + if dist.exists(): + shutil.rmtree(dist) + run(["npm", "run", "build"], source, clean_env) + if not (dist / "index.html").is_file() or not (dist / "index.html").stat().st_size: + raise CompositionError("frontend dist requires nonempty index.html") + if not (dist / "assets").is_dir() or not any(p.is_file() and p.stat().st_size for p in (dist / "assets").rglob("*")): + raise CompositionError("frontend dist requires nonempty assets/") + return dist, tree_digest(dist) + + +def inject(dist, destination): + if destination.is_symlink(): + raise CompositionError("embed destination must not be a symlink") + if destination.exists(): + shutil.rmtree(destination) + shutil.copytree(dist, destination) + (destination / ".gitkeep").touch() + + +def provider_revision(module, downloads): + metadata = next((entry for entry in downloads if entry["Path"] == module["Path"] and entry["Version"] == module["Version"]), {}) + origin = metadata.get("Origin", {}) + commit = origin.get("Hash", "") + pseudo = re.search(r"-([0-9a-f]{12})\Z", module["Version"]) + if SHA.fullmatch(commit): + if pseudo and not commit.startswith(pseudo.group(1)): + raise CompositionError(f"Go Origin.Hash differs from selected version: {module['Path']}") + return commit, False + if pseudo: + return pseudo.group(1), True + raise CompositionError(f"cannot prove source commit for selected Go module: {module['Path']}@{module['Version']}") + + +def prepare_provider_tests(root, root_commit, components, sources, manifest, temporary, + fetch_env, rdm=None, rdm_admin=None, source_map_path=None): + """Acquire every provider and cache before constructing the execution plan.""" + graph = manifest["go"]["backend"] + source_records = {name: {"path": str(path), "commit": manifest["applications"][name]["commit"], "repo": components[name]["repo"]} + for name, path in sources.items()} + module_sources = {} + manifest["test_sources"] = {} + manifest["checks"] = [] + go_checks = [{"component": BACKEND, "path": sources[BACKEND], "mode": "readonly"}] + npm_checks = [{"component": FRONTEND, "path": sources[FRONTEND], "commands": [["npm", "test"]]}] + for name, component in components.items(): + if component.get("role") != "go-library": + continue + selected = [(mapping, next((m for m in graph["modules"] if m["Path"] == mapping["path"]), None)) + for mapping in component.get("modules", [])] + selected = [(mapping, module) for mapping, module in selected if module is not None] + if not selected: + continue + primary = next((pair for pair in selected if pair[0].get("directory", ".") == "."), selected[0]) + revision, abbreviated = provider_revision(primary[1], graph["downloads"]) + source = temporary / name + record = export_source(component["repo"], revision, source, temporary, fetch_env, abbreviated=abbreviated) + manifest["test_sources"][name] = record + source_records[name] = {"path": str(source), "commit": record["commit"], "repo": component["repo"]} + sources[name] = source + for mapping in component.get("modules", []): + module = next((m for m in graph["modules"] if m["Path"] == mapping["path"]), None) + module_root = source + module_commit = record["commit"] + if module: + module_revision, module_abbreviated = provider_revision(module, graph["downloads"]) + if not module_commit.startswith(module_revision): + module_root = temporary / (name + "-" + mapping["directory"].replace("/", "-")) + alternate = export_source(component["repo"], module_revision, module_root, temporary, fetch_env, abbreviated=module_abbreviated) + module_commit = alternate["commit"] + manifest["test_sources"][mapping["path"]] = alternate + location = module_root / mapping.get("directory", ".") + if not (location / "go.mod").is_file(): + raise CompositionError(f"declared provider module is missing: {mapping['path']}") + module_sources[mapping["path"]] = {"path": str(location), "commit": module_commit, "repo": component["repo"]} + manifest["go"][mapping["path"]] = go_dependencies(location, fetch_env) + go_checks.append({"component": name, "module": mapping["path"], "path": location, "mode": "readonly"}) + # UI is a package provider; its source identity belongs to the npm lock. + ui_component = components.get("Agent-System-UI") + if ui_component: + package_name = ui_component.get("package_name", "@agent-system/ui") + resolved = manifest["npm"]["packages"].get("node_modules/" + package_name, {}).get("resolved", "") + repo, _, commit = resolved.removeprefix("git+").rpartition("#") + if repo != ui_component["repo"] or not SHA.fullmatch(commit): + raise CompositionError("cannot prove UI source from the Frontend npm lock") + ui = temporary / "Agent-System-UI" + record = export_source(repo, commit, ui, temporary, fetch_env) + sources["Agent-System-UI"] = ui + manifest["test_sources"]["Agent-System-UI"] = record + source_records["Agent-System-UI"] = {"path": str(ui), "commit": commit, "repo": repo} + for name, source in sources.items(): + if name == FRONTEND or not (source / "package.json").is_file(): + continue + manifest.setdefault("provider_npm", {})[name] = npm_dependencies(source, components, fetch_env) + scripts = json.loads((source / "package.json").read_text()).get("scripts", {}) + commands = [["npm", "run", action] for action in ("typecheck", "test") if action in scripts] + npm_checks.append({"component": name, "path": source, "commands": commands}) + if rdm: + source_records["Agent-System-RDM"] = {"path": str(rdm), **{key: manifest["applications"]["Agent-System-RDM"][key] for key in ("commit", "repo")}} + go_checks.extend([ + {"component": "Agent-System-RDM", "path": rdm, "mode": "vendor"}, + {"component": "RDM-Backend", "path": rdm_admin, "mode": "readonly", "commit": manifest["go"]["rdm"]["backend_source"]["commit"]}, + ]) + formal_root = temporary / "Dev-test-root" + archive = run(["git", "archive", "--format=tar", root_commit], root, fetch_env, binary=True, quiet=True) + extract_archive(archive, formal_root) + source_map = {"schema": 1, "root_commit": root_commit, "components": source_records, "modules": module_sources} + map_file = source_map_path or temporary / "composition-sources.json" + map_file.parent.mkdir(parents=True, exist_ok=True) + map_file.write_text(json.dumps(source_map, indent=2) + "\n") + gates = ((["bash", "scripts/lint-boundaries.sh"], "scripts/lint-boundaries.sh"), + (["bash", "scripts/check-pins.sh"], "scripts/check-pins.sh"), + (["make", "test-governance"], "Makefile")) + project_gates = any((formal_root / required_path).is_file() for _, required_path in gates) + for command, required_path in gates: + if project_gates and not (formal_root / required_path).is_file(): + raise CompositionError(f"fixed root is missing required test gate: {required_path}") + return {"go": go_checks, "npm": npm_checks, "root": formal_root, "root_commit": root_commit, + "map_file": map_file, "rdm": rdm, + "gates": [command for command, required_path in gates if (formal_root / required_path).is_file()]} + + +def run_provider_tests(prepared, manifest, clean_env): + """Execute a completed plan; this phase has no acquisition environment.""" + for check in prepared["npm"][:1]: + for command in check["commands"]: + run(command, check["path"], clean_env) + manifest["checks"].append({"component": check["component"], "command": command, "result": "PASS"}) + for check in prepared["go"]: + for action in ("test", "vet"): + command = ["go", action, "-mod=" + check["mode"], "./..."] + run(command, check["path"], clean_env) + identity = {key: check[key] for key in ("component", "module", "commit") if key in check} + manifest["checks"].append({**identity, "command": command, "result": "PASS"}) + for check in prepared["npm"][1:]: + for command in check["commands"]: + run(command, check["path"], clean_env) + manifest["checks"].append({"component": check["component"], "command": command, "result": "PASS"}) + gate_env = clean_env | {"COMPOSITION_SOURCE_MAP": str(prepared["map_file"])} + if prepared["rdm"]: + gate_env["COMPOSITION_RDM_SOURCE"] = str(prepared["rdm"]) + for command in prepared["gates"]: + run(command, prepared["root"], gate_env) + manifest["checks"].append({"component": "Agent-System-Dev", "commit": prepared["root_commit"], "command": command, "result": "PASS"}) + + +def compose(root, target, output, rdm_source=None, source_map_path=None): + tooling = tooling_identity(root) + transport_path = Path(__file__).resolve().parent / "workspace/transport.py" + spec = importlib.util.spec_from_file_location("composition_transport", transport_path) + transport = importlib.util.module_from_spec(spec) + spec.loader.exec_module(transport) + fetch_env = transport.environment(root) + fetch_env.update(GOWORK="off", GOFLAGS="", GOTOOLCHAIN="local") + root_commit, components, lock, input_hashes = inputs(root, fetch_env) + if root_commit != tooling["root_commit"]: + raise CompositionError("root identity changed during tooling validation") + clean_env = execution_environment(fetch_env) + manifest = {"schema": 1, "kind": "agent-system-composition/1", "target": target, + "root": {"commit": root_commit, "inputs": input_hashes}, "tooling": tooling, + "applications": {}, "go": {}, "artifacts": {}, "assets": {}} + with tempfile.TemporaryDirectory(prefix="agent-system-composition-") as directory: + temporary = Path(directory) + sources = {} + for name in (FRONTEND, BACKEND): + if target == "frontend" and name == BACKEND: + continue + source = temporary / name + manifest["applications"][name] = export_source(components[name]["repo"], lock[name]["commit"], source, temporary, fetch_env) + sources[name] = source + frontend = sources[FRONTEND] + manifest["npm"] = npm_dependencies(frontend, components, fetch_env) + products = temporary / "products" + products.mkdir() + rdm = None + admin_source = None + vendored_backend = None + test_plan = None + manifest["version"] = version(manifest, lock) + if target != "frontend": + backend = sources[BACKEND] + manifest["go"]["backend"] = go_dependencies(backend, fetch_env) + manifest["version"] = version(manifest, lock) + if rdm_source: + rdm_commit = run(["git", "rev-parse", "HEAD"], rdm_source, fetch_env, quiet=True).strip() + rdm = temporary / "Agent-System-RDM" + manifest["applications"]["Agent-System-RDM"] = export_source(str(rdm_source), rdm_commit, rdm, temporary, fetch_env) + graph = go_dependencies(rdm, fetch_env) + manifest["go"]["rdm"] = graph + backend_module = next((m["path"] for m in components[BACKEND]["modules"] if m.get("directory", ".") == "."), None) + selected = next((m for m in graph["modules"] if m["Path"] == backend_module), None) + if not selected: + raise CompositionError("RDM must consume the fixed Backend as an ordinary versioned Go module") + effective = selected.get("Replace", selected) + if effective.get("Path") != backend_module or not effective.get("Version"): + raise CompositionError("RDM Backend must resolve to the approved versioned module") + # RDM's module graph is its dependency authority. The Dev app + # source lock fixes a separate application and may differ. + revision, abbreviated = provider_revision(effective, graph["downloads"]) + admin_source = temporary / "RDM-Backend" + backend_record = export_source(components[BACKEND]["repo"], revision, admin_source, + temporary, fetch_env, abbreviated=abbreviated) + graph["backend_source"] = {**backend_record, "module": backend_module, "version": effective["Version"]} + manifest["go"]["rdm_admin"] = go_dependencies(admin_source, fetch_env) + run(["go", "mod", "vendor"], rdm, fetch_env) + vendored_backend = rdm / "vendor" / backend_module + if not (vendored_backend / "web/embed.go").is_file(): + raise CompositionError("RDM vendored Backend does not contain the embed package") + graph["vendor_modules_sha256"] = digest(rdm / "vendor/modules.txt") + graph["vendor_backend_source_sha256"] = tree_digest(vendored_backend)["sha256"] + if target == "test": + test_plan = prepare_provider_tests(root, root_commit, components, sources, manifest, temporary, + fetch_env, rdm, admin_source, source_map_path) + if target == "build" and run(["git", "ls-tree", root_commit, "--", "plugins"], root, fetch_env, quiet=True).strip(): + archive = run(["git", "archive", "--format=tar", root_commit, "plugins"], root, fetch_env, binary=True, quiet=True) + root_assets = temporary / "root-assets" + extract_archive(archive, root_assets) + manifest["assets"]["plugins"] = tree_digest(root_assets / "plugins") + manifest["assets"]["plugins"]["root_commit"] = root_commit + + # All fixed sources, package caches, vendor files and root assets are + # acquired above. Candidate commands below receive only clean_env; + # there is no acquisition environment in the execution plan. + del fetch_env + dist, manifest["frontend"] = frontend_assets(frontend, clean_env) + manifest["toolchains"] = {"go": run(["go", "version"], temporary, clean_env, quiet=True).strip(), + "node": run(["node", "--version"], temporary, clean_env, quiet=True).strip(), + "npm": run(["npm", "--version"], temporary, clean_env, quiet=True).strip()} + if target != "frontend": + inject(dist, backend / "web/dist") + manifest["go"]["backend"]["embed_sha256"] = tree_digest(backend / "web/dist")["sha256"] + if rdm: + graph = manifest["go"]["rdm"] + inject(dist, admin_source / "web/dist") + manifest["go"]["rdm_admin"]["embed_sha256"] = tree_digest(admin_source / "web/dist")["sha256"] + graph["admin_version"] = version(manifest, lock, backend_commit=graph["backend_source"]["commit"], + resolved_go={"rdm": graph["modules"], "admin": manifest["go"]["rdm_admin"]}) + inject(dist, vendored_backend / "web/dist") + graph["vendor_backend_dist_sha256"] = tree_digest(vendored_backend / "web/dist")["sha256"] + if target == "test": + run_provider_tests(test_plan, manifest, clean_env) + else: + for name, package in (("agent-system", "./cmd/agent-system"), ("storage-migrate", "./cmd/storage-migrate")): + flags = "-s -w" + (" -X main.version=" + manifest["version"] if name == "agent-system" else "") + run(["go", "build", "-mod=readonly", "-trimpath", "-buildvcs=false", "-ldflags=" + flags, "-o", str(products / name), package], backend, clean_env) + if rdm: + run(["go", "build", "-mod=vendor", "-trimpath", "-buildvcs=false", "-ldflags=-s -w", "-o", str(products / "agent-system-rdm-product"), "."], rdm, clean_env) + run(["go", "build", "-mod=readonly", "-trimpath", "-buildvcs=false", + "-ldflags=-s -w -X main.version=" + graph["admin_version"], + "-o", str(products / "agent-system-admin"), "./cmd/agent-system"], admin_source, clean_env) + for artifact in products.iterdir(): + manifest["artifacts"][artifact.name] = {"sha256": digest(artifact), "size": artifact.stat().st_size} + if tooling_identity(root, clean_env) != tooling: + raise CompositionError("executing tooling changed during composition") + # Publish only after all required build/test commands succeeded. + output.mkdir(parents=True, exist_ok=True) + for artifact in products.iterdir(): + shutil.copy2(artifact, output / artifact.name) + if "plugins" in manifest["assets"]: + destination = output / "plugins" + if destination.exists(): + shutil.rmtree(destination) + shutil.copytree(root_assets / "plugins", destination) + if target == "frontend": + destination = output / "frontend-dist" + if destination.exists(): + shutil.rmtree(destination) + shutil.copytree(dist, destination) + pending = output / ".resolved-manifest.json.tmp" + pending.write_text(json.dumps(manifest, indent=2, sort_keys=True) + "\n") + pending.replace(output / "resolved-manifest.json") + print(f"[composition] complete: {target}; manifest={output / 'resolved-manifest.json'}", flush=True) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, default=Path(__file__).resolve().parents[1]) + parser.add_argument("--target", required=True, choices=("frontend", "build", "test")) + parser.add_argument("--output", type=Path) + parser.add_argument("--rdm-source", type=Path) + parser.add_argument("--source-map", type=Path, help="Write source identity map used by test gates; paths exist only during this run") + args = parser.parse_args() + root = args.root.resolve() + try: + compose(root, args.target, (args.output or root / "bin").resolve(), args.rdm_source.resolve() if args.rdm_source else None, + args.source_map.resolve() if args.source_map else None) + except (CompositionError, OSError, ValueError, KeyError, TypeError) as error: + print(f"composition: {error}", file=sys.stderr) + return 2 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) 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-pins.sh b/scripts/check-pins.sh index 219a017e..e176dbba 100755 --- a/scripts/check-pins.sh +++ b/scripts/check-pins.sh @@ -5,6 +5,54 @@ set -euo pipefail root=$(cd "$(dirname "$0")/.." && pwd) cd "$root" +# New layouts have one version authority per dependency kind. Inspect the formal +# source map when supplied, otherwise verify prepared fixed application sources. +if [ -f components.json ]; then + python3 - "$root" <<'PYCODE' +import importlib.util, json, os, pathlib, subprocess, sys +root = pathlib.Path(sys.argv[1]) +sys.path.insert(0, str(root / "scripts")) +spec = importlib.util.spec_from_file_location("component_source", root / "scripts/component-source.py") +resolver = importlib.util.module_from_spec(spec); spec.loader.exec_module(resolver) +try: + document = json.loads((root / "components.json").read_text()) + components = {entry["id"]: entry for entry in document["components"]} + marker = os.environ.get("COMPOSITION_SOURCE_MAP") + if marker: + names = [name for name in json.loads(pathlib.Path(marker).read_text())["components"] if name in components] + else: + names = [name for name, entry in components.items() if entry["role"] == "application"] + for name in names: + component = components[name] + path = resolver.source_path(root, name) + if component["role"] == "application" and (path / ".gitmodules").exists(): + raise ValueError("legacy gitlink declaration remains in fixed source: " + name) + for module in component.get("modules", []): + directory = path / module.get("directory", ".") + if not (directory / "go.mod").is_file(): + raise ValueError("declared module source is missing: " + name) + env = os.environ | {"GOWORK": "off", "GOTOOLCHAIN": "local"} + result = subprocess.run(["go", "mod", "edit", "-json"], cwd=directory, env=env, capture_output=True, text=True) + if result.returncode: raise ValueError("Go module cannot be parsed: " + name) + parsed = json.loads(result.stdout) + if parsed["Module"]["Path"] != module["path"]: + raise ValueError("module identity differs from approved mapping: " + name) + if any(not replacement["New"].get("Version") for replacement in parsed.get("Replace") or []): + raise ValueError("local replace in fixed source: " + name) + npm_lock = path / "package-lock.json" + if npm_lock.exists(): + for entry in json.loads(npm_lock.read_text()).get("packages", {}).values(): + if entry.get("link") or str(entry.get("resolved", "")).startswith(("file:", "link:")): + raise ValueError("local npm overlay in fixed source: " + name) + print("ok fixed source " + name) + if not names: raise ValueError("fixed application sources are missing") +except (ValueError, KeyError, TypeError, OSError) as error: + print("pin: " + str(error), file=sys.stderr); sys.exit(1) +print("version authorities ok (source lock / go.mod / npm lock; no gitlink alignment)") +PYCODE + exit $? +fi + fail=0 pin_of() { diff --git a/scripts/check-worktree.py b/scripts/check-worktree.py index a9503cc4..d8517842 100644 --- a/scripts/check-worktree.py +++ b/scripts/check-worktree.py @@ -1,14 +1,26 @@ #!/usr/bin/env python3 """Fail closed before task synchronization, verification, or worktree disposal.""" import os +import hashlib from pathlib import Path import subprocess import sys +from workspace.common import WorkspaceError + def git(repo, *args): - result = subprocess.run(["git", "-C", str(repo), *args], stdout=subprocess.PIPE, - stderr=subprocess.PIPE) + command = ["git", "-C", str(repo)] + # Retired absorbed metadata may outlive its configured work tree. Inspect + # its refs/registrations without chdir to that absent checkout. + if (repo / "HEAD").is_file() and (repo / "config").is_file() and not (repo / ".git").exists(): + command += ["--git-dir=" + str(repo), "--work-tree=" + str(repo)] + environment = os.environ.copy() + environment["GIT_OPTIONAL_LOCKS"] = "0" + for variable in ("GIT_DIR", "GIT_WORK_TREE", "GIT_INDEX_FILE", "GIT_COMMON_DIR"): + environment.pop(variable, None) + result = subprocess.run([*command, *args], stdout=subprocess.PIPE, + stderr=subprocess.PIPE, env=environment) if result.returncode: raise RuntimeError(f"Git check failed in {repo}: {' '.join(args)}") return result.stdout @@ -103,6 +115,143 @@ def materialize(repo): materialize(child) +def component_manifest(repo): + from workspace.manifest import Manifest + return Manifest(repo) if (repo / "components.json").exists() else None + + +def prepare_rules(repo): + """Resolve startup reading before task writes, using an external fixed cache.""" + from workspace.cli import process_environment + from workspace.git import Git + manifest = component_manifest(repo) + if manifest is None: + return + rules = [entry for entry in manifest.select() if entry["role"] == "guidelines"] + if len(rules) != 1 or rules[0]["id"] not in manifest.lock: + raise RuntimeError("exactly one fixed guidelines source is required before READY") + component = rules[0] + commit = manifest.lock[component["id"]]["commit"] + cache = Path(os.environ.get("XDG_CACHE_HOME", Path.home() / ".cache")) / "agent-system" / "rules" + if not cache.is_absolute() or cache.resolve().is_relative_to(repo): + raise RuntimeError("rules cache must be an absolute external directory") + for parent in (cache, *cache.parents): + if parent.is_symlink(): + raise RuntimeError("rules cache must not traverse symbolic links") + cache.mkdir(parents=True, exist_ok=True) + identity = hashlib.sha256((component["repo"] + "\n" + commit).encode()).hexdigest() + source = cache / identity + lock = cache / (identity + ".lock") + try: + descriptor = os.open(lock, os.O_CREAT | os.O_EXCL | os.O_WRONLY, 0o600) + except FileExistsError as error: + raise RuntimeError("fixed rules cache has an active owner; retry without removing its lock") from error + os.close(descriptor) + try: + helper = Git(process_environment(repo)) + if source.exists(): + actual = helper.safe(source, component["repo"]) + if actual["head"] != commit or actual["branch"]: + raise RuntimeError("fixed rules cache differs from its declared source; preserve it for its owner") + else: + helper.call(cache, "clone", "--no-checkout", "--", component["repo"], str(source)) + helper.call(source, "fetch", "--no-tags", "origin", commit) + helper.call(source, "checkout", "--detach", commit) + helper.safe(source, component["repo"]) + for required in ("core/baseline.md", "workflows/delivery.md"): + path = source / required + if not path.is_file() or path.is_symlink() or not path.resolve().is_relative_to(source): + raise RuntimeError(f"fixed rules source is missing required reading: {required}") + print(f"[rules] path={source} commit={commit}; required-reading root verified") + finally: + lock.unlink() + + +def prepare_sources(repo): + result = subprocess.run([sys.executable, str(repo / "scripts/workspace.py"), "--root", str(repo), "prepare"], + stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + if result.returncode: + raise RuntimeError(result.stderr.strip() or "fixed source preparation failed; owner must reconcile") + print("[workspace] fixed application, documentation and guidelines sources prepared; edit branches preserved") + + +def inspect_source(child, mode, removal_roots): + if child.is_symlink() or (child / ".git").is_symlink(): + raise RuntimeError(f"component Git identity is a symbolic link: {child}") + if not (child / ".git").exists() or Path(text(child, "rev-parse", "--show-toplevel")).resolve() != child: + raise RuntimeError(f"component has borrowed or missing Git identity: {child}") + check_operations(child) + if mode == "finish": + check_component_worktrees(child, removal_roots) + check_clean(child, ignored=True) + if local_work_outside(child, text(child, "rev-parse", "HEAD")): + raise RuntimeError(f"component has unpreserved local refs: {child}; preserve its source before removal") + + +def inspect_source_tree(root, mode, removal_roots, seen): + for current, directories, files in os.walk(root, followlinks=False): + child = Path(current) + directories[:] = [name for name in directories if name != ".git"] + if ".git" in files or (child / ".git").exists(): + if child not in seen: + seen.add(child) + inspect_source(child, mode, removal_roots) + + +def legacy_components(repo, manifest, mode, removal_roots): + """Keep retired physical roots and nested repositories visible after gitlink removal.""" + from workspace.common import safe_path + seen = set() + for component in manifest.select(): + relative = component.get("legacy_path") + if not relative: + continue + root = safe_path(repo, relative) + if not root.exists(): + continue + if mode == "materialize": + print(f"[transition] retained legacy source {relative}; inspect make workspace-transition NAME={component['id']} before explicit ARGS=--apply") + inspect_source_tree(root, mode, removal_roots, seen) + + +def check_retained_metadata(repo, removal_roots): + """An absent legacy checkout can still own external worktrees via absorbed metadata.""" + modules = Path(text(repo, "rev-parse", "--absolute-git-dir")) / "modules" + if not modules.exists(): + return + for current, directories, files in os.walk(modules, followlinks=False): + directories[:] = [name for name in directories if name not in + {"objects", "refs", "logs", "hooks", "worktrees", "lfs", "info"}] + metadata = Path(current) + if "HEAD" not in files or "config" not in files: + continue + for record in worktrees(metadata): + other = Path(os.fsdecode(record[0][9:])).resolve() + if not any(other == root or root in other.parents for root in removal_roots): + raise RuntimeError(f"registered component worktree {other} depends on retained metadata in {metadata}; preserve it before removal") + check_operations(metadata) + if local_work_outside(metadata, text(metadata, "rev-parse", "HEAD")): + raise RuntimeError(f"retained component metadata has unpreserved local refs: {metadata}") + + +def ordinary_components(repo, mode, removal_roots=()): + manifest = component_manifest(repo) + if manifest is None: + return + from workspace.common import safe_path + operation = safe_path(repo, ".workspace/.operation.lock") + if operation.exists(): + raise RuntimeError("active workspace operation lock; preserve it for its owner") + seen = set() + for item in manifest.select(): + child = safe_path(repo, item["path"]) + if child.exists(): + inspect_source(child, mode, removal_roots) + seen.add(child) + inspect_source_tree(child, mode, removal_roots, seen) + legacy_components(repo, manifest, mode, removal_roots) + + def local_work_outside(child, expected): """2026-10-05 修复:pinned-history 检查此前用 --all --reflog,把 refs/remotes 也 计入——pin 在 feature 顶端的子仓因 origin/main 不在 pin 历史内而永远无法 finish @@ -110,6 +259,10 @@ def local_work_outside(child, expected): 不在任何远端跟踪引用历史内的提交才算。克隆默认分支停在 origin/main 顶端、 reflog 里的检出轨迹等「远端有副本」的状态一律不算;stash 恒为本地独有。""" candidates = git(child, "rev-list", "--branches", "--not", expected).split() + for row in git(child, "for-each-ref", "--format=%(objectname) %(refname)").splitlines(): + tip, ref = row.split(b" ", 1) + if not ref.startswith(b"refs/remotes/"): + candidates.append(tip) for line in git(child, "reflog", "show", "HEAD", "--format=%H").splitlines(): tip = line.strip() if tip: @@ -151,26 +304,37 @@ def check_finish_root(repo): def main(): mode = sys.argv[1] if len(sys.argv) > 1 else "verify" - if mode not in ("verify", "before-sync", "before-update", "materialize", "after-sync", "finish"): - raise RuntimeError("usage: check-worktree.py [verify|before-sync|before-update|materialize|after-sync|finish]") + if mode not in ("rules", "verify", "before-sync", "before-update", "materialize", "after-sync", "finish"): + raise RuntimeError("usage: check-worktree.py [rules|verify|before-sync|before-update|materialize|after-sync|finish]") repo = Path(text(Path.cwd(), "rev-parse", "--show-toplevel")).resolve() + if mode == "rules": + prepare_rules(repo) + return check_operations(repo) removal_roots = () if mode == "finish": check_finish_root(repo) removal_roots = (repo, Path(text(repo, "rev-parse", "--absolute-git-dir")).resolve()) - if mode in ("before-sync", "after-sync", "finish"): - check_clean(repo, ignored=(mode == "finish")) + if mode in ("before-sync", "after-sync"): + check_clean(repo) + manifest = component_manifest(repo) if mode == "materialize": - materialize(repo) - else: + if manifest is None: + materialize(repo) + else: + prepare_sources(repo) + elif manifest is None: check_children(repo, mode, removal_roots) + ordinary_components(repo, mode, removal_roots) + if mode == "finish": + check_retained_metadata(repo, removal_roots) + check_clean(repo, ignored=True) print(f"[worktree] {mode}: recursive component checks passed") if __name__ == "__main__": try: main() - except RuntimeError as exc: + except (RuntimeError, WorkspaceError, ValueError, OSError) as exc: print(f"ERROR: {exc}", file=sys.stderr) sys.exit(1) diff --git a/scripts/component-check.py b/scripts/component-check.py new file mode 100644 index 00000000..41d17209 --- /dev/null +++ b/scripts/component-check.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python3 +"""Prepare selected fixed sources and run explicitly local component checks.""" +import argparse +from contextlib import contextmanager +import os +from pathlib import Path +import subprocess +import sys +import tempfile + +from workspace.cli import Workspace, process_environment +from workspace.common import WorkspaceError +from workspace.state import State + +SINGLE = {"test-backend": "Agent-System-Backend", "test-backend-pg": "Agent-System-Backend", + "test-core": "Agent-System-Core", "test-agentcmd": "Agent-Command", + "test-frontend": "Agent-System-Frontend", "test-ui": "Agent-System-UI", + "test-multi-instance": "Agent-System-Backend", "eval-deliverables": "Agent-System-Backend", + "dev-backend": "Agent-System-Backend", "dev-frontend": "Agent-System-Frontend"} +GO_CHECKS = {"test-backend", "test-backend-pg", "test-core", "test-agentcmd", + "test-libs", "test-multi-instance", "eval-deliverables"} + + +def run(command, cwd, env): + print("[component-check] " + " ".join(map(str, command)), flush=True) + result = subprocess.run(command, cwd=cwd, env=env) + if result.returncode: + raise WorkspaceError(f"local component command failed ({result.returncode})") + + +def prepare_local_source(workspace, component): + """Repeated local npm checks may reuse only recognized generated directories.""" + record = workspace.state.data["components"].get(component["id"]) + path = workspace.root / component["path"] + if record and record.get("mode") == "versioned" and (path / "package.json").is_file(): + actual = workspace.git.safe(path, component["repo"], clean=False) + commit, source = workspace.baseline(component) + generated = ("node_modules/", "dist/") + if actual["head"] != commit or actual["branch"] or actual["changes"] or any(not name.startswith(generated) for name in actual["ignored"]): + raise WorkspaceError(f"local source or ignored unique files require owner coordination: {component['id']}") + record.update(baseline=commit, source=source) + workspace.state.save() + return + workspace.prepare_one(component) + + +@contextmanager +def check_sources(workspace, selected, target, overlay): + paths = {component["id"]: workspace.root / component["path"] for component in selected} + fixed = [component for component in selected + if workspace.state.data["components"][component["id"]].get("mode") == "versioned"] + if overlay or target not in GO_CHECKS or not fixed: + yield paths + return + # Go tests can create ignored outputs (including Python bytecode). Keep + # strict source guards and execute fixed commits in owned disposable clones. + # Editable sources and explicit overlays still exercise the owner's code. + with tempfile.TemporaryDirectory(prefix="component-check-") as temporary: + area = Path(temporary) + for component in fixed: + name = component["id"] + source = paths[name] + actual = workspace.git.safe(source, component["repo"]) + commit = workspace.state.data["components"][name]["baseline"] + if actual["head"] != commit or actual["branch"]: + raise WorkspaceError(f"fixed source changed before local check: {name}") + destination = area / name + workspace.git.call(area, "clone", "--no-checkout", "--no-hardlinks", "--", str(source), str(destination)) + workspace.git.call(destination, "checkout", "--detach", commit) + paths[name] = destination + print(f"[component-check] fixed check snapshot {name} commit={commit}", flush=True) + yield paths + + +def check(root, target, overlay): + root = root.resolve() + if target in ("test-backend-pg", "test-multi-instance") and not os.environ.get("AGENT_PG_TEST_DSN"): + raise WorkspaceError("AGENT_PG_TEST_DSN required; real PostgreSQL gate is not skipped") + if target == "test-backend-pg" and not os.environ.get("AGENT_REDIS_TEST_ADDR"): + raise WorkspaceError("AGENT_REDIS_TEST_ADDR required; real Redis gate is not skipped") + workspace = Workspace(root) + names = [SINGLE[target]] if target in SINGLE else (["Agent-Native", "Agent-Intent", "Agent-Squad"] if target == "test-libs" else ["Agent-System-Backend", "Agent-System-Frontend"]) + selected = [workspace.manifest.select(name)[0] for name in names] + with workspace.state.operation(): + workspace.state = State(root) + if any(component["role"] in ("go-library", "npm-library") for component in selected): + for component in workspace.manifest.select(fixed=True): + if component["role"] == "application": + prepare_local_source(workspace, component) + for component in selected: + prepare_local_source(workspace, component) + workspace.snapshot() + env = process_environment(root) + if overlay: + workspace.go.check_owned() + if not workspace.state.data.get("go_work") or not (root / "go.work").is_file(): + raise WorkspaceError("LOCAL_OVERLAY=1 requires a registered go.work; use component-edit first") + env["GOWORK"] = str(root / "go.work") + else: + env["GOWORK"] = "off" + print(f"[component-check] local developer sources; GOWORK={env['GOWORK']}; registered edit branches and unsaved code retained", flush=True) + with check_sources(workspace, selected, target, overlay) as paths: + run_checks(root, target, selected, names, paths, env) + + +def run_checks(root, target, selected, names, paths, env): + if target == "dev": + print("Backend: make dev-backend [LOCAL_OVERLAY=1]\nFrontend: make dev-frontend\nPrivate module transport is scoped to those processes.") + return + path = paths[names[0]] + if target == "dev-backend": + run(["go", "run", "./cmd/agent-system", "serve", "--addr", "127.0.0.1:8787", "--data", str(root / "data"), "--plugins", str(root / "plugins")], path, env) + elif target == "dev-frontend": + run(["npm", "ci", "--ignore-scripts", "--no-fund", "--no-audit"], path, env) + run(["npm", "run", "dev"], path, env) + elif target == "test-multi-instance": + suite = root / "tests/integration/multi-instance" + binary = suite / ".build/agent-system" + binary.parent.mkdir(parents=True, exist_ok=True) + run(["go", "build", "-mod=readonly", "-o", str(binary), "./cmd/agent-system"], path, env | {"CGO_ENABLED": "0"}) + run(["go", "test", "-mod=readonly", "-count=1", "-timeout=15m", "."], suite, env | {"AGENT_BIN": str(binary)}) + elif target == "eval-deliverables": + run(["go", "test", "-mod=readonly", "./eval/", "./internal/quality/", "-count=1"], path, env) + elif target in ("test-frontend", "test-ui"): + run(["npm", "ci", "--ignore-scripts", "--no-fund", "--no-audit"], path, env) + if target == "test-ui": + run(["npm", "exec", "--offline", "--", "tsc", "--noEmit"], path, env) + run(["npm", "exec", "--offline", "--", "vitest", "run"], path, env) + run(["node", "scripts/check-knip.mjs"], path, env) + else: + for component in selected: + source = paths[component["id"]] + modules = component.get("modules", []) if target == "test-libs" else [{"directory": "."}] + for module in modules: + directory = source / module.get("directory", ".") + if target in ("test-libs", "test-agentcmd"): + run(["go", "vet", "-mod=readonly", "./..."], directory, env) + run(["go", "test", "-mod=readonly", "-count=1", "./..."], directory, env) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, default=Path(__file__).resolve().parents[1]) + parser.add_argument("--target", choices=(*SINGLE, "test-libs", "dev"), required=True) + parser.add_argument("--overlay", action="store_true") + args = parser.parse_args() + try: + check(args.root, args.target, args.overlay) + except (WorkspaceError, OSError, ValueError) as error: + print(f"component-check: {error}", file=sys.stderr) + raise SystemExit(1) diff --git a/scripts/component-source.py b/scripts/component-source.py new file mode 100644 index 00000000..38d4574a --- /dev/null +++ b/scripts/component-source.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +"""Resolve governance inputs from a formal source map or the owner's checkout.""" +import json +import os +from pathlib import Path +import re +import sys + +LEGACY = {"Agent-System-Backend": "modules/backend", "Agent-System-Frontend": "modules/frontend", + "Agent-System-Core": "modules/core", "Agent-System-UI": "modules/ui", + "Agent-Native": "deps/agent-native", "Agent-Intent": "deps/agent-intent", "Agent-Squad": "deps/agent-squad"} +SHA = re.compile(r"[0-9a-f]{40}\Z") + + +def source_path(root, name): + if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9_-]*", name): + raise ValueError("invalid component identifier") + marker = os.environ.get("COMPOSITION_SOURCE_MAP") + if not marker: + relative = ".workspace/" + name if (root / "components.json").exists() else LEGACY[name] + path = root / relative + else: + source_map = Path(marker) + if not source_map.is_absolute() or source_map.is_symlink() or not source_map.is_file(): + raise ValueError("composition source map must be an absolute regular file") + document = json.loads(source_map.read_text()) + if document.get("schema") != 1 or not SHA.fullmatch(str(document.get("root_commit", ""))): + raise ValueError("invalid composition source map identity") + manifest = json.loads((root / "components.json").read_text()) + declared = [entry for entry in manifest["components"] if entry.get("id") == name] + item = document.get("components", {}).get(name) + if len(declared) != 1 or not isinstance(item, dict) or item.get("repo") != declared[0].get("repo") or not SHA.fullmatch(str(item.get("commit", ""))): + raise ValueError("invalid isolated component identity: " + name) + locked = json.loads((root / "components.lock.json").read_text())["components"].get(name) + if locked and item["commit"] != locked["commit"]: + raise ValueError("isolated component differs from locked source: " + name) + path = Path(item.get("path", "")) + if not path.is_absolute(): + raise ValueError("isolated component path must be absolute: " + name) + if not path.is_dir() or path.resolve() != path.absolute(): + raise ValueError("component source is missing or traverses a symbolic link: " + name) + return path + + +if __name__ == "__main__": + try: + if len(sys.argv) != 2: + raise ValueError("usage: component-source.py ") + print(source_path(Path(__file__).resolve().parents[1], sys.argv[1])) + except (OSError, ValueError, KeyError, TypeError) as error: + print("component-source: " + str(error), file=sys.stderr) + raise SystemExit(1) diff --git a/scripts/e2e.sh b/scripts/e2e.sh index bc32a1d3..fd941004 100755 --- a/scripts/e2e.sh +++ b/scripts/e2e.sh @@ -1,22 +1,22 @@ #!/usr/bin/env bash # e2e.sh —— U4 运行验收一条龙(真实浏览器:Playwright × RDM 审计工作区)。 # -# 动线(与 frontend/e2e/rdm-audit.spec.ts 的环境契约一一对应): -# 1. 构建:RDM 二进制(RDM 仓 origin/main 临时 worktree,pins 物化) -# + 基座 CLI(本 worktree modules/backend,建号用) -# + frontend dist(本 worktree modules/frontend) +# 动线(与 Frontend e2e/rdm-audit.playwright.ts 的环境契约一一对应): +# 1. 构建:版本化候选从固定 Dev 组合取得 RDM、同源基座 CLI 与 Frontend dist; +# 历史候选继续按原 gitlink 和 pins 路径物化。 # 2. 种子:RDM -bootstrap-admin(域管理员)→ 基座 user create(登录账号) # → serve(auth on)→ API rdm.project.create×2 + rdm.ingest(主项目) # 3. 验收:vite preview(dist+/api 代理)→ npx playwright test # 4. 收尾:停 serve/preview,保存认证/失败工件到 $E2E_OUT # -# 用法:bash scripts/e2e.sh [--seed-only] +# 用法:bash scripts/e2e.sh [--seed-only|--build-only] # --seed-only 只做构建+种子+起服务(留端口与路径在 stdout,供人工/调试) +# --build-only 只构建固定产物;不建号、不起进程、不运行浏览器或模型验收 # 环境变量: # RDM_REPO RDM 仓路径(默认 <本仓上级>/Agent-System-RDM) # E2E_API_PORT/E2E_UI_PORT 服务端口(默认 18791/4173) # E2E_OWNER/E2E_PASSWORD 登录账号(默认 e2e-auditor/E2eAudit#2026) -# E2E_PASSWORD2 首次登录后的设密结果(默认 E2eAudit#2026b;种子命令用它) +# E2E_PASSWORD2 首次登录后的设密结果(默认 E2eAudit#2026b) # E2E_PROJECT_MAIN/E2E_PROJECT_ISOLATED 项目名(默认 审计演示项目/隔离检查项目) # E2E_OUT 工件目录(默认 .tmp/e2e/;.gitignore 已覆盖 .tmp) # 依赖:go、node/npm、curl;首次运行会 npx playwright install chromium。 @@ -26,7 +26,13 @@ DEV_ROOT=$(git -C "$(dirname "$0")/.." rev-parse --show-toplevel) cd "$DEV_ROOT" SEED_ONLY=0 -[ "${1:-}" = "--seed-only" ] && SEED_ONLY=1 +BUILD_ONLY=0 +case "${1:-}" in + --seed-only) SEED_ONLY=1 ;; + --build-only) BUILD_ONLY=1 ;; + "") ;; + *) echo "usage: scripts/e2e.sh [--seed-only|--build-only]" >&2; exit 2 ;; +esac RDM_REPO=${RDM_REPO:-"$DEV_ROOT/../Agent-System-RDM"} API_PORT=${E2E_API_PORT:-18791} @@ -51,50 +57,101 @@ command -v curl >/dev/null || die "curl not found" [ "$(git -C "$RDM_REPO" rev-parse --is-inside-work-tree 2>/dev/null)" = true ] \ || die "RDM repo not found at $RDM_REPO (set RDM_REPO)" +if [ "$BUILD_ONLY" != 1 ]; then for p in "$API_PORT" "$UI_PORT"; do if timeout 2 bash -c "echo > /dev/tcp/127.0.0.1/$p" 2>/dev/null; then die "port $p already in use (set E2E_API_PORT/E2E_UI_PORT)" fi done +fi -# ── 1. 构建 ───────────────────────────────────────────── -# RDM 源码经 git archive 从本地对象导出(不建 worktree、不触远端——Gitea 抖动时 -# submodule 克隆会挂死);pins/* 从 RDM 主检出的已物化 submodule 快照拷贝(cp 排除 -# .git,39MB 级),构建输入由此固定为 RDM origin/main + 其 gitlink 指向的本地内容。 -log "build RDM binary (archive origin/main + snapshot pins from local checkout)" -RDM_WT="$OUT/rdm-src" -RDM_SHA=$(git -C "$RDM_REPO" rev-parse origin/main) || die "no origin/main in RDM repo" -mkdir -p "$RDM_WT" -git -C "$RDM_REPO" archive "$RDM_SHA" | tar -x -C "$RDM_WT" -# 主检出 pins 对齐 gitlink(本地对象已有时秒回;此时才需要网络 fetch 一次)。 -git -C "$RDM_REPO" submodule update --init --recursive --quiet \ - || die "materialize RDM pins failed (is the RDM checkout reachable?)" -PIN_SHA_MAIN=$(git -C "$RDM_REPO/pins/agent-system-backend" rev-parse HEAD) -PIN_SHA_WANT=$(git -C "$RDM_REPO" ls-tree "$RDM_SHA" pins/agent-system-backend | awk '{print $3}') -[ "$PIN_SHA_MAIN" = "$PIN_SHA_WANT" ] \ - || die "RDM checkout pins/backend ($PIN_SHA_MAIN) != origin/main pin ($PIN_SHA_WANT); git -C $RDM_REPO submodule update first" -mkdir -p "$RDM_WT/pins" -tar -C "$RDM_REPO/pins" --exclude=.git -cf - agent-system-backend | tar -C "$RDM_WT/pins" -xf - +API_PID="" +UI_PID="" cleanup() { - [ -n "${API_PID:-}" ] && { kill "$API_PID" 2>/dev/null || true; wait "$API_PID" 2>/dev/null || true; } - # Preview runs directly as one owned Vite process. Verify its command before - # signaling: a recycled PID must never stop another worktree's process. - if [ -n "${UI_PID:-}" ] && ps -p "$UI_PID" -o args= 2>/dev/null | rg -Fq -- "vite preview --port $UI_PORT"; then + if [ -n "${API_PID:-}" ]; then kill "$API_PID" 2>/dev/null || true; wait "$API_PID" 2>/dev/null || true; fi + # Preview is a single owned Vite process. Check its command before signaling + # so a recycled PID cannot stop a process from another worktree. + if [ -n "${UI_PID:-}" ] && ps -p "$UI_PID" -o args= 2>/dev/null | rg -Fq -- "vite preview --outDir $FRONTEND_DIST --port $UI_PORT"; then kill "$UI_PID" 2>/dev/null || true fi } trap cleanup EXIT -(cd "$RDM_WT" && go build -o "$OUT/agent-system-rdm" .) || die "rdm build failed" -log "rdm binary: $OUT/agent-system-rdm (RDM@${RDM_SHA:0:12}, pins@${PIN_SHA_WANT:0:12})" -log "build base CLI (user create) from the same pinned backend as the RDM binary" -# 版本一致性:建号 CLI 必须与被测 RDM 二进制共用同一基座 pin——用 Dev 顶层 -# backend(main 最新)建号会把库迁到更高 schema,RDM pins(较旧)打不开。 -(cd "$RDM_WT/pins/agent-system-backend" && go build -o "$OUT/agent-system" ./cmd/agent-system) \ - || die "backend cli build failed" +# ── 1. 构建 ───────────────────────────────────────────── +RDM_SHA=$(git -C "$RDM_REPO" rev-parse origin/main) || die "no origin/main in RDM repo" +RDM_MODULE=$(git -C "$RDM_REPO" show "$RDM_SHA:go.mod" | awk '$1 == "module" { print $2; exit }') +if [ -f "$DEV_ROOT/components.json" ] && [ "$RDM_MODULE" = "git-ssh.u1680832.nyat.app/weichen/Agent-System-RDM.git" ]; then + log "build versioned RDM and matching base CLI through the fixed Dev composition" + source "$DEV_ROOT/scripts/svc.sh" + RUNTIME="$OUT" + ENV_NAME=e2e-build + RDM_SRC_DIR="$RDM_REPO" + COMPOSITION_ROOT="$DEV_ROOT" + RDM_WT=$(materialize_rdm_commit "$RDM_SHA" "${RDM_SHA:0:12}") || die "versioned RDM composition failed" + cp "$RDM_WT/bin/agent-system-rdm" "$OUT/agent-system-rdm" + cp "$RDM_WT/bin/agent-system-admin" "$OUT/agent-system" + # Prepare the owner-controlled fixed source, then keep npm/cache/browser files + # in this run's independent archive, rather than modifying its .workspace. + python3 "$DEV_ROOT/scripts/workspace.py" --root "$DEV_ROOT" prepare --name Agent-System-Frontend >/dev/null || die "fixed Frontend preparation failed" + python3 "$DEV_ROOT/scripts/workspace.py" --root "$DEV_ROOT" verify --name Agent-System-Frontend >/dev/null || die "Frontend differs from fixed source" + FRONTEND_PREPARED=$(python3 "$DEV_ROOT/scripts/component-source.py" Agent-System-Frontend) || die "Frontend source identity unavailable" + FRONTEND_DIR="$OUT/frontend-src" + mkdir -p "$FRONTEND_DIR" + git -C "$FRONTEND_PREPARED" archive HEAD | tar -x -C "$FRONTEND_DIR" + python3 - "$DEV_ROOT" "$FRONTEND_DIR" <<'NPM_ENV' +import importlib.util, pathlib, subprocess, sys +root = pathlib.Path(sys.argv[1]); sys.path.insert(0, str(root / "scripts")) +from workspace.cli import process_environment +spec = importlib.util.spec_from_file_location("composer", root / "scripts/build-composition.py") +composer = importlib.util.module_from_spec(spec); spec.loader.exec_module(composer) +environment = composer.execution_environment(process_environment(root)) +sys.exit(subprocess.run(["npm", "ci", "--ignore-scripts", "--no-audit", "--no-fund"], cwd=sys.argv[2], env=environment).returncode) +NPM_ENV + [ "$?" = 0 ] || die "credential-free npm acquisition failed" + make -C "$DEV_ROOT" frontend >/dev/null || die "fixed frontend build failed" + FRONTEND_DIST="$DEV_ROOT/bin/frontend-dist" +else + # Historical RDM pins and the old Dev layout retain their former build route. + if [ -f "$DEV_ROOT/components.json" ]; then + die "historical RDM e2e requires its historical Dev candidate; no mixed-layout success is claimed" + fi + FRONTEND_DIR="$DEV_ROOT/modules/frontend" + FRONTEND_DIST="$FRONTEND_DIR/dist" + # ── 1. 构建 ───────────────────────────────────────────── + # RDM 源码经 git archive 从本地对象导出(不建 worktree、不触远端——Gitea 抖动时 + # submodule 克隆会挂死);pins/* 从 RDM 主检出的已物化 submodule 快照拷贝(cp 排除 + # .git,39MB 级),构建输入由此固定为 RDM origin/main + 其 gitlink 指向的本地内容。 + log "build RDM binary (archive origin/main + snapshot pins from local checkout)" + RDM_WT="$OUT/rdm-src" + RDM_SHA=$(git -C "$RDM_REPO" rev-parse origin/main) || die "no origin/main in RDM repo" + mkdir -p "$RDM_WT" + git -C "$RDM_REPO" archive "$RDM_SHA" | tar -x -C "$RDM_WT" + # 主检出 pins 对齐 gitlink(本地对象已有时秒回;此时才需要网络 fetch 一次)。 + git -C "$RDM_REPO" submodule update --init --recursive --quiet \ + || die "materialize RDM pins failed (is the RDM checkout reachable?)" + PIN_SHA_MAIN=$(git -C "$RDM_REPO/pins/agent-system-backend" rev-parse HEAD) + PIN_SHA_WANT=$(git -C "$RDM_REPO" ls-tree "$RDM_SHA" pins/agent-system-backend | awk '{print $3}') + [ "$PIN_SHA_MAIN" = "$PIN_SHA_WANT" ] \ + || die "RDM checkout pins/backend ($PIN_SHA_MAIN) != origin/main pin ($PIN_SHA_WANT); git -C $RDM_REPO submodule update first" + mkdir -p "$RDM_WT/pins" + tar -C "$RDM_REPO/pins" --exclude=.git -cf - agent-system-backend | tar -C "$RDM_WT/pins" -xf - + (cd "$RDM_WT" && go build -o "$OUT/agent-system-rdm" .) || die "rdm build failed" + log "rdm binary: $OUT/agent-system-rdm (RDM@${RDM_SHA:0:12}, pins@${PIN_SHA_WANT:0:12})" -log "build frontend dist (contracts + ui deps + bundle, via make frontend)" -make -C "$DEV_ROOT" frontend >/dev/null || die "frontend build failed" + log "build base CLI (user create) from the same pinned backend as the RDM binary" + # 版本一致性:建号 CLI 必须与被测 RDM 二进制共用同一基座 pin——用 Dev 顶层 + # backend(main 最新)建号会把库迁到更高 schema,RDM pins(较旧)打不开。 + (cd "$RDM_WT/pins/agent-system-backend" && go build -o "$OUT/agent-system" ./cmd/agent-system) \ + || die "backend cli build failed" + + log "build frontend dist (contracts + ui deps + bundle, via make frontend)" + make -C "$DEV_ROOT" frontend >/dev/null || die "frontend build failed" +fi +[ -x "$OUT/agent-system-rdm" ] && [ -x "$OUT/agent-system" ] && [ -f "$FRONTEND_DIST/index.html" ] || die "complete e2e build artifacts are missing" +if [ "$BUILD_ONLY" = 1 ]; then + log "build-only complete; runtime/browser/model acceptance NOT_RUN; artifacts=$OUT" + exit 0 +fi # ── 2. 种子 ───────────────────────────────────────────── DATA="$OUT/data" @@ -136,8 +193,6 @@ login() { done die "login failed" } -# CLI 建号留下 must_change_password。会话在改密前不能调用业务命令。 -# 强制设密会作废当前会话,所以设密后用新密码再登录。 finish_password_gate() { curl -sf -b "$JAR" -c "$JAR" -X POST "$API_BASE/api/auth/password" \ -H 'Content-Type: application/json' \ @@ -164,8 +219,6 @@ PID_MAIN=$(cmd rdm.project.create "{\"name\":\"$PROJ_MAIN\"}" | python3 -c 'impo PID_ISO=$(cmd rdm.project.create "{\"name\":\"$PROJ_ISO\"}" | python3 -c 'import json,sys; print(json.load(sys.stdin)["projectId"])') log "seed: projects main=$PID_MAIN iso=$PID_ISO" -# I1 requires a current business grant even for a project creator or system -# administrator. Both projects are ordinary test fixtures in this private data root. log "seed: grant explicit audit.read for the fixture owner" cmd rdm.perm.cap '{"action":"audit.read","allow":true}' >/dev/null cmd rdm.perm.set "{\"projectId\":\"$PID_MAIN\",\"member\":\"$OWNER\",\"action\":\"audit.read\",\"allow\":true}" >/dev/null @@ -216,7 +269,7 @@ log "seed done" # ── 3. 验收 ───────────────────────────────────────────── if [ "$SEED_ONLY" = 1 ]; then log "seed-only mode: api=$API_BASE ui=next;cookie jar=$JAR;数据=$DATA" - log "preview: (cd modules/frontend && PLAYWRIGHT_API_TARGET=$API_BASE npx vite preview --port $UI_PORT)" + log "preview: (cd $FRONTEND_DIR && PLAYWRIGHT_API_TARGET=$API_BASE npx vite preview --port $UI_PORT)" log "inspect: curl -b $JAR $API_BASE/api/commands/rdm.inspect.summary -X POST -H 'Content-Type: application/json' -d '{\"params\":{\"projectId\":\"$PID_MAIN\"}}'" wait exit 0 @@ -224,9 +277,9 @@ fi log "start vite preview at http://127.0.0.1:$UI_PORT" ( - cd "$DEV_ROOT/modules/frontend" + cd "$FRONTEND_DIR" export PLAYWRIGHT_API_TARGET="$API_BASE" - exec ./node_modules/.bin/vite preview --port "$UI_PORT" --strictPort + exec ./node_modules/.bin/vite preview --outDir "$FRONTEND_DIST" --port "$UI_PORT" --strictPort ) >"$OUT/preview.log" 2>&1 & UI_PID=$! for i in $(seq 1 40); do @@ -236,15 +289,14 @@ for i in $(seq 1 40); do done log "playwright (install chromium if missing)" -(cd "$DEV_ROOT/modules/frontend" && npx playwright install chromium >/dev/null 2>&1 || true) +(cd "$FRONTEND_DIR" && npx playwright install chromium >/dev/null 2>&1 || true) log "run specs" -cd "$DEV_ROOT/modules/frontend" +cd "$FRONTEND_DIR" export PLAYWRIGHT_BASE_URL="http://127.0.0.1:$UI_PORT" E2E_OWNER="$OWNER" \ E2E_PASSWORD="${E2E_PASSWORD:-E2eAudit#2026}" E2E_PASSWORD2="$PASSWORD2" \ E2E_PROJECT_MAIN="$PROJ_MAIN" E2E_PROJECT_ISOLATED="$PROJ_ISO" set +e -# 本脚本的种子只覆盖审计工作区。u7 现场验收用例依赖另一套入口,不在这里跑。 npx playwright test e2e/rdm-audit.playwright.ts --reporter=list >"$OUT/playwright.log" 2>&1 PW_EXIT=$? set -e diff --git a/scripts/evidence.py b/scripts/evidence.py index 3ea96e94..5b394b45 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) @@ -252,6 +304,9 @@ def validate_precheck(receipt, purpose="start"): raise EvidenceError("Precheck object capture is incomplete") if receipt["before"]["head"] != current["head"] or after["head"] != current["head"]: raise EvidenceError("Precheck source HEAD has changed") + if current.get("components") is not None and any( + obj.get("components") != current["components"] for obj in (receipt["before"], after)): + raise EvidenceError("Precheck ordinary component objects have changed or are missing") if after["target_branch"] != current["target_branch"] or not after["target_head"]: raise EvidenceError("Precheck authoritative target has changed") if purpose != "resume-local" and after["target_head"] != current["target_head"]: diff --git a/scripts/lint-architecture.go b/scripts/lint-architecture.go index 9ded0e9c..67c7b562 100644 --- a/scripts/lint-architecture.go +++ b/scripts/lint-architecture.go @@ -11,6 +11,7 @@ import ( "go/parser" "go/token" "os" + "os/exec" "path/filepath" "sort" "strings" @@ -115,7 +116,11 @@ func checkPolicy(root string) error { return err } text := string(raw) - for _, need := range []string{"modules/backend/internal", "modules/frontend/src", "components"} { + backend, frontend := "modules/backend/internal", "modules/frontend/src" + if _, err := os.Stat(filepath.Join(root, "components.json")); err == nil { + backend, frontend = ".workspace/Agent-System-Backend/internal", ".workspace/Agent-System-Frontend/src" + } + for _, need := range []string{backend, frontend, "components"} { if !strings.Contains(text, need) { return fmt.Errorf("policy/architecture.yaml missing %s", need) } @@ -123,14 +128,36 @@ func checkPolicy(root string) error { return nil } +func componentRoot(root, id, legacy string) (string, error) { + if os.Getenv("COMPOSITION_SOURCE_MAP") != "" { + output, err := exec.Command("python3", filepath.Join(root, "scripts/component-source.py"), id).CombinedOutput() + if err != nil { + return "", fmt.Errorf("isolated component lookup failed: %s", strings.TrimSpace(string(output))) + } + return strings.TrimSpace(string(output)), nil + } + if _, err := os.Stat(filepath.Join(root, "components.json")); err == nil { + return filepath.Join(root, ".workspace", id), nil + } + return filepath.Join(root, legacy), nil +} + func collect(root string) ([]string, error) { var edges []string - be, err := backendEdges(filepath.Join(root, "modules/backend/internal")) + backend, err := componentRoot(root, "Agent-System-Backend", "modules/backend") + if err != nil { + return nil, err + } + frontend, err := componentRoot(root, "Agent-System-Frontend", "modules/frontend") + if err != nil { + return nil, err + } + be, err := backendEdges(filepath.Join(backend, "internal")) if err != nil { return nil, err } edges = append(edges, be...) - fe, err := frontendEdges(filepath.Join(root, "modules/frontend/src")) + fe, err := frontendEdges(filepath.Join(frontend, "src")) if err != nil { return nil, err } @@ -139,8 +166,26 @@ func collect(root string) ([]string, error) { } func backendEdges(dir string) ([]string, error) { + if info, err := os.Stat(dir); err != nil || !info.IsDir() { + return nil, fmt.Errorf("backend source directory is unavailable: %s", dir) + } + raw, err := os.ReadFile(filepath.Join(filepath.Dir(dir), "go.mod")) + if err != nil { + return nil, err + } + prefix := "" + for _, line := range strings.Split(string(raw), "\n") { + fields := strings.Fields(line) + if len(fields) >= 2 && fields[0] == "module" { + prefix = fields[1] + "/internal/" + break + } + } + if prefix == "" { + return nil, fmt.Errorf("backend module identity is unavailable") + } var edges []string - err := filepath.WalkDir(dir, func(path string, d os.DirEntry, err error) error { + err = filepath.WalkDir(dir, func(path string, d os.DirEntry, err error) error { if err != nil || d.IsDir() { return nil } @@ -158,7 +203,6 @@ func backendEdges(dir string) ([]string, error) { } for _, imp := range f.Imports { p := strings.Trim(imp.Path.Value, `"`) - const prefix = "agent-system-backend/internal/" if !strings.HasPrefix(p, prefix) { continue } diff --git a/scripts/lint-architecture.sh b/scripts/lint-architecture.sh index 7451dd8e..87afc9a9 100755 --- a/scripts/lint-architecture.sh +++ b/scripts/lint-architecture.sh @@ -4,23 +4,24 @@ set -euo pipefail root=$(cd "$(dirname "$0")/.." && pwd) base="$root/policy/architecture-baseline.json" -tool=(go run "$root/scripts/lint-architecture.go" -root "$root" -baseline "$base") +tool=(env GOWORK=off go run "$root/scripts/lint-architecture.go" -root "$root" -baseline "$base") ( cd "$root/scripts" && "${tool[@]}" ) +probe=$(mktemp) +trap 'rm -f "$probe"' EXIT set +e -( cd "$root/scripts" && "${tool[@]}" -inject 'backend/store->backend/__architecture_probe__' ) >/tmp/architecture-probe.out 2>&1 +( cd "$root/scripts" && "${tool[@]}" -inject 'backend/store->backend/__architecture_probe__' ) >"$probe" 2>&1 code=$? set -e if [ "$code" -eq 0 ]; then echo "architecture: injected edge was accepted" >&2 - cat /tmp/architecture-probe.out >&2 + cat "$probe" >&2 exit 1 fi -if ! grep -q '__architecture_probe__' /tmp/architecture-probe.out; then +if ! grep -q '__architecture_probe__' "$probe"; then echo "architecture: injected edge did not fail for the expected reason" >&2 - cat /tmp/architecture-probe.out >&2 + cat "$probe" >&2 exit 1 fi -rm -f /tmp/architecture-probe.out echo "architecture negative ok" diff --git a/scripts/lint-boundaries.sh b/scripts/lint-boundaries.sh index 8009adc0..5c34f72c 100755 --- a/scripts/lint-boundaries.sh +++ b/scripts/lint-boundaries.sh @@ -1,60 +1,85 @@ #!/usr/bin/env bash -# 依赖边界:公开扩展 SDK 与示例不得导入后端 internal。 -# pkg/extension/link 是唯一例外:下游空白导入它才能把 extension.Main 接到产品组合根。 +# Public SDK isolation and sibling-library ratchets use the fixed composition map +# when supplied; a manual invocation uses sources prepared by the checkout owner. set -euo pipefail +command -v rg >/dev/null 2>&1 || { echo "boundary: requires ripgrep (rg)" >&2; exit 2; } root=$(cd "$(dirname "$0")/.." && pwd) fail=0 +source_path() { python3 "$root/scripts/component-source.py" "$1"; } +module_path() { + local mod + mod=$(awk '/^module /{print $2; exit}' "$1/go.mod") + [ -n "$mod" ] || { echo "boundary: source lacks a module identity: $1" >&2; return 1; } + printf '%s\n' "$mod" +} +backend=$(source_path Agent-System-Backend) +intent=$(source_path Agent-Intent) +native=$(source_path Agent-Native) +squad=$(source_path Agent-Squad) +backend_mod=$(module_path "$backend") +intent_mod=$(module_path "$intent") +native_mod=$(module_path "$native") +squad_mod=$(module_path "$squad") check() { local path="$1" - if [ -d "$path" ] && grep -R -n --include='*.go' --include='*.ts' --include='*.tsx' 'agent-system-backend/internal' "$path" >/dev/null; then - echo "boundary: $path imports agent-system-backend/internal" >&2 - grep -R -n --include='*.go' --include='*.ts' --include='*.tsx' 'agent-system-backend/internal' "$path" >&2 + if [ -d "$path" ] && rg -n --glob '*.go' --glob '*.ts' --glob '*.tsx' -F \ + -e "$backend_mod/internal" -e 'agent-system-backend/internal' "$path" >/dev/null; then + echo "boundary: $path imports backend internal" >&2 + rg -n --glob '*.go' --glob '*.ts' --glob '*.tsx' -F \ + -e "$backend_mod/internal" -e 'agent-system-backend/internal' "$path" >&2 fail=1 fi } -sdk="$root/modules/backend/pkg/extension" +sdk="$backend/pkg/extension" if [ -d "$sdk" ]; then - hits=$(grep -R -n --include='*.go' 'agent-system-backend/internal' "$sdk" | grep -v '/link/' || true) + hits=$(rg -n --glob '*.go' --glob '!link/**' -F -e "$backend_mod/internal" \ + -e 'agent-system-backend/internal' "$sdk" | { grep -v '/link/' || true; } || true) if [ -n "$hits" ]; then - echo "boundary: pkg/extension imports agent-system-backend/internal" >&2 + echo "boundary: pkg/extension imports backend internal" >&2 echo "$hits" >&2 fail=1 fi fi check "$root/examples" -# 库间依赖棘轮:三个库的包导入兄弟库的配对,相对白名单只许减少、不许新增。 +# Preserve the allowlist's semantic package names when public module prefixes +# change. No baseline is regenerated during dependency migration. +normalize() { + local value="$1" idx + for idx in 0 1 2; do + case "$value" in + "${canonical[$idx]}") printf '%s' "${legacy[$idx]}"; return ;; + "${canonical[$idx]}"/*) printf '%s%s' "${legacy[$idx]}" "${value#"${canonical[$idx]}"}"; return ;; + esac + done + printf '%s' "$value" +} +canonical=("$intent_mod" "$native_mod" "$squad_mod") +legacy=(agent-intent agent-native agent-squad) +siblings=("${canonical[@]}" "${legacy[@]}") allow="$root/policy/lib-deps-allowlist.txt" observed=$(mktemp) recorded=$(mktemp) -trap 'rm -f "$observed" "$recorded"' EXIT -siblings=(agent-intent agent-native agent-squad) -for dir in deps/agent-intent deps/agent-native deps/agent-squad; do - mod=$(awk '/^module /{print $2; exit}' "$root/$dir/go.mod") - ( - cd "$root/scripts" - go run lint-imports.go "$root/$dir" - ) | while read -r importer rest; do +imports=$(mktemp) +trap 'rm -f "$observed" "$recorded" "$imports"' EXIT +for dir in "$intent" "$native" "$squad"; do + mod=$(module_path "$dir") + (cd "$root/scripts" && GOWORK=off go run lint-imports.go "$dir") > "$imports" + while read -r importer rest; do for imp in $rest; do for sib in "${siblings[@]}"; do - case "$imp" in - "$sib"|"$sib"/*) ;; - *) continue ;; - esac - case "$importer" in - "$mod"|"$mod"/*) ;; - *) continue ;; - esac - if [ "$sib" != "$mod" ]; then - echo "$importer $imp" + case "$imp" in "$sib"|"$sib"/*) ;; *) continue ;; esac + case "$importer" in "$mod"|"$mod"/*) ;; *) continue ;; esac + if [ "$(normalize "$sib")" != "$(normalize "$mod")" ]; then + printf '%s %s\n' "$(normalize "$importer")" "$(normalize "$imp")" fi done done - done -done | sort -u >"$observed" -grep -v -e '^#' -e '^$' "$allow" | sort -u >"$recorded" || true + done < "$imports" +done | sort -u > "$observed" +grep -v -e '^#' -e '^$' "$allow" | sort -u > "$recorded" || true new_pairs=$(comm -13 "$recorded" "$observed" || true) if [ -n "$new_pairs" ]; then echo "boundary: new sibling-library import pairs" >&2 @@ -67,34 +92,27 @@ if [ -n "$stale_pairs" ]; then echo "$stale_pairs" >&2 fi -# 核心模块的依赖图不得出现兄弟库。go list ./... 不进入带 go.mod 的子目录。 -for dir in deps/agent-intent deps/agent-native deps/agent-squad; do - mod=$(awk '/^module /{print $2; exit}' "$root/$dir/go.mod") - deps_out=$(cd "$root/$dir" && GOWORK=off go list -deps ./...) || fail=1 +for dir in "$intent" "$native" "$squad"; do + mod=$(module_path "$dir") + deps_out=$(cd "$dir" && GOWORK=off go list -deps ./...) || fail=1 for sib in "${siblings[@]}"; do - [ "$sib" = "$mod" ] && continue - if printf '%s\n' "$deps_out" | grep -E -q "^(${sib}|${sib}/)"; then - echo "boundary: $mod core depends on $sib" >&2 - fail=1 - fi + [ "$(normalize "$sib")" = "$(normalize "$mod")" ] && continue + while IFS= read -r dep; do + case "$dep" in + "$sib"|"$sib"/*) echo "boundary: $mod core depends on $sib" >&2; fail=1 ;; + esac + done <<< "$deps_out" done done -# agent-intent 只许被小队意图适配器和后端识别适配器导入。 -while IFS= read -r f; do - grep -q '"agent-intent/' "$f" || continue - case "$f" in - */deps/agent-squad/adapters/intent/*|*/modules/backend/internal/intentgate/*|*/modules/backend/internal/intentsem/*) ;; - *) - echo "boundary: $f imports agent-intent" >&2 - fail=1 - ;; +while IFS= read -r file; do + case "$file" in + "$squad"/adapters/intent/*|"$backend"/internal/intentgate/*|"$backend"/internal/intentsem/*) ;; + *) echo "boundary: $file imports agent-intent" >&2; fail=1 ;; esac -done < <(find "$root/deps/agent-native" "$root/deps/agent-squad" "$root/modules/backend" \ - -path '*/deps/*' -prune -o -name '*.go' -print) +done < <(rg -l --glob '*.go' --glob '!**/deps/**' -F -e "\"$intent_mod\"" \ + -e "\"$intent_mod/" -e '"agent-intent"' -e '"agent-intent/' "$native" "$squad" "$backend" || true) -if [ "$fail" -ne 0 ]; then - exit 1 -fi +[ "$fail" -eq 0 ] || exit 1 bash "$root/scripts/lint-architecture.sh" echo "boundaries ok" diff --git a/scripts/svc.sh b/scripts/svc.sh index 33e9b39a..bc8ecd87 100755 --- a/scripts/svc.sh +++ b/scripts/svc.sh @@ -2247,6 +2247,68 @@ svc_deploy_recycle_wt() { return 0 } +# Source format belongs to the candidate being built, not the caller's checkout. +svc_versioned_rdm() { + [ -f "$1/go.mod" ] && [ "$(awk '$1 == "module" { print $2; exit }' "$1/go.mod")" = "git-ssh.u1680832.nyat.app/weichen/Agent-System-RDM.git" ] +} + +svc_check_build_worktree() { + local wt="$1" expected="$2" actual marker path + actual=$(git -C "$wt" rev-parse HEAD) || return 1 + [ "$actual" = "$expected" ] || { c_err "candidate SHA mismatch: expected=$expected actual=$actual; cached worktree retained"; return 1; } + [ "$(git -C "$wt" rev-parse --show-toplevel)" = "$wt" ] || { c_err "candidate worktree identity mismatch; preserve its owner"; return 1; } + for marker in index.lock HEAD.lock MERGE_HEAD CHERRY_PICK_HEAD REVERT_HEAD rebase-merge rebase-apply BISECT_LOG; do + path=$(git -C "$wt" rev-parse --path-format=absolute --git-path "$marker") || return 1 + [ ! -e "$path" ] || { c_err "candidate Git operation/lock active: $marker; preserve its owner"; return 1; } + done + if [ -f "$wt/components.json" ] || svc_versioned_rdm "$wt"; then + [ -z "$(GIT_OPTIONAL_LOCKS=0 git -C "$wt" status --porcelain --untracked-files=all --ignore-submodules=all)" ] \ + || { c_err "candidate source is dirty; preserve it before retrying the fixed build"; return 1; } + fi +} + +svc_frontend_dist() { + local root="$1" + if [ -f "$root/components.json" ]; then + python3 - "$root/bin/resolved-manifest.json" "$(git -C "$root" rev-parse HEAD)" <<'PY' +import json, sys +try: + record = json.load(open(sys.argv[1])) + if record.get("target") != "frontend" or record.get("root", {}).get("commit") != sys.argv[2]: + raise ValueError("frontend composition identity mismatch") +except (OSError, ValueError) as error: + print("svc: " + str(error), file=sys.stderr); sys.exit(1) +PY + [ "$?" = 0 ] || return 1 + printf '%s\n' "$root/bin/frontend-dist" + else + printf '%s\n' "$root/modules/frontend/dist" + fi +} + +svc_composition_plugins() { + local root="$1" present + present=$(python3 - "$root/bin/resolved-manifest.json" "$(git -C "$root" rev-parse HEAD)" <<'PY' +import json, sys +try: + record = json.load(open(sys.argv[1])) + if record.get("target") != "build" or record.get("root", {}).get("commit") != sys.argv[2]: + raise ValueError("build composition identity mismatch") + print("yes" if "plugins" in record.get("assets", {}) else "no") +except (OSError, ValueError) as error: + print("svc: " + str(error), file=sys.stderr); sys.exit(1) +PY + ) || return 1 + if [ "$present" = yes ]; then + [ -d "$root/bin/plugins" ] || { c_err "composed plugins are missing"; return 1; } + printf '%s\n' "$root/bin/plugins" + else + mkdir -p "$root/.svc-empty-plugins" + [ -z "$(find "$root/.svc-empty-plugins" -mindepth 1 -print -quit)" ] || { c_err "empty plugin source contains unique files; preserve it"; return 1; } + printf '%s\n' "$root/.svc-empty-plugins" + fi +} + # materialize_dev_commit FULL SHA TARGET:隔离 worktree 物化+构建;stdout 只回显 worktree # 路径(提示信息走 stderr)。TARGET=build(agent)| frontend(static)。 materialize_dev_commit() { @@ -2258,12 +2320,16 @@ materialize_dev_commit() { c_info "[$ENV_NAME] 物化 Dev 提交 $sha → 隔离 worktree(源:独立部署源仓 $SRC_DIR,不触碰当前工作区)" git -C "$SRC_DIR" worktree add --detach "$wt" "$full" >/dev/null || return 1 fi - c_info "[$ENV_NAME] 物化子模块组合(git submodule update --init --recursive;缺对象时需网络)" - # stdout 只留给最后的 worktree 路径(调用方 $() 捕获)——子模块/构建输出全部走 stderr。 - git -C "$wt" submodule update --init --recursive >&2 || { - c_err "[$ENV_NAME] 子模块物化失败(网络或对象缺失;重试会自动 fetch 部署源仓)" - return 1 - } + svc_check_build_worktree "$wt" "$full" || return 1 + if [ -f "$wt/components.json" ]; then + c_info "[$ENV_NAME] 固定源码清单组合(隔离装配;不初始化旧 gitlinks)" + else + c_info "[$ENV_NAME] 物化历史子模块组合(git submodule update --init --recursive)" + git -C "$wt" submodule update --init --recursive >&2 || { + c_err "[$ENV_NAME] 历史子模块物化失败;构建 worktree 保留供重试" + return 1 + } + fi c_info "[$ENV_NAME] 构建(make $target:npm ci + 构建,需网络)" make -C "$wt" "$target" >&2 || return 1 echo "$wt" @@ -2273,9 +2339,19 @@ materialize_dev_commit() { recycle_worktree() { local repo="${2:-$SRC_DIR}" local wt="$RUNTIME/.worktrees/$1" - c_info "[$ENV_NAME] 回收构建 worktree" - git -C "$repo" worktree remove --force "$wt" >/dev/null 2>&1 \ - || c_warn "[$ENV_NAME] worktree 回收失败,可手动:git -C $repo worktree remove --force $wt" + [ -d "$wt" ] || return 0 + if [ -n "$(git -C "$wt" symbolic-ref --quiet --short HEAD 2>/dev/null || true)" ] \ + || ! svc_check_build_worktree "$wt" "$(git -C "$wt" rev-parse HEAD 2>/dev/null)"; then + c_warn "[$ENV_NAME] 构建 worktree 属于分支或有活动操作,保留现场:$wt" + return 0 + fi + if [ -n "$(GIT_OPTIONAL_LOCKS=0 git -C "$wt" status --porcelain --untracked-files=all --ignored=matching 2>/dev/null)" ]; then + c_warn "[$ENV_NAME] 构建 worktree 含未保存或 ignored 产物,保留现场供 owner 检查:$wt" + return 0 + fi + c_info "[$ENV_NAME] 回收干净构建 worktree(无 force)" + git -C "$repo" worktree remove "$wt" >/dev/null 2>&1 \ + || c_warn "[$ENV_NAME] Git 拒绝回收;保留 worktree 与元数据供 owner 检查:$wt" } # materialize_rdm_commit FULL SHA:RDM 源的隔离 worktree 物化+构建;stdout 只回显 @@ -2290,13 +2366,25 @@ materialize_rdm_commit() { c_info "[$ENV_NAME] 物化 RDM 提交 $sha → 隔离 worktree(源:独立 RDM 源仓 $RDM_SRC_DIR,不触碰当前工作区)" git -C "$RDM_SRC_DIR" worktree add --detach "$wt" "$full" >/dev/null || return 1 fi - c_info "[$ENV_NAME] 物化基座 pins(git submodule update --init --recursive;缺对象时需网络)" - git -C "$wt" submodule update --init --recursive >&2 || { - c_err "[$ENV_NAME] pins 子模块物化失败(网络或对象缺失;重试会自动 fetch RDM 源仓)" - return 1 - } - c_info "[$ENV_NAME] 构建(make build:纯 Go,无需 npm)" - make -C "$wt" build >&2 || return 1 + svc_check_build_worktree "$wt" "$full" || return 1 + if svc_versioned_rdm "$wt"; then + local composition_root="${COMPOSITION_ROOT:-$ROOT}" + composition_root=$(realpath -e -- "$composition_root") || { c_err "COMPOSITION_ROOT is unavailable"; return 1; } + [ -f "$composition_root/components.json" ] && [ -f "$composition_root/components.lock.json" ] && [ -f "$composition_root/scripts/build-composition.py" ] || { + c_err "[$ENV_NAME] 版本化 RDM 需要 COMPOSITION_ROOT 指向固定 Dev 候选;不回落旧 pins" + return 1 + } + c_info "[$ENV_NAME] 构建固定 RDM 产品(COMPOSITION_ROOT=$composition_root;不初始化旧 pins)" + make -C "$wt" COMPOSITION_ROOT="$composition_root" build >&2 || return 1 + else + c_info "[$ENV_NAME] 物化历史基座 pins(git submodule update --init --recursive)" + git -C "$wt" submodule update --init --recursive >&2 || { + c_err "[$ENV_NAME] 历史 pins 物化失败;构建 worktree 保留供重试" + return 1 + } + c_info "[$ENV_NAME] 构建历史 RDM 候选(make build)" + make -C "$wt" build >&2 || return 1 + fi [ -x "$wt/bin/agent-system-rdm" ] || { c_err "[$ENV_NAME] 构建产物缺失:$wt/bin/agent-system-rdm(RDM Makefile 的 build 目标应产出该名称)" return 1 @@ -2678,11 +2766,15 @@ agent_do_deploy() { hist_event deploy fail "$(read_pid)" "构建失败($SRC_LABEL)" return 1 } - srcbin="$BIN"; srcplug="$ROOT/plugins" ;; + srcbin="$BIN" + if [ -f "$ROOT/components.json" ]; then srcplug=$(svc_composition_plugins "$ROOT") || return 1 + else srcplug="$ROOT/plugins"; fi ;; dev) wt="$(materialize_dev_commit "$SRC_FULL" "$SRC_SHA" build)" \ || { hist_event deploy fail "$(read_pid)" "物化/构建失败($SRC_LABEL)"; return 1; } - srcbin="$wt/bin/agent-system"; srcplug="$wt/plugins" ;; + srcbin="$wt/bin/agent-system" + if [ -f "$wt/components.json" ]; then srcplug=$(svc_composition_plugins "$wt") || return 1 + else srcplug="$wt/plugins"; fi ;; release) local relbin="$REL_ROOT/build/$REL_VERSION/agent-system" if [ ! -f "$relbin" ]; then @@ -2803,7 +2895,7 @@ print_agent_plan() { printf ' 产物:%s ← %s + %s/plugins\n' "$ENV_BIN" "$BIN" "$ROOT" ;; dev) printf ' 来源:%s(完整提交 %s;独立部署源仓 %s)\n' "$SRC_LABEL" "$SRC_FULL" "$SRC_DIR" - printf ' 物化:worktree %s(submodule update --init --recursive + make build)\n' "$RUNTIME/.worktrees/$SRC_SHA" ;; + printf ' 物化:worktree %s(按候选格式选择历史 gitlinks 或固定源码装配 + make build)\n' "$RUNTIME/.worktrees/$SRC_SHA" ;; release) printf ' 来源:%s(Releases 提交 %s)\n' "$SRC_LABEL" "$(git -C "$REL_ROOT" rev-parse --short "$REL_COMMIT")" [ -n "${SRC_DEVCOMMIT:-}" ] && printf ' 对应 Dev 提交:%s\n' "$SRC_DEVCOMMIT" @@ -2812,7 +2904,7 @@ print_agent_plan() { else printf ' 制品:%s(缺失!需先在 Releases 仓构建,或换版本)\n' "$art"; fi ;; rdm) printf ' 来源:%s(完整提交 %s;独立 RDM 源仓 %s)\n' "$SRC_LABEL" "$SRC_FULL" "$RDM_SRC_DIR" - printf ' 物化:worktree %s(pins submodule update --init --recursive + make build)\n' "$RUNTIME/.worktrees/rdm-$SRC_SHA" + printf ' 物化:worktree %s(按候选格式选择历史 pins 或 COMPOSITION_ROOT 固定产品装配)\n' "$RUNTIME/.worktrees/rdm-$SRC_SHA" printf ' 产物:%s ← bin/agent-system-rdm + 空插件目录(组合插件编译进二进制)\n' "$ENV_BIN" printf ' 工作台:web/ → %s/htdocs;自动伴生:scripts/svc.sh %s deploy --kind static --dir 该目录\n' \ "$ENV_DIR" "$(rdm_companion_name "$ENV_NAME")" ;; @@ -3359,12 +3451,12 @@ static_do_deploy() { local) c_info "[$ENV_NAME] 构建当前工作区前端(make frontend)——写主检出构建产物(gitignore 目录)" make -C "$ROOT" frontend || { hist_event deploy fail "$(read_pid)" "make frontend 失败"; return 1; } - src_dist="$ROOT/modules/frontend/dist" + src_dist=$(svc_frontend_dist "$ROOT") || return 1 ;; dev) wt="$(materialize_dev_commit "$SRC_FULL" "$SRC_SHA" frontend)" \ || { hist_event deploy fail "$(read_pid)" "物化/构建失败($SRC_LABEL)"; return 1; } - src_dist="$wt/modules/frontend/dist" + src_dist=$(svc_frontend_dist "$wt") || return 1 ;; release) c_err "[$ENV_NAME] release 制品内嵌前端(无独立 dist);static 请用 --from dev|local 或 --dir" diff --git a/scripts/task.sh b/scripts/task.sh index 41212aa3..2c9cb158 100755 --- a/scripts/task.sh +++ b/scripts/task.sh @@ -19,6 +19,13 @@ fetch_target() { || { echo "[verdict] REMOTE_UNVERIFIED — target commit missing" >&2; return 6; } } check_worktree() { python3 "${SCRIPT_DIR}/check-worktree.py" "$1"; } +check_startup_rules() { + if ! check_worktree rules; then + echo "[verdict] RULES_UNVERIFIED — fixed startup reading unavailable; preserve the workspace and retry" >&2 + return 7 + fi +} + main_worktree_root() { git worktree list --porcelain -z | python3 -c 'import os,sys; print(os.fsdecode(sys.stdin.buffer.read().split(bytes([0]),1)[0][9:]))'; } work_mode() { case "${TASK_WORK_MODE:-delivery}" in @@ -121,6 +128,7 @@ cmd_precheck() { fi if [ "$mode" = local ]; then python3 "${SCRIPT_DIR}/evidence.py" --local-context || return 2 + check_startup_rules || return $? echo "[verdict] LOCAL_READY — existing task may continue authorized local work; final delivery still requires latest-target sync and checks" return 0 fi @@ -132,6 +140,7 @@ cmd_precheck() { echo "[verdict] SYNC_REQUIRED — ${branch} 缺少 origin/${TARGET_BRANCH} 的 ${behind} 个提交;主检出 pull --ff-only,任务分支 make task-sync" exit 4 fi + check_startup_rules || return $? echo "[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch" } @@ -176,14 +185,17 @@ cmd_start() { wt="$(dirname "$mainroot")/$(basename "$mainroot")-wt-${slug}" [ -e "$wt" ] && die "worktree path exists: $wt" git worktree add -q "$wt" -b "$name" "$start_ref" - # 物化后按 submodule status 实际状态核对,不只信退出码:网络抖动或嵌套指针 - # 漂移时 update 可能静默留坑(2026-09-30 实测深嵌套层带病通过,构建期才炸)。 - (cd "$wt" && git submodule update --init --recursive >/dev/null 2>&1) \ - || echo "[warn] submodule update 非零退出,见下方状态核对" - local sub_drift - sub_drift=$(git -C "$wt" submodule status --recursive 2>/dev/null | grep -cE '^[-+U]' || true) - [ "${sub_drift:-0}" -gt 0 ] \ - && echo "[warn] worktree 子模块物化不完整:${sub_drift} 项漂移/未初始化——构建前先核对(git -C $wt submodule status --recursive)" + if [ -f "$wt/components.json" ]; then + (cd "$wt" && check_worktree materialize) || die "fixed sources unavailable; task worktree retained for retry" + else + # Historical commits keep the original submodule materializer. + (cd "$wt" && git submodule update --init --recursive >/dev/null 2>&1) \ + || echo "[warn] submodule update 非零退出,见下方状态核对" + local sub_drift + sub_drift=$(git -C "$wt" submodule status --recursive 2>/dev/null | grep -cE '^[-+U]' || true) + [ "${sub_drift:-0}" -gt 0 ] \ + && echo "[warn] worktree 子模块物化不完整:${sub_drift} 项漂移/未初始化——构建前先核对" + fi local card="$wt/.task/${slug}.md" mkdir -p "$wt/.task" cat > "$card" <" 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, "config", "--get", "remote.origin.url", 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..55c1ad3e --- /dev/null +++ b/scripts/workspace/go.py @@ -0,0 +1,158 @@ +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 {} + if not origin and download.get('Info'): + # Cached downloads may omit Origin in stdout; the + # Go-owned .info file retains the authenticated source. + cached = json.loads(Path(download['Info']).read_text()) + origin = cached.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] + if origin.get("URL") not in {canonical, canonical + '.git', component['repo'].removesuffix('.git')}: + 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..3508eb96 --- /dev/null +++ b/scripts/workspace/transition.py @@ -0,0 +1,284 @@ +import hashlib +import json +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 ref_namespace(self, snapshot): + captured = {key: value for key, value in snapshot.items() if key != "ref_namespace"} + encoded = json.dumps(captured, sort_keys=True, separators=(",", ":")).encode() + source = hashlib.sha256(snapshot["path"].encode()).hexdigest()[:24] + version = hashlib.sha256(encoded).hexdigest() + return "refs/migration/sources/" + source + "/" + version + + def remember_snapshots(self, record, snapshots): + history = list(record.get("legacy_snapshots", [])) + seen = {entry.get("ref_namespace") for entry in history} + for snapshot in snapshots: + namespace = self.ref_namespace(snapshot) + if namespace not in seen: + history.append(dict(snapshot, ref_namespace=namespace)) + seen.add(namespace) + record["legacy_snapshots"] = history + + def pin_ref(self, path, reference, object_id): + current = self.workspace.git.text(path, "rev-parse", "--verify", "--quiet", reference, check=False) + if current: + if current != object_id: + raise WorkspaceError(f"preserved migration reference has another value: {reference}; owner must inspect it") + return + # Create only if absent: never overwrite a saved snapshot or a concurrent + # owner's reference, even when the expected namespace already exists. + self.workspace.git.call(path, "update-ref", reference, object_id, "0" * 40) + + def preserve_refs(self, path, snapshots): + workspace = self.workspace + for snapshot in snapshots: + legacy = safe_path(workspace.root, snapshot["path"]) + namespace = self.ref_namespace(snapshot) + for row in snapshot["refs"]: + object_id, reference = row.split(" ", 1) + if workspace.git.call(path, "cat-file", "-e", object_id, check=False).returncode: + # Fetch the captured object, not a mutable ref's current value. + # With no destination refspec this only updates FETCH_HEAD. + workspace.git.call(path, "fetch", "--no-tags", "--", str(legacy), object_id) + self.pin_ref(path, namespace + "/" + reference.removeprefix("refs/"), object_id) + 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) + self.pin_ref(path, "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] + self.remember_snapshots(record, 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}) + self.remember_snapshots(record, 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 new file mode 100644 index 00000000..ccf26581 --- /dev/null +++ b/scripts/workspace/transport.py @@ -0,0 +1,88 @@ +"""Process-local module transport; configuration contains no credentials.""" +import json +import os +import re +from pathlib import Path +from urllib.parse import urlsplit, unquote + + +def _url(value): + if not isinstance(value, str) or any(c.isspace() for c in value): + raise ValueError('invalid module transport URL') + parsed = urlsplit(value) + if parsed.scheme not in {'https', 'ssh', 'git+ssh', 'file'} or parsed.password: + raise ValueError('unsupported transport or credentials in URL') + if parsed.scheme == 'https' and parsed.username: + raise ValueError('transport URL must not contain credentials') + if parsed.scheme == 'file' and parsed.netloc not in {'', 'localhost'}: + raise ValueError('file transport must be local') + if parsed.query or parsed.fragment or not parsed.path: + raise ValueError('transport URL must identify a repository path') + return value + + +def _mirror_source(value, target, env): + """Allow injected HTTP only as a verified, credential-free mirror alias.""" + if isinstance(value, str) and value.startswith('http://'): + server = env.get('GITHUB_SERVER_URL', '').rstrip('/') + parsed = urlsplit(server) + owner = env.get('GITHUB_REPOSITORY', '').partition('/')[0] + if (parsed.scheme not in {'http', 'https'} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment or + not re.fullmatch(r'[A-Za-z0-9][A-Za-z0-9_.-]*', owner) or + not re.fullmatch(r'[A-Za-z0-9][A-Za-z0-9_.-]*\.git', target.name) or + value != server + '/' + owner + '/' + target.name): + raise ValueError('HTTP mirror source must match the injected server and repository') + return value + return _url(value) + + +def environment(root=None): + root = Path(root) if root is not None else Path(__file__).resolve().parents[2] + path = root / 'components.json' + config = json.loads(path.read_text()).get('transport', {}) if path.exists() else {} + env = os.environ.copy() + env.update(GOWORK='off', GOTOOLCHAIN='local') + private = config.get('go_private', []) + if not isinstance(private, list) or any(not isinstance(p, str) or not p or any(c.isspace() for c in p) for p in private): + raise ValueError('invalid private module prefixes') + if private: + env.update(GOPRIVATE=','.join(private), GONOPROXY=','.join(private), GONOSUMDB=','.join(private)) + rewrites = config.get('git_rewrites', []) + 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, _mirror_source(value, target, env))) + # 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] + 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']) + 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/fixtures/component-ci/Agent-Command/ci.yml b/tests/fixtures/component-ci/Agent-Command/ci.yml new file mode 100644 index 00000000..e7ca8f3b --- /dev/null +++ b/tests/fixtures/component-ci/Agent-Command/ci.yml @@ -0,0 +1,498 @@ +name: ci +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + vet-and-test: + runs-on: ubuntu-latest + env: + GOPROXY: https://goproxy.cn,direct + GOTOOLCHAIN: local + GOWORK: "off" + GOPRIVATE: git-ssh.u1680832.nyat.app/weichen + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_1 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-Command": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") + if (root / ".git").exists(): + raise ValueError("Checkout requires a fresh workspace") + git(root, "init", "-q") + git(root, "remote", "add", "origin", SERVER + "/weichen/Agent-Command.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Agent-Command") + git(root, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Go 1.27.1 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz + tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" + ln -sfn /usr/local/go/bin/go /usr/local/bin/go + ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + try: + targets = [] + for source in source_roots(): + for suffix in (".", "examples/trace", "adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad"): + directory = source / suffix + if (directory / "go.mod").is_file() and directory.resolve() not in targets: + targets.append(directory.resolve()) + # Parse using the installed local Go tool without credentials or candidate execution. + original_files = {} + for directory in targets: + parsed_mod = json.loads(subprocess.check_output(["go", "mod", "edit", "-json"], cwd=directory, env=clean)) + canonical = parsed_mod["Module"]["Path"].startswith(GO_PREFIX) + for name in ("go.mod", "go.sum"): + dependency_file = directory / name + if dependency_file.is_file(): + original_files[(directory, name)] = dependency_file.read_bytes() + elif canonical and name == "go.sum": + original_files[(directory, name)] = None + for dep in (parsed_mod.get("Require") or []): + path = dep["Path"] + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go dependency is outside the reviewed module mapping") + for replacement in (parsed_mod.get("Replace") or []): + path = replacement["New"]["Path"] + if canonical and not replacement["New"].get("Version"): + raise ValueError("Canonical module cannot acquire a local path replacement") + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go replacement is outside the reviewed module mapping") + auth = config.copy() + for repo in sorted(GO_REPOS): + url = f"{SERVER}/weichen/{repo}.git" + auth[f"url.{url}.insteadOf"] = "https://" + GO_PREFIX + repo + auth[f"http.{url}.extraheader"] = "AUTHORIZATION: token " + component_token + def objects(output): + decoder = json.JSONDecoder() + remaining = output.strip() + while remaining: + item, end = decoder.raw_decode(remaining) + remaining = remaining[end:].lstrip() + yield item + def unchanged(): + for (owner, name), contents in original_files.items(): + dependency_file = owner / name + current = dependency_file.read_bytes() if dependency_file.exists() else None + if current != contents: + raise ValueError("Go acquisition modified a committed Go dependency file: " + str(dependency_file)) + for directory in targets: + # Resolve private go.mod metadata only through exact repository headers; + # validate the complete selected graph before acquiring module zip files. + graph = subprocess.run(["go", "list", "-mod=readonly", "-m", "-json", "all"], cwd=directory, + env=process_env(auth), capture_output=True, text=True) + if graph.returncode: + raise ValueError("Go selected graph resolution failed: " + graph.stderr.strip()) + for item in objects(graph.stdout): + if item.get("Main"): + continue + selected = item.get("Replace") or item + for path in (item.get("Path", ""), selected.get("Path", "")): + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Selected Go module is outside the reviewed mapping") + unchanged() + # Go 1.27 can prune go.sum even under -mod=readonly for this + # metadata-only command. Use a disposable copy, then validate actual + # package loading against the unchanged committed source locks. + local_replacements = json.loads(subprocess.check_output( + ["go", "mod", "edit", "-json"], cwd=directory, env=clean)).get("Replace") or [] + downloaded = "" + if not any(not item["New"].get("Version") for item in local_replacements): + with tempfile.TemporaryDirectory(prefix="ci-go-prefetch-") as temporary: + download_root = Path(temporary) + for name in ("go.mod", "go.sum"): + if (directory / name).is_file(): + (download_root / name).write_bytes((directory / name).read_bytes()) + result = subprocess.run(["go", "mod", "download", "-json"], cwd=download_root, + env=process_env(auth), capture_output=True, text=True) + if result.returncode: + raise ValueError("Go module acquisition failed: " + result.stderr.strip()) + downloaded = result.stdout + unchanged() + for item in objects(downloaded): + path = item.get("Path", "") + if path.startswith(GO_PREFIX): + if path not in GO_MODULES: + raise ValueError("Resolved Go module is outside the reviewed mapping") + repo = path[len(GO_PREFIX):].split(".git", 1)[0] + origin = item.get("Origin") or json.loads(Path(item["Info"]).read_text()).get("Origin") or {} + mirror(repo, fixed_sha(origin.get("Hash")), component_token) + # Package metadata loads actual test/build dependencies without running + # vet, compilers, package init functions or candidate tests. No CGO tools. + packages = subprocess.run(["go", "list", "-mod=readonly", "-deps", "-test", "./..."], cwd=directory, + env=process_env(auth) | {"CGO_ENABLED": "0"}, capture_output=True, text=True) + if packages.returncode: + raise ValueError("Go test/build dependency acquisition failed: " + packages.stderr.strip()) + unchanged() + mirror_env() + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("Go prefetch refused: " + str(error)) + print("Go modules cached with GOTOOLCHAIN=local; no candidate code executed") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Vet, test, and race + run: | + set -euo pipefail + source .ci-mirrors.env + GOWORK=off go vet -mod=readonly ./... && GOWORK=off go test -mod=readonly -count=1 ./... && GOWORK=off go test -mod=readonly -count=1 -race ./... diff --git a/tests/fixtures/component-ci/Agent-Intent/ci.yml b/tests/fixtures/component-ci/Agent-Intent/ci.yml new file mode 100644 index 00000000..41a05d58 --- /dev/null +++ b/tests/fixtures/component-ci/Agent-Intent/ci.yml @@ -0,0 +1,510 @@ +name: ci +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + vet-and-test: + runs-on: ubuntu-latest + env: + GOPROXY: https://goproxy.cn,direct + GOTOOLCHAIN: local + GOWORK: "off" + GOPRIVATE: git-ssh.u1680832.nyat.app/weichen + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_1 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-Intent": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") + if (root / ".git").exists(): + raise ValueError("Checkout requires a fresh workspace") + git(root, "init", "-q") + git(root, "remote", "add", "origin", SERVER + "/weichen/Agent-Intent.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Agent-Intent") + git(root, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Go 1.27.1 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz + tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" + ln -sfn /usr/local/go/bin/go /usr/local/bin/go + ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + try: + targets = [] + for source in source_roots(): + for suffix in (".", "examples/trace", "adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad"): + directory = source / suffix + if (directory / "go.mod").is_file() and directory.resolve() not in targets: + targets.append(directory.resolve()) + # Parse using the installed local Go tool without credentials or candidate execution. + original_files = {} + for directory in targets: + parsed_mod = json.loads(subprocess.check_output(["go", "mod", "edit", "-json"], cwd=directory, env=clean)) + canonical = parsed_mod["Module"]["Path"].startswith(GO_PREFIX) + for name in ("go.mod", "go.sum"): + dependency_file = directory / name + if dependency_file.is_file(): + original_files[(directory, name)] = dependency_file.read_bytes() + elif canonical and name == "go.sum": + original_files[(directory, name)] = None + for dep in (parsed_mod.get("Require") or []): + path = dep["Path"] + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go dependency is outside the reviewed module mapping") + for replacement in (parsed_mod.get("Replace") or []): + path = replacement["New"]["Path"] + if canonical and not replacement["New"].get("Version"): + raise ValueError("Canonical module cannot acquire a local path replacement") + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go replacement is outside the reviewed module mapping") + auth = config.copy() + for repo in sorted(GO_REPOS): + url = f"{SERVER}/weichen/{repo}.git" + auth[f"url.{url}.insteadOf"] = "https://" + GO_PREFIX + repo + auth[f"http.{url}.extraheader"] = "AUTHORIZATION: token " + component_token + def objects(output): + decoder = json.JSONDecoder() + remaining = output.strip() + while remaining: + item, end = decoder.raw_decode(remaining) + remaining = remaining[end:].lstrip() + yield item + def unchanged(): + for (owner, name), contents in original_files.items(): + dependency_file = owner / name + current = dependency_file.read_bytes() if dependency_file.exists() else None + if current != contents: + raise ValueError("Go acquisition modified a committed Go dependency file: " + str(dependency_file)) + for directory in targets: + # Resolve private go.mod metadata only through exact repository headers; + # validate the complete selected graph before acquiring module zip files. + graph = subprocess.run(["go", "list", "-mod=readonly", "-m", "-json", "all"], cwd=directory, + env=process_env(auth), capture_output=True, text=True) + if graph.returncode: + raise ValueError("Go selected graph resolution failed: " + graph.stderr.strip()) + for item in objects(graph.stdout): + if item.get("Main"): + continue + selected = item.get("Replace") or item + for path in (item.get("Path", ""), selected.get("Path", "")): + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Selected Go module is outside the reviewed mapping") + unchanged() + # Go 1.27 can prune go.sum even under -mod=readonly for this + # metadata-only command. Use a disposable copy, then validate actual + # package loading against the unchanged committed source locks. + local_replacements = json.loads(subprocess.check_output( + ["go", "mod", "edit", "-json"], cwd=directory, env=clean)).get("Replace") or [] + downloaded = "" + if not any(not item["New"].get("Version") for item in local_replacements): + with tempfile.TemporaryDirectory(prefix="ci-go-prefetch-") as temporary: + download_root = Path(temporary) + for name in ("go.mod", "go.sum"): + if (directory / name).is_file(): + (download_root / name).write_bytes((directory / name).read_bytes()) + result = subprocess.run(["go", "mod", "download", "-json"], cwd=download_root, + env=process_env(auth), capture_output=True, text=True) + if result.returncode: + raise ValueError("Go module acquisition failed: " + result.stderr.strip()) + downloaded = result.stdout + unchanged() + for item in objects(downloaded): + path = item.get("Path", "") + if path.startswith(GO_PREFIX): + if path not in GO_MODULES: + raise ValueError("Resolved Go module is outside the reviewed mapping") + repo = path[len(GO_PREFIX):].split(".git", 1)[0] + origin = item.get("Origin") or json.loads(Path(item["Info"]).read_text()).get("Origin") or {} + mirror(repo, fixed_sha(origin.get("Hash")), component_token) + # Package metadata loads actual test/build dependencies without running + # vet, compilers, package init functions or candidate tests. No CGO tools. + packages = subprocess.run(["go", "list", "-mod=readonly", "-deps", "-test", "./..."], cwd=directory, + env=process_env(auth) | {"CGO_ENABLED": "0"}, capture_output=True, text=True) + if packages.returncode: + raise ValueError("Go test/build dependency acquisition failed: " + packages.stderr.strip()) + unchanged() + mirror_env() + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("Go prefetch refused: " + str(error)) + print("Go modules cached with GOTOOLCHAIN=local; no candidate code executed") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Vet, test, and race + run: | + set -euo pipefail + source .ci-mirrors.env + GOWORK=off go vet -mod=readonly ./... && GOWORK=off go test -mod=readonly -count=1 ./... && GOWORK=off go test -mod=readonly -count=1 -race ./... + docker-checkout-hostgateway: + runs-on: ubuntu-latest + options: --add-host gitea:host-gateway + env: + GITHUB_SERVER_URL: http://gitea:3000 + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: *trusted_acquisition_1 + - run: test -f go.mod && echo "docker-mode checkout via host-gateway OK" diff --git a/tests/fixtures/component-ci/Agent-Native/ci.yml b/tests/fixtures/component-ci/Agent-Native/ci.yml new file mode 100644 index 00000000..bb62b4cf --- /dev/null +++ b/tests/fixtures/component-ci/Agent-Native/ci.yml @@ -0,0 +1,510 @@ +name: ci +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + vet-and-test: + runs-on: ubuntu-latest + env: + GOPROXY: https://goproxy.cn,direct + GOTOOLCHAIN: local + GOWORK: "off" + GOPRIVATE: git-ssh.u1680832.nyat.app/weichen + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_1 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-Native": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") + if (root / ".git").exists(): + raise ValueError("Checkout requires a fresh workspace") + git(root, "init", "-q") + git(root, "remote", "add", "origin", SERVER + "/weichen/Agent-Native.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Agent-Native") + git(root, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Go 1.27.1 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz + tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" + ln -sfn /usr/local/go/bin/go /usr/local/bin/go + ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + try: + targets = [] + for source in source_roots(): + for suffix in (".", "examples/trace", "adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad"): + directory = source / suffix + if (directory / "go.mod").is_file() and directory.resolve() not in targets: + targets.append(directory.resolve()) + # Parse using the installed local Go tool without credentials or candidate execution. + original_files = {} + for directory in targets: + parsed_mod = json.loads(subprocess.check_output(["go", "mod", "edit", "-json"], cwd=directory, env=clean)) + canonical = parsed_mod["Module"]["Path"].startswith(GO_PREFIX) + for name in ("go.mod", "go.sum"): + dependency_file = directory / name + if dependency_file.is_file(): + original_files[(directory, name)] = dependency_file.read_bytes() + elif canonical and name == "go.sum": + original_files[(directory, name)] = None + for dep in (parsed_mod.get("Require") or []): + path = dep["Path"] + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go dependency is outside the reviewed module mapping") + for replacement in (parsed_mod.get("Replace") or []): + path = replacement["New"]["Path"] + if canonical and not replacement["New"].get("Version"): + raise ValueError("Canonical module cannot acquire a local path replacement") + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go replacement is outside the reviewed module mapping") + auth = config.copy() + for repo in sorted(GO_REPOS): + url = f"{SERVER}/weichen/{repo}.git" + auth[f"url.{url}.insteadOf"] = "https://" + GO_PREFIX + repo + auth[f"http.{url}.extraheader"] = "AUTHORIZATION: token " + component_token + def objects(output): + decoder = json.JSONDecoder() + remaining = output.strip() + while remaining: + item, end = decoder.raw_decode(remaining) + remaining = remaining[end:].lstrip() + yield item + def unchanged(): + for (owner, name), contents in original_files.items(): + dependency_file = owner / name + current = dependency_file.read_bytes() if dependency_file.exists() else None + if current != contents: + raise ValueError("Go acquisition modified a committed Go dependency file: " + str(dependency_file)) + for directory in targets: + # Resolve private go.mod metadata only through exact repository headers; + # validate the complete selected graph before acquiring module zip files. + graph = subprocess.run(["go", "list", "-mod=readonly", "-m", "-json", "all"], cwd=directory, + env=process_env(auth), capture_output=True, text=True) + if graph.returncode: + raise ValueError("Go selected graph resolution failed: " + graph.stderr.strip()) + for item in objects(graph.stdout): + if item.get("Main"): + continue + selected = item.get("Replace") or item + for path in (item.get("Path", ""), selected.get("Path", "")): + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Selected Go module is outside the reviewed mapping") + unchanged() + # Go 1.27 can prune go.sum even under -mod=readonly for this + # metadata-only command. Use a disposable copy, then validate actual + # package loading against the unchanged committed source locks. + local_replacements = json.loads(subprocess.check_output( + ["go", "mod", "edit", "-json"], cwd=directory, env=clean)).get("Replace") or [] + downloaded = "" + if not any(not item["New"].get("Version") for item in local_replacements): + with tempfile.TemporaryDirectory(prefix="ci-go-prefetch-") as temporary: + download_root = Path(temporary) + for name in ("go.mod", "go.sum"): + if (directory / name).is_file(): + (download_root / name).write_bytes((directory / name).read_bytes()) + result = subprocess.run(["go", "mod", "download", "-json"], cwd=download_root, + env=process_env(auth), capture_output=True, text=True) + if result.returncode: + raise ValueError("Go module acquisition failed: " + result.stderr.strip()) + downloaded = result.stdout + unchanged() + for item in objects(downloaded): + path = item.get("Path", "") + if path.startswith(GO_PREFIX): + if path not in GO_MODULES: + raise ValueError("Resolved Go module is outside the reviewed mapping") + repo = path[len(GO_PREFIX):].split(".git", 1)[0] + origin = item.get("Origin") or json.loads(Path(item["Info"]).read_text()).get("Origin") or {} + mirror(repo, fixed_sha(origin.get("Hash")), component_token) + # Package metadata loads actual test/build dependencies without running + # vet, compilers, package init functions or candidate tests. No CGO tools. + packages = subprocess.run(["go", "list", "-mod=readonly", "-deps", "-test", "./..."], cwd=directory, + env=process_env(auth) | {"CGO_ENABLED": "0"}, capture_output=True, text=True) + if packages.returncode: + raise ValueError("Go test/build dependency acquisition failed: " + packages.stderr.strip()) + unchanged() + mirror_env() + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("Go prefetch refused: " + str(error)) + print("Go modules cached with GOTOOLCHAIN=local; no candidate code executed") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Vet, test, and race + run: | + set -euo pipefail + source .ci-mirrors.env + go vet -mod=readonly ./... && go test -mod=readonly -count=1 ./... && go test -mod=readonly -count=1 -race ./... + docker-checkout-hostgateway: + runs-on: ubuntu-latest + options: --add-host gitea:host-gateway + env: + GITHUB_SERVER_URL: http://gitea:3000 + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: *trusted_acquisition_1 + - run: test -f go.mod && echo "docker-mode checkout via host-gateway OK" diff --git a/tests/fixtures/component-ci/Agent-Squad/ci.yml b/tests/fixtures/component-ci/Agent-Squad/ci.yml new file mode 100644 index 00000000..ce53c556 --- /dev/null +++ b/tests/fixtures/component-ci/Agent-Squad/ci.yml @@ -0,0 +1,513 @@ +name: ci +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + vet-and-test: + runs-on: ubuntu-latest + env: + GOPROXY: https://goproxy.cn,direct + GOTOOLCHAIN: local + GOWORK: "off" + GOPRIVATE: git-ssh.u1680832.nyat.app/weichen + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_1 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-Squad": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") + if (root / ".git").exists(): + raise ValueError("Checkout requires a fresh workspace") + git(root, "init", "-q") + git(root, "remote", "add", "origin", SERVER + "/weichen/Agent-Squad.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Agent-Squad") + git(root, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Go 1.27.1 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz + tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" + ln -sfn /usr/local/go/bin/go /usr/local/bin/go + ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + try: + targets = [] + for source in source_roots(): + for suffix in (".", "examples/trace", "adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad"): + directory = source / suffix + if (directory / "go.mod").is_file() and directory.resolve() not in targets: + targets.append(directory.resolve()) + # Parse using the installed local Go tool without credentials or candidate execution. + original_files = {} + for directory in targets: + parsed_mod = json.loads(subprocess.check_output(["go", "mod", "edit", "-json"], cwd=directory, env=clean)) + canonical = parsed_mod["Module"]["Path"].startswith(GO_PREFIX) + for name in ("go.mod", "go.sum"): + dependency_file = directory / name + if dependency_file.is_file(): + original_files[(directory, name)] = dependency_file.read_bytes() + elif canonical and name == "go.sum": + original_files[(directory, name)] = None + for dep in (parsed_mod.get("Require") or []): + path = dep["Path"] + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go dependency is outside the reviewed module mapping") + for replacement in (parsed_mod.get("Replace") or []): + path = replacement["New"]["Path"] + if canonical and not replacement["New"].get("Version"): + raise ValueError("Canonical module cannot acquire a local path replacement") + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go replacement is outside the reviewed module mapping") + auth = config.copy() + for repo in sorted(GO_REPOS): + url = f"{SERVER}/weichen/{repo}.git" + auth[f"url.{url}.insteadOf"] = "https://" + GO_PREFIX + repo + auth[f"http.{url}.extraheader"] = "AUTHORIZATION: token " + component_token + def objects(output): + decoder = json.JSONDecoder() + remaining = output.strip() + while remaining: + item, end = decoder.raw_decode(remaining) + remaining = remaining[end:].lstrip() + yield item + def unchanged(): + for (owner, name), contents in original_files.items(): + dependency_file = owner / name + current = dependency_file.read_bytes() if dependency_file.exists() else None + if current != contents: + raise ValueError("Go acquisition modified a committed Go dependency file: " + str(dependency_file)) + for directory in targets: + # Resolve private go.mod metadata only through exact repository headers; + # validate the complete selected graph before acquiring module zip files. + graph = subprocess.run(["go", "list", "-mod=readonly", "-m", "-json", "all"], cwd=directory, + env=process_env(auth), capture_output=True, text=True) + if graph.returncode: + raise ValueError("Go selected graph resolution failed: " + graph.stderr.strip()) + for item in objects(graph.stdout): + if item.get("Main"): + continue + selected = item.get("Replace") or item + for path in (item.get("Path", ""), selected.get("Path", "")): + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Selected Go module is outside the reviewed mapping") + unchanged() + # Go 1.27 can prune go.sum even under -mod=readonly for this + # metadata-only command. Use a disposable copy, then validate actual + # package loading against the unchanged committed source locks. + local_replacements = json.loads(subprocess.check_output( + ["go", "mod", "edit", "-json"], cwd=directory, env=clean)).get("Replace") or [] + downloaded = "" + if not any(not item["New"].get("Version") for item in local_replacements): + with tempfile.TemporaryDirectory(prefix="ci-go-prefetch-") as temporary: + download_root = Path(temporary) + for name in ("go.mod", "go.sum"): + if (directory / name).is_file(): + (download_root / name).write_bytes((directory / name).read_bytes()) + result = subprocess.run(["go", "mod", "download", "-json"], cwd=download_root, + env=process_env(auth), capture_output=True, text=True) + if result.returncode: + raise ValueError("Go module acquisition failed: " + result.stderr.strip()) + downloaded = result.stdout + unchanged() + for item in objects(downloaded): + path = item.get("Path", "") + if path.startswith(GO_PREFIX): + if path not in GO_MODULES: + raise ValueError("Resolved Go module is outside the reviewed mapping") + repo = path[len(GO_PREFIX):].split(".git", 1)[0] + origin = item.get("Origin") or json.loads(Path(item["Info"]).read_text()).get("Origin") or {} + mirror(repo, fixed_sha(origin.get("Hash")), component_token) + # Package metadata loads actual test/build dependencies without running + # vet, compilers, package init functions or candidate tests. No CGO tools. + packages = subprocess.run(["go", "list", "-mod=readonly", "-deps", "-test", "./..."], cwd=directory, + env=process_env(auth) | {"CGO_ENABLED": "0"}, capture_output=True, text=True) + if packages.returncode: + raise ValueError("Go test/build dependency acquisition failed: " + packages.stderr.strip()) + unchanged() + mirror_env() + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("Go prefetch refused: " + str(error)) + print("Go modules cached with GOTOOLCHAIN=local; no candidate code executed") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Vet, test, and race + run: | + set -euo pipefail + source .ci-mirrors.env + for module in . adapters/native adapters/intent adapters/sqlite adapters/a2a cmd/agent-squad; do + test -f "$module/go.mod" + (cd "$module" && go vet -mod=readonly ./... && go test -mod=readonly -count=1 ./... && go test -mod=readonly -count=1 -race ./...) + done + docker-checkout-hostgateway: + runs-on: ubuntu-latest + options: --add-host gitea:host-gateway + env: + GITHUB_SERVER_URL: http://gitea:3000 + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: *trusted_acquisition_1 + - run: test -f go.mod && echo "docker-mode checkout via host-gateway OK" diff --git a/tests/fixtures/component-ci/Agent-System-Backend/ci.yml b/tests/fixtures/component-ci/Agent-System-Backend/ci.yml new file mode 100644 index 00000000..b7c092af --- /dev/null +++ b/tests/fixtures/component-ci/Agent-System-Backend/ci.yml @@ -0,0 +1,500 @@ +name: ci +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + vet-and-test: + runs-on: ubuntu-latest + env: + GOPROXY: https://goproxy.cn,direct + GOTOOLCHAIN: local + GOWORK: "off" + GOPRIVATE: git-ssh.u1680832.nyat.app/weichen + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_1 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-Backend": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") + if (root / ".git").exists(): + raise ValueError("Checkout requires a fresh workspace") + git(root, "init", "-q") + git(root, "remote", "add", "origin", SERVER + "/weichen/Agent-System-Backend.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Agent-System-Backend") + git(root, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Go 1.27.1 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz + tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" + ln -sfn /usr/local/go/bin/go /usr/local/bin/go + ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + try: + targets = [] + for source in source_roots(): + for suffix in (".", "examples/trace", "adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad"): + directory = source / suffix + if (directory / "go.mod").is_file() and directory.resolve() not in targets: + targets.append(directory.resolve()) + # Parse using the installed local Go tool without credentials or candidate execution. + original_files = {} + for directory in targets: + parsed_mod = json.loads(subprocess.check_output(["go", "mod", "edit", "-json"], cwd=directory, env=clean)) + canonical = parsed_mod["Module"]["Path"].startswith(GO_PREFIX) + for name in ("go.mod", "go.sum"): + dependency_file = directory / name + if dependency_file.is_file(): + original_files[(directory, name)] = dependency_file.read_bytes() + elif canonical and name == "go.sum": + original_files[(directory, name)] = None + for dep in (parsed_mod.get("Require") or []): + path = dep["Path"] + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go dependency is outside the reviewed module mapping") + for replacement in (parsed_mod.get("Replace") or []): + path = replacement["New"]["Path"] + if canonical and not replacement["New"].get("Version"): + raise ValueError("Canonical module cannot acquire a local path replacement") + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go replacement is outside the reviewed module mapping") + auth = config.copy() + for repo in sorted(GO_REPOS): + url = f"{SERVER}/weichen/{repo}.git" + auth[f"url.{url}.insteadOf"] = "https://" + GO_PREFIX + repo + auth[f"http.{url}.extraheader"] = "AUTHORIZATION: token " + component_token + def objects(output): + decoder = json.JSONDecoder() + remaining = output.strip() + while remaining: + item, end = decoder.raw_decode(remaining) + remaining = remaining[end:].lstrip() + yield item + def unchanged(): + for (owner, name), contents in original_files.items(): + dependency_file = owner / name + current = dependency_file.read_bytes() if dependency_file.exists() else None + if current != contents: + raise ValueError("Go acquisition modified a committed Go dependency file: " + str(dependency_file)) + for directory in targets: + # Resolve private go.mod metadata only through exact repository headers; + # validate the complete selected graph before acquiring module zip files. + graph = subprocess.run(["go", "list", "-mod=readonly", "-m", "-json", "all"], cwd=directory, + env=process_env(auth), capture_output=True, text=True) + if graph.returncode: + raise ValueError("Go selected graph resolution failed: " + graph.stderr.strip()) + for item in objects(graph.stdout): + if item.get("Main"): + continue + selected = item.get("Replace") or item + for path in (item.get("Path", ""), selected.get("Path", "")): + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Selected Go module is outside the reviewed mapping") + unchanged() + # Go 1.27 can prune go.sum even under -mod=readonly for this + # metadata-only command. Use a disposable copy, then validate actual + # package loading against the unchanged committed source locks. + local_replacements = json.loads(subprocess.check_output( + ["go", "mod", "edit", "-json"], cwd=directory, env=clean)).get("Replace") or [] + downloaded = "" + if not any(not item["New"].get("Version") for item in local_replacements): + with tempfile.TemporaryDirectory(prefix="ci-go-prefetch-") as temporary: + download_root = Path(temporary) + for name in ("go.mod", "go.sum"): + if (directory / name).is_file(): + (download_root / name).write_bytes((directory / name).read_bytes()) + result = subprocess.run(["go", "mod", "download", "-json"], cwd=download_root, + env=process_env(auth), capture_output=True, text=True) + if result.returncode: + raise ValueError("Go module acquisition failed: " + result.stderr.strip()) + downloaded = result.stdout + unchanged() + for item in objects(downloaded): + path = item.get("Path", "") + if path.startswith(GO_PREFIX): + if path not in GO_MODULES: + raise ValueError("Resolved Go module is outside the reviewed mapping") + repo = path[len(GO_PREFIX):].split(".git", 1)[0] + origin = item.get("Origin") or json.loads(Path(item["Info"]).read_text()).get("Origin") or {} + mirror(repo, fixed_sha(origin.get("Hash")), component_token) + # Package metadata loads actual test/build dependencies without running + # vet, compilers, package init functions or candidate tests. No CGO tools. + packages = subprocess.run(["go", "list", "-mod=readonly", "-deps", "-test", "./..."], cwd=directory, + env=process_env(auth) | {"CGO_ENABLED": "0"}, capture_output=True, text=True) + if packages.returncode: + raise ValueError("Go test/build dependency acquisition failed: " + packages.stderr.strip()) + unchanged() + mirror_env() + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("Go prefetch refused: " + str(error)) + print("Go modules cached with GOTOOLCHAIN=local; no candidate code executed") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install house-style Python packages + run: python3 -m pip install --break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx python-pptx openpyxl + - name: Vet and test + run: | + set -euo pipefail + source .ci-mirrors.env + GOWORK=off go vet -mod=readonly ./... && GOWORK=off go test -mod=readonly -count=1 ./... diff --git a/tests/fixtures/component-ci/Agent-System-Core/ci.yml b/tests/fixtures/component-ci/Agent-System-Core/ci.yml new file mode 100644 index 00000000..df527cbb --- /dev/null +++ b/tests/fixtures/component-ci/Agent-System-Core/ci.yml @@ -0,0 +1,707 @@ +name: ci +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + test: + runs-on: ubuntu-latest + env: + GOPROXY: https://goproxy.cn,direct + GOTOOLCHAIN: local + GOWORK: "off" + GOPRIVATE: git-ssh.u1680832.nyat.app/weichen + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_1 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-Core": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") + if (root / ".git").exists(): + raise ValueError("Checkout requires a fresh workspace") + git(root, "init", "-q") + git(root, "remote", "add", "origin", SERVER + "/weichen/Agent-System-Core.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Agent-System-Core") + git(root, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Go 1.27.1 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz + tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" + ln -sfn /usr/local/go/bin/go /usr/local/bin/go + ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + try: + targets = [] + for source in source_roots(): + for suffix in (".", "examples/trace", "adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad"): + directory = source / suffix + if (directory / "go.mod").is_file() and directory.resolve() not in targets: + targets.append(directory.resolve()) + # Parse using the installed local Go tool without credentials or candidate execution. + original_files = {} + for directory in targets: + parsed_mod = json.loads(subprocess.check_output(["go", "mod", "edit", "-json"], cwd=directory, env=clean)) + canonical = parsed_mod["Module"]["Path"].startswith(GO_PREFIX) + for name in ("go.mod", "go.sum"): + dependency_file = directory / name + if dependency_file.is_file(): + original_files[(directory, name)] = dependency_file.read_bytes() + elif canonical and name == "go.sum": + original_files[(directory, name)] = None + for dep in (parsed_mod.get("Require") or []): + path = dep["Path"] + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go dependency is outside the reviewed module mapping") + for replacement in (parsed_mod.get("Replace") or []): + path = replacement["New"]["Path"] + if canonical and not replacement["New"].get("Version"): + raise ValueError("Canonical module cannot acquire a local path replacement") + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go replacement is outside the reviewed module mapping") + auth = config.copy() + for repo in sorted(GO_REPOS): + url = f"{SERVER}/weichen/{repo}.git" + auth[f"url.{url}.insteadOf"] = "https://" + GO_PREFIX + repo + auth[f"http.{url}.extraheader"] = "AUTHORIZATION: token " + component_token + def objects(output): + decoder = json.JSONDecoder() + remaining = output.strip() + while remaining: + item, end = decoder.raw_decode(remaining) + remaining = remaining[end:].lstrip() + yield item + def unchanged(): + for (owner, name), contents in original_files.items(): + dependency_file = owner / name + current = dependency_file.read_bytes() if dependency_file.exists() else None + if current != contents: + raise ValueError("Go acquisition modified a committed Go dependency file: " + str(dependency_file)) + for directory in targets: + # Resolve private go.mod metadata only through exact repository headers; + # validate the complete selected graph before acquiring module zip files. + graph = subprocess.run(["go", "list", "-mod=readonly", "-m", "-json", "all"], cwd=directory, + env=process_env(auth), capture_output=True, text=True) + if graph.returncode: + raise ValueError("Go selected graph resolution failed: " + graph.stderr.strip()) + for item in objects(graph.stdout): + if item.get("Main"): + continue + selected = item.get("Replace") or item + for path in (item.get("Path", ""), selected.get("Path", "")): + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Selected Go module is outside the reviewed mapping") + unchanged() + # Go 1.27 can prune go.sum even under -mod=readonly for this + # metadata-only command. Use a disposable copy, then validate actual + # package loading against the unchanged committed source locks. + local_replacements = json.loads(subprocess.check_output( + ["go", "mod", "edit", "-json"], cwd=directory, env=clean)).get("Replace") or [] + downloaded = "" + if not any(not item["New"].get("Version") for item in local_replacements): + with tempfile.TemporaryDirectory(prefix="ci-go-prefetch-") as temporary: + download_root = Path(temporary) + for name in ("go.mod", "go.sum"): + if (directory / name).is_file(): + (download_root / name).write_bytes((directory / name).read_bytes()) + result = subprocess.run(["go", "mod", "download", "-json"], cwd=download_root, + env=process_env(auth), capture_output=True, text=True) + if result.returncode: + raise ValueError("Go module acquisition failed: " + result.stderr.strip()) + downloaded = result.stdout + unchanged() + for item in objects(downloaded): + path = item.get("Path", "") + if path.startswith(GO_PREFIX): + if path not in GO_MODULES: + raise ValueError("Resolved Go module is outside the reviewed mapping") + repo = path[len(GO_PREFIX):].split(".git", 1)[0] + origin = item.get("Origin") or json.loads(Path(item["Info"]).read_text()).get("Origin") or {} + mirror(repo, fixed_sha(origin.get("Hash")), component_token) + # Package metadata loads actual test/build dependencies without running + # vet, compilers, package init functions or candidate tests. No CGO tools. + packages = subprocess.run(["go", "list", "-mod=readonly", "-deps", "-test", "./..."], cwd=directory, + env=process_env(auth) | {"CGO_ENABLED": "0"}, capture_output=True, text=True) + if packages.returncode: + raise ValueError("Go test/build dependency acquisition failed: " + packages.stderr.strip()) + unchanged() + mirror_env() + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("Go prefetch refused: " + str(error)) + print("Go modules cached with GOTOOLCHAIN=local; no candidate code executed") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Vet, test, and race + run: | + set -euo pipefail + source .ci-mirrors.env + GOWORK=off go vet -mod=readonly ./... && GOWORK=off go test -mod=readonly -count=1 ./... && GOWORK=off go test -mod=readonly -count=1 -race ./... + - name: Install Node 22 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz + tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz" + - name: Prefetch npm packages without lifecycle scripts + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_3 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + def git_package(value): + if not isinstance(value, str): + return None + if value.startswith(("file:", "link:", "workspace:")): + raise ValueError("Formal npm acquisition cannot consume a local package override") + if value.startswith(("http://", "https://")): + registry = urlsplit(value) + if registry.scheme != "https" or registry.hostname != "registry.npmjs.org" or registry.username or registry.password: + raise ValueError("npm tarball source is outside the reviewed public registry") + elif "/" in value and not value.startswith(("git+", "npm:")): + raise ValueError("npm repository shorthand is outside the fixed-SHA package mapping") + if value.startswith("git+") or value.startswith(("git://", "ssh://", "github:", "gitlab:", "bitbucket:")): + for repo in ("Agent-System-Core", "Agent-System-UI"): + prefix = "git+" + SSH + repo + ".git#" + if value.startswith(prefix): + return repo, fixed_sha(value[len(prefix):]) + raise ValueError("npm Git source is outside the reviewed fixed-SHA package mapping") + return None + + try: + targets = [] + selected = set() + for directory in source_roots(): + if not (directory / "package.json").is_file(): + continue + if (directory / ".npmrc").exists(): + raise ValueError("Candidate .npmrc is not allowed during private dependency acquisition") + package = json.loads((directory / "package.json").read_text()) + lock = json.loads((directory / "package-lock.json").read_text()) + if lock.get("lockfileVersion") not in {2, 3}: + raise ValueError("npm acquisition requires a package lock") + for group in ("dependencies", "devDependencies", "optionalDependencies"): + for value in package.get(group, {}).values(): + found = git_package(value) + if found: + selected.add(found) + for entry in lock.get("packages", {}).values(): + found = git_package(entry.get("resolved")) + if found: + selected.add(found) + for group in ("dependencies", "devDependencies", "optionalDependencies"): + for value in entry.get(group, {}).values(): + found = git_package(value) + if found: + selected.add(found) + targets.append(directory) + # Fetch only registered fixed Git package commits. npm never receives token config. + for repo, sha in sorted(selected): + repository = mirror(repo, sha, component_token) + package = json.loads(git(repository, "show", sha + ":package.json")) + forbidden = {"prepare", "prepack", "prepublish", "prepublishOnly", "preinstall", "install", "postinstall"} + if forbidden & set(package.get("scripts", {})): + raise ValueError("Git package provider must commit outputs without acquisition lifecycle scripts") + if not git(repository, "ls-tree", sha, "package/").strip(): + raise ValueError("Git package provider is missing committed package outputs") + no_auth = mirror_env() + empty_config = tempfile.NamedTemporaryFile(prefix="ci-npm-globalrc-") + for directory in targets: + result = subprocess.run(["npm", "ci", "--ignore-scripts", "--no-audit", "--no-fund", + "--userconfig=/dev/null", "--globalconfig=" + empty_config.name], + cwd=directory, env=no_auth, capture_output=True, text=True) + if result.returncode: + raise ValueError("npm dependency acquisition failed: " + result.stderr.strip()) + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("npm prefetch refused: " + str(error)) + print("npm packages cached without credentials or lifecycle execution") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Validate package and contracts without credentials + run: | + set -euo pipefail + source .ci-mirrors.env + npm test + npm run typecheck diff --git a/tests/fixtures/component-ci/Agent-System-Frontend/ci.yml b/tests/fixtures/component-ci/Agent-System-Frontend/ci.yml new file mode 100644 index 00000000..428fd37a --- /dev/null +++ b/tests/fixtures/component-ci/Agent-System-Frontend/ci.yml @@ -0,0 +1,501 @@ +name: ci +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + test: + runs-on: ubuntu-latest + env: + GOPROXY: https://goproxy.cn,direct + GOTOOLCHAIN: local + GOWORK: "off" + GOPRIVATE: git-ssh.u1680832.nyat.app/weichen + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_1 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-Frontend": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") + if (root / ".git").exists(): + raise ValueError("Checkout requires a fresh workspace") + git(root, "init", "-q") + git(root, "remote", "add", "origin", SERVER + "/weichen/Agent-System-Frontend.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Agent-System-Frontend") + git(root, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Node 22 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz + tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz" + - name: Prefetch npm packages without lifecycle scripts + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + def git_package(value): + if not isinstance(value, str): + return None + if value.startswith(("file:", "link:", "workspace:")): + raise ValueError("Formal npm acquisition cannot consume a local package override") + if value.startswith(("http://", "https://")): + registry = urlsplit(value) + if registry.scheme != "https" or registry.hostname != "registry.npmjs.org" or registry.username or registry.password: + raise ValueError("npm tarball source is outside the reviewed public registry") + elif "/" in value and not value.startswith(("git+", "npm:")): + raise ValueError("npm repository shorthand is outside the fixed-SHA package mapping") + if value.startswith("git+") or value.startswith(("git://", "ssh://", "github:", "gitlab:", "bitbucket:")): + for repo in ("Agent-System-Core", "Agent-System-UI"): + prefix = "git+" + SSH + repo + ".git#" + if value.startswith(prefix): + return repo, fixed_sha(value[len(prefix):]) + raise ValueError("npm Git source is outside the reviewed fixed-SHA package mapping") + return None + + def registry_package(location, entry): + resolved = entry.get("resolved", "") + if not isinstance(resolved, str) or not resolved.startswith(("https://", "http://")): + return None + # A metadata spec is name@exact-version, never a candidate URL. + source = urlsplit(resolved) + if (source.scheme != "https" or source.netloc != "registry.npmjs.org" or + source.username or source.password or source.query or source.fragment): + raise ValueError("npm tarball source is outside the reviewed public registry") + relative = Path(location) + name = entry.get("name") or location.rsplit("node_modules/", 1)[-1] + version = entry.get("version", "") + if (not location.startswith("node_modules/") or relative.is_absolute() or ".." in relative.parts or + not isinstance(name, str) or not re.fullmatch(r"(?:@[a-z0-9][a-z0-9._~-]*/)?[a-z0-9][a-z0-9._~-]*", name) or + not isinstance(version, str) or not re.fullmatch(r"[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?", version)): + raise ValueError("Invalid locked registry package name or version") + return name + "@" + version + + try: + targets = [] + selected = set() + for directory in source_roots(): + if not (directory / "package.json").is_file(): + continue + if (directory / ".npmrc").exists(): + raise ValueError("Candidate .npmrc is not allowed during private dependency acquisition") + package = json.loads((directory / "package.json").read_text()) + lock_bytes = (directory / "package-lock.json").read_bytes() + lock = json.loads(lock_bytes) + if lock.get("lockfileVersion") not in {2, 3}: + raise ValueError("npm acquisition requires a package lock") + for group in ("dependencies", "devDependencies", "optionalDependencies"): + for value in package.get(group, {}).values(): + found = git_package(value) + if found: + selected.add(found) + registry_packages = [] + for location, entry in lock.get("packages", {}).items(): + spec = registry_package(location, entry) + if spec: + registry_packages.append((location, spec)) + found = git_package(entry.get("resolved")) + if found: + selected.add(found) + for group in ("dependencies", "devDependencies", "optionalDependencies"): + for value in entry.get(group, {}).values(): + found = git_package(value) + if found: + selected.add(found) + targets.append((directory, registry_packages, lock_bytes)) + # Fetch only registered fixed Git package commits. npm never receives token config. + for repo, sha in sorted(selected): + repository = mirror(repo, sha, component_token) + package = json.loads(git(repository, "show", sha + ":package.json")) + forbidden = {"prepare", "prepack", "prepublish", "prepublishOnly", "preinstall", "install", "postinstall"} + if forbidden & set(package.get("scripts", {})): + raise ValueError("Git package provider must commit outputs without acquisition lifecycle scripts") + if not git(repository, "ls-tree", sha, "package/").strip(): + raise ValueError("Git package provider is missing committed package outputs") + no_auth = mirror_env() + empty_config = tempfile.NamedTemporaryFile(prefix="ci-npm-globalrc-") + for directory, registry_packages, lock_bytes in targets: + result = subprocess.run(["npm", "ci", "--ignore-scripts", "--no-audit", "--no-fund", + "--userconfig=/dev/null", "--globalconfig=" + empty_config.name], + cwd=directory, env=no_auth, capture_output=True, text=True) + if result.returncode: + raise ValueError("npm dependency acquisition failed: " + result.stderr.strip()) + # npm ci caches tarballs; packed consumers also need resolver + # metadata. Only installed locked registry entries are fetched. + specs = sorted({spec for location, spec in registry_packages if (directory / location).is_dir()}) + if specs: + with tempfile.TemporaryDirectory(prefix="ci-npm-metadata-") as metadata_root: + result = subprocess.run(["npm", "cache", "add", *specs, "--ignore-scripts", + "--registry=https://registry.npmjs.org", "--userconfig=/dev/null", + "--globalconfig=" + empty_config.name], cwd=metadata_root, + env=no_auth, capture_output=True, text=True) + if result.returncode: + raise ValueError("npm metadata acquisition failed: " + result.stderr.strip()) + if (directory / "package-lock.json").read_bytes() != lock_bytes: + raise ValueError("npm acquisition changed the committed package lock") + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("npm prefetch refused: " + str(error)) + print("npm packages cached without credentials or lifecycle execution") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Validate package and contracts without credentials + run: | + set -euo pipefail + source .ci-mirrors.env + npm test + npm run build diff --git a/tests/fixtures/component-ci/Agent-System-RDM/ci.yml b/tests/fixtures/component-ci/Agent-System-RDM/ci.yml new file mode 100644 index 00000000..9d42be10 --- /dev/null +++ b/tests/fixtures/component-ci/Agent-System-RDM/ci.yml @@ -0,0 +1,949 @@ +name: ci +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + build-and-test: + runs-on: ubuntu-latest + env: + GOPROXY: https://goproxy.cn,direct + GOTOOLCHAIN: local + GOWORK: "off" + GOPRIVATE: git-ssh.u1680832.nyat.app/weichen + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_1 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-RDM": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") + if (root / ".git").exists(): + raise ValueError("Checkout requires a fresh workspace") + git(root, "init", "-q") + git(root, "remote", "add", "origin", SERVER + "/weichen/Agent-System-RDM.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Agent-System-RDM") + git(root, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Prefetch fixed Dev product composition + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + locked = json.loads((root / "composition.dev.json").read_text()) + if set(locked) != {"schema", "repo", "commit"} or locked["schema"] != 1: + raise ValueError("Unsupported Dev product composition lock") + if locked["repo"] != SSH + "Agent-System-Dev.git": + raise ValueError("Dev product source is outside the reviewed allowlist") + sha = fixed_sha(locked["commit"]) + directory = root / ".ci-composition-dev" + if directory.exists() or directory.is_symlink(): + raise ValueError("Dev product composition requires a fresh destination") + directory.mkdir() + git(directory, "init", "-q") + url = SERVER + "/weichen/Agent-System-Dev.git" + git(directory, "remote", "add", "origin", url) + git(directory, "fetch", "--depth=1", "origin", sha, token=component_token, repo="Agent-System-Dev") + git(directory, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(directory, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Dev composition differs from the fixed lock") + if (directory / ".ci-mirrors").exists() or (directory / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + git(directory, "remote", "set-url", "origin", locked["repo"]) + materialize_manifest(directory) + mirror("Agent-System-Dev", sha, component_token) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + sys.exit("Dev product composition prefetch refused: " + str(error)) + print("Fixed Dev product source cached; candidate scripts run only without credentials") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Go 1.27.1 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz + tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" + ln -sfn /usr/local/go/bin/go /usr/local/bin/go + ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + try: + targets = [] + for source in source_roots(): + for suffix in (".", "examples/trace", "adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad"): + directory = source / suffix + if (directory / "go.mod").is_file() and directory.resolve() not in targets: + targets.append(directory.resolve()) + # Parse using the installed local Go tool without credentials or candidate execution. + original_files = {} + for directory in targets: + parsed_mod = json.loads(subprocess.check_output(["go", "mod", "edit", "-json"], cwd=directory, env=clean)) + canonical = parsed_mod["Module"]["Path"].startswith(GO_PREFIX) + for name in ("go.mod", "go.sum"): + dependency_file = directory / name + if dependency_file.is_file(): + original_files[(directory, name)] = dependency_file.read_bytes() + elif canonical and name == "go.sum": + original_files[(directory, name)] = None + for dep in (parsed_mod.get("Require") or []): + path = dep["Path"] + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go dependency is outside the reviewed module mapping") + for replacement in (parsed_mod.get("Replace") or []): + path = replacement["New"]["Path"] + if canonical and not replacement["New"].get("Version"): + raise ValueError("Canonical module cannot acquire a local path replacement") + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go replacement is outside the reviewed module mapping") + auth = config.copy() + for repo in sorted(GO_REPOS): + url = f"{SERVER}/weichen/{repo}.git" + auth[f"url.{url}.insteadOf"] = "https://" + GO_PREFIX + repo + auth[f"http.{url}.extraheader"] = "AUTHORIZATION: token " + component_token + def objects(output): + decoder = json.JSONDecoder() + remaining = output.strip() + while remaining: + item, end = decoder.raw_decode(remaining) + remaining = remaining[end:].lstrip() + yield item + def unchanged(): + for (owner, name), contents in original_files.items(): + dependency_file = owner / name + current = dependency_file.read_bytes() if dependency_file.exists() else None + if current != contents: + raise ValueError("Go acquisition modified a committed Go dependency file: " + str(dependency_file)) + for directory in targets: + # Resolve private go.mod metadata only through exact repository headers; + # validate the complete selected graph before acquiring module zip files. + graph = subprocess.run(["go", "list", "-mod=readonly", "-m", "-json", "all"], cwd=directory, + env=process_env(auth), capture_output=True, text=True) + if graph.returncode: + raise ValueError("Go selected graph resolution failed: " + graph.stderr.strip()) + for item in objects(graph.stdout): + if item.get("Main"): + continue + selected = item.get("Replace") or item + for path in (item.get("Path", ""), selected.get("Path", "")): + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Selected Go module is outside the reviewed mapping") + unchanged() + # Go 1.27 can prune go.sum even under -mod=readonly for this + # metadata-only command. Use a disposable copy, then validate actual + # package loading against the unchanged committed source locks. + local_replacements = json.loads(subprocess.check_output( + ["go", "mod", "edit", "-json"], cwd=directory, env=clean)).get("Replace") or [] + downloaded = "" + if not any(not item["New"].get("Version") for item in local_replacements): + with tempfile.TemporaryDirectory(prefix="ci-go-prefetch-") as temporary: + download_root = Path(temporary) + for name in ("go.mod", "go.sum"): + if (directory / name).is_file(): + (download_root / name).write_bytes((directory / name).read_bytes()) + result = subprocess.run(["go", "mod", "download", "-json"], cwd=download_root, + env=process_env(auth), capture_output=True, text=True) + if result.returncode: + raise ValueError("Go module acquisition failed: " + result.stderr.strip()) + downloaded = result.stdout + unchanged() + for item in objects(downloaded): + path = item.get("Path", "") + if path.startswith(GO_PREFIX): + if path not in GO_MODULES: + raise ValueError("Resolved Go module is outside the reviewed mapping") + repo = path[len(GO_PREFIX):].split(".git", 1)[0] + origin = item.get("Origin") or json.loads(Path(item["Info"]).read_text()).get("Origin") or {} + mirror(repo, fixed_sha(origin.get("Hash")), component_token) + # Package metadata loads actual test/build dependencies without running + # vet, compilers, package init functions or candidate tests. No CGO tools. + packages = subprocess.run(["go", "list", "-mod=readonly", "-deps", "-test", "./..."], cwd=directory, + env=process_env(auth) | {"CGO_ENABLED": "0"}, capture_output=True, text=True) + if packages.returncode: + raise ValueError("Go test/build dependency acquisition failed: " + packages.stderr.strip()) + unchanged() + mirror_env() + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("Go prefetch refused: " + str(error)) + print("Go modules cached with GOTOOLCHAIN=local; no candidate code executed") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Node 22 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://mirrors.aliyun.com/nodejs-release/v22.14.0/node-v22.14.0-linux-x64.tar.xz + tar -C /usr/local -xJf "$RUNNER_TEMP/node.tar.xz" + ln -sfn /usr/local/node-v22.14.0-linux-x64/bin/node /usr/local/bin/node + - name: Prefetch npm packages without lifecycle scripts + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_3 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + def git_package(value): + if not isinstance(value, str): + return None + if value.startswith(("file:", "link:", "workspace:")): + raise ValueError("Formal npm acquisition cannot consume a local package override") + if value.startswith(("http://", "https://")): + registry = urlsplit(value) + if registry.scheme != "https" or registry.hostname != "registry.npmjs.org" or registry.username or registry.password: + raise ValueError("npm tarball source is outside the reviewed public registry") + elif "/" in value and not value.startswith(("git+", "npm:")): + raise ValueError("npm repository shorthand is outside the fixed-SHA package mapping") + if value.startswith("git+") or value.startswith(("git://", "ssh://", "github:", "gitlab:", "bitbucket:")): + for repo in ("Agent-System-Core", "Agent-System-UI"): + prefix = "git+" + SSH + repo + ".git#" + if value.startswith(prefix): + return repo, fixed_sha(value[len(prefix):]) + raise ValueError("npm Git source is outside the reviewed fixed-SHA package mapping") + return None + + try: + targets = [] + selected = set() + for directory in source_roots(): + if not (directory / "package.json").is_file(): + continue + if (directory / ".npmrc").exists(): + raise ValueError("Candidate .npmrc is not allowed during private dependency acquisition") + package = json.loads((directory / "package.json").read_text()) + lock = json.loads((directory / "package-lock.json").read_text()) + if lock.get("lockfileVersion") not in {2, 3}: + raise ValueError("npm acquisition requires a package lock") + for group in ("dependencies", "devDependencies", "optionalDependencies"): + for value in package.get(group, {}).values(): + found = git_package(value) + if found: + selected.add(found) + for entry in lock.get("packages", {}).values(): + found = git_package(entry.get("resolved")) + if found: + selected.add(found) + for group in ("dependencies", "devDependencies", "optionalDependencies"): + for value in entry.get(group, {}).values(): + found = git_package(value) + if found: + selected.add(found) + targets.append(directory) + # Fetch only registered fixed Git package commits. npm never receives token config. + for repo, sha in sorted(selected): + repository = mirror(repo, sha, component_token) + package = json.loads(git(repository, "show", sha + ":package.json")) + forbidden = {"prepare", "prepack", "prepublish", "prepublishOnly", "preinstall", "install", "postinstall"} + if forbidden & set(package.get("scripts", {})): + raise ValueError("Git package provider must commit outputs without acquisition lifecycle scripts") + if not git(repository, "ls-tree", sha, "package/").strip(): + raise ValueError("Git package provider is missing committed package outputs") + no_auth = mirror_env() + empty_config = tempfile.NamedTemporaryFile(prefix="ci-npm-globalrc-") + for directory in targets: + result = subprocess.run(["npm", "ci", "--ignore-scripts", "--no-audit", "--no-fund", + "--userconfig=/dev/null", "--globalconfig=" + empty_config.name], + cwd=directory, env=no_auth, capture_output=True, text=True) + if result.returncode: + raise ValueError("npm dependency acquisition failed: " + result.stderr.strip()) + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("npm prefetch refused: " + str(error)) + print("npm packages cached without credentials or lifecycle execution") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + # Preserve the Go build, workbench guards and real RDM Go tests. + - name: Make test + run: | + set -euo pipefail + source .ci-mirrors.env + export COMPOSITION_ROOT="$PWD/.ci-composition-dev" + GOWORK=off make test diff --git a/tests/fixtures/component-ci/Agent-System-UI/ci.yml b/tests/fixtures/component-ci/Agent-System-UI/ci.yml new file mode 100644 index 00000000..970f1c44 --- /dev/null +++ b/tests/fixtures/component-ci/Agent-System-UI/ci.yml @@ -0,0 +1,501 @@ +name: ci +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + test: + runs-on: ubuntu-latest + env: + GOTOOLCHAIN: local + GOWORK: "off" + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_1 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Agent-System-UI": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") + if (root / ".git").exists(): + raise ValueError("Checkout requires a fresh workspace") + git(root, "init", "-q") + git(root, "remote", "add", "origin", SERVER + "/weichen/Agent-System-UI.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Agent-System-UI") + git(root, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Node 22 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/node.tar.xz" https://npmmirror.com/mirrors/node/v22.23.3/node-v22.23.3-linux-x64.tar.xz + tar -C /usr/local --strip-components=1 -xJf "$RUNNER_TEMP/node.tar.xz" + - name: Prefetch npm packages without lifecycle scripts + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + def git_package(value): + if not isinstance(value, str): + return None + if value.startswith(("file:", "link:", "workspace:")): + raise ValueError("Formal npm acquisition cannot consume a local package override") + if value.startswith(("http://", "https://")): + registry = urlsplit(value) + if registry.scheme != "https" or registry.hostname != "registry.npmjs.org" or registry.username or registry.password: + raise ValueError("npm tarball source is outside the reviewed public registry") + elif "/" in value and not value.startswith(("git+", "npm:")): + raise ValueError("npm repository shorthand is outside the fixed-SHA package mapping") + if value.startswith("git+") or value.startswith(("git://", "ssh://", "github:", "gitlab:", "bitbucket:")): + for repo in ("Agent-System-Core", "Agent-System-UI"): + prefix = "git+" + SSH + repo + ".git#" + if value.startswith(prefix): + return repo, fixed_sha(value[len(prefix):]) + raise ValueError("npm Git source is outside the reviewed fixed-SHA package mapping") + return None + + def registry_package(location, entry): + resolved = entry.get("resolved", "") + if not isinstance(resolved, str) or not resolved.startswith(("https://", "http://")): + return None + # A metadata spec is name@exact-version, never a candidate URL. + source = urlsplit(resolved) + if (source.scheme != "https" or source.netloc != "registry.npmjs.org" or + source.username or source.password or source.query or source.fragment): + raise ValueError("npm tarball source is outside the reviewed public registry") + relative = Path(location) + name = entry.get("name") or location.rsplit("node_modules/", 1)[-1] + version = entry.get("version", "") + if (not location.startswith("node_modules/") or relative.is_absolute() or ".." in relative.parts or + not isinstance(name, str) or not re.fullmatch(r"(?:@[a-z0-9][a-z0-9._~-]*/)?[a-z0-9][a-z0-9._~-]*", name) or + not isinstance(version, str) or not re.fullmatch(r"[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?", version)): + raise ValueError("Invalid locked registry package name or version") + return name + "@" + version + + try: + targets = [] + selected = set() + for directory in source_roots(): + if not (directory / "package.json").is_file(): + continue + if (directory / ".npmrc").exists(): + raise ValueError("Candidate .npmrc is not allowed during private dependency acquisition") + package = json.loads((directory / "package.json").read_text()) + lock_bytes = (directory / "package-lock.json").read_bytes() + lock = json.loads(lock_bytes) + if lock.get("lockfileVersion") not in {2, 3}: + raise ValueError("npm acquisition requires a package lock") + for group in ("dependencies", "devDependencies", "optionalDependencies"): + for value in package.get(group, {}).values(): + found = git_package(value) + if found: + selected.add(found) + registry_packages = [] + for location, entry in lock.get("packages", {}).items(): + spec = registry_package(location, entry) + if spec: + registry_packages.append((location, spec)) + found = git_package(entry.get("resolved")) + if found: + selected.add(found) + for group in ("dependencies", "devDependencies", "optionalDependencies"): + for value in entry.get(group, {}).values(): + found = git_package(value) + if found: + selected.add(found) + targets.append((directory, registry_packages, lock_bytes)) + # Fetch only registered fixed Git package commits. npm never receives token config. + for repo, sha in sorted(selected): + repository = mirror(repo, sha, component_token) + package = json.loads(git(repository, "show", sha + ":package.json")) + forbidden = {"prepare", "prepack", "prepublish", "prepublishOnly", "preinstall", "install", "postinstall"} + if forbidden & set(package.get("scripts", {})): + raise ValueError("Git package provider must commit outputs without acquisition lifecycle scripts") + if not git(repository, "ls-tree", sha, "package/").strip(): + raise ValueError("Git package provider is missing committed package outputs") + no_auth = mirror_env() + empty_config = tempfile.NamedTemporaryFile(prefix="ci-npm-globalrc-") + for directory, registry_packages, lock_bytes in targets: + result = subprocess.run(["npm", "ci", "--ignore-scripts", "--no-audit", "--no-fund", + "--userconfig=/dev/null", "--globalconfig=" + empty_config.name], + cwd=directory, env=no_auth, capture_output=True, text=True) + if result.returncode: + raise ValueError("npm dependency acquisition failed: " + result.stderr.strip()) + # npm ci caches tarballs; packed consumers also need resolver + # metadata. Only installed locked registry entries are fetched. + specs = sorted({spec for location, spec in registry_packages if (directory / location).is_dir()}) + if specs: + with tempfile.TemporaryDirectory(prefix="ci-npm-metadata-") as metadata_root: + result = subprocess.run(["npm", "cache", "add", *specs, "--ignore-scripts", + "--registry=https://registry.npmjs.org", "--userconfig=/dev/null", + "--globalconfig=" + empty_config.name], cwd=metadata_root, + env=no_auth, capture_output=True, text=True) + if result.returncode: + raise ValueError("npm metadata acquisition failed: " + result.stderr.strip()) + if (directory / "package-lock.json").read_bytes() != lock_bytes: + raise ValueError("npm acquisition changed the committed package lock") + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("npm prefetch refused: " + str(error)) + print("npm packages cached without credentials or lifecycle execution") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - run: | + set -euo pipefail + source .ci-mirrors.env + npm run typecheck + - run: | + set -euo pipefail + source .ci-mirrors.env + npm test diff --git a/tests/fixtures/component-ci/Error-Code-System/ci.yml b/tests/fixtures/component-ci/Error-Code-System/ci.yml new file mode 100644 index 00000000..2e314b1f --- /dev/null +++ b/tests/fixtures/component-ci/Error-Code-System/ci.yml @@ -0,0 +1,508 @@ +name: ci +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + vet-and-test: + runs-on: nightly + env: + GOTOOLCHAIN: local + GOWORK: "off" + GOPROXY: https://goproxy.cn,direct + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_1 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Error-Code-System": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") + if (root / ".git").exists(): + raise ValueError("Checkout requires a fresh workspace") + git(root, "init", "-q") + git(root, "remote", "add", "origin", SERVER + "/weichen/Error-Code-System.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Error-Code-System") + git(root, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Go 1.27.1 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz + tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" + ln -sfn /usr/local/go/bin/go /usr/local/bin/go + ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + try: + targets = [] + for source in source_roots(): + for suffix in (".", "examples/trace", "adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad"): + directory = source / suffix + if (directory / "go.mod").is_file() and directory.resolve() not in targets: + targets.append(directory.resolve()) + # Parse using the installed local Go tool without credentials or candidate execution. + original_files = {} + for directory in targets: + parsed_mod = json.loads(subprocess.check_output(["go", "mod", "edit", "-json"], cwd=directory, env=clean)) + canonical = parsed_mod["Module"]["Path"].startswith(GO_PREFIX) + for name in ("go.mod", "go.sum"): + dependency_file = directory / name + if dependency_file.is_file(): + original_files[(directory, name)] = dependency_file.read_bytes() + elif canonical and name == "go.sum": + original_files[(directory, name)] = None + for dep in (parsed_mod.get("Require") or []): + path = dep["Path"] + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go dependency is outside the reviewed module mapping") + for replacement in (parsed_mod.get("Replace") or []): + path = replacement["New"]["Path"] + if canonical and not replacement["New"].get("Version"): + raise ValueError("Canonical module cannot acquire a local path replacement") + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go replacement is outside the reviewed module mapping") + auth = config.copy() + for repo in sorted(GO_REPOS): + url = f"{SERVER}/weichen/{repo}.git" + auth[f"url.{url}.insteadOf"] = "https://" + GO_PREFIX + repo + auth[f"http.{url}.extraheader"] = "AUTHORIZATION: token " + component_token + def objects(output): + decoder = json.JSONDecoder() + remaining = output.strip() + while remaining: + item, end = decoder.raw_decode(remaining) + remaining = remaining[end:].lstrip() + yield item + def unchanged(): + for (owner, name), contents in original_files.items(): + dependency_file = owner / name + current = dependency_file.read_bytes() if dependency_file.exists() else None + if current != contents: + raise ValueError("Go acquisition modified a committed Go dependency file: " + str(dependency_file)) + for directory in targets: + # Resolve private go.mod metadata only through exact repository headers; + # validate the complete selected graph before acquiring module zip files. + graph = subprocess.run(["go", "list", "-mod=readonly", "-m", "-json", "all"], cwd=directory, + env=process_env(auth), capture_output=True, text=True) + if graph.returncode: + raise ValueError("Go selected graph resolution failed: " + graph.stderr.strip()) + for item in objects(graph.stdout): + if item.get("Main"): + continue + selected = item.get("Replace") or item + for path in (item.get("Path", ""), selected.get("Path", "")): + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Selected Go module is outside the reviewed mapping") + unchanged() + # Go 1.27 can prune go.sum even under -mod=readonly for this + # metadata-only command. Use a disposable copy, then validate actual + # package loading against the unchanged committed source locks. + local_replacements = json.loads(subprocess.check_output( + ["go", "mod", "edit", "-json"], cwd=directory, env=clean)).get("Replace") or [] + downloaded = "" + if not any(not item["New"].get("Version") for item in local_replacements): + with tempfile.TemporaryDirectory(prefix="ci-go-prefetch-") as temporary: + download_root = Path(temporary) + for name in ("go.mod", "go.sum"): + if (directory / name).is_file(): + (download_root / name).write_bytes((directory / name).read_bytes()) + result = subprocess.run(["go", "mod", "download", "-json"], cwd=download_root, + env=process_env(auth), capture_output=True, text=True) + if result.returncode: + raise ValueError("Go module acquisition failed: " + result.stderr.strip()) + downloaded = result.stdout + unchanged() + for item in objects(downloaded): + path = item.get("Path", "") + if path.startswith(GO_PREFIX): + if path not in GO_MODULES: + raise ValueError("Resolved Go module is outside the reviewed mapping") + repo = path[len(GO_PREFIX):].split(".git", 1)[0] + origin = item.get("Origin") or json.loads(Path(item["Info"]).read_text()).get("Origin") or {} + mirror(repo, fixed_sha(origin.get("Hash")), component_token) + # Package metadata loads actual test/build dependencies without running + # vet, compilers, package init functions or candidate tests. No CGO tools. + packages = subprocess.run(["go", "list", "-mod=readonly", "-deps", "-test", "./..."], cwd=directory, + env=process_env(auth) | {"CGO_ENABLED": "0"}, capture_output=True, text=True) + if packages.returncode: + raise ValueError("Go test/build dependency acquisition failed: " + packages.stderr.strip()) + unchanged() + mirror_env() + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("Go prefetch refused: " + str(error)) + print("Go modules cached with GOTOOLCHAIN=local; no candidate code executed") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - run: | + set -euo pipefail + source .ci-mirrors.env + GOWORK=off go vet -mod=readonly ./... && go test -mod=readonly -count=1 ./... + docker-checkout-hostgateway: + runs-on: ubuntu-latest + options: --add-host gitea:host-gateway + env: + GITHUB_SERVER_URL: http://gitea:3000 + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: *trusted_acquisition_1 + - run: test -f go.mod && echo "docker-mode checkout via host-gateway OK" diff --git a/tests/fixtures/component-ci/Logging-System/ci.yml b/tests/fixtures/component-ci/Logging-System/ci.yml new file mode 100644 index 00000000..6a24a9b2 --- /dev/null +++ b/tests/fixtures/component-ci/Logging-System/ci.yml @@ -0,0 +1,511 @@ +name: ci +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + vet-and-test: + runs-on: nightly + env: + GOTOOLCHAIN: local + GOWORK: "off" + GOPROXY: https://goproxy.cn,direct + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_1 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def materialize_legacy(directory, depth=0): + if depth > 16: + raise ValueError("Historical submodule depth exceeds the checkout limit") + links = {} + for entry in git(directory, "ls-tree", "-rz", "HEAD").split(b"\0"): + if entry: + metadata, path = entry.split(b"\t", 1) + mode, kind, commit = metadata.decode().split() + if mode == "160000": + links[path.decode()] = commit + if not links: + return + raw = git(directory, "config", "--no-includes", "--blob", "HEAD:.gitmodules", "--null", "--list") + entries = {} + for item in raw.split(b"\0"): + if not item: + continue + key, value = item.decode().split("\n", 1) + match = re.fullmatch(r"submodule\.(.+)\.(path|url)", key) + if not match: + raise ValueError("Unsupported candidate .gitmodules setting") + name, field = match.groups() + if field in entries.setdefault(name, {}): + raise ValueError("Duplicate candidate .gitmodules setting") + entries[name][field] = value + if set(entries) != set(links): + raise ValueError("Submodule names must match fixed gitlink paths") + for name, fields in entries.items(): + repo = LEGACY.get(name) + if not repo or fields.get("path") != name or fields.get("url") not in { + SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"}: + raise ValueError("Historical submodule source is outside the reviewed allowlist") + for name in entries: + repo = LEGACY[name] + sha = links[name] + url = f"{SERVER}/weichen/{repo}.git" + git(directory, "config", f"submodule.{name}.url", url) + # Trusted explicit checkout prevents candidate update commands from running. + git(directory, "submodule", "update", "--init", "--checkout", "--", name, token=component_token, repo=repo) + child = directory / name + if git(child, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Historical submodule does not match its fixed SHA") + mirror(repo, sha, component_token) + materialize_legacy(child, depth + 1) + + def materialize_manifest(directory): + manifest = directory / "components.json" + lock = directory / "components.lock.json" + if not manifest.exists() and not lock.exists(): + materialize_legacy(directory) + return + data = json.loads(manifest.read_text()) + locked = json.loads(lock.read_text()) + if data.get("schema") != 1 or locked.get("schema") != 1: + raise ValueError("Unsupported source manifest schema") + entries = {} + for item in data["components"]: + repo = item["id"] + path = ".workspace/" + repo + if (repo not in REPOS or repo in entries or item["path"] != path or + item["repo"] not in {SSH + repo + ".git", f"{SERVER}/weichen/{repo}.git"} or + item.get("role") not in {"go-library", "npm-library", "application", "guidelines", "documentation"}): + raise ValueError("Candidate source manifest is outside the reviewed allowlist") + for module in item.get("modules", []): + if module.get("path") not in GO_MODULES or not module["path"].startswith(GO_PREFIX + repo + ".git"): + raise ValueError("Candidate module mapping is outside the reviewed allowlist") + entries[repo] = item + selected = locked["components"] + if set(selected) - set(entries): + raise ValueError("Source lock refers to an unregistered repository") + for repo, item in entries.items(): + if item["role"] in {"application", "guidelines", "documentation"} and repo not in selected: + raise ValueError("Application and documentation source needs a fixed lock") + for repo, pin in selected.items(): + fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + if destination.exists() or destination.is_symlink() or destination.parent.is_symlink(): + raise ValueError("Source materialization requires a fresh destination") + # Validate the complete lock before any authenticated component fetch. + for repo, pin in selected.items(): + sha = fixed_sha(pin["commit"]) + destination = directory / entries[repo]["path"] + destination.mkdir(parents=True) + url = f"{SERVER}/weichen/{repo}.git" + git(destination, "init", "-q") + git(destination, "remote", "add", "origin", url) + git(destination, "fetch", "--depth=1", "origin", sha, token=component_token, repo=repo) + git(destination, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(destination, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Materialized source differs from the fixed lock") + # Persist the registered identity; process config chooses the transport. + git(destination, "remote", "set-url", "origin", entries[repo]["repo"]) + mirror(repo, sha, component_token) + materialize_legacy(destination) + + try: + if os.environ.get("GITHUB_REPOSITORY") != "weichen/Logging-System": + raise ValueError("Checkout repository is outside the reviewed allowlist") + sha = fixed_sha(os.environ.get("GITHUB_SHA", "")) + if not root_token: + raise ValueError("Checkout requires TOKEN") + if (root / ".git").exists(): + raise ValueError("Checkout requires a fresh workspace") + git(root, "init", "-q") + git(root, "remote", "add", "origin", SERVER + "/weichen/Logging-System.git") + git(root, "fetch", "--depth=1", "origin", sha, token=root_token, repo="Logging-System") + git(root, "checkout", "-q", "--detach", "FETCH_HEAD") + if git(root, "rev-parse", "HEAD").decode().strip() != sha: + raise ValueError("Checked-out commit differs from the platform commit") + if (root / ".ci-mirrors").exists() or (root / ".ci-mirrors.env").exists(): + raise ValueError("Candidate cannot provide trusted prefetch state") + materialize_manifest(root) + mirror_env() + except (ValueError, KeyError, OSError, subprocess.CalledProcessError) as error: + # Do not print child stderr or environment: a failed credential fetch stays redacted. + sys.exit("Checkout refused: " + str(error)) + print("Fixed source checkout complete; credentials were not persisted") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - name: Install Go 1.27.1 + run: | + set -euo pipefail + curl -fsSL -o "$RUNNER_TEMP/go.tgz" https://mirrors.aliyun.com/golang/go1.27.1.linux-amd64.tar.gz + tar -C /usr/local -xzf "$RUNNER_TEMP/go.tgz" + ln -sfn /usr/local/go/bin/go /usr/local/bin/go + ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt + - name: Prefetch Go modules without executing candidate code + env: + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: &trusted_acquisition_2 | + set -euo pipefail + python3 - <<'PY_TRUSTED' + # Trusted workflow code only: never import or execute checkout scripts here. + # Token scopes, workflow provenance and runner isolation are platform NOT_RUN. + import json + import os + from pathlib import Path + import re + import shlex + import subprocess + import sys + import tempfile + from urllib.parse import urlsplit + + SERVER = os.environ.get("GITHUB_SERVER_URL", "").rstrip("/") + parsed = urlsplit(SERVER) + if (parsed.scheme not in {"http", "https"} or not parsed.netloc or + parsed.username or parsed.password or parsed.query or parsed.fragment): + sys.exit("Acquisition requires the platform-injected http(s) server") + SSH = "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/" + GO_PREFIX = "git-ssh.u1680832.nyat.app/weichen/" + REPOS = {"Agent-System-Dev", "Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", + "Agent-Intent", "Agent-Command", "Agent-Squad", "Agent-System-Backend", + "Agent-System-Frontend", "Agent-System-UI", "Agent-System-RDM", + "Development-Guidelines", "Agent-System-Documents"} + LEGACY = { + "modules/core": "Agent-System-Core", "modules/backend": "Agent-System-Backend", + "modules/frontend": "Agent-System-Frontend", "modules/ui": "Agent-System-UI", + "modules/documents": "Agent-System-Documents", "deps/agent-system-core": "Agent-System-Core", + "deps/development-guidelines": "Development-Guidelines", "deps/agent-native": "Agent-Native", + "deps/agent-squad": "Agent-Squad", "deps/agent-intent": "Agent-Intent", + "deps/agent-command": "Agent-Command", "deps/error-code-system": "Error-Code-System", + "deps/logging-system": "Logging-System", "pins/agent-system-backend": "Agent-System-Backend", + "pins/agent-system-core": "Agent-System-Core", "pins/agent-system-frontend": "Agent-System-Frontend", + "pins/agent-system-ui": "Agent-System-UI", + } + GO_REPOS = REPOS - {"Agent-System-Dev", "Agent-System-UI", "Agent-System-Frontend", "Development-Guidelines", "Agent-System-Documents"} + GO_MODULES = {GO_PREFIX + repo + ".git" for repo in GO_REPOS} + GO_MODULES |= {GO_PREFIX + "Agent-Squad.git/" + suffix for suffix in + ("adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad")} + root_token = os.environ.pop("TOKEN", "") + component_token = os.environ.pop("SUBMODULE_TOKEN", "") + # Go environment files and inherited Git tracing/config must not change acquisition. + clean = {k: v for k, v in os.environ.items() + if not k.startswith(("GIT_", "NPM_CONFIG_", "npm_config_")) and + not any(word in k.upper() for word in ("TOKEN", "PASSWORD", "SECRET"))} + clean.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_SYSTEM="/dev/null", GIT_CONFIG_GLOBAL="/dev/null", + GIT_TERMINAL_PROMPT="0", GOENV="off", GOTOOLCHAIN="local", GOWORK="off", GOFLAGS="-mod=readonly", + GOPRIVATE=GO_PREFIX.rstrip("/"), GONOPROXY=GO_PREFIX.rstrip("/"), GONOSUMDB=GO_PREFIX.rstrip("/")) + if os.environ.get("npm_config_cache"): + clean["npm_config_cache"] = os.environ["npm_config_cache"] + config = {"core.hooksPath": "/dev/null", "core.fsmonitor": "false", "init.templateDir": "", + "credential.helper": "", "fetch.recurseSubmodules": "false", "submodule.recurse": "false", + "http.followRedirects": "false", "protocol.allow": "never", "protocol." + parsed.scheme + ".allow": "always"} + root = Path.cwd() + mirrors = root / ".ci-mirrors" + + def process_env(values): + env = clean | {"GIT_CONFIG_COUNT": str(len(values))} + for index, (key, value) in enumerate(values.items()): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + return env + + def git(directory, *args, token="", repo=""): + values = config.copy() + if token: + if repo not in REPOS: + raise ValueError("Credential destination is outside the reviewed repository allowlist") + values[f"http.{SERVER}/weichen/{repo}.git.extraheader"] = "AUTHORIZATION: token " + token + result = subprocess.run(["git", "-C", str(directory), *args], env=process_env(values), + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return result.stdout + + def fixed_sha(value): + if not isinstance(value, str) or not re.fullmatch(r"[0-9a-fA-F]{40}", value): + raise ValueError("Source acquisition requires a fixed commit SHA") + return value.lower() + + def mirror(repo, sha, token): + sha = fixed_sha(sha) + destination = mirrors / (repo + ".git") + if destination.is_symlink() or mirrors.is_symlink(): + raise ValueError("Mirror directory cannot be a symlink") + mirrors.mkdir(exist_ok=True) + if not destination.exists(): + destination.mkdir() + git(destination, "init", "--bare", "-q") + url = f"{SERVER}/weichen/{repo}.git" + try: + git(destination, "cat-file", "-e", sha + "^{commit}") + except subprocess.CalledProcessError: + git(destination, "fetch", "--depth=200", url, sha, token=token, repo=repo) + git(destination, "update-ref", "refs/heads/main", sha) + git(destination, "symbolic-ref", "HEAD", "refs/heads/main") + git(destination, "update-ref", "refs/ci/" + sha, sha) + return destination + + def mirror_env(): + values = {"protocol.file.allow": "always", "core.hooksPath": "/dev/null", "credential.helper": ""} + # Distinct keys use repeated .insteadOf values, represented as a sequence below. + pairs = list(values.items()) + for repo in sorted(REPOS): + destination = mirrors / (repo + ".git") + if not destination.exists(): + continue + key = "url." + destination.as_uri() + ".insteadOf" + pairs.extend((key, url) for url in (SSH + repo + ".git", "https://" + GO_PREFIX + repo + ".git", + SERVER + "/weichen/" + repo + ".git", "https://" + GO_PREFIX + repo)) + env = clean | {"CI_DEPENDENCY_MIRRORS": str(mirrors), "GIT_CONFIG_COUNT": str(len(pairs))} + for index, (key, value) in enumerate(pairs): + env[f"GIT_CONFIG_KEY_{index}"] = key + env[f"GIT_CONFIG_VALUE_{index}"] = value + exports = {k: v for k, v in env.items() if k.startswith("GIT_CONFIG_") or k == "CI_DEPENDENCY_MIRRORS"} + (root / ".ci-mirrors.env").write_text("".join("export " + k + "=" + shlex.quote(v) + "\n" for k, v in exports.items())) + return env + + def source_roots(): + bases = [root] + composition = root / ".ci-composition-dev" + if composition.is_dir() and not composition.is_symlink(): + bases.append(composition) + paths = [] + for base in bases: + paths += [base, base / "rdm"] + [base / path for path in LEGACY] + [base / ".workspace" / repo for repo in sorted(REPOS)] + return [path for path in paths if path.is_dir() and not path.is_symlink()] + try: + targets = [] + for source in source_roots(): + for suffix in (".", "examples/trace", "adapters/native", "adapters/intent", "adapters/sqlite", "adapters/a2a", "cmd/agent-squad"): + directory = source / suffix + if (directory / "go.mod").is_file() and directory.resolve() not in targets: + targets.append(directory.resolve()) + # Parse using the installed local Go tool without credentials or candidate execution. + original_files = {} + for directory in targets: + parsed_mod = json.loads(subprocess.check_output(["go", "mod", "edit", "-json"], cwd=directory, env=clean)) + canonical = parsed_mod["Module"]["Path"].startswith(GO_PREFIX) + for name in ("go.mod", "go.sum"): + dependency_file = directory / name + if dependency_file.is_file(): + original_files[(directory, name)] = dependency_file.read_bytes() + elif canonical and name == "go.sum": + original_files[(directory, name)] = None + for dep in (parsed_mod.get("Require") or []): + path = dep["Path"] + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go dependency is outside the reviewed module mapping") + for replacement in (parsed_mod.get("Replace") or []): + path = replacement["New"]["Path"] + if canonical and not replacement["New"].get("Version"): + raise ValueError("Canonical module cannot acquire a local path replacement") + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Go replacement is outside the reviewed module mapping") + auth = config.copy() + for repo in sorted(GO_REPOS): + url = f"{SERVER}/weichen/{repo}.git" + auth[f"url.{url}.insteadOf"] = "https://" + GO_PREFIX + repo + auth[f"http.{url}.extraheader"] = "AUTHORIZATION: token " + component_token + def objects(output): + decoder = json.JSONDecoder() + remaining = output.strip() + while remaining: + item, end = decoder.raw_decode(remaining) + remaining = remaining[end:].lstrip() + yield item + def unchanged(): + for (owner, name), contents in original_files.items(): + dependency_file = owner / name + current = dependency_file.read_bytes() if dependency_file.exists() else None + if current != contents: + raise ValueError("Go acquisition modified a committed Go dependency file: " + str(dependency_file)) + for directory in targets: + # Resolve private go.mod metadata only through exact repository headers; + # validate the complete selected graph before acquiring module zip files. + graph = subprocess.run(["go", "list", "-mod=readonly", "-m", "-json", "all"], cwd=directory, + env=process_env(auth), capture_output=True, text=True) + if graph.returncode: + raise ValueError("Go selected graph resolution failed: " + graph.stderr.strip()) + for item in objects(graph.stdout): + if item.get("Main"): + continue + selected = item.get("Replace") or item + for path in (item.get("Path", ""), selected.get("Path", "")): + if path.startswith(GO_PREFIX) and path not in GO_MODULES: + raise ValueError("Selected Go module is outside the reviewed mapping") + unchanged() + # Go 1.27 can prune go.sum even under -mod=readonly for this + # metadata-only command. Use a disposable copy, then validate actual + # package loading against the unchanged committed source locks. + local_replacements = json.loads(subprocess.check_output( + ["go", "mod", "edit", "-json"], cwd=directory, env=clean)).get("Replace") or [] + downloaded = "" + if not any(not item["New"].get("Version") for item in local_replacements): + with tempfile.TemporaryDirectory(prefix="ci-go-prefetch-") as temporary: + download_root = Path(temporary) + for name in ("go.mod", "go.sum"): + if (directory / name).is_file(): + (download_root / name).write_bytes((directory / name).read_bytes()) + result = subprocess.run(["go", "mod", "download", "-json"], cwd=download_root, + env=process_env(auth), capture_output=True, text=True) + if result.returncode: + raise ValueError("Go module acquisition failed: " + result.stderr.strip()) + downloaded = result.stdout + unchanged() + for item in objects(downloaded): + path = item.get("Path", "") + if path.startswith(GO_PREFIX): + if path not in GO_MODULES: + raise ValueError("Resolved Go module is outside the reviewed mapping") + repo = path[len(GO_PREFIX):].split(".git", 1)[0] + origin = item.get("Origin") or json.loads(Path(item["Info"]).read_text()).get("Origin") or {} + mirror(repo, fixed_sha(origin.get("Hash")), component_token) + # Package metadata loads actual test/build dependencies without running + # vet, compilers, package init functions or candidate tests. No CGO tools. + packages = subprocess.run(["go", "list", "-mod=readonly", "-deps", "-test", "./..."], cwd=directory, + env=process_env(auth) | {"CGO_ENABLED": "0"}, capture_output=True, text=True) + if packages.returncode: + raise ValueError("Go test/build dependency acquisition failed: " + packages.stderr.strip()) + unchanged() + mirror_env() + except (ValueError, OSError, subprocess.CalledProcessError) as error: + sys.exit("Go prefetch refused: " + str(error)) + print("Go modules cached with GOTOOLCHAIN=local; no candidate code executed") + PY_TRUSTED + unset TOKEN SUBMODULE_TOKEN + - run: | + set -euo pipefail + source .ci-mirrors.env + for module in . examples/trace; do + test -f "$module/go.mod" + (cd "$module" && go vet -mod=readonly ./... && go test -mod=readonly -count=1 ./...) + done + docker-checkout-hostgateway: + runs-on: ubuntu-latest + options: --add-host gitea:host-gateway + env: + GITHUB_SERVER_URL: http://gitea:3000 + steps: + - name: Checkout + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + SUBMODULE_TOKEN: ${{ secrets.SUBMODULE_TOKEN }} + run: *trusted_acquisition_1 + - run: test -f go.mod && echo "docker-mode checkout via host-gateway OK" diff --git a/tests/fixtures/component-ci/provenance.json b/tests/fixtures/component-ci/provenance.json new file mode 100644 index 00000000..c3b09fa8 --- /dev/null +++ b/tests/fixtures/component-ci/provenance.json @@ -0,0 +1,73 @@ +{ + "schema": 1, + "usage": "test-input-only", + "capture": "git-show", + "components": { + "Logging-System": { + "repository": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Logging-System.git", + "source_sha": "2e2620009fcb21c302369c1125bea33e2a383c71", + "workflow_path": ".gitea/workflows/ci.yml", + "workflow_sha256": "163d62d87654c98506a97bff6188c6d4c2338c3abfce1bec110b1de6c872cb24" + }, + "Error-Code-System": { + "repository": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Error-Code-System.git", + "source_sha": "f55c6b11b6eeda36b9d30fb9e92dcecc44a9fcae", + "workflow_path": ".gitea/workflows/ci.yml", + "workflow_sha256": "3fbbc1a91412bcac32a9eec8deaded8ce1b5151e512987a4669030a2cf5b776e" + }, + "Agent-System-Core": { + "repository": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Core.git", + "source_sha": "dc4440d5d81a7ff9a79349c9c6a390cc2f9cb60a", + "workflow_path": ".gitea/workflows/ci.yml", + "workflow_sha256": "6b0b5568bffa26709469fc655dee61210300156dba79bb619a7017162b1846a6" + }, + "Agent-Native": { + "repository": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Native.git", + "source_sha": "3b550d783dd7d4dd37d30bb312f0c4369a3102a5", + "workflow_path": ".gitea/workflows/ci.yml", + "workflow_sha256": "8d0cdab26b2758318b3bffeeb90b9c1ae947bc3f232e89e56ebf2f8edf45420d" + }, + "Agent-Intent": { + "repository": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Intent.git", + "source_sha": "c29cf6a283d0a2d93099e703d76b08c8a7801c90", + "workflow_path": ".gitea/workflows/ci.yml", + "workflow_sha256": "c15dde13c41be0437db8d5b7e7e99c4ff37cab1af66515971400bfd7e5c94c55" + }, + "Agent-Command": { + "repository": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Command.git", + "source_sha": "63dc7e06412af632c6b9c32ca3d71fb7cd8235fc", + "workflow_path": ".gitea/workflows/ci.yml", + "workflow_sha256": "b12f615219a32dc4c477658e9abedbbe250aee260baf9c8cbffdb9a9d645f24e" + }, + "Agent-Squad": { + "repository": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-Squad.git", + "source_sha": "42e1c4cd3296c7c68eef9473f34e50d59ba1412b", + "workflow_path": ".gitea/workflows/ci.yml", + "workflow_sha256": "641f7e84fae05b99397ffc3b311031099526a29e8c6e39ae6b43617e7e4b9fd4" + }, + "Agent-System-Backend": { + "repository": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Backend.git", + "source_sha": "fffd5790cfab317fadafb40fa55a11bab6e9a847", + "workflow_path": ".gitea/workflows/ci.yml", + "workflow_sha256": "c14a60739881d243cf459e05e8859976e6e86e6df3a272410cd2df3e0d43d063" + }, + "Agent-System-UI": { + "repository": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-UI.git", + "source_sha": "63d289e6bc15b701356cfe2d5b8740210fac0dcc", + "workflow_path": ".gitea/workflows/ci.yml", + "workflow_sha256": "03fb580f523649db843a21ff70e3d21c5165198c1a8cf0a0bea882c3ec04f8f1" + }, + "Agent-System-Frontend": { + "repository": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Frontend.git", + "source_sha": "5467517e1831e7ca8b58bb5df52494a3a2c9d468", + "workflow_path": ".gitea/workflows/ci.yml", + "workflow_sha256": "802e5c199afd8805d87f0fd1958cd001960d8d820a4e6acb14a401007d278012" + }, + "Agent-System-RDM": { + "repository": "ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-RDM.git", + "source_sha": "8a18dfa86e9afb1be231661e82cde8c0db7ee31b", + "workflow_path": ".gitea/workflows/ci.yml", + "workflow_sha256": "47693ea41584cae52a32e291fae5fa995b5ca746b41cf150d6dac709e6a83b55" + } + } +} diff --git a/tests/fixtures/rdm-legacy-product.sh b/tests/fixtures/rdm-legacy-product.sh new file mode 100644 index 00000000..7ce3bb41 --- /dev/null +++ b/tests/fixtures/rdm-legacy-product.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# Historical fixture: Agent-System-RDM c058bfcf651c42b2dfc9c93ec7cb1f1036d3fd95; original production script follows. +# U1/KTD1 组合产物构建:frontend dist 构建 → 装入 backend web embed → RDM 组合二进制。 +# 物化布局(pins 检出保持只读,AGENTS 红线): +# .build/product/frontend/ ← pins/agent-system-frontend(源码,无 node_modules/dist) +# .build/product/ui/ ← pins/agent-system-ui(frontend 的 @ui 邻接依赖) +# .build/product/backend/ ← pins/agent-system-backend(web/dist 注入点) +# .build/product/rdm/ ← 本仓模块(go.mod 的 backend replace 重写为 ../backend; +# 其余 8 条 replace 均在 backend/deps/ 之下,随前缀一并重写) +# 产物:bin/agent-system-rdm-product + bin/PRODUCT_MANIFEST.json(组件 SHA/dist 摘要/二进制摘要)。 +# 完整性守卫(KTD1):dist 缺 index.html / assets 骨架 → 拒绝产出(不装半成品)。 +set -euo pipefail +cd "$(dirname "$0")/.." + +ROOT="$PWD" +BUILD="$ROOT/.build/product" +OUT_BIN="$ROOT/bin/agent-system-rdm-product" +OUT_MAN="$ROOT/bin/PRODUCT_MANIFEST.json" + +need() { command -v "$1" >/dev/null 2>&1 || { echo "product-build: 缺少 $1(完整 Web 产物不可构建)" >&2; exit 2; }; } +need node; need npm; need go + +# copy_tree SRC DST EXCLUDE...:tar 管道拷贝 + 拷贝期排除(CI runner 无 rsync; +# cp -a 无法在拷贝中排除——源在目标祖先目录内时会「拷入自身」)。 +copy_tree() { + local src="$1" dst="$2"; shift 2 + mkdir -p "$dst" + local excl=() rel + for rel in "$@"; do excl+=(--exclude "./$rel"); done + ( cd "$src" && tar cf - "${excl[@]}" . ) | ( cd "$dst" && tar xf - ) +} + +echo "[product] 物化组件(pins 只读;.build/product 全新重建)" +rm -rf "$BUILD" +mkdir -p "$BUILD" +copy_tree pins/agent-system-frontend "$BUILD/frontend" .git node_modules dist tsconfig.tsbuildinfo +copy_tree pins/agent-system-ui "$BUILD/ui" .git node_modules dist +copy_tree pins/agent-system-backend "$BUILD/backend" .git internal/runtime/data internal/server/data +copy_tree "$ROOT" "$BUILD/rdm" .git .build bin node_modules data .task .zcode dist + +echo "[product] 构建前端(frontend+ui 邻接布局;npm ci + vite build)" +# ui 仓有自己的 node_modules(marked/dompurify 等,见 frontend vite.config dedupe 注释)。 +( cd "$BUILD/ui" && npm ci --no-audit --no-fund >/dev/null 2>&1 ) +( cd "$BUILD/frontend" && npm ci --no-audit --no-fund >/dev/null 2>&1 && npm run build 2>&1 | tail -4 ) + +INDEX="$BUILD/frontend/dist/index.html" +[ -f "$INDEX" ] || { echo "product-build: frontend/dist 缺 index.html——拒绝作为完整 Web 产物" >&2; exit 3; } +ls "$BUILD/frontend/dist/assets" >/dev/null 2>&1 || { echo "product-build: dist 缺 assets/ 骨架" >&2; exit 3; } + +echo "[product] 注入 backend web embed(dist → backend/web/dist)" +rm -rf "$BUILD/backend/web/dist" +mkdir -p "$BUILD/backend/web/dist" +cp -r "$BUILD/frontend/dist/." "$BUILD/backend/web/dist/" +touch "$BUILD/backend/web/dist/.gitkeep" + +echo "[product] 重写 rdm/go.mod 的 backend replace(→ ../backend;其余随前缀)" +sed -i 's#=> \./pins/agent-system-backend#=> ../backend#g' "$BUILD/rdm/go.mod" + +echo "[product] 编译组合二进制" +( cd "$BUILD/rdm" && go build -trimpath -buildvcs=false -o "$OUT_BIN" . ) +# 同源 admin 工具(backend cmd/agent-system:apikey 等 CLI;烟测/运维用,同 embed 源)。 +( cd "$BUILD/backend" && go build -trimpath -buildvcs=false -o "$ROOT/bin/agent-system-admin" ./cmd/agent-system ) + +DIST_SHA=$(find "$BUILD/backend/web/dist" -type f ! -name .gitkeep -print0 | sort -z | xargs -0 sha256sum | sha256sum | cut -c1-16) +BIN_SHA=$(sha256sum "$OUT_BIN" | cut -c1-16) +BE_SHA=$(git -C pins/agent-system-backend rev-parse HEAD) +FE_SHA=$(git -C pins/agent-system-frontend rev-parse HEAD) +UI_SHA=$(git -C pins/agent-system-ui rev-parse HEAD) +RDM_SHA=$(git rev-parse HEAD) +cat > "$OUT_MAN" <>", gate) + clone = work / "lifecycle-source" + replay = subprocess.run( + ["bash", "-c", 'source .ci-mirrors.env; git clone -q "$1" "$2"; ' + 'git -C "$2" fetch -q origin; env', "fixture", + SSH + "Agent-System-RDM.git", str(clone)], cwd=work, env=self.env, + capture_output=True, text=True, timeout=30) + self.assertEqual(replay.returncode, 0, replay.stderr) + self.assertNotIn(SUB_TOKEN, replay.stdout + replay.stderr) + self.assertEqual(self.git(clone, "rev-parse", "HEAD"), shas[2]) if __name__ == "__main__": diff --git a/tests/test_component_checks.py b/tests/test_component_checks.py new file mode 100644 index 00000000..ca9d4508 --- /dev/null +++ b/tests/test_component_checks.py @@ -0,0 +1,227 @@ +"""Local named checks prepare fixed sources and retain edits with real Go/Git.""" +import json +import os +from pathlib import Path +import shutil +import subprocess +import tempfile +import unittest + +SOURCE = Path(__file__).resolve().parents[1] + + +@unittest.skipUnless(shutil.which("go"), "Go required") +class ComponentCheckTests(unittest.TestCase): + def setUp(self): + self.tmp = tempfile.TemporaryDirectory(prefix="component-check-") + self.addCleanup(self.tmp.cleanup) + self.base = Path(self.tmp.name) + self.root = self.base / "dev" + 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", "COMPOSITION_SOURCE_MAP", "CI_DEPENDENCY_MIRRORS"): + self.env.pop(key, None) + self.env.update(GIT_CONFIG_NOSYSTEM="1", GIT_CONFIG_GLOBAL="/dev/null", GIT_ALLOW_PROTOCOL="file", + GIT_AUTHOR_NAME="Checks", GIT_AUTHOR_EMAIL="check@example.invalid", + GIT_COMMITTER_NAME="Checks", GIT_COMMITTER_EMAIL="check@example.invalid", + GOTOOLCHAIN="local", GOPROXY="off", GOSUMDB="off") + self.call(self.root, "git", "init", "--initial-branch=main") + shutil.copytree(SOURCE / "scripts", self.root / "scripts") + shutil.copyfile(SOURCE / "Makefile", self.root / "Makefile") + (self.root / ".gitignore").write_text(".workspace/\ngo.work\ngo.work.sum\ntests/integration/multi-instance/.build/\n") + app = self.base / "backend" + self.backend = app + app.mkdir() + self.call(app, "git", "init", "--initial-branch=main") + (app / "go.mod").write_text("module example.com/backend\n\ngo 1.23\n") + (app / "source.go").write_text("package backend\nfunc Value() string {return \"fixed\"}\n") + (app / "source_test.go").write_text('package backend\nimport "testing"\nfunc TestValue(t *testing.T) {if Value() != "fixed" {t.Fatal(Value())}}\n') + (app / "cmd/agent-system").mkdir(parents=True) + (app / "cmd/agent-system/main.go").write_text('package main\nimport "fmt"\nfunc main(){fmt.Print("fixed-binary")}\n') + self.call(app, "git", "add", ".") + self.call(app, "git", "commit", "-m", "Fixed Backend") + sha = self.call(app, "git", "rev-parse", "HEAD").stdout.strip() + manifest = {"schema": 1, "components": [{"id": "Agent-System-Backend", "repo": str(app), "path": ".workspace/Agent-System-Backend", "legacy_path": "modules/backend", "role": "application", "modules": [{"path": "example.com/backend", "directory": "."}], "target": "main"}]} + (self.root / "components.json").write_text(json.dumps(manifest)) + (self.root / "components.lock.json").write_text(json.dumps({"schema": 1, "components": {"Agent-System-Backend": {"commit": sha}}})) + self.call(self.root, "git", "add", ".") + self.call(self.root, "git", "commit", "-m", "Fixed Dev") + + def call(self, cwd, *args, check=True, env=None): + result = subprocess.run(args, cwd=cwd, env=env or self.env, text=True, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, timeout=90) + if check: + self.assertEqual(result.returncode, 0, result.stdout) + return result + + def test_backend_check_prepares_fixed_source_and_replays_owner_edits(self): + result = self.call(self.root, "make", "test-backend") + self.assertIn("GOWORK=off", result.stdout) + child = self.root / ".workspace/Agent-System-Backend" + self.assertEqual((child / "source.go").read_text(), 'package backend\nfunc Value() string {return "fixed"}\n') + self.call(self.root, "python3", "scripts/workspace.py", "--root", str(self.root), "edit", "--name", "Agent-System-Backend", "--branch", "feature/owned") + (child / "source.go").write_text('package backend\nfunc Value() string {return "owner-edit"}\n') + result = self.call(self.root, "make", "test-backend", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("owner-edit", result.stdout) + self.assertEqual(self.call(child, "git", "branch", "--show-current").stdout.strip(), "feature/owned") + self.assertIn('"owner-edit"', (child / "source.go").read_text()) + + def test_pg_gate_requires_environment_and_forwards_it_to_real_go_tests(self): + result = self.call(self.root, "make", "test-backend-pg", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertFalse((self.root / ".workspace").exists()) + self.call(self.root, "python3", "scripts/workspace.py", "--root", str(self.root), "edit", "--name", "Agent-System-Backend", "--branch", "feature/pg-gate") + child = self.root / ".workspace/Agent-System-Backend" + (child / "pg_gate_test.go").write_text('package backend\nimport("os";"testing")\nfunc TestGateEnv(t *testing.T){if os.Getenv("AGENT_PG_TEST_DSN")!="fixture-dsn"||os.Getenv("AGENT_REDIS_TEST_ADDR")!="fixture-redis"{t.Fatal("gate environment missing")}}\n') + self.call(self.root, "make", "test-backend-pg", env=self.env | {"AGENT_PG_TEST_DSN": "fixture-dsn", "AGENT_REDIS_TEST_ADDR": "fixture-redis"}) + + def test_multi_instance_binary_is_built_inside_dev_root_and_reached_by_suite(self): + suite = self.add_multi_instance_suite() + self.call(self.root, "make", "test-multi-instance", env=self.env | {"AGENT_PG_TEST_DSN": "fixture-dsn"}) + self.assertTrue((suite / ".build/agent-system").is_file()) + self.assertFalse((self.root / ".workspace/tests").exists()) + + def add_multi_instance_suite(self): + suite = self.root / "tests/integration/multi-instance" + suite.mkdir(parents=True) + (suite / "go.mod").write_text("module example.com/multi\n\ngo 1.23\n") + (suite / "binary_test.go").write_text('package multi\nimport("os";"os/exec";"testing")\nfunc TestBinary(t *testing.T){b,e:=exec.Command(os.Getenv("AGENT_BIN")).Output();if e!=nil||string(b)!="fixed-binary"{t.Fatalf("%s %v",b,e)}}\n') + return suite + + def add_go_byproduct_fixture(self, fail=False): + (self.backend / ".gitignore").write_text("__pycache__/\n.fixture-output\n") + (self.backend / "fixture_module.py").write_text("VALUE = 'imported from Go'\n") + (self.backend / "byproduct_test.go").write_text('''package backend +import("os";"os/exec";"testing") +func TestByproducts(t *testing.T) { + if err := os.WriteFile(".fixture-output", []byte("generated by Go test"), 0600); err != nil {t.Fatal(err)} + cmd := exec.Command("python3", "-c", "import fixture_module") + cmd.Env = append(os.Environ(), "PYTHONDONTWRITEBYTECODE=", "PYTHONPYCACHEPREFIX=") + if out, err := cmd.CombinedOutput(); err != nil {t.Fatalf("%s %v", out, err)} +''' + (' t.Fatal("deliberate fixture failure")\n' if fail else '') + '}\n') + self.call(self.backend, "git", "add", ".") + self.call(self.backend, "git", "commit", "-m", "Add Go and Python byproducts fixture") + lock = json.loads((self.root / "components.lock.json").read_text()) + lock["components"]["Agent-System-Backend"]["commit"] = self.call(self.backend, "git", "rev-parse", "HEAD").stdout.strip() + (self.root / "components.lock.json").write_text(json.dumps(lock)) + self.call(self.root, "git", "add", "components.lock.json") + self.call(self.root, "git", "commit", "-m", "Pin byproducts fixture") + self.call(self.root, "python3", "scripts/workspace.py", "--root", str(self.root), "prepare") + return self.root / ".workspace/Agent-System-Backend" + + def source_snapshot(self, child): + return {"head": self.call(child, "git", "rev-parse", "HEAD").stdout, + "branch": self.call(child, "git", "branch", "--show-current").stdout, + "index": (child / ".git/index").read_bytes(), + "status": self.call(child, "git", "status", "--porcelain", "--untracked-files=all").stdout, + "ignored": self.call(child, "git", "ls-files", "--others", "--ignored", "--exclude-standard").stdout, + "files": {path.relative_to(child).as_posix(): path.read_bytes() for path in child.rglob("*") + if path.is_file() and ".git" not in path.relative_to(child).parts}} + + def test_fixed_go_checks_keep_source_clean_across_pg_and_multi_instance(self): + child = self.add_go_byproduct_fixture() + suite = self.add_multi_instance_suite() + before = self.source_snapshot(child) + env = self.env | {"AGENT_PG_TEST_DSN": "fixture-dsn", "AGENT_REDIS_TEST_ADDR": "fixture-redis"} + self.call(self.root, "make", "test-backend-pg", env=env) + generated = self.call(child, "git", "ls-files", "--others", "--ignored", "--exclude-standard").stdout + print("fixed checkout byproducts after PostgreSQL fixture: " + repr(generated), flush=True) + self.call(self.root, "make", "test-multi-instance", env=env) + self.assertEqual(self.source_snapshot(child), before) + self.assertTrue((suite / ".build/agent-system").is_file()) + + def test_fixed_go_failure_is_reported_without_polluting_source(self): + child = self.add_go_byproduct_fixture(fail=True) + before = self.source_snapshot(child) + result = self.call(self.root, "make", "test-backend", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("deliberate fixture failure", result.stdout) + self.assertIn("local component command failed (1)", result.stdout) + self.assertEqual(self.source_snapshot(child), before) + + def test_fixed_go_checks_refuse_and_preserve_owner_changes_and_ignored_files(self): + child = self.add_go_byproduct_fixture() + for kind in ("unstaged", "staged", "ignored"): + with self.subTest(kind=kind): + if kind == "ignored": + (child / ".fixture-output").write_text("owner's unique ignored file") + else: + (child / "source.go").write_text('package backend\nfunc Value() string {return "owner-edit"}\n') + if kind == "staged": + self.call(child, "git", "add", "source.go") + before = self.source_snapshot(child) + result = self.call(self.root, "make", "test-backend", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("dirty or ignored unique files", result.stdout) + self.assertEqual(self.source_snapshot(child), before) + # This fixture owns these files and its index; reset only between cases. + if kind != "ignored": + self.call(child, "git", "restore", "--source=HEAD", "--staged", "--worktree", "source.go") + + def test_pg_and_multi_instance_prerequisites_still_refuse_before_preparing_sources(self): + for target, supplied in (("test-backend-pg", {}), + ("test-backend-pg", {"AGENT_PG_TEST_DSN": "fixture-dsn"}), + ("test-multi-instance", {})): + with self.subTest(target=target, supplied=supplied): + env = {key: value for key, value in self.env.items() + if key not in ("AGENT_PG_TEST_DSN", "AGENT_REDIS_TEST_ADDR")} + result = self.call(self.root, "make", target, check=False, env=env | supplied) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertFalse((self.root / ".workspace").exists()) + + def test_new_pin_gate_validates_fixed_sources_and_rejects_local_replaces(self): + self.call(self.root, "python3", "scripts/workspace.py", "--root", str(self.root), "prepare") + self.call(self.root, "bash", "scripts/check-pins.sh") + child = self.root / ".workspace/Agent-System-Backend" + (child / "go.mod").write_text((child / "go.mod").read_text() + "\nreplace example.com/dependency => ../local\n") + result = self.call(self.root, "bash", "scripts/check-pins.sh", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("local replace", result.stdout) + + def test_registered_private_transport_reaches_real_go_process_without_global_change(self): + manifest = json.loads((self.root / "components.json").read_text()) + manifest["transport"] = {"go_private": ["private.example.test"], "git_rewrites": [{"from": "https://private.example.test/", "to": self.base.as_uri() + "/"}]} + (self.root / "components.json").write_text(json.dumps(manifest)) + global_config = self.base / "global.gitconfig" + global_config.write_text("[user]\n name = existing-user\n") + env = self.env | {"GIT_CONFIG_GLOBAL": str(global_config)} + self.call(self.root, "python3", "scripts/workspace.py", "--root", str(self.root), "edit", "--name", "Agent-System-Backend", "--branch", "feature/transport", env=env) + child = self.root / ".workspace/Agent-System-Backend" + (child / "transport_test.go").write_text('package backend\nimport("os";"testing")\nfunc TestTransport(t *testing.T){if os.Getenv("GOPRIVATE")!="private.example.test"||os.Getenv("GOWORK")!="off"||os.Getenv("GIT_CONFIG_COUNT")==""{t.Fatal("process-scoped transport missing")}}\n') + before = global_config.read_bytes() + self.call(self.root, "make", "test-backend", env=env) + self.assertEqual(global_config.read_bytes(), before) + + def test_explicit_overlay_uses_registered_workspace_and_preserves_default_version_mode(self): + self.call(self.root, "python3", "scripts/workspace.py", "--root", str(self.root), "edit", "--name", "Agent-System-Backend", "--branch", "feature/overlay") + child = self.root / ".workspace/Agent-System-Backend" + work = self.root / "go.work" + (child / "overlay_test.go").write_text('package backend\nimport("os";"testing")\nfunc TestOverlay(t *testing.T){if os.Getenv("GOWORK")!="' + str(work) + '"{t.Fatal("registered overlay missing")}}\n') + self.call(self.root, "make", "test-backend", "LOCAL_OVERLAY=1") + default = self.call(self.root, "make", "test-backend", check=False) + self.assertNotEqual(default.returncode, 0, default.stdout) + self.assertIn("registered overlay missing", default.stdout) + self.assertTrue(work.is_file()) + + def test_make_pin_gate_uses_map_in_gitless_formal_root_and_ignores_external_rdm_identity(self): + self.call(self.root, "python3", "scripts/workspace.py", "--root", str(self.root), "prepare") + formal = self.base / "formal" + formal.mkdir() + shutil.copytree(self.root / "scripts", formal / "scripts") + for name in ("Makefile", "components.json", "components.lock.json"): + shutil.copy2(self.root / name, formal / name) + entry = json.loads((self.root / "components.json").read_text())["components"][0] + locked = json.loads((self.root / "components.lock.json").read_text())["components"][entry["id"]]["commit"] + mapping = {"schema": 1, "root_commit": self.call(self.root, "git", "rev-parse", "HEAD").stdout.strip(), + "components": {entry["id"]: {"path": str(self.root / entry["path"]), "repo": entry["repo"], "commit": locked}, + "Agent-System-RDM": {"path": str(self.base / "external-rdm"), "repo": "external registered by composer", "commit": locked}}} + source_map = self.base / "map.json" + source_map.write_text(json.dumps(mapping)) + self.call(formal, "make", "test-pins", env=self.env | {"COMPOSITION_SOURCE_MAP": str(source_map)}) + self.assertFalse((formal / ".workspace").exists()) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_component_governance.py b/tests/test_component_governance.py new file mode 100644 index 00000000..0c439371 --- /dev/null +++ b/tests/test_component_governance.py @@ -0,0 +1,93 @@ +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_startup_receipt_rejects_changed_ignored_component_objects(self): + spec=importlib.util.spec_from_file_location('component_evidence_validation',SCRIPTS/'evidence.py') + module=importlib.util.module_from_spec(spec); spec.loader.exec_module(module) + self.run_git(self.root,'update-ref','refs/remotes/origin/main','HEAD') + before=module.snapshot() + receipt=module.create_receipt('make precheck','[verdict] READY\n',0,before,before, + timestamp='2026-10-13T00:00:00+00:00',cwd=str(self.root), + git_common_dir=module.common_dir()) + module.validate_precheck(receipt) + (self.child/'value').write_text('changed after startup') + with self.assertRaises(module.EvidenceError): + module.validate_precheck(receipt) + + def test_new_layout_cannot_use_receipt_without_component_identity(self): + spec=importlib.util.spec_from_file_location('component_evidence_legacy',SCRIPTS/'evidence.py') + module=importlib.util.module_from_spec(spec); spec.loader.exec_module(module) + self.run_git(self.root,'update-ref','refs/remotes/origin/main','HEAD') + before=module.snapshot();before.pop('components') + receipt=module.create_receipt('make precheck','[verdict] READY\n',0,before,before, + timestamp='2026-10-13T00:00:00+00:00',cwd=str(self.root), + git_common_dir=module.common_dir()) + with self.assertRaises(module.EvidenceError): + module.validate_precheck(receipt) + + 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_composition.py b/tests/test_composition.py new file mode 100644 index 00000000..98d4e27e --- /dev/null +++ b/tests/test_composition.py @@ -0,0 +1,700 @@ +"""Real Git/npm/Go fixtures for immutable product composition.""" +import base64 +import hashlib +import importlib.util +import io +import json +import os +from pathlib import Path +import shutil +import subprocess +import sys +import tarfile +import tempfile +import threading +import unittest +import zipfile +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer + + +SCRIPT = Path(__file__).resolve().parents[1] / "scripts/build-composition.py" +RDM_SCRIPTS = Path(os.environ.get("COMPOSITION_RDM_SOURCE", str(SCRIPT.parent.parent / ".migration/Agent-System-RDM"))) +LEGACY_PRODUCT = Path(__file__).resolve().parent / "fixtures/rdm-legacy-product.sh" + + +class LocalNpmRegistry: + """Real npm cache/registry traffic with no public-network dependency.""" + name = "composition-cold-fixture" + + def __init__(self, base, env): + self.base, self.env = base, env + self.requests = [] + self.tarballs = {} + self.integrities = {} + for version in ("1.0.0", "1.0.1"): + payload = json.dumps({"name": self.name, "version": version, + "scripts": {"install": "node -e 'process.exit(91)'"}}).encode() + stream = io.BytesIO() + with tarfile.open(fileobj=stream, mode="w:gz") as archive: + entry = tarfile.TarInfo("package/package.json") + entry.size = len(payload) + archive.addfile(entry, io.BytesIO(payload)) + self.tarballs[version] = stream.getvalue() + self.integrities[version] = "sha512-" + base64.b64encode(hashlib.sha512(stream.getvalue()).digest()).decode() + registry = self + + class Handler(BaseHTTPRequestHandler): + def do_GET(self): + registry.requests.append((self.path, self.headers.get("Authorization"))) + if self.path == "/" + registry.name: + versions = {v: {"name": registry.name, "version": v, "dist": { + "tarball": registry.url + "/" + registry.name + "/-/" + v + ".tgz", + "integrity": registry.integrities[v]}} for v in registry.tarballs} + body = json.dumps({"name": registry.name, "dist-tags": {"latest": "1.0.1"}, "versions": versions}).encode() + content_type = "application/json" + else: + version = self.path.rsplit("/", 1)[-1].removesuffix(".tgz") + if version not in registry.tarballs: + self.send_error(404) + return + body, content_type = registry.tarballs[version], "application/octet-stream" + self.send_response(200) + self.send_header("Content-Type", content_type) + self.send_header("Content-Length", str(len(body))) + self.end_headers() + self.wfile.write(body) + + def log_message(self, *args): + pass + + self.server = ThreadingHTTPServer(("127.0.0.1", 0), Handler) + self.url = "http://127.0.0.1:" + str(self.server.server_port) + self.thread = threading.Thread(target=self.server.serve_forever, daemon=True) + self.thread.start() + self.cache = base / "cold-npm-cache" + self.global_config = base / "empty-npm-globalrc" + self.global_config.write_text("") + self.home = base / "cold-home" + self.home.mkdir() + self.tools = base / "npm-tools" + self.tools.mkdir() + self.calls = base / "npm-calls.jsonl" + npm = shutil.which("npm") + wrapper = self.tools / "npm" + wrapper.write_text("#!" + sys.executable + "\n" + + "import json, os, sys\nfrom pathlib import Path\nargs = sys.argv[1:]\n" + + "with Path(" + repr(str(self.calls)) + ").open('a') as output:\n" + + " output.write(json.dumps({'args': args, 'credential_keys': [k for k in os.environ if any(w in k.upper() for w in ('TOKEN', 'SECRET', 'PASSWORD'))]}) + '\\n')\n" + + "if args[:2] == ['cache', 'add'] and args[2].startswith(" + repr(self.name + "@") + "):\n" + + " args = [a.replace('https://registry.npmjs.org', " + repr(self.url) + ") for a in args]\n" + + "if args[:1] == ['ci']: args.append('--offline')\n" + + "os.execv(" + repr(npm) + ", [" + repr(npm) + ", *args])\n") + wrapper.chmod(0o755) + self.env = env | {"HOME": str(self.home), "npm_config_cache": str(self.cache), + "PATH": str(self.tools) + os.pathsep + env["PATH"]} + # Seed only the locked tarball, exactly the state produced by npm ci. + tarball = base / "locked.tgz" + tarball.write_bytes(self.tarballs["1.0.0"]) + subprocess.run([npm, "cache", "add", str(tarball), "--ignore-scripts", "--userconfig=/dev/null", + "--globalconfig=" + str(self.global_config)], env=self.env, check=True, capture_output=True) + + def close(self): + self.server.shutdown() + self.server.server_close() + self.thread.join() + + def manifests(self, source): + source.mkdir(exist_ok=True) + manifest = {"name": "fixture", "version": "1.0.0", "dependencies": {self.name: "1.0.0"}} + (source / "package.json").write_text(json.dumps(manifest)) + lock = {"name": "fixture", "version": "1.0.0", "lockfileVersion": 3, "requires": True, + "packages": {"": manifest, "node_modules/" + self.name: { + "version": "1.0.0", "resolved": "https://registry.npmjs.org/" + self.name + "/-/1.0.0.tgz", + "integrity": self.integrities["1.0.0"]}}} + (source / "package-lock.json").write_text(json.dumps(lock)) + return (source / "package-lock.json").read_bytes() + + def consumer(self, directory, env=None): + directory.mkdir(exist_ok=True) + (directory / "package.json").write_text(json.dumps({"dependencies": {self.name: "1.0.0"}})) + return subprocess.run(["npm", "install", "--offline", "--ignore-scripts", "--no-audit", "--no-fund", + "--registry=" + self.url, "--userconfig=/dev/null", "--globalconfig=" + str(self.global_config)], + cwd=directory, env=env or self.env, capture_output=True, text=True) + + +@unittest.skipUnless(shutil.which("npm"), "npm required") +class NpmAcquisitionTests(unittest.TestCase): + def setUp(self): + self.temporary = tempfile.TemporaryDirectory(prefix="composition-cold-npm-") + self.addCleanup(self.temporary.cleanup) + self.base = Path(self.temporary.name) + self.registry = LocalNpmRegistry(self.base, os.environ.copy()) + self.addCleanup(self.registry.close) + spec = importlib.util.spec_from_file_location("cold_npm_composer", SCRIPT) + self.composer = importlib.util.module_from_spec(spec) + spec.loader.exec_module(self.composer) + + def test_locked_metadata_is_acquired_before_offline_consumer_without_credentials(self): + source = self.base / "source" + original = self.registry.manifests(source) + red = self.registry.consumer(self.base / "before") + self.assertNotEqual(red.returncode, 0) + self.assertIn("ENOTCACHED", red.stderr) + self.composer.npm_dependencies(source, {}, self.registry.env | {"GITEA_TOKEN": "synthetic-secret"}) + self.assertEqual((source / "package-lock.json").read_bytes(), original) + green = self.registry.consumer(self.base / "after", self.composer.execution_environment(self.registry.env)) + self.assertEqual(green.returncode, 0, green.stdout + green.stderr) + actual = json.loads((self.base / "after/node_modules" / self.registry.name / "package.json").read_text()) + self.assertEqual(actual["version"], "1.0.0") + calls = [json.loads(line) for line in self.registry.calls.read_text().splitlines()] + metadata = [call for call in calls if call["args"][:2] == ["cache", "add"]] + self.assertTrue(metadata, "tarball acquisition alone does not populate offline resolver metadata") + self.assertEqual(metadata[0]["args"][2], self.registry.name + "@1.0.0") + self.assertFalse(metadata[0]["credential_keys"]) + self.assertTrue(self.registry.requests) + self.assertTrue(all(auth is None for _, auth in self.registry.requests)) + + def test_unreviewed_tarball_source_is_refused_before_acquisition(self): + source = self.base / "source" + self.registry.manifests(source) + path = source / "package-lock.json" + lock = json.loads(path.read_text()) + lock["packages"]["node_modules/" + self.registry.name]["resolved"] = self.registry.url + "/untrusted.tgz" + path.write_text(json.dumps(lock)) + with self.assertRaisesRegex(self.composer.CompositionError, "reviewed public registry"): + self.composer.npm_dependencies(source, {}, self.registry.env | {"GITEA_TOKEN": "synthetic-secret"}) + self.assertFalse(self.registry.requests) + self.assertFalse(self.registry.calls.exists()) + + +@unittest.skipUnless(all(shutil.which(c) for c in ("git", "go", "node", "npm")), "Git/Go/Node/npm required") +class CompositionTests(unittest.TestCase): + def setUp(self): + self.temp = tempfile.TemporaryDirectory(prefix="composition-test-") + self.addCleanup(self.temp.cleanup) + self.base = Path(self.temp.name) + self.root = self.base / "dev" + self.backend = self.base / "backend" + self.frontend = self.base / "frontend" + self.out = self.base / "output" + self.env = os.environ.copy() + self.env.update(GOWORK="off", GOPROXY="off", GOSUMDB="off", GOTOOLCHAIN="local") + self.env.pop("GOFLAGS", None) + for repo in (self.root, self.backend, self.frontend): + repo.mkdir() + self.run_command(["git", "init", "-q", "-b", "main"], repo) + self.run_command(["git", "config", "user.email", "fixture@example.invalid"], repo) + self.run_command(["git", "config", "user.name", "Composition Fixture"], repo) + self.write(self.backend, "go.mod", "module example.com/backend\n\ngo 1.23\n") + self.write(self.backend, "web/dist/.gitkeep", "") + self.write(self.backend, "web/embed.go", '''package web +import "embed" +//go:embed all:dist +var Files embed.FS +func Page() string { b, _ := Files.ReadFile("dist/index.html"); return string(b) } +''') + self.write(self.backend, "cmd/agent-system/main.go", '''package main +import ("fmt"; "os"; "example.com/backend/web") +var version = "fixture-dev" +func main() { if len(os.Args)>1 && os.Args[1]=="version" {fmt.Print(version)} else {fmt.Print(web.Page())} } +''') + self.write(self.backend, "cmd/storage-migrate/main.go", '''package main +import "fmt" +func main() { fmt.Print("migration-tool") } +''') + self.write(self.backend, "web/embed_test.go", '''package web +import "testing" +func TestProduct(t *testing.T) { if Page() != "immutable-page" { t.Fatalf("unexpected page: %q", Page()) } } +''') + self.backend_sha = self.commit(self.backend) + self.write(self.frontend, "package.json", json.dumps({ + "name": "composition-fixture", "version": "1.0.0", "private": True, + "scripts": {"build": "node build.cjs", "test": "node test.cjs", "postinstall": "node -e \"process.exit(91)\""}, + })) + self.write(self.frontend, "build.cjs", '''const fs = require('node:fs'); +if (process.env.GITEA_TOKEN || process.env.SSH_AUTH_SOCK || process.env.GIT_CONFIG_COUNT) process.exit(90); +fs.mkdirSync('dist/assets', { recursive: true }); +fs.writeFileSync('dist/index.html', 'immutable-page'); +fs.writeFileSync('dist/assets/main.js', 'console.log("fixed")'); +''') + self.write(self.frontend, "test.cjs", '''const fs = require('node:fs'); +if (fs.readFileSync('dist/index.html', 'utf8') !== 'immutable-page') process.exit(92); +''') + self.run_command(["npm", "install", "--package-lock-only", "--ignore-scripts", "--no-audit", "--no-fund"], self.frontend) + self.frontend_sha = self.commit(self.frontend) + self.manifest = {"schema": 1, "components": [ + {"id": "Agent-System-Backend", "repo": str(self.backend), "path": ".workspace/Agent-System-Backend", "role": "application", "modules": [{"path": "example.com/backend", "directory": "."}], "target": "main"}, + {"id": "Agent-System-Frontend", "repo": str(self.frontend), "path": ".workspace/Agent-System-Frontend", "role": "application", "modules": [], "target": "main"}, + ]} + self.lock = {"schema": 1, "components": { + "Agent-System-Backend": {"commit": self.backend_sha}, + "Agent-System-Frontend": {"commit": self.frontend_sha}, + }} + self.save_inputs() + self.root_sha = self.commit(self.root) + + def write(self, repo, path, value): + destination = repo / path + destination.parent.mkdir(parents=True, exist_ok=True) + destination.write_text(value) + + def run_command(self, command, cwd=None, env=None, check=True): + result = subprocess.run(command, cwd=cwd, env=env or self.env, text=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + if check: + self.assertEqual(result.returncode, 0, result.stdout) + return result + + def commit(self, repo): + self.run_command(["git", "add", "."], repo) + self.run_command(["git", "commit", "-qm", "Fixture"], repo) + return self.run_command(["git", "rev-parse", "HEAD"], repo).stdout.strip() + + def save_inputs(self): + self.write(self.root, "components.json", json.dumps(self.manifest)) + self.write(self.root, "components.lock.json", json.dumps(self.lock)) + + def compose(self, target="build", extra=(), env=None): + return self.run_command([sys.executable, "-B", str(SCRIPT), "--root", str(self.root), "--target", target, "--output", str(self.out), *extra], env=env, check=False) + + def acquisition_guard(self, env, *, mark_frontend=True): + """Forward to real tools, refusing acquisition after candidate execution.""" + marker = self.base / "candidate-executed" + tools = self.base / "guarded-tools" + tools.mkdir() + for name in ("git", "go", "npm"): + executable = shutil.which(name) + wrapper = tools / name + wrapper.write_text("#!" + sys.executable + "\n" + '''import os, pathlib, sys +args = sys.argv[1:] +name = pathlib.Path(sys.argv[0]).name +acquisition = (name == 'git' and args and args[0] in {'clone', 'fetch', 'archive'} + or name == 'go' and args and (args[0] == 'mod' or args[0] == 'list') + or name == 'npm' and args and (args[0] in {'ci', 'install'} or args[:2] == ['cache', 'add'])) +if acquisition and pathlib.Path(os.environ['COMPOSITION_EXEC_MARKER']).exists(): + print('acquisition-after-execution: ' + name + ' ' + ' '.join(args[:2]), file=sys.stderr) + sys.exit(86) +''' + "os.execv(" + repr(executable) + ", [" + repr(executable) + ", *args])\n") + wrapper.chmod(0o755) + if mark_frontend: + self.write(self.frontend, "build.cjs", (self.frontend / "build.cjs").read_text() + + "\nrequire('node:fs').writeFileSync(process.env.COMPOSITION_EXEC_MARKER, 'frontend-executed')\n") + self.lock["components"]["Agent-System-Frontend"]["commit"] = self.commit(self.frontend) + self.save_inputs() + self.commit(self.root) + return env | {"PATH": str(tools) + os.pathsep + env["PATH"], + "COMPOSITION_EXEC_MARKER": str(marker), "GITEA_TOKEN": "synthetic-phase-token"} + + def test_all_product_acquisition_precedes_candidate_execution(self): + self.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache() + self.write(self.root, "plugins/example/plugin.json", '{"name":"fixed-plugin"}') + self.commit(self.root) + env = self.acquisition_guard(self.env | {"GOPROXY": (self.base / "proxy").as_uri(), + "GOMODCACHE": str(self.base / "module-cache")}) + result = self.compose(extra=("--rdm-source", str(self.base / "rdm")), env=env) + self.assertEqual(result.returncode, 0, result.stdout) + self.assertEqual((self.base / "candidate-executed").read_text(), "frontend-executed") + self.assertEqual(self.run_command([str(self.out / "agent-system-rdm-product")]).stdout, "immutable-page") + self.assertEqual(self.run_command([str(self.out / "agent-system-admin")]).stdout, "immutable-page") + self.assertEqual((self.out / "plugins/example/plugin.json").read_text(), '{"name":"fixed-plugin"}') + + def test_fixed_commits_embed_assets_without_touching_developer_checkout(self): + # Reading working trees or allowing go.work/npm overlays would produce DIRTY or fail. + self.write(self.backend, "web/dist/index.html", "DIRTY") + self.write(self.backend, "cmd/agent-system/main.go", "invalid local Go") + self.write(self.frontend, "build.cjs", "throw new Error('dirty local frontend')") + self.write(self.root, "go.work", "invalid developer workspace") + self.write(self.root, ".workspace/Agent-System-Frontend/package.json", '{"dependencies":{"bad":"file:/missing"}}') + env = self.env | {"GITEA_TOKEN": "fixture-secret", "SSH_AUTH_SOCK": "/missing-agent", "GIT_CONFIG_COUNT": "1", "GIT_CONFIG_KEY_0": "credential.helper", "GIT_CONFIG_VALUE_0": "bad-helper"} + result = self.compose(env=env) + self.assertEqual(result.returncode, 0, result.stdout) + self.assertEqual(self.run_command([str(self.out / "agent-system")]).stdout, "immutable-page") + self.assertEqual(self.run_command([str(self.out / "storage-migrate")]).stdout, "migration-tool") + self.assertEqual((self.backend / "web/dist/index.html").read_text(), "DIRTY") + resolved = json.loads((self.out / "resolved-manifest.json").read_text()) + self.assertEqual(resolved["root"]["commit"], self.root_sha) + self.assertEqual(resolved["applications"]["Agent-System-Backend"]["commit"], self.backend_sha) + self.assertEqual(resolved["applications"]["Agent-System-Frontend"]["commit"], self.frontend_sha) + self.assertEqual(resolved["artifacts"]["agent-system"]["sha256"], hashlib.sha256((self.out / "agent-system").read_bytes()).hexdigest()) + self.assertEqual(resolved["go"]["backend"]["modules"][0]["Path"], "example.com/backend") + self.assertTrue(resolved["npm"]["lock_sha256"]) + self.assertTrue(resolved["frontend"]["sha256"]) + self.assertNotIn("fixture-secret", (self.out / "resolved-manifest.json").read_text()) + + def test_test_target_runs_real_frontend_and_go_tests(self): + result = self.compose("test") + self.assertEqual(result.returncode, 0, result.stdout) + self.assertIn("example.com/backend/web", result.stdout) + self.assertEqual(json.loads((self.out / "resolved-manifest.json").read_text())["target"], "test") + + def test_unused_transitive_zip_does_not_require_consumer_sum_rewrite(self): + proxy = self.base / "unused-proxy" + for name, mod, body in ( + ("unused", "module example.com/unused\n\ngo 1.16\n", "package unused\n"), + ("used", "module example.com/used\n\ngo 1.16\nrequire example.com/unused v1.0.0\n", "package used\nfunc Value() int { return 7 }\n"), + ): + directory = proxy / "example.com" / name / "@v" + directory.mkdir(parents=True) + (directory / "v1.0.0.mod").write_text(mod) + (directory / "v1.0.0.info").write_text('{"Version":"v1.0.0","Time":"2026-10-13T00:00:00Z"}') + (directory / "list").write_text("v1.0.0\n") + with zipfile.ZipFile(directory / "v1.0.0.zip", "w") as archive: + archive.writestr(f"example.com/{name}@v1.0.0/go.mod", mod) + archive.writestr(f"example.com/{name}@v1.0.0/value.go", body) + env = self.env | {"GOPROXY": proxy.as_uri(), "GOMODCACHE": str(self.base / "unused-cache")} + self.write(self.backend, "go.mod", "module example.com/backend\n\ngo 1.23\nrequire example.com/used v1.0.0\n") + self.write(self.backend, "web/value.go", 'package web\nimport "example.com/used"\nvar Value = used.Value()\n') + self.run_command(["go", "mod", "tidy"], self.backend, env=env) + sums = (self.backend / "go.sum").read_text() + self.assertNotIn("example.com/unused v1.0.0 h1:", sums) + self.lock["components"]["Agent-System-Backend"]["commit"] = self.commit(self.backend) + self.save_inputs() + self.commit(self.root) + result = self.compose(env=env) + self.assertEqual(result.returncode, 0, result.stdout) + self.assertEqual((self.backend / "go.sum").read_text(), sums) + graph = json.loads((self.out / "resolved-manifest.json").read_text())["go"]["backend"]["modules"] + self.assertIn("example.com/used", {module["Path"] for module in graph}) + + def test_developer_package_tarball_overrides_do_not_reach_formal_tests(self): + self.write(self.frontend, "test.cjs", "if (process.env.CONTRACTS_TARBALL || process.env.UI_TARBALL) process.exit(93)") + self.lock["components"]["Agent-System-Frontend"]["commit"] = self.commit(self.frontend) + self.save_inputs() + self.commit(self.root) + result = self.compose("test", env=self.env | {"CONTRACTS_TARBALL": "/tmp/dirty-contracts.tgz", "UI_TARBALL": "/tmp/dirty-ui.tgz"}) + self.assertEqual(result.returncode, 0, result.stdout) + + def test_test_target_checks_fixed_go_library_and_ui_sources(self): + library = self.base / "probe-library" + library.mkdir() + self.run_command(["git", "init", "-q", "-b", "main"], library) + self.run_command(["git", "config", "user.email", "fixture@example.invalid"], library) + self.run_command(["git", "config", "user.name", "Fixture"], library) + self.write(library, "go.mod", "module example.com/probe\n\ngo 1.23\n") + self.write(library, "probe.go", "package probe\nfunc Text() string { return \"\" }\n") + self.write(library, "probe_test.go", '''package probe +import ("testing"; "os") +func TestFixedLibrary(t *testing.T) { + if err:=os.WriteFile(os.Getenv("COMPOSITION_GO_MARKER"), []byte("fixed-go-test"), 0600); err!=nil {t.Fatal(err)} + if path:=os.Getenv("COMPOSITION_EXEC_MARKER"); path!="" { if err:=os.WriteFile(path, []byte("library-executed"), 0600); err!=nil {t.Fatal(err)} } +} +''') + library_sha = self.commit(library) + version = "v0.0.0-" + self.run_command(["git", "show", "-s", "--format=%cd", "--date=format-local:%Y%m%d%H%M%S", library_sha], library).stdout.strip() + "-" + library_sha[:12] + proxy = self.base / "probe-proxy/example.com/probe/@v" + proxy.mkdir(parents=True) + (proxy / (version + ".mod")).write_text((library / "go.mod").read_text()) + (proxy / (version + ".info")).write_text(json.dumps({"Version": version, "Time": "2026-10-13T00:00:00Z", "Origin": {"VCS": "git", "URL": str(library), "Hash": library_sha}})) + (proxy / "list").write_text(version + "\n") + with zipfile.ZipFile(proxy / (version + ".zip"), "w") as archive: + for path in self.run_command(["git", "ls-files"], library).stdout.splitlines(): + archive.write(library / path, "example.com/probe@" + version + "/" + path) + self.write(self.backend, "go.mod", f"module example.com/backend\n\ngo 1.23\nrequire example.com/probe {version}\n") + self.write(self.backend, "web/probe.go", 'package web\nimport "example.com/probe"\nvar _ = probe.Text()\n') + env = self.env | {"GOPROXY": (self.base / "probe-proxy").as_uri(), "GOMODCACHE": str(self.base / "probe-cache"), + "COMPOSITION_GO_MARKER": str(self.base / "go-tested"), "COMPOSITION_UI_MARKER": str(self.base / "ui-tested")} + self.run_command(["go", "mod", "download", "all"], self.backend, env=env) + self.lock["components"]["Agent-System-Backend"]["commit"] = self.commit(self.backend) + self.write(library, "probe_test.go", "invalid dirty library tests") + ui = self.base / "ui" + ui.mkdir() + self.run_command(["git", "init", "-q", "-b", "main"], ui) + self.run_command(["git", "config", "user.email", "fixture@example.invalid"], ui) + self.run_command(["git", "config", "user.name", "Fixture"], ui) + self.write(ui, "package.json", json.dumps({"name": "@agent-system/ui", "version": "1.0.0", "scripts": {"test": "node test.cjs", "typecheck": "node -e \"process.exit(0)\""}})) + self.write(ui, "test.cjs", "require('node:fs').writeFileSync(process.env.COMPOSITION_UI_MARKER, 'fixed-ui-test')") + self.run_command(["npm", "install", "--package-lock-only", "--ignore-scripts", "--no-audit", "--no-fund"], ui) + ui_sha = self.commit(ui) + package = json.loads((self.frontend / "package.json").read_text()) + package["dependencies"] = {"@agent-system/ui": "git+" + ui.as_uri() + "#" + ui_sha} + self.write(self.frontend, "package.json", json.dumps(package)) + self.run_command(["npm", "install", "--package-lock-only", "--ignore-scripts", "--no-audit", "--no-fund"], self.frontend) + self.lock["components"]["Agent-System-Frontend"]["commit"] = self.commit(self.frontend) + self.write(ui, "test.cjs", "throw Error('dirty ui tests')") + self.manifest["components"].extend([ + {"id": "Probe", "repo": str(library), "path": ".workspace/Probe", "role": "go-library", "modules": [{"path": "example.com/probe", "directory": "."}], "target": "main"}, + {"id": "Agent-System-UI", "repo": ui.as_uri(), "path": ".workspace/Agent-System-UI", "role": "npm-library", "modules": [], "target": "main"}, + ]) + self.save_inputs() + self.commit(self.root) + env = self.acquisition_guard(env, mark_frontend=False) + result = self.compose("test", env=env) + self.assertEqual(result.returncode, 0, result.stdout) + self.assertTrue((self.base / "go-tested").is_file(), "resolved Go provider tests were not executed") + self.assertEqual((self.base / "go-tested").read_text(), "fixed-go-test") + self.assertTrue((self.base / "ui-tested").is_file(), "fixed npm UI provider tests were not executed") + self.assertEqual((self.base / "ui-tested").read_text(), "fixed-ui-test") + self.assertIn("go vet", result.stdout) + + def test_version_and_plugin_assets_come_from_committed_root(self): + self.write(self.root, "plugins/example/plugin.json", '{"name":"immutable-plugin"}') + self.root_sha = self.commit(self.root) + self.write(self.root, "plugins/example/plugin.json", '{"name":"dirty-plugin"}') + result = self.compose() + self.assertEqual(result.returncode, 0, result.stdout) + resolved = json.loads((self.out / "resolved-manifest.json").read_text()) + self.assertIn("version", resolved) + self.assertEqual(self.run_command([str(self.out / "agent-system"), "version"]).stdout, resolved["version"]) + self.assertIn(self.root_sha[:12], resolved["version"]) + self.assertIn(self.backend_sha[:12], resolved["version"]) + self.assertIn(self.frontend_sha[:12], resolved["version"]) + self.assertEqual((self.out / "plugins/example/plugin.json").read_text(), '{"name":"immutable-plugin"}') + self.assertTrue(resolved["assets"]["plugins"]["sha256"]) + + def test_npm_local_dependency_overlay_is_rejected(self): + lock = json.loads((self.frontend / "package-lock.json").read_text()) + lock["packages"]["node_modules/local"] = {"resolved": "file:../dirty"} + self.write(self.frontend, "package-lock.json", json.dumps(lock)) + self.lock["components"]["Agent-System-Frontend"]["commit"] = self.commit(self.frontend) + self.save_inputs() + self.commit(self.root) + result = self.compose() + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("local", result.stdout) + self.assertFalse((self.out / "agent-system").exists()) + + def test_frontend_dist_symlink_cannot_import_assets_from_outside_source(self): + external = self.base / "external-assets" + self.write(external, "index.html", "escaped-page") + self.write(external, "assets/main.js", "escaped-code") + self.write(self.frontend, "build.cjs", "require('node:fs').symlinkSync(" + json.dumps(str(external)) + ", 'dist', 'dir')") + self.lock["components"]["Agent-System-Frontend"]["commit"] = self.commit(self.frontend) + self.save_inputs() + self.commit(self.root) + result = self.compose() + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("symlink", result.stdout) + self.assertFalse((self.out / "agent-system").exists()) + + def test_project_test_mode_refuses_missing_boundary_gate(self): + self.write(self.root, "Makefile", "test-governance:\n\ttrue\n") + self.commit(self.root) + result = self.compose("test") + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("lint-boundaries", result.stdout) + + def test_fixed_root_governance_and_boundaries_receive_proven_source_map(self): + self.write(self.root, "Makefile", "test-governance:\n\tpython3 -B scripts/map-check.py governance\n") + self.write(self.root, "scripts/lint-boundaries.sh", "#!/bin/sh\npython3 -B scripts/map-check.py boundaries\n") + self.write(self.root, "scripts/check-pins.sh", "#!/bin/sh\npython3 -B scripts/map-check.py pins\n") + self.write(self.root, "scripts/map-check.py", '''import json, os, pathlib, sys +root = pathlib.Path.cwd() +assert not (root / '.git').exists(), 'gates must run from the immutable archive' +mapping = json.loads(pathlib.Path(os.environ['COMPOSITION_SOURCE_MAP']).read_text()) +lock = json.loads((root / 'components.lock.json').read_text()) +for name in ('Agent-System-Backend', 'Agent-System-Frontend'): + assert mapping['components'][name]['commit'] == lock['components'][name]['commit'] +assert (pathlib.Path(mapping['components']['Agent-System-Backend']['path']) / 'web/dist/index.html').read_text() == 'immutable-page' +with pathlib.Path(os.environ['COMPOSITION_GATE_MARKER']).open('a') as output: output.write(sys.argv[1]+'\\n') +''') + self.commit(self.root) + # Dirty gate code is excluded, just like dirty application code. + self.write(self.root, "scripts/map-check.py", "raise Exception('dirty governance')") + marker = self.base / "gates-run" + result = self.compose("test", extra=("--source-map", str(self.base / "source-map.json")), env=self.env | {"COMPOSITION_GATE_MARKER": str(marker)}) + self.assertEqual(result.returncode, 0, result.stdout) + self.assertEqual(marker.read_text(), "boundaries\npins\ngovernance\n") + self.assertEqual(json.loads((self.base / "source-map.json").read_text())["components"]["Agent-System-Backend"]["commit"], self.backend_sha) + + def test_missing_frontend_assets_fails_before_publishing_binary(self): + self.write(self.frontend, "build.cjs", "require('node:fs').mkdirSync('dist', {recursive:true});") + self.lock["components"]["Agent-System-Frontend"]["commit"] = self.commit(self.frontend) + self.save_inputs() + self.commit(self.root) + result = self.compose() + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("index.html", result.stdout) + self.assertFalse((self.out / "agent-system").exists()) + + def test_dirty_root_lock_is_rejected(self): + self.lock["components"]["Agent-System-Backend"]["commit"] = "a" * 40 + self.save_inputs() + result = self.compose() + self.assertNotEqual(result.returncode, 0, result.stdout) + + def test_dirty_root_composer_cannot_publish_under_committed_identity(self): + tools = self.root / "scripts" + (tools / "workspace").mkdir(parents=True) + shutil.copy2(SCRIPT, tools / "build-composition.py") + shutil.copy2(SCRIPT.parent / "workspace/transport.py", tools / "workspace/transport.py") + self.commit(self.root) + composer = tools / "build-composition.py" + composer.write_text(composer.read_text().replace( + '(destination / ".gitkeep").touch()', + '(destination / ".gitkeep").touch(); (destination / "index.html").write_text("dirty-tool-page")')) + result = self.run_command([sys.executable, str(composer), "--root", str(self.root), + "--target", "build", "--output", str(self.out)], check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("tool", result.stdout) + self.assertFalse((self.out / "agent-system").exists()) + + def test_dirty_root_transport_is_refused_before_import(self): + tools = self.root / "scripts" + (tools / "workspace").mkdir(parents=True) + shutil.copy2(SCRIPT, tools / "build-composition.py") + shutil.copy2(SCRIPT.parent / "workspace/transport.py", tools / "workspace/transport.py") + self.commit(self.root) + marker = self.base / "transport-executed" + (tools / "workspace/transport.py").write_text( + "from pathlib import Path\nPath(" + repr(str(marker)) + ").write_text('executed')\n") + result = self.run_command([sys.executable, str(tools / "build-composition.py"), "--root", str(self.root), + "--target", "build", "--output", str(self.out)], check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertFalse(marker.exists(), "dirty transport executed before source identity validation") + self.assertIn("committed", result.stdout) + + def test_locked_missing_revision_is_rejected(self): + self.lock["components"]["Agent-System-Backend"]["commit"] = "a" * 40 + self.save_inputs() + self.commit(self.root) + result = self.compose() + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertFalse((self.out / "agent-system").exists()) + + def test_source_path_escape_is_rejected(self): + self.manifest["components"][0]["path"] = "../outside" + self.save_inputs() + self.commit(self.root) + result = self.compose() + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("path", result.stdout) + + def test_local_go_replace_is_rejected(self): + self.write(self.backend, "go.mod", "module example.com/backend\n\ngo 1.23\nreplace example.com/dirty => /missing/local\n") + self.lock["components"]["Agent-System-Backend"]["commit"] = self.commit(self.backend) + self.save_inputs() + self.commit(self.root) + result = self.compose() + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("replace", result.stdout) + + def test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache(self): + rdm = self.base / "rdm" + rdm.mkdir() + self.run_command(["git", "init", "-q", "-b", "main"], rdm) + self.run_command(["git", "config", "user.email", "fixture@example.invalid"], rdm) + self.run_command(["git", "config", "user.name", "Fixture"], rdm) + version = "v0.0.0-" + self.run_command(["git", "show", "-s", "--format=%cd", "--date=format-local:%Y%m%d%H%M%S", self.backend_sha], self.backend).stdout.strip() + "-" + self.backend_sha[:12] + proxy = self.base / "proxy/example.com/backend/@v" + proxy.mkdir(parents=True) + (proxy / (version + ".mod")).write_text((self.backend / "go.mod").read_text()) + (proxy / (version + ".info")).write_text(json.dumps({"Version": version, "Time": "2026-10-13T00:00:00Z"})) + (proxy / "list").write_text(version + "\n") + with zipfile.ZipFile(proxy / (version + ".zip"), "w") as archive: + paths = self.run_command(["git", "ls-files"], self.backend).stdout.splitlines() + for path in paths: + archive.write(self.backend / path, "example.com/backend@" + version + "/" + path) + self.write(rdm, "go.mod", f"module example.com/rdm\n\ngo 1.23\nrequire example.com/backend {version}\n") + self.write(rdm, "main.go", 'package main\nimport ("fmt"; "example.com/backend/web")\nfunc main() { fmt.Print(web.Page()) }\n') + module_cache = self.base / "module-cache" + env = self.env | {"GOPROXY": (self.base / "proxy").as_uri(), "GOMODCACHE": str(module_cache)} + self.run_command(["go", "mod", "download", "all"], rdm, env=env) + rdm_sha = self.commit(rdm) + cached_asset = module_cache / ("example.com/backend@" + version) / "web/dist/.gitkeep" + self.assertTrue(cached_asset.exists()) + result = self.compose(extra=("--rdm-source", str(rdm)), env=env) + self.assertEqual(result.returncode, 0, result.stdout) + self.assertEqual(self.run_command([str(self.out / "agent-system-rdm-product")]).stdout, "immutable-page") + self.assertFalse(cached_asset.with_name("index.html").exists()) + resolved = json.loads((self.out / "resolved-manifest.json").read_text()) + self.assertEqual(resolved["applications"]["Agent-System-RDM"]["commit"], rdm_sha) + self.assertTrue(resolved["go"]["rdm"]["vendor_modules_sha256"]) + self.assertTrue(resolved["go"]["rdm"]["vendor_backend_source_sha256"]) + self.assertEqual(resolved["go"]["rdm"]["modules"][1]["Version"], version) + + @unittest.skipUnless((RDM_SCRIPTS / "scripts/build-product.sh").is_file(), "external RDM source was not supplied; host must replay the actual wrapper") + def test_versioned_rdm_product_entry_uses_fixed_composer(self): + # Reuse the real module fixture first; its independent embed test remains + # mandatory even when an external RDM wrapper is unavailable. + self.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache() + rdm = self.base / "rdm" + version = self.run_command(["go", "list", "-m", "-f", "{{.Version}}", "example.com/backend"], rdm, + env=self.env | {"GOPROXY": (self.base / "proxy").as_uri(), "GOMODCACHE": str(self.base / "module-cache")}).stdout.strip() + env = self.env | {"GOPROXY": (self.base / "proxy").as_uri(), "GOMODCACHE": str(self.base / "module-cache")} + + # The versioned RDM entry invokes the same fixed Dev composer, even when + # local RDM Go source is dirty. No API-only fallback is allowed. + self.write(rdm, "go.mod", f"module git-ssh.u1680832.nyat.app/weichen/Agent-System-RDM.git\n\ngo 1.23\nrequire example.com/backend {version}\n") + shutil.copy2(RDM_SCRIPTS / "Makefile", rdm / "Makefile") + (rdm / "scripts").mkdir() + shutil.copy2(RDM_SCRIPTS / "scripts/build-product.sh", rdm / "scripts/build-product.sh") + self.commit(rdm) + self.write(rdm, "main.go", "invalid local RDM") + (self.root / "scripts/workspace").mkdir(parents=True) + shutil.copy2(SCRIPT, self.root / "scripts/build-composition.py") + shutil.copy2(SCRIPT.parent / "workspace/transport.py", self.root / "scripts/workspace/transport.py") + self.commit(self.root) + result = self.run_command(["make", "product", "COMPOSITION_ROOT=" + str(self.root)], rdm, env=env, check=False) + self.assertEqual(result.returncode, 0, result.stdout) + self.assertEqual(self.run_command([str(rdm / "bin/agent-system-rdm-product")]).stdout, "immutable-page") + self.assertTrue((rdm / "bin/agent-system-admin").exists()) + self.assertEqual(json.loads((rdm / "bin/PRODUCT_MANIFEST.json").read_text())["kind"], "agent-system-composition/1") + + def test_modified_go_module_cache_is_rejected_before_product_publication(self): + self.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache() + cached = next((self.base / "module-cache/example.com").glob("backend@*/web/embed.go")) + cached.chmod(0o644) + cached.write_text(cached.read_text() + "\n// unauthorized cache mutation\n") + result = self.compose(extra=("--rdm-source", str(self.base / "rdm")), + env=self.env | {"GOPROXY": (self.base / "proxy").as_uri(), "GOMODCACHE": str(self.base / "module-cache")}) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("modified", result.stdout) + + def test_rdm_product_and_admin_follow_its_selected_backend_not_dev_source_lock(self): + self.test_rdm_vendored_remote_backend_embeds_assets_without_mutating_module_cache() + selected_embed = (self.backend / "web/embed.go").read_text().replace("return string(b)", 'return "selected-rdm:" + string(b)') + self.write(self.backend, "web/embed.go", selected_embed) + selected_sha = self.commit(self.backend) + selected_version = "v0.0.0-" + self.run_command(["git", "show", "-s", "--format=%cd", "--date=format-local:%Y%m%d%H%M%S", selected_sha], self.backend).stdout.strip() + "-" + selected_sha[:12] + proxy = self.base / "proxy/example.com/backend/@v" + (proxy / (selected_version + ".mod")).write_text((self.backend / "go.mod").read_text()) + (proxy / (selected_version + ".info")).write_text(json.dumps({"Version": selected_version, "Time": "2026-10-13T00:00:00Z", "Origin": {"VCS": "git", "URL": str(self.backend), "Hash": selected_sha}})) + with zipfile.ZipFile(proxy / (selected_version + ".zip"), "w") as archive: + for path in self.run_command(["git", "ls-files"], self.backend).stdout.splitlines(): + archive.write(self.backend / path, "example.com/backend@" + selected_version + "/" + path) + rdm = self.base / "rdm" + self.write(rdm, "go.mod", f"module example.com/rdm\n\ngo 1.23\nrequire example.com/backend {selected_version}\n") + env = self.env | {"GOPROXY": (self.base / "proxy").as_uri(), "GOMODCACHE": str(self.base / "module-cache")} + self.run_command(["go", "mod", "download", "all"], rdm, env=env) + self.commit(rdm) + result = self.compose(extra=("--rdm-source", str(rdm)), env=env) + self.assertEqual(result.returncode, 0, result.stdout) + self.assertEqual(self.run_command([str(self.out / "agent-system")]).stdout, "immutable-page") + self.assertEqual(self.run_command([str(self.out / "agent-system-rdm-product")]).stdout, "selected-rdm:immutable-page") + self.assertEqual(self.run_command([str(self.out / "agent-system-admin")]).stdout, "selected-rdm:immutable-page") + resolved = json.loads((self.out / "resolved-manifest.json").read_text()) + self.assertEqual(resolved["applications"]["Agent-System-Backend"]["commit"], self.backend_sha) + self.assertEqual(resolved["go"]["rdm"]["backend_source"]["commit"], selected_sha) + self.assertEqual(resolved["go"]["rdm"]["backend_source"]["version"], selected_version) + admin_version = self.run_command([str(self.out / "agent-system-admin"), "version"]).stdout + self.assertEqual(admin_version, resolved["go"]["rdm"]["admin_version"]) + self.assertIn(selected_sha[:12], admin_version) + self.assertFalse((self.base / "module-cache/example.com" / ("backend@" + selected_version) / "web/dist/index.html").exists()) + + def test_historical_rdm_product_still_builds_from_legacy_pins(self): + rdm = self.base / "legacy-rdm" + rdm.mkdir() + self.run_command(["git", "init", "-q", "-b", "main"], rdm) + self.run_command(["git", "config", "user.email", "fixture@example.invalid"], rdm) + self.run_command(["git", "config", "user.name", "Fixture"], rdm) + self.write(rdm, "go.mod", "module legacy-rdm\n\ngo 1.23\nrequire example.com/backend v0.0.0\nreplace example.com/backend => ./pins/agent-system-backend\n") + self.write(rdm, "main.go", 'package main\nimport ("fmt"; "example.com/backend/web")\nfunc main() { fmt.Print(web.Page()) }\n') + (rdm / "scripts").mkdir() + shutil.copy2(LEGACY_PRODUCT, rdm / "scripts/build-product.sh") + self.commit(rdm) + pins = rdm / "pins" + pins.mkdir() + for name, source in (("agent-system-backend", self.backend), ("agent-system-frontend", self.frontend), ("agent-system-ui", self.frontend)): + self.run_command(["git", "clone", "-q", str(source), str(pins / name)]) + for name in ("agent-system-frontend", "agent-system-ui"): + package = json.loads((pins / name / "package.json").read_text()) + del package["scripts"]["postinstall"] + self.write(pins / name, "package.json", json.dumps(package)) + self.run_command(["npm", "install", "--package-lock-only", "--ignore-scripts", "--no-audit", "--no-fund"], pins / name) + result = self.run_command(["bash", "scripts/build-product.sh"], rdm, check=False) + self.assertEqual(result.returncode, 0, result.stdout) + self.assertEqual(self.run_command([str(rdm / "bin/agent-system-rdm-product")]).stdout, "immutable-page") + self.assertEqual(json.loads((rdm / "bin/PRODUCT_MANIFEST.json").read_text())["kind"], "rdm-product/1") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_dependency_ci.py b/tests/test_dependency_ci.py new file mode 100644 index 00000000..60313452 --- /dev/null +++ b/tests/test_dependency_ci.py @@ -0,0 +1,424 @@ +"""Replay trusted workflow phases with real Git, Go, npm and disposable HTTP repos.""" +import json +import os +import re +from pathlib import Path +import subprocess +import shutil +import tempfile +import textwrap +import unittest + +from tests import test_ci_credentials as fixture +from tests.test_composition import LocalNpmRegistry + +ROOT_TOKEN, SUB_TOKEN, SSH, WORKFLOW = fixture.ROOT_TOKEN, fixture.SUB_TOKEN, fixture.SSH, fixture.WORKFLOW + +MODULE = "git-ssh.u1680832.nyat.app/weichen/Logging-System.git" + + +def phase(workflow, name): + return fixture.workflow_script(workflow, name) + + +class ComponentWorkflowFixtureTests(unittest.TestCase): + def setUp(self): + self.temporary = tempfile.TemporaryDirectory() + self.addCleanup(self.temporary.cleanup) + self.base = Path(self.temporary.name) + self.snapshots = self.base / "snapshots" + shutil.copytree(fixture.COMPONENT_FIXTURES, self.snapshots) + + def test_all_required_component_snapshots_have_fixed_provenance(self): + for repository in fixture.COMPONENT_REPOSITORIES: + with self.subTest(repository=repository): + path = fixture.component_workflow(repository) + self.assertEqual(path, fixture.COMPONENT_FIXTURES / repository / "ci.yml") + self.assertTrue(phase(path, "Checkout")) + + def test_modified_workflow_snapshot_is_rejected_before_execution(self): + path = self.snapshots / "Agent-Native/ci.yml" + path.write_bytes(path.read_bytes() + b"\n# unexpected workflow replacement\n") + with self.assertRaisesRegex(ValueError, "recorded source digest"): + fixture.component_workflow("Agent-Native", snapshots=self.snapshots) + + def test_missing_component_snapshot_is_not_skipped(self): + (self.snapshots / "Agent-Native/ci.yml").unlink() + with self.assertRaises(FileNotFoundError): + fixture.component_workflow("Agent-Native", snapshots=self.snapshots) + + def test_omitted_repository_provenance_is_rejected(self): + path = self.snapshots / "provenance.json" + provenance = json.loads(path.read_text()) + del provenance["components"]["Agent-Native"] + path.write_text(json.dumps(provenance)) + with self.assertRaisesRegex(ValueError, "every reviewed repository"): + fixture.component_workflow("Agent-Native", snapshots=self.snapshots) + + def test_optional_source_validation_uses_immutable_commit_and_rejects_stale_head(self): + source_root = self.base / "sources" + source = source_root / "Agent-Native" + workflow = source / ".gitea/workflows/ci.yml" + workflow.parent.mkdir(parents=True) + captured = self.snapshots / "Agent-Native/ci.yml" + workflow.write_bytes(captured.read_bytes()) + env = {k: v for k, v in os.environ.items() if not k.startswith("GIT_")} + env.update(GIT_CONFIG_GLOBAL="/dev/null", GIT_CONFIG_SYSTEM="/dev/null") + + def git(*args): + return subprocess.check_output(["git", "-C", str(source), *args], env=env, text=True).strip() + + git("init", "-q") + git("add", ".") + git("-c", "user.name=Fixture", "-c", "user.email=fixture@example.invalid", "commit", "-q", "-m", "Source") + metadata = self.snapshots / "provenance.json" + provenance = json.loads(metadata.read_text()) + provenance["components"]["Agent-Native"]["source_sha"] = git("rev-parse", "HEAD") + metadata.write_text(json.dumps(provenance)) + # A mutable file must not substitute for the committed Git object. + workflow.write_text("uncommitted workflow replacement\n") + self.assertEqual(fixture.component_workflow("Agent-Native", snapshots=self.snapshots, + source_root=source_root), captured) + git("add", ".") + git("-c", "user.name=Fixture", "-c", "user.email=fixture@example.invalid", "commit", "-q", "-m", "Changed") + with self.assertRaisesRegex(ValueError, "source HEAD differs"): + fixture.component_workflow("Agent-Native", snapshots=self.snapshots, source_root=source_root) + provenance["components"]["Agent-Native"]["source_sha"] = git("rev-parse", "HEAD") + metadata.write_text(json.dumps(provenance)) + with self.assertRaisesRegex(ValueError, "immutable Git source"): + fixture.component_workflow("Agent-Native", snapshots=self.snapshots, source_root=source_root) + + +class DependencyCITests(unittest.TestCase): + def test_boundary_gate_refuses_missing_ripgrep_before_resolving_sources(self): + with tempfile.TemporaryDirectory(prefix="boundary-no-tools-") as directory: + result = subprocess.run([shutil.which("bash"), str(WORKFLOW.parents[2] / "scripts/lint-boundaries.sh")], + cwd=directory, env=os.environ | {"PATH": directory}, capture_output=True, text=True) + self.assertEqual(result.returncode, 2, result.stdout + result.stderr) + self.assertIn("requires ripgrep", result.stderr) + + def test_privileged_acquisition_finishes_before_candidate_execution_in_each_job(self): + content = WORKFLOW.read_text() + jobs = re.split(r"^ ([A-Za-z0-9_-]+):\n", content, flags=re.M) + for index in range(1, len(jobs), 2): + job, body = jobs[index:index+2] + executed = False + steps = re.split(r"^ - name: ([^\n]+)\n", body, flags=re.M) + for step in range(1, len(steps), 2): + name, script = steps[step:step+2] + with self.subTest(job=job, step=name): + if re.search(r"\$\{\{\s*secrets\.", script): + self.assertFalse(executed, "privileged acquisition follows candidate execution") + # run may be an inline YAML scalar or a multiline block; + # both shell and Python project entry points execute code. + if re.search(r"(?:^|\n)\s*(?:run:\s*)?(?:make\s|go\s+(?:build|test|vet)\s|npm\s+(?:run|test)\s|bash\s+scripts/|python3?\s+(?:-m\s+unittest|scripts/))", script): + executed = True + + setUp = fixture.CheckoutTests.setUp + git = fixture.CheckoutTests.git + publish = fixture.CheckoutTests.publish + run_checkout = fixture.CheckoutTests.run_checkout + + def run_phase(self, name, directory=None, workflow=WORKFLOW, extra=None, after=""): + env = self.env | {"SUBMODULE_TOKEN": SUB_TOKEN, "GITHUB_SERVER_URL": self.url, + "GITHUB_REPOSITORY": "weichen/Agent-System-Dev", + "GOCACHE": str(self.base / "gocache"), + "GOMODCACHE": str(self.base / "gomodcache"), + "npm_config_cache": str(self.base / "npm-cache")} + return subprocess.run(["bash", "-c", phase(workflow, name) + "\n" + after], + cwd=directory or self.checkout, env=env | (extra or {}), + capture_output=True, text=True, timeout=60) + + def commit_fixture(self, name, files): + sha = self.publish(name) + source = self.base / name + for path, content in files.items(): + dest = source / path + dest.parent.mkdir(parents=True, exist_ok=True) + dest.write_text(content) + self.git(source, "add", ".") + subprocess.run(["git", "-C", str(source), "-c", "user.name=Fixture", + "-c", "user.email=fixture@example.invalid", "commit", "-q", "-m", "Package"], + env=self.env | {"GIT_AUTHOR_DATE": "2026-01-02T03:04:05Z", + "GIT_COMMITTER_DATE": "2026-01-02T03:04:05Z"}, check=True) + sha = self.git(source, "rev-parse", "HEAD") + self.git(source, "push", "-q", str(self.published / "weichen" / (name + ".git")), "main") + return sha + + def fixture_checksums(self, module, sha): + """Use Go's checksum algorithm on a local fixture, outside the cache under test.""" + directory = self.base / "checksum-fixture" + directory.mkdir() + version = "v0.0.0-20260102030405-" + sha[:12] + (directory / "go.mod").write_text(f"module checksumfixture\n\ngo 1.25\nrequire {module} {version}\n") + repo = self.published / "weichen/Logging-System.git" + env = self.env | {"GOWORK": "off", "GOTOOLCHAIN": "local", "GOENV": "off", "GOFLAGS": "", + "GOPROXY": "off", "GOSUMDB": "off", "GOMODCACHE": str(self.base / "checksum-cache"), + "GOPRIVATE": "git-ssh.u1680832.nyat.app/weichen", "GONOPROXY": "git-ssh.u1680832.nyat.app/weichen", + "GIT_CONFIG_GLOBAL": "/dev/null", "GIT_CONFIG_COUNT": "3", + "GIT_CONFIG_KEY_0": "protocol.file.allow", "GIT_CONFIG_VALUE_0": "always", + "GIT_CONFIG_KEY_1": "url." + repo.as_uri() + ".insteadOf", + "GIT_CONFIG_VALUE_1": "https://git-ssh.u1680832.nyat.app/weichen/Logging-System", + "GIT_CONFIG_KEY_2": "core.hooksPath", "GIT_CONFIG_VALUE_2": "/dev/null"} + result = subprocess.run(["go", "mod", "download", "-json"], cwd=directory, env=env, + capture_output=True, text=True, check=True) + info = json.loads(result.stdout) + return f"{module} {version} {info['Sum']}\n{module} {version}/go.mod {info['GoModSum']}\n" + + def test_registered_application_lock_materializes_fixed_source(self): + backend = self.publish("Agent-System-Backend") + root = self.commit_fixture("Agent-System-Dev", { + "components.json": json.dumps({"schema": 1, "components": [{ + "id": "Agent-System-Backend", "repo": SSH + "Agent-System-Backend.git", + "path": ".workspace/Agent-System-Backend", "role": "application", "modules": []}, { + "id": "Agent-System-UI", "repo": SSH + "Agent-System-UI.git", + "path": ".workspace/Agent-System-UI", "role": "npm-library", "modules": []}]}), + "components.lock.json": json.dumps({"schema": 1, "components": { + "Agent-System-Backend": {"commit": backend}}})}) + result = self.run_checkout(root) + self.assertEqual(result.returncode, 0, result.stderr) + self.assertTrue((self.checkout / ".workspace/Agent-System-Backend/.git").exists(), + "versioned application source was not materialized") + self.assertEqual(self.git(self.checkout / ".workspace/Agent-System-Backend", "rev-parse", "HEAD"), backend) + self.assertEqual(self.git(self.checkout / ".workspace/Agent-System-Backend", "config", "remote.origin.url"), + SSH + "Agent-System-Backend.git") + + def test_unregistered_source_lock_is_rejected_before_component_fetch(self): + root = self.commit_fixture("Agent-System-Dev", { + "components.json": json.dumps({"schema": 1, "components": [{ + "id": "Agent-System-Backend", "repo": self.url + "/untrusted/receiver", + "path": ".workspace/Agent-System-Backend", "role": "application", "modules": []}]}), + "components.lock.json": json.dumps({"schema": 1, "components": { + "Agent-System-Backend": {"commit": "a" * 40}}})}) + result = self.run_checkout(root) + self.assertNotEqual(result.returncode, 0, "untrusted manifest was accepted") + self.assertFalse(any("Backend" in path or "untrusted" in path for path, _ in self.requests)) + + def test_go_prefetch_uses_only_registered_private_repo_and_local_toolchain(self): + sha = self.commit_fixture("Logging-System", { + "go.mod": f"module {MODULE}\n\ngo 1.25\n", "logging.go": "package logging\nconst Value = 42\n"}) + (self.checkout / "go.mod").write_text( + f"module fixture\n\ngo 1.25\n\nrequire {MODULE} v0.0.0-20260102030405-{sha[:12]}\n") + (self.checkout / "go.sum").write_text(self.fixture_checksums(MODULE, sha)) + (self.checkout / "probe.go").write_text(f'package fixture\nimport logging "{MODULE}"\nvar Value = logging.Value\n') + result = self.run_phase("Prefetch Go modules without executing candidate code", + extra={"GOTOOLCHAIN": "auto", "GIT_TRACE": "1"}) + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + self.assertTrue(self.requests) + for path, auth in self.requests: + self.assertRegex(path, r"^/weichen/Logging-System\.git/") + self.assertEqual(auth, "token " + SUB_TOKEN) + self.assertNotIn(SUB_TOKEN, result.stdout + result.stderr) + tested = subprocess.run(["go", "test", "./..."], cwd=self.checkout, + env=self.env | {"GOTOOLCHAIN": "local", "GOWORK": "off", "GOPROXY": "off", + "GOSUMDB": "off", "GOMODCACHE": str(self.base / "gomodcache"), + "GOCACHE": str(self.base / "gocache")}, capture_output=True, text=True) + self.assertEqual(tested.returncode, 0, tested.stdout + tested.stderr) + for config in self.base.rglob("config"): + if config.is_file(): + self.assertNotIn(SUB_TOKEN, config.read_text(errors="replace")) + + def test_unregistered_go_module_rejected_before_authenticated_request(self): + (self.checkout / "go.mod").write_text( + "module fixture\n\ngo 1.25\nrequire git-ssh.u1680832.nyat.app/weichen/Unlisted.git v1.0.0\n") + result = self.run_phase("Prefetch Go modules without executing candidate code") + self.assertNotEqual(result.returncode, 0) + self.assertFalse(self.requests) + + def test_npm_git_package_installs_committed_output_without_prepare(self): + marker = self.base / "prepare-ran" + sha = self.commit_fixture("Agent-System-Core", { + "package.json": json.dumps({"name": "@agent-system/contracts", "version": "1.0.0", + "files": ["package"], "main": "package/index.js"}), + "package/index.js": "module.exports = {value: 42}\n"}) + spec = "git+" + SSH + "Agent-System-Core.git#" + sha + (self.checkout / "package.json").write_text(json.dumps({"name": "fixture", "version": "1.0.0", + "dependencies": {"@agent-system/contracts": spec}, + "scripts": {"postinstall": f"touch '{marker}'"}})) + (self.checkout / "package-lock.json").write_text(json.dumps({"name": "fixture", "version": "1.0.0", + "lockfileVersion": 3, "requires": True, "packages": {"": {"name": "fixture", "version": "1.0.0", + "dependencies": {"@agent-system/contracts": spec}}, "node_modules/@agent-system/contracts": { + "version": "1.0.0", "resolved": spec}}})) + result = self.run_phase("Prefetch npm packages without lifecycle scripts") + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + self.assertFalse(marker.exists(), "candidate lifecycle ran while credential config was present") + consumer = subprocess.run(["node", "-e", "if(require('@agent-system/contracts').value !== 42)process.exit(1)"], + cwd=self.checkout, env=self.env, capture_output=True, text=True) + self.assertEqual(consumer.returncode, 0, consumer.stderr) + self.assertNotIn(SUB_TOKEN, result.stdout + result.stderr) + for path, auth in self.requests: + self.assertRegex(path, r"^/weichen/Agent-System-Core\.git/") + self.assertEqual(auth, "token " + SUB_TOKEN) + + def test_npm_prefetch_populates_cold_offline_resolver_metadata_without_credentials(self): + workflows = {"Agent-System-Dev": WORKFLOW, **{repo: fixture.component_workflow(repo) + for repo in ("Agent-System-UI", "Agent-System-Frontend")}} + for repo, workflow in workflows.items(): + with self.subTest(repo=repo): + base = self.base / repo + base.mkdir() + registry = LocalNpmRegistry(base, self.env) + self.addCleanup(registry.close) + original = registry.manifests(self.checkout) + red = registry.consumer(base / "cold-before") + self.assertNotEqual(red.returncode, 0) + self.assertIn("ENOTCACHED", red.stderr) + result = self.run_phase("Prefetch npm packages without lifecycle scripts", workflow=workflow, extra=registry.env) + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + self.assertEqual((self.checkout / "package-lock.json").read_bytes(), original) + green = registry.consumer(base / "cold-after") + self.assertEqual(green.returncode, 0, green.stdout + green.stderr) + installed = json.loads((base / "cold-after/node_modules" / registry.name / "package.json").read_text()) + self.assertEqual(installed["version"], "1.0.0") + calls = [json.loads(line) for line in registry.calls.read_text().splitlines()] + metadata = [call for call in calls if call["args"][:2] == ["cache", "add"]] + self.assertTrue(metadata) + self.assertEqual(metadata[0]["args"][2], registry.name + "@1.0.0") + self.assertFalse(metadata[0]["credential_keys"]) + self.assertTrue(all(auth is None for _, auth in registry.requests)) + + def test_npm_metadata_version_cannot_be_a_destination(self): + (self.checkout / "package.json").write_text(json.dumps({"name": "fixture"})) + (self.checkout / "package-lock.json").write_text(json.dumps({"lockfileVersion": 3, "packages": { + "node_modules/evil": {"version": self.url + "/untrusted.tgz", + "resolved": "https://registry.npmjs.org/evil/-/evil-1.0.0.tgz"}}})) + workflows = {"Agent-System-Dev": WORKFLOW, **{repo: fixture.component_workflow(repo) + for repo in ("Agent-System-UI", "Agent-System-Frontend")}} + for repo, workflow in workflows.items(): + with self.subTest(repo=repo): + result = self.run_phase("Prefetch npm packages without lifecycle scripts", workflow=workflow) + self.assertNotEqual(result.returncode, 0) + self.assertIn("locked registry package", result.stderr) + self.assertFalse(self.requests) + + def test_npm_provider_prepare_is_rejected_without_execution(self): + marker = self.base / "prepare-ran" + sha = self.commit_fixture("Agent-System-Core", { + "package.json": json.dumps({"name": "@agent-system/contracts", "version": "1.0.0", + "files": ["package"], "scripts": {"prepare": f"touch '{marker}'"}}), + "package/index.js": "module.exports = {value: 42}\n"}) + spec = "git+" + SSH + "Agent-System-Core.git#" + sha + (self.checkout / "package.json").write_text(json.dumps({"name": "fixture", "dependencies": {"contracts": spec}})) + (self.checkout / "package-lock.json").write_text(json.dumps({"lockfileVersion": 3, + "packages": {"node_modules/contracts": {"resolved": spec}}})) + result = self.run_phase("Prefetch npm packages without lifecycle scripts") + self.assertNotEqual(result.returncode, 0) + self.assertIn("without acquisition lifecycle", result.stderr) + self.assertFalse(marker.exists()) + + def test_external_npm_git_source_rejected_before_authenticated_request(self): + spec = self.url + "/untrusted/receiver.git#" + "a" * 40 + (self.checkout / "package.json").write_text(json.dumps({"name": "fixture", "dependencies": {"evil": "git+" + spec}})) + (self.checkout / "package-lock.json").write_text(json.dumps({"lockfileVersion": 3, + "packages": {"node_modules/evil": {"resolved": "git+" + spec}}})) + result = self.run_phase("Prefetch npm packages without lifecycle scripts") + self.assertNotEqual(result.returncode, 0) + self.assertFalse(self.requests) + + def test_component_checkout_removes_tokens_before_candidate_executes(self): + for repo in ("Logging-System", "Error-Code-System", "Agent-System-Core", "Agent-Native", "Agent-Intent", + "Agent-Command", "Agent-Squad", "Agent-System-Backend", "Agent-System-UI", + "Agent-System-Frontend", "Agent-System-RDM"): + with self.subTest(repo=repo): + sha = self.publish(repo) + self.checkout = self.base / (repo + "-checkout") + self.checkout.mkdir() + result = self.run_phase("Checkout", workflow=fixture.component_workflow(repo), + extra={"TOKEN": ROOT_TOKEN, "GITHUB_SHA": sha, "GITHUB_REPOSITORY": "weichen/" + repo}, + after="python3 probe.py") + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + + def test_go_requirement_for_new_toolchain_fails_without_downloading_one(self): + (self.checkout / "go.mod").write_text("module fixture\n\ngo 99.0\n") + result = self.run_phase("Prefetch Go modules without executing candidate code", extra={"GOTOOLCHAIN": "auto"}) + self.assertNotEqual(result.returncode, 0) + self.assertFalse(self.requests) + self.assertIn("GOTOOLCHAIN=local", result.stderr) + + def test_npm_nonregistry_tarball_rejected_before_request(self): + spec = self.url + "/untrusted/payload.tgz" + (self.checkout / "package.json").write_text(json.dumps({"name": "fixture", "dependencies": {"evil": spec}})) + (self.checkout / "package-lock.json").write_text(json.dumps({"lockfileVersion": 3, + "packages": {"node_modules/evil": {"resolved": spec}}})) + result = self.run_phase("Prefetch npm packages without lifecycle scripts") + self.assertNotEqual(result.returncode, 0) + self.assertFalse(self.requests, "candidate tarball source was contacted") + + def test_component_ci_executes_nested_go_module_tests(self): + (self.checkout / "go.mod").write_text("module fixture\n\ngo 1.25\n") + (self.checkout / "main.go").write_text("package fixture\nconst Value = 42\n") + (self.checkout / ".ci-mirrors.env").write_text("export GOTOOLCHAIN=local GOWORK=off GOENV=off\n") + for repo, suffix in (("Logging-System", "examples/trace"), ("Agent-Squad", "adapters/native")): + with self.subTest(repo=repo): + directory = self.checkout / suffix + directory.mkdir(parents=True, exist_ok=True) + (directory / "go.mod").write_text("module nestedfixture\n\ngo 1.25\n") + (directory / "regression_test.go").write_text( + 'package nestedfixture\nimport "testing"\nfunc TestNested(t *testing.T) {t.Fatal("intentional nested regression")}\n') + lines = fixture.component_workflow(repo).read_text().splitlines() + command = next(i for i, line in enumerate(lines) if "go vet" in line) + start = max(i for i in range(command) if lines[i].strip().endswith("run: |")) + 1 + end = next((i for i in range(start, len(lines)) + if lines[i].strip() and not lines[i].startswith(" ")), len(lines)) + script = textwrap.dedent("\n".join(lines[start:end])) + # Component CI's race gate uses the native runner C compiler; + # formal product builds independently set CGO_ENABLED=0. + result = subprocess.run(["bash", "-c", script], cwd=self.checkout, env=self.env | {"CGO_ENABLED": "1"}, + capture_output=True, text=True, timeout=60) + self.assertNotEqual(result.returncode, 0, "nested regression was skipped by component CI") + self.assertIn("intentional nested regression", result.stdout + result.stderr) + + def test_go_prefetch_covers_logging_trace_module(self): + sha = self.commit_fixture("Logging-System", { + "go.mod": f"module {MODULE}\n\ngo 1.25\n", "logging.go": "package logging\nconst Value = 42\n"}) + (self.checkout / "go.mod").write_text("module fixture\n\ngo 1.25\n") + example = self.checkout / "examples/trace" + example.mkdir(parents=True) + (example / "go.mod").write_text( + f"module tracefixture\n\ngo 1.27\n\nrequire {MODULE} v0.0.0-20260102030405-{sha[:12]}\n") + (example / "go.sum").write_text(self.fixture_checksums(MODULE, sha)) + before = (example / "go.sum").read_bytes() + result = self.run_phase("Prefetch Go modules without executing candidate code", + workflow=fixture.component_workflow("Logging-System")) + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + self.assertTrue(self.requests, "trace module's private requirement was not prefetched") + self.assertEqual((example / "go.sum").read_bytes(), before, "Go 1.27 prefetch pruned source checksums") + + def test_go_prefetch_rejects_mutation_of_committed_checksums(self): + sha = self.commit_fixture("Logging-System", { + "go.mod": f"module {MODULE}\n\ngo 1.25\n", "logging.go": "package logging\nconst Value = 42\n"}) + (self.checkout / "go.mod").write_text( + f"module fixture\n\ngo 1.25\n\nrequire {MODULE} v0.0.0-20260102030405-{sha[:12]}\n") + (self.checkout / "go.sum").write_text("") + result = self.run_phase("Prefetch Go modules without executing candidate code") + self.assertNotEqual(result.returncode, 0, "private acquisition silently rewrote committed checksums") + self.assertTrue("modified a committed Go dependency file" in result.stderr or "missing go.sum" in result.stderr, + result.stderr) + + def test_rdm_composition_lock_fetches_fixed_dev_without_executing_code(self): + dev = self.commit_fixture("Agent-System-Dev", {"should-not-run.py": "raise RuntimeError('candidate executed')\n"}) + (self.checkout / "composition.dev.json").write_text(json.dumps({ + "schema": 1, "repo": SSH + "Agent-System-Dev.git", "commit": dev})) + result = self.run_phase("Prefetch fixed Dev product composition", + workflow=fixture.component_workflow("Agent-System-RDM")) + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + self.assertEqual(self.git(self.checkout / ".ci-composition-dev", "rev-parse", "HEAD"), dev) + for path, auth in self.requests: + self.assertRegex(path, r"^/weichen/Agent-System-Dev\.git/") + self.assertEqual(auth, "token " + SUB_TOKEN) + self.assertNotIn(SUB_TOKEN, result.stdout + result.stderr) + + def test_rdm_composition_lock_rejects_external_missing_and_malformed_commits(self): + for lock in ({"schema": 1, "repo": self.url + "/untrusted/receiver", "commit": "a" * 40}, + {"schema": 1, "repo": SSH + "Agent-System-Dev.git"}, + {"schema": 1, "repo": SSH + "Agent-System-Dev.git", "commit": "main"}): + with self.subTest(lock=lock): + (self.checkout / "composition.dev.json").write_text(json.dumps(lock)) + result = self.run_phase("Prefetch fixed Dev product composition", + workflow=fixture.component_workflow("Agent-System-RDM")) + self.assertNotEqual(result.returncode, 0) + self.assertFalse(self.requests) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_svc_build_cutover.py b/tests/test_svc_build_cutover.py new file mode 100644 index 00000000..dbf2fb5d --- /dev/null +++ b/tests/test_svc_build_cutover.py @@ -0,0 +1,138 @@ +"""Source adapters exercise real Git/Go/npm builds without starting services.""" +import json +import os +from pathlib import Path +import shutil +import subprocess +import unittest +import zipfile +import test_composition + +SOURCE = Path(__file__).resolve().parents[1] + + +@unittest.skipUnless(all(shutil.which(command) for command in ("git", "go", "node", "npm")), "Git/Go/Node/npm required") +class SvcBuildCutoverTests(unittest.TestCase): + def setUp(self): + self.fixture = test_composition.CompositionTests(methodName="runTest") + self.fixture.setUp() + self.addCleanup(self.fixture.doCleanups) + self.base, self.root, self.env = self.fixture.base, self.fixture.root, self.fixture.env + self.env = self.env.copy() + for key in ("COMPOSITION_ROOT", "DEV_ROOT", "COMPOSITION_SOURCE_MAP"): + self.env.pop(key, None) + (self.root / "scripts/workspace").mkdir(parents=True) + shutil.copy2(SOURCE / "scripts/build-composition.py", self.root / "scripts/build-composition.py") + shutil.copy2(SOURCE / "scripts/workspace/transport.py", self.root / "scripts/workspace/transport.py") + (self.root / ".gitignore").write_text("bin/\nprivate/\n") + (self.root / "Makefile").write_text("build frontend:\n\tpython3 scripts/build-composition.py --root . --target $@\n") + self.sha = self.fixture.commit(self.root) + self.cache = self.base / "cache" + self.call(self.base, "git", "clone", str(self.root), str(self.cache)) + self.runtime = self.base / "runtime" + self.runtime.mkdir() + wrappers = self.base / "tools" + wrappers.mkdir() + git = shutil.which("git") + (wrappers / "git").write_text('#!/usr/bin/env bash\nfor arg in "$@"; do if [ "$arg" = submodule ]; then echo "recursive submodule acquisition forbidden" >&2; exit 63; fi; done\nexec ' + git + ' "$@"\n') + (wrappers / "git").chmod(0o755) + self.env["PATH"] = str(wrappers) + os.pathsep + self.env["PATH"] + + def call(self, cwd, *args, check=True, env=None): + result = subprocess.run(args, cwd=cwd, env=env or self.env, text=True, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, timeout=120) + if check: + self.assertEqual(result.returncode, 0, result.stdout) + return result + + def adapter(self, commands, check=True, env=None): + code = 'source "$1"\nROOT="$2"; SRC_DIR="$3"; RUNTIME="$4"; ENV_NAME=fixture\n' + commands + return self.call(self.base, "bash", "-c", code, "cutover", str(SOURCE / "scripts/svc.sh"), str(self.root), str(self.cache), str(self.runtime), check=check, env=env) + + def test_versioned_dev_materialization_uses_composer_without_submodules(self): + self.adapter('materialize_dev_commit "' + self.sha + '" dev build') + binary = self.runtime / ".worktrees/dev/bin/agent-system" + self.assertEqual(self.call(self.base, str(binary)).stdout, "immutable-page") + resolved = json.loads((binary.parent / "resolved-manifest.json").read_text()) + self.assertEqual(resolved["root"]["commit"], self.sha) + + def test_versioned_static_adapter_resolves_published_frontend_artifact(self): + self.adapter('wt=$(materialize_dev_commit "' + self.sha + '" frontend frontend)\nsvc_frontend_dist "$wt"') + dist = self.runtime / ".worktrees/frontend/bin/frontend-dist" + self.assertEqual((dist / "index.html").read_text(), "immutable-page") + + def test_mismatched_existing_cache_is_rejected_before_candidate_build(self): + path = self.runtime / ".worktrees/reused" + self.call(self.base, "git", "-C", str(self.cache), "worktree", "add", "--detach", str(path), self.sha) + (self.root / "new-marker").write_text("new candidate\n") + new_sha = self.fixture.commit(self.root) + self.call(self.base, "git", "-C", str(self.cache), "fetch", "origin") + result = self.adapter('materialize_dev_commit "' + new_sha + '" reused build', check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertEqual(self.call(path, "git", "rev-parse", "HEAD").stdout.strip(), self.sha) + self.assertFalse((path / "bin").exists()) + + def test_cache_recycling_preserves_ignored_unique_files(self): + path = self.runtime / ".worktrees/unique" + self.call(self.base, "git", "-C", str(self.cache), "worktree", "add", "--detach", str(path), self.sha) + (path / "private").mkdir() + (path / "private/unique").write_text("owner data\n") + self.adapter('recycle_worktree unique') + self.assertTrue((path / "private/unique").is_file()) + self.assertEqual((path / "private/unique").read_text(), "owner data\n") + + def test_versioned_rdm_adapter_passes_fixed_dev_root_to_product_wrapper(self): + rdm = self.base / "rdm" + rdm.mkdir() + self.call(rdm, "git", "init", "-q", "-b", "main") + self.call(rdm, "git", "config", "user.email", "fixture@example.invalid") + self.call(rdm, "git", "config", "user.name", "Fixture") + version = "v0.0.0-" + self.call(self.fixture.backend, "git", "show", "-s", "--format=%cd", "--date=format-local:%Y%m%d%H%M%S", self.fixture.backend_sha).stdout.strip() + "-" + self.fixture.backend_sha[:12] + proxy = self.base / "proxy/example.com/backend/@v" + proxy.mkdir(parents=True) + (proxy / (version + ".mod")).write_text((self.fixture.backend / "go.mod").read_text()) + (proxy / (version + ".info")).write_text(json.dumps({"Version": version, "Time": "2026-10-13T00:00:00Z"})) + (proxy / "list").write_text(version + "\n") + with zipfile.ZipFile(proxy / (version + ".zip"), "w") as archive: + for relative in self.call(self.fixture.backend, "git", "ls-files").stdout.splitlines(): + archive.write(self.fixture.backend / relative, "example.com/backend@" + version + "/" + relative) + (rdm / "go.mod").write_text("module git-ssh.u1680832.nyat.app/weichen/Agent-System-RDM.git\n\ngo 1.23\nrequire example.com/backend " + version + "\n") + (rdm / "main.go").write_text('package main\nimport("fmt";"example.com/backend/web")\nfunc main(){fmt.Print(web.Page())}\n') + (rdm / "Makefile").write_text('build:\n\t@test -n "$(COMPOSITION_ROOT)"\n\tpython3 "$(COMPOSITION_ROOT)/scripts/build-composition.py" --root "$(COMPOSITION_ROOT)" --target build --rdm-source . --output bin\n\tcp bin/agent-system-rdm-product bin/agent-system-rdm\n') + env = self.env | {"GOPROXY": (self.base / "proxy").as_uri(), "GOMODCACHE": str(self.base / "module-cache")} + self.call(rdm, "go", "mod", "download", "all", env=env) + rdm_sha = self.fixture.commit(rdm) + self.adapter('RDM_SRC_DIR="' + str(rdm) + '"\nmaterialize_rdm_commit "' + rdm_sha + '" rdm', env=env) + binary = self.runtime / ".worktrees/rdm-rdm/bin/agent-system-rdm" + self.assertEqual(self.call(self.base, str(binary)).stdout, "immutable-page") + self.assertEqual(json.loads((binary.parent / "resolved-manifest.json").read_text())["root"]["commit"], self.sha) + + def test_e2e_build_only_uses_versioned_sources_without_runtime_or_api_calls(self): + self.test_versioned_rdm_adapter_passes_fixed_dev_root_to_product_wrapper() + rdm = self.base / "rdm" + rdm_sha = self.call(rdm, "git", "rev-parse", "HEAD").stdout.strip() + self.call(rdm, "git", "update-ref", "refs/remotes/origin/main", rdm_sha) + shutil.copytree(SOURCE / "scripts/workspace", self.root / "scripts/workspace", dirs_exist_ok=True) + for name in ("workspace.py", "component-source.py", "svc.sh", "e2e.sh"): + shutil.copy2(SOURCE / "scripts" / name, self.root / "scripts" / name) + (self.root / ".gitignore").write_text("bin/\nprivate/\n.workspace/\ngo.work\n") + self.fixture.commit(self.root) + curl = self.base / "tools/curl" + curl.write_text('#!/usr/bin/env bash\necho "runtime API must not execute in build-only mode" >&2\nexit 71\n') + curl.chmod(0o755) + output = self.base / "e2e" + env = self.env | {"RDM_REPO": str(rdm), "E2E_OUT": str(output), "GOPROXY": (self.base / "proxy").as_uri(), "GOMODCACHE": str(self.base / "module-cache")} + unrelated = subprocess.Popen(["sleep", "60"]) + self.addCleanup(lambda: (unrelated.terminate(), unrelated.wait()) if unrelated.poll() is None else None) + env.update(API_PID=str(unrelated.pid), UI_PID=str(unrelated.pid)) + result = self.call(self.root, "bash", "scripts/e2e.sh", "--build-only", env=env) + self.assertIsNone(unrelated.poll(), "build-only must not kill inherited process identities") + self.assertIn("runtime/browser/model acceptance NOT_RUN", result.stdout) + self.assertEqual(self.call(self.base, str(output / "agent-system-rdm")).stdout, "immutable-page") + self.assertEqual((self.root / "bin/frontend-dist/index.html").read_text(), "immutable-page") + self.assertFalse((output / "data").exists()) + self.assertFalse((output / "cookies.txt").exists()) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_task_recovery.py b/tests/test_task_recovery.py index 25367c27..e97d6036 100644 --- a/tests/test_task_recovery.py +++ b/tests/test_task_recovery.py @@ -236,5 +236,86 @@ class TaskRecoveryTests(unittest.TestCase): self.assertNotEqual(result.returncode, 0, result.stdout) +class WorkspaceRecoveryTests(unittest.TestCase): + """New-format recovery keeps its branch and fixes startup rule availability.""" + def setUp(self): + import test_workspace_cutover as cutover + self.fixture = cutover.WorkspaceCutoverTests(methodName="runTest") + self.fixture.setUp() + self.addCleanup(self.fixture.doCleanups) + f = self.fixture + f.adopt() + self.wt = f.worktree() + r0 = f.git(self.wt, "rev-parse", "origin/main").stdout.strip() + self.card = self.wt / ".task/feature-old.md" + self.card.parent.mkdir() + self.card.write_text("# Recovery\n任务主记录:fixture;状态:进行中;owner:Cutover Test\n" + f"- 权威仓:fixture;目标分支:main;R0(initial_base_sha)= {r0}\n" + f"- 工作区:{self.wt}(worktree);分支:feature/old\n") + f.git(self.wt, "add", ".task") + f.git(self.wt, "commit", "-m", "Register current task") + self.env = f.env | {"TASK_WORK_MODE": "local"} + + def precheck(self): + return self.fixture.task(self.wt, "precheck", env=self.env, check=False) + + def test_local_recovery_verifies_fixed_rules_without_sync_or_application_materialization(self): + f = self.fixture + head = f.git(self.wt, "rev-parse", "HEAD").stdout + (f.repo / "new-main").write_text("main advanced\n") + f.git(f.repo, "add", "new-main") + f.git(f.repo, "commit", "-m", "Advance main") + f.git(f.repo, "push", "origin", "main") + result = self.precheck() + self.assertEqual(result.returncode, 0, result.stdout) + self.assertIn("[verdict] LOCAL_READY", result.stdout) + self.assertIn("[rules]", result.stdout) + self.assertNotIn("[verdict] READY", result.stdout) + self.assertEqual(f.git(self.wt, "rev-parse", "HEAD").stdout, head) + self.assertFalse((self.wt / ".workspace").exists()) + + def test_local_recovery_refuses_missing_fixed_rules_before_readiness(self): + f = self.fixture + lock = self.wt / "components.lock.json" + record = json.loads(lock.read_text()) + record["components"]["Rules"]["commit"] = "0" * 40 + lock.write_text(json.dumps(record)) + f.git(self.wt, "commit", "-am", "Pin unavailable rules") + before = self.card.read_bytes() + result = self.precheck() + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertNotIn("[verdict] LOCAL_READY", result.stdout) + self.assertEqual(self.card.read_bytes(), before) + self.assertFalse((self.wt / ".workspace").exists()) + + def test_resume_rechecks_fixed_rules_before_importing_receipt(self): + f = self.fixture + receipt = f.base / "resume.json" + f.call(self.wt, "bash", "scripts/evidence.sh", env=self.env | {"RECEIPT": str(receipt), "CMD": "make precheck"}) + # The cache is not an application overlay; a changed rule source cannot + # turn a formerly valid local precheck into current startup authority. + rules = list((f.base / "cache").rglob("core/baseline.md")) + self.assertTrue(rules, "fixed startup rules were never prepared") + rules[0].write_text("owner changed rules\n") + before = self.card.read_bytes() + result = f.task(self.wt, "resume", env=self.env | {"PRECHECK_RECEIPT": str(receipt)}, check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertNotIn("[resumed]", result.stdout) + self.assertEqual(self.card.read_bytes(), before) + self.assertEqual(rules[0].read_text(), "owner changed rules\n") + + def test_local_resume_preserves_registered_edit_branch_and_unsaved_component(self): + f = self.fixture + f.workspace(self.wt, "edit", "--name", "App", "--branch", "feature/component-owner") + child = self.wt / ".workspace/App" + (child / "content").write_text("preserve author edit\n") + receipt = f.base / "resume-edit.json" + f.call(self.wt, "bash", "scripts/evidence.sh", env=self.env | {"RECEIPT": str(receipt), "CMD": "make precheck"}) + result = f.task(self.wt, "resume", env=self.env | {"PRECHECK_RECEIPT": str(receipt)}) + self.assertIn("[resumed]", result.stdout) + self.assertEqual((child / "content").read_text(), "preserve author edit\n") + self.assertEqual(f.git(child, "branch", "--show-current").stdout.strip(), "feature/component-owner") + + if __name__ == "__main__": unittest.main() diff --git a/tests/test_transport.py b/tests/test_transport.py new file mode 100644 index 00000000..bb50b024 --- /dev/null +++ b/tests/test_transport.py @@ -0,0 +1,138 @@ +import importlib.util +import json +import os +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' + +class TransportTests(unittest.TestCase): + def load(self): + self.assertTrue(SCRIPT.is_file(), 'process-scoped module transport is required') + spec = importlib.util.spec_from_file_location('workspace_transport', SCRIPT) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + def test_remote_revision_download_without_global_git_change(self): + transport = self.load() + with tempfile.TemporaryDirectory() as td: + root = Path(td) + source = root / 'provider' + source.mkdir() + subprocess.run(['git', 'init', '-q', str(source)], check=True) + subprocess.run(['git', '-C', str(source), 'config', 'user.name', 'Fixture'], check=True) + subprocess.run(['git', '-C', str(source), 'config', 'user.email', 'fixture@example.test'], check=True) + (source / 'go.mod').write_text('module example.test/provider.git\n\ngo 1.27\n') + (source / 'answer.go').write_text('package provider\nfunc Answer() int { return 42 }\n') + subprocess.run(['git', '-C', str(source), 'add', 'go.mod', 'answer.go'], check=True) + subprocess.run(['git', '-C', str(source), 'commit', '-qm', 'Add provider'], check=True) + sha = subprocess.check_output(['git', '-C', str(source), 'rev-parse', 'HEAD'], text=True).strip() + (root / 'components.json').write_text(json.dumps({'schema': 1, 'components': [], 'transport': { + 'go_private': ['example.test'], 'git_rewrites': [{'from': 'https://example.test/provider', 'to': source.as_uri()}]}})) + consumer = root / 'consumer' + consumer.mkdir() + (consumer / 'go.mod').write_text('module example.test/consumer\n\ngo 1.27\n') + env = transport.environment(root) + env['GOMODCACHE'] = str(root / 'module-cache') + before = subprocess.run(['git', 'config', '--global', '--list'], capture_output=True).stdout + result = subprocess.run(['go', 'get', 'example.test/provider.git@' + sha], cwd=consumer, env=env, capture_output=True, text=True) + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + (consumer / 'consumer_test.go').write_text('package consumer\nimport("testing"; "example.test/provider.git")\nfunc TestValue(t *testing.T) { if provider.Answer()!=42 { t.Fatal("wrong provider") } }\n') + result = subprocess.run(['go', 'test', '-mod=readonly', './...'], cwd=consumer, env=env, capture_output=True, text=True) + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + after = subprocess.run(['git', 'config', '--global', '--list'], capture_output=True).stdout + self.assertEqual(before, after) + self.assertNotIn('replace ', (consumer / 'go.mod').read_text()) + + def test_credentials_in_transport_url_are_rejected(self): + transport = self.load() + with tempfile.TemporaryDirectory() as td: + root = Path(td) + (root / 'components.json').write_text(json.dumps({'transport': {'git_rewrites': [ + {'from': 'https://example.test/', 'to': 'https://secret-token@example.test/'}]}})) + 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)) + + def test_injected_http_server_maps_to_verified_local_mirror_without_authentication(self): + transport = self.load() + with tempfile.TemporaryDirectory() as td: + root = Path(td) + mirrors = root / 'mirrors' + mirrors.mkdir() + target = mirrors / 'Provider.git' + subprocess.run(['git', 'init', '--bare', '-q', str(target)], check=True) + (root / 'components.json').write_text(json.dumps({'transport': {'git_rewrites': [ + {'from': 'https://code.example/weichen/Provider', 'to': 'ssh://git@code.example:31411/weichen/Provider.git'}]}})) + origin = 'http://127.0.0.1:3000/weichen/Provider.git' + inherited = {'CI_DEPENDENCY_MIRRORS': str(mirrors), 'GITHUB_SERVER_URL': 'http://127.0.0.1:3000', + 'GITHUB_REPOSITORY': 'weichen/Dev', 'GIT_CONFIG_COUNT': '3', + 'GIT_CONFIG_KEY_0': f'url.{target.as_uri()}.insteadOf', 'GIT_CONFIG_VALUE_0': origin, + 'GIT_CONFIG_KEY_1': 'protocol.file.allow', 'GIT_CONFIG_VALUE_1': 'always', + 'GIT_CONFIG_KEY_2': 'http.http://127.0.0.1:3000/.extraheader', + 'GIT_CONFIG_VALUE_2': 'AUTHORIZATION: token synthetic-private'} + before = subprocess.run(['git', 'config', '--global', '--list'], capture_output=True).stdout + 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', origin), pairs) + self.assertFalse(any('extraheader' in key or 'synthetic-private' in value for key, value in pairs)) + cloned = subprocess.run(['git', 'clone', '--no-checkout', origin, str(root / 'cloned')], env=env, capture_output=True, text=True) + self.assertEqual(cloned.returncode, 0, cloned.stdout + cloned.stderr) + after = subprocess.run(['git', 'config', '--global', '--list'], capture_output=True).stdout + self.assertEqual(before, after) + + def test_inherited_http_source_must_match_injected_server_owner_and_repository(self): + transport = self.load() + with tempfile.TemporaryDirectory() as td: + root = Path(td) + mirrors = root / 'mirrors' + mirrors.mkdir() + target = mirrors / 'Provider.git' + target.mkdir() + (root / 'components.json').write_text(json.dumps({'transport': {'git_rewrites': [ + {'from': 'https://code.example/Provider', 'to': 'ssh://git@code.example:31411/Provider.git'}]}})) + inherited = {'CI_DEPENDENCY_MIRRORS': str(mirrors), 'GITHUB_SERVER_URL': 'http://127.0.0.1:3000', + 'GITHUB_REPOSITORY': 'weichen/Dev', 'GIT_CONFIG_COUNT': '1', + 'GIT_CONFIG_KEY_0': f'url.{target.as_uri()}.insteadOf'} + for source in ['http://foreign.test/weichen/Provider.git', 'http://127.0.0.1:3000/other/Provider.git', + 'http://127.0.0.1:3000/weichen/Other.git', 'http://user:password@127.0.0.1:3000/weichen/Provider.git']: + with self.subTest(source=source), patch.dict(os.environ, inherited | {'GIT_CONFIG_VALUE_0': source}): + with self.assertRaises(ValueError): + transport.environment(root) + + def test_ordinary_config_cannot_enable_http_transport(self): + transport = self.load() + with tempfile.TemporaryDirectory() as td: + root = Path(td) + (root / 'components.json').write_text(json.dumps({'transport': {'git_rewrites': [ + {'from': 'http://127.0.0.1:3000/weichen/Provider.git', 'to': 'file:///tmp/mirrors/Provider.git'}]}})) + with self.assertRaises(ValueError): + transport.environment(root) + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_workspace.py b/tests/test_workspace.py new file mode 100644 index 00000000..e0b98bba --- /dev/null +++ b/tests/test_workspace.py @@ -0,0 +1,823 @@ +"""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 +from unittest.mock import patch +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_partial_nested_transition_keeps_originals_and_owner_recovery_state(self): + legacy, errors, logging = self.nested_legacy() + self.git(errors, "checkout", "-b", "feature/partial-source") + (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("ignored owner data") + external = self.base / "external-owner" + self.git(errors, "worktree", "add", "--detach", str(external), "HEAD") + originals = {str(path): self.fingerprint(path) for path in (legacy, errors, logging, external)} + metadata = {str(path): self.git_metadata(path) for path in (legacy, errors, logging)} + sys.path.insert(0, str(SOURCE / "scripts")) + self.addCleanup(sys.path.remove, str(SOURCE / "scripts")) + from workspace.cli import main + copy = shutil.copy2 + copied = [] + def interrupt(source, destination, *args, **kwargs): + result = copy(source, destination, *args, **kwargs) + if Path(source).is_relative_to(logging): + copied.append(str(source)) + raise OSError("injected partial nested copy failure") + return result + with patch.dict(os.environ, self.env, clear=True), patch("workspace.transition.shutil.copy2", side_effect=interrupt): + result = main(["--root", str(self.root), "transition", "--name", "App", "--apply"]) + self.assertNotEqual(result, 0) + self.assertTrue(copied) + state = self.state()["components"] + self.assertEqual(state["App"]["mode"], "editable") + # Errors has not been copied when Logging fails; its complete original + # index/worktree/ignored data is still the owner's recovery source. + self.assertIn("staged", self.git(errors, "show", ":value.go").stdout) + self.assertIn("working", (errors / "value.go").read_text()) + self.assertEqual((errors / "private/unique").read_text(), "ignored owner data") + partial = self.root / ".workspace/Logging" + self.assertTrue((partial / ".git").is_dir()) + self.assertIn("partial nested copy", state["Logging"]["error"]) + self.assertNotEqual(self.cli("transition", "--name", "App", "--apply", check=False).returncode, 0) + self.assertTrue(partial.exists(), "owner recovery data must not be removed on retry") + for path in (legacy, errors, logging, external): + self.assertEqual(self.fingerprint(path), originals[str(path)]) + for path in (legacy, errors, logging): + self.assertEqual(self.git_metadata(path), metadata[str(path)]) + + 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 git_metadata(self, path): + common = Path(self.git(path, "rev-parse", "--path-format=absolute", "--git-common-dir").stdout.strip()) + return {str(file.relative_to(common)): hashlib.sha256(file.read_bytes()).hexdigest() + for file in common.rglob("*") if file.is_file()} + + def preserved_source_refs(self, path): + output = self.git(path, "for-each-ref", "--format=%(refname) %(objectname)", "refs/migration/sources/").stdout + return dict(row.split() for row in output.splitlines()) + + def test_repeated_transition_keeps_alias_tag_versions_and_snapshot_history(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") + self.git(logging, "commit", "-am", "Add equivalent dependency alias") + self.git(legacy, "add", "deps/logging") + self.git(legacy, "commit", "-m", "Pin alias source") + alias = logging / "deps/errors" + self.git(alias, "tag", "-a", "alias-note", "-m", "First unique alias annotation") + first_tag = self.git(alias, "rev-parse", "refs/tags/alias-note").stdout.strip() + self.cli("transition", "--name", "App", "--apply") + clone = self.root / ".workspace/Errors" + saved_refs = self.preserved_source_refs(clone) + self.assertIn(first_tag, saved_refs.values()) + saved_snapshots = self.state()["components"]["Errors"]["legacy_snapshots"] + self.git(alias, "tag", "-f", "-a", "alias-note", "-m", "Second unique alias annotation") + second_tag = self.git(alias, "rev-parse", "refs/tags/alias-note").stdout.strip() + self.assertNotEqual(first_tag, second_tag) + original = {str(path): self.git_metadata(path) for path in (legacy, errors, logging, alias)} + self.cli("transition", "--name", "App", "--apply") + current_refs = self.preserved_source_refs(clone) + self.assertEqual({name: current_refs.get(name) for name in saved_refs}, saved_refs, + "a new source snapshot must not overwrite any previous preserved reference") + self.assertIn(second_tag, current_refs.values()) + history = self.state()["components"]["Errors"]["legacy_snapshots"] + for snapshot in saved_snapshots: + self.assertIn(snapshot, history, "prior captured metadata must remain available") + # This object was present only through the secondary alias's annotated tag. + # Disposable GC proves it remains reachable after the source tag moves. + self.git(clone, "reflog", "expire", "--expire=now", "--all") + self.git(clone, "gc", "--prune=now") + self.assertEqual(self.git(clone, "cat-file", "-t", first_tag).stdout.strip(), "tag") + self.assertEqual(self.git(clone, "cat-file", "-t", second_tag).stdout.strip(), "tag") + for path in (legacy, errors, logging, alias): + self.assertEqual(self.git_metadata(path), original[str(path)]) + + def test_repeated_transition_preserves_dirty_index_ignored_and_external_git_metadata(self): + legacy = self.legacy() + self.git(legacy, "checkout", "-b", "feature/legacy") + (legacy / "content").write_text("staged source\n") + self.git(legacy, "add", "content") + (legacy / "content").write_text("working source\n") + (legacy / "private").mkdir() + (legacy / "private/unique").write_text("ignored source\n") + external = self.base / "external-owner" + self.git(legacy, "worktree", "add", "-b", "feature/external", str(external)) + (external / "content").write_text("external owner work\n") + metadata = self.git_metadata(legacy) + self.cli("transition", "--name", "App", "--apply") + clone = self.root / ".workspace/App" + refs = self.preserved_source_refs(clone) + self.cli("transition", "--name", "App", "--apply") + self.assertEqual(self.git(clone, "show", ":content").stdout, "staged source\n") + self.assertEqual((clone / "content").read_text(), "working source\n") + self.assertEqual((clone / "private/unique").read_text(), "ignored source\n") + self.assertEqual((external / "content").read_text(), "external owner work\n") + self.assertEqual(self.git_metadata(legacy), metadata) + self.assertEqual(self.preserved_source_refs(clone), refs) + # A unique destination file belongs to its current owner and blocks reuse. + (clone / "private/new-owner-file").write_text("new workspace work\n") + state_before = (self.root / ".workspace/state.json").read_bytes() + result = self.cli("transition", "--name", "App", "--apply", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertIn("conflicting duplicate destination", result.stdout) + self.assertEqual((clone / "private/new-owner-file").read_text(), "new workspace work\n") + self.assertEqual((self.root / ".workspace/state.json").read_bytes(), state_before) + self.assertEqual(self.git_metadata(legacy), metadata) + + def test_repeated_transition_rejects_a_new_source_head_without_switching_destination(self): + legacy = self.legacy() + self.cli("transition", "--name", "App", "--apply") + clone = self.root / ".workspace/App" + refs = self.preserved_source_refs(clone) + state_before = (self.root / ".workspace/state.json").read_bytes() + (legacy / "content").write_text("new legacy head\n") + self.git(legacy, "commit", "-am", "Advance original owner branch") + new_head = self.git(legacy, "rev-parse", "HEAD").stdout.strip() + original_metadata = self.git_metadata(legacy) + result = self.cli("transition", "--name", "App", "--apply", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertIn("conflicting duplicate destination", result.stdout) + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), self.first) + self.assertEqual(self.git(legacy, "rev-parse", "HEAD").stdout.strip(), new_head) + self.assertEqual(self.preserved_source_refs(clone), refs) + self.assertEqual((self.root / ".workspace/state.json").read_bytes(), state_before) + self.assertEqual(self.git_metadata(legacy), original_metadata) + + 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 advance_app_lock(self): + (self.author / "content").write_text("updated locked version\n") + counter = self.author / "revision-counter" + counter.write_text((counter.read_text() if counter.exists() else "") + "next\n") + self.git(self.author, "add", "revision-counter") + self.git(self.author, "commit", "-am", "Advance fixed source") + self.git(self.author, "push", "origin", "main") + head = self.git(self.author, "rev-parse", "HEAD").stdout.strip() + self.lock["components"]["App"]["commit"] = head + self.save_manifest() + return head + + def test_explicit_fixed_refresh_preserves_old_commit_refs_and_reflog(self): + self.cli("prepare") + clone = self.root / ".workspace/App" + refs_before = self.git(clone, "for-each-ref", "--format=%(refname) %(objectname)").stdout.splitlines() + reflog_before = self.git(clone, "reflog", "--format=%H", "HEAD").stdout.splitlines() + head = self.advance_app_lock() + self.cli("prepare", "--name", "App", "--refresh-fixed") + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), head) + self.assertEqual(self.git(clone, "branch", "--show-current").stdout, "") + self.assertEqual((clone / "content").read_text(), "updated locked version\n") + self.assertEqual(self.state()["components"]["App"]["baseline"], head) + for row in refs_before: + self.assertIn(row, self.git(clone, "for-each-ref", "--format=%(refname) %(objectname)").stdout.splitlines()) + for row in reflog_before: + self.assertIn(row, self.git(clone, "reflog", "--format=%H", "HEAD").stdout.splitlines()) + history = self.state()["components"]["App"]["previous_sources"] + self.assertEqual(history[0]["commit"], self.first) + self.assertEqual(self.git(clone, "rev-parse", history[0]["ref"]).stdout.strip(), self.first) + self.cli("prepare", "--name", "App", "--refresh-fixed") + self.assertEqual(len(self.state()["components"]["App"]["previous_sources"]), 1) + + def test_explicit_fixed_refresh_refuses_dirty_ignored_edited_and_locked_sources(self): + self.cli("prepare") + clone = self.root / ".workspace/App" + self.advance_app_lock() + state_before = (self.root / ".workspace/state.json").read_bytes() + (clone / "content").write_text("unsaved owner change\n") + self.assertNotEqual(self.cli("prepare", "--refresh-fixed", check=False).returncode, 0) + self.assertEqual((clone / "content").read_text(), "unsaved owner change\n") + (clone / "content").write_text("first\n") + (clone / "private").mkdir() + (clone / "private/unique").write_text("ignored owner data\n") + self.assertNotEqual(self.cli("prepare", "--refresh-fixed", check=False).returncode, 0) + self.assertEqual((clone / "private/unique").read_text(), "ignored owner data\n") + (clone / "private/unique").unlink() + (clone / "private").rmdir() + lock = clone / ".git/index.lock" + lock.write_text("another Git owner\n") + self.assertNotEqual(self.cli("prepare", "--refresh-fixed", check=False).returncode, 0) + self.assertEqual(lock.read_text(), "another Git owner\n") + lock.unlink() + self.assertEqual((self.root / ".workspace/state.json").read_bytes(), state_before) + self.lock["components"]["App"]["commit"] = self.first + self.save_manifest() + self.cli("edit", "--name", "App", "--branch", "feature/owner") + self.advance_app_lock() + result = self.cli("prepare", "--refresh-fixed", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertEqual(self.git(clone, "branch", "--show-current").stdout.strip(), "feature/owner") + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), self.first) + + def test_explicit_fixed_refresh_refuses_shared_or_unregistered_ownership(self): + self.cli("prepare") + clone = self.root / ".workspace/App" + self.advance_app_lock() + external = self.base / "fixed-external-owner" + self.git(clone, "worktree", "add", "-b", "feature/external", str(external)) + (external / "unique").write_text("external owner data\n") + result = self.cli("prepare", "--refresh-fixed", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), self.first) + self.assertEqual((external / "unique").read_text(), "external owner data\n") + (external / "unique").unlink() + self.git(clone, "worktree", "remove", str(external)) + data = self.state() + data["components"].pop("App") + (self.root / ".workspace/state.json").write_text(json.dumps(data)) + result = self.cli("prepare", "--refresh-fixed", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), self.first) + + def test_failed_explicit_fixed_refresh_keeps_old_binding_and_can_retry(self): + self.cli("prepare") + clone = self.root / ".workspace/App" + self.lock["components"]["App"]["commit"] = "a" * 40 + self.save_manifest() + result = self.cli("prepare", "--refresh-fixed", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertEqual(self.state()["components"]["App"]["baseline"], self.first) + self.assertEqual(self.state()["components"]["App"]["mode"], "versioned") + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), self.first) + head = self.advance_app_lock() + self.cli("prepare", "--refresh-fixed") + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), head) + + def test_explicit_fixed_refresh_refuses_index_flags_hiding_owner_changes(self): + self.cli("prepare") + clone = self.root / ".workspace/App" + self.git(clone, "update-index", "--skip-worktree", "content") + (clone / "content").write_text("hidden owner change\n") + self.advance_app_lock() + result = self.cli("prepare", "--refresh-fixed", check=False) + self.assertNotEqual(result.returncode, 0) + self.assertEqual(self.git(clone, "rev-parse", "HEAD").stdout.strip(), self.first) + self.assertEqual((clone / "content").read_text(), "hidden owner change\n") + + 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() diff --git a/tests/test_workspace_cutover.py b/tests/test_workspace_cutover.py new file mode 100644 index 00000000..0c73434b --- /dev/null +++ b/tests/test_workspace_cutover.py @@ -0,0 +1,403 @@ +"""Task cutover protections with real repositories, gitlinks and worktrees.""" +import json +import os +from pathlib import Path +import shutil +import subprocess +import tempfile +import unittest + +SOURCE = Path(__file__).resolve().parents[1] + + +class WorkspaceCutoverTests(unittest.TestCase): + def setUp(self): + self.tmp = tempfile.TemporaryDirectory(prefix="workspace-cutover-") + self.addCleanup(self.tmp.cleanup) + self.base = Path(self.tmp.name) + self.repo = self.base / "repo" + 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", "PRECHECK_RECEIPT", "RECEIPT", "CMD", "IMPORT_RECEIPT", "COMPOSITION_SOURCE_MAP", "CI_DEPENDENCY_MIRRORS"): + 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": "Cutover Test", "GIT_AUTHOR_EMAIL": "test@example.invalid", + "GIT_COMMITTER_NAME": "Cutover Test", "GIT_COMMITTER_EMAIL": "test@example.invalid", + "XDG_CACHE_HOME": str(self.base / "cache")}) + self.call(self.base, "git", "init", "--initial-branch=main", str(self.repo)) + shutil.copytree(SOURCE / "scripts", self.repo / "scripts") + (self.repo / "Makefile").write_text("precheck:\n\t@bash scripts/task.sh precheck\n") + (self.repo / ".gitignore").write_text(".workspace/\ngo.work\ngo.work.sum\nmodules/\n") + (self.repo / "tracked").write_text("root\n") + self.git(self.repo, "add", ".") + self.git(self.repo, "commit", "-m", "Old project") + self.remote = self.base / "project.git" + self.call(self.base, "git", "init", "--bare", "--initial-branch=main", str(self.remote)) + self.git(self.remote, "config", "gc.auto", "0") + self.git(self.remote, "config", "receive.autogc", "false") + self.git(self.repo, "remote", "add", "origin", str(self.remote)) + self.git(self.repo, "push", "-u", "origin", "main") + self.app, self.app_sha = self.component("App", {"content": "app v1\n", ".gitignore": "private/\n"}) + self.rules, self.rules_sha = self.component("Rules", {"core/baseline.md": "# Baseline\n", "workflows/delivery.md": "# Delivery\n"}) + + def call(self, cwd, *args, check=True, env=None): + result = subprocess.run(args, cwd=cwd, env=env or self.env, text=True, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, timeout=60) + if check: + self.assertEqual(result.returncode, 0, result.stdout) + return result + + def git(self, cwd, *args, **kwargs): + return self.call(cwd, "git", *args, **kwargs) + + def task(self, cwd, command, *args, **kwargs): + return self.call(cwd, "bash", str(cwd / "scripts/task.sh"), command, *args, **kwargs) + + def component(self, name, files): + path = self.base / name + self.call(self.base, "git", "init", "--initial-branch=main", str(path)) + for relative, content in files.items(): + target = path / relative + target.parent.mkdir(parents=True, exist_ok=True) + target.write_text(content) + self.git(path, "add", ".") + self.git(path, "commit", "-m", name + " v1") + return path, self.git(path, "rev-parse", "HEAD").stdout.strip() + + def adopt(self): + records = [{"id": name, "repo": str(path), "path": ".workspace/" + name, + "legacy_path": "modules/" + name, "role": role, "modules": [], "target": "main"} + for name, path, role in (("App", self.app, "application"), ("Rules", self.rules, "guidelines"))] + (self.repo / "components.json").write_text(json.dumps({"schema": 1, "components": records})) + (self.repo / "components.lock.json").write_text(json.dumps({"schema": 1, "components": {"App": {"commit": self.app_sha}, "Rules": {"commit": self.rules_sha}}})) + self.git(self.repo, "add", "components.json", "components.lock.json") + self.git(self.repo, "commit", "-m", "Adopt source manifests") + self.git(self.repo, "push", "origin", "main") + + def worktree(self, name="feature/old"): + path = self.base / "task" + self.git(self.repo, "worktree", "add", "-b", name, str(path), "origin/main") + return path + + def workspace(self, root, *args): + return self.call(root, "python3", "scripts/workspace.py", "--root", str(root), *args) + + def test_precheck_prepares_fixed_rules_outside_project_before_ready(self): + self.adopt() + result = self.task(self.repo, "precheck") + self.assertIn("[verdict] READY", result.stdout) + self.assertFalse((self.repo / ".workspace").exists()) + self.assertIn("[rules]", result.stdout) + reading = next(line for line in result.stdout.splitlines() if line.startswith("[rules]")) + self.assertIn(self.rules_sha, reading) + self.assertTrue(list((self.base / "cache").rglob("core/baseline.md"))) + self.assertTrue(list((self.base / "cache").rglob("workflows/delivery.md"))) + + def test_precheck_never_claims_ready_for_unavailable_fixed_rules(self): + self.adopt() + (self.rules / "core/baseline.md").unlink() + self.git(self.rules, "commit", "-am", "Rules missing baseline") + document = json.loads((self.repo / "components.lock.json").read_text()) + document["components"]["Rules"]["commit"] = self.git(self.rules, "rev-parse", "HEAD").stdout.strip() + (self.repo / "components.lock.json").write_text(json.dumps(document)) + self.git(self.repo, "commit", "-am", "Pin invalid rules") + self.git(self.repo, "push", "origin", "main") + result = self.task(self.repo, "precheck", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertNotIn("[verdict] READY", result.stdout) + self.assertFalse((self.repo / ".workspace").exists()) + + def test_start_prepares_fixed_sources_without_recursive_submodule_init(self): + nested, _ = self.component("Nested", {"value": "nested\n"}) + self.git(self.app, "submodule", "add", str(nested), "deps/Nested") + self.git(self.app, "commit", "-am", "Pin nested source") + self.app_sha = self.git(self.app, "rev-parse", "HEAD").stdout.strip() + self.adopt() + receipt = self.base / "precheck.json" + self.call(self.repo, "bash", "scripts/evidence.sh", env=self.env | {"RECEIPT": str(receipt), "CMD": "make precheck"}) + self.task(self.repo, "start", "feature/new", env=self.env | {"PRECHECK_RECEIPT": str(receipt)}) + wt = self.base / "repo-wt-feature-new" + self.assertTrue((wt / ".workspace/App/.git").is_dir(), "fixed App checkout is missing") + self.assertEqual(self.git(wt / ".workspace/App", "rev-parse", "HEAD").stdout.strip(), self.app_sha) + self.assertEqual(self.git(wt / ".workspace/Rules", "rev-parse", "HEAD").stdout.strip(), self.rules_sha) + self.assertFalse((wt / ".workspace/App/deps/Nested/.git").exists()) + self.assertTrue((wt / ".task/feature-new.md").exists()) + + def test_old_task_sync_adopts_new_sources_and_reports_explicit_transition(self): + self.git(self.repo, "-c", "core.excludesfile=/dev/null", "submodule", "add", "--force", str(self.app), "modules/App") + self.git(self.repo, "commit", "-m", "Pin old source") + self.git(self.repo, "push", "origin", "main") + wt = self.worktree() + self.git(wt, "submodule", "update", "--init") + legacy = wt / "modules/App" + self.git(legacy, "switch", "-c", "feature/owned") + before = self.git(legacy, "show-ref").stdout + self.git(self.repo, "rm", "--cached", "modules/App") + self.git(self.repo, "rm", ".gitmodules") + self.git(self.repo, "commit", "-m", "Retire gitlink without removing checkout") + self.adopt() + result = self.task(wt, "sync") + self.assertIn("[transition]", result.stdout) + self.assertEqual(self.git(legacy, "show-ref").stdout, before) + self.assertEqual(self.git(legacy, "branch", "--show-current").stdout.strip(), "feature/owned") + self.assertTrue((wt / ".workspace/App/.git").is_dir()) + self.assertEqual((legacy / "content").read_text(), "app v1\n") + + def test_sync_preserves_edit_branch_and_refuses_changed_declared_source(self): + self.adopt() + wt = self.worktree() + self.workspace(wt, "edit", "--name", "App", "--branch", "feature/owned") + edited = wt / ".workspace/App" + (edited / "content").write_text("local unsaved\n") + self.task(wt, "sync") + (self.app / "content").write_text("app v2\n") + self.git(self.app, "commit", "-am", "App v2") + lock = json.loads((self.repo / "components.lock.json").read_text()) + lock["components"]["App"]["commit"] = self.git(self.app, "rev-parse", "HEAD").stdout.strip() + (self.repo / "components.lock.json").write_text(json.dumps(lock)) + self.git(self.repo, "commit", "-am", "Update application lock") + self.git(self.repo, "push", "origin", "main") + result = self.task(wt, "sync", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertNotIn("[synced]", result.stdout) + self.assertEqual((edited / "content").read_text(), "local unsaved\n") + self.assertEqual(self.git(edited, "branch", "--show-current").stdout.strip(), "feature/owned") + + def test_finish_preserves_external_worktree_of_retired_legacy_checkout(self): + self.adopt() + wt = self.worktree() + legacy = wt / "modules/App" + self.git(wt, "clone", str(self.app), str(legacy)) + external = self.base / "external" + self.git(legacy, "worktree", "add", "-b", "feature/external", str(external)) + (external / "content").write_text("external unique\n") + self.git(external, "add", "content") + before = self.git(external, "status", "--porcelain").stdout + result = self.task(wt, "finish", check=False, env=self.env | {"TASK_WRITERS_STOPPED": "1"}) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("registered component worktree", result.stdout) + self.assertEqual(self.git(external, "status", "--porcelain").stdout, before) + self.assertEqual((external / "content").read_text(), "external unique\n") + self.assertTrue(wt.exists()) + + def test_verify_detects_active_git_operation_in_nested_retired_root(self): + self.adopt() + wt = self.worktree() + legacy = wt / "modules/App" + self.git(wt, "clone", str(self.app), str(legacy)) + nested = legacy / "retired/nested" + self.git(wt, "clone", str(self.rules), str(nested)) + lock = nested / ".git/index.lock" + lock.write_text("another writer\n") + result = self.call(wt, "python3", "scripts/check-worktree.py", "verify", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("active Git operation/lock", result.stdout) + self.assertEqual(lock.read_text(), "another writer\n") + + def test_make_workspace_commands_prepare_edit_unlink_and_report(self): + self.adopt() + shutil.copyfile(SOURCE / "Makefile", self.repo / "Makefile") + self.call(self.repo, "make", "workspace-prepare", "NAME=App") + source = self.repo / ".workspace/App" + self.assertEqual((source / "content").read_text(), "app v1\n") + self.call(self.repo, "make", "component-edit", "NAME=App", "BRANCH=feature/from-make") + self.assertEqual(self.git(source, "branch", "--show-current").stdout.strip(), "feature/from-make") + self.call(self.repo, "make", "component-unlink", "NAME=App") + self.assertTrue(source.is_dir()) + status = self.call(self.repo, "make", "workspace-status", "NAME=App") + self.assertIn('"feature/from-make"', status.stdout) + transition = self.call(self.repo, "make", "workspace-transition", "NAME=App") + self.assertIn('"legacy"', transition.stdout) + self.assertFalse((self.repo / "modules/App").exists()) + + def test_finish_preserves_absorbed_metadata_after_legacy_checkout_disappears(self): + self.git(self.repo, "submodule", "add", "--force", str(self.app), "modules/App") + self.git(self.repo, "commit", "-m", "Old gitlink") + self.git(self.repo, "push", "origin", "main") + wt = self.worktree() + self.git(wt, "submodule", "update", "--init") + legacy = wt / "modules/App" + external = self.base / "external" + self.git(legacy, "worktree", "add", "-b", "feature/external", str(external)) + (external / "content").write_text("independent owner\n") + self.git(external, "add", "content") + before = self.git(external, "status", "--porcelain").stdout + self.git(self.repo, "rm", "--cached", "modules/App") + self.git(self.repo, "rm", ".gitmodules") + self.git(self.repo, "commit", "-m", "Remove legacy index entries") + self.adopt() + self.task(wt, "sync") + shutil.rmtree(legacy) # Simulate an absent checkout while its Git metadata remains. + result = self.task(wt, "finish", check=False, env=self.env | {"TASK_WRITERS_STOPPED": "1"}) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("retained metadata", result.stdout) + self.assertEqual(self.git(external, "status", "--porcelain").stdout, before) + self.assertEqual((external / "content").read_text(), "independent owner\n") + + def test_finish_preserves_nonbranch_legacy_refs_without_remote_backup(self): + self.adopt() + wt = self.worktree() + legacy = wt / "modules/App" + self.git(wt, "clone", str(self.app), str(legacy)) + (legacy / "content").write_text("unpublished\n") + self.git(legacy, "commit", "-am", "Unique migration object") + unique = self.git(legacy, "rev-parse", "HEAD").stdout.strip() + self.git(legacy, "update-ref", "refs/migration/unique", unique) + self.git(legacy, "reset", "--hard", "origin/main") + self.git(legacy, "reflog", "expire", "--expire=now", "--all") + result = self.task(wt, "finish", check=False, env=self.env | {"TASK_WRITERS_STOPPED": "1"}) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("unpreserved local refs", result.stdout) + self.assertEqual(self.git(legacy, "rev-parse", "refs/migration/unique").stdout.strip(), unique) + + @unittest.skipUnless(shutil.which("go"), "Go is required for architecture gate") + def test_architecture_gate_preserves_edges_under_workspace_paths_and_new_module_identity(self): + self.adopt() + policy = self.repo / "policy" + policy.mkdir(exist_ok=True) + (policy / "architecture.yaml").write_text("backend:\n root: .workspace/Agent-System-Backend/internal\n import_prefix: git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/\nfrontend:\n root: .workspace/Agent-System-Frontend/src\n groups: components\n") + (policy / "architecture-baseline.json").write_text('["backend/app backend/store"]') + backend = self.repo / ".workspace/Agent-System-Backend" + (backend / "internal/app").mkdir(parents=True) + (backend / "internal/store").mkdir() + (backend / "go.mod").write_text("module git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git\n\ngo 1.23\n") + source = backend / "internal/app/app.go" + source.write_text('package app\nimport _ "git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/store"\n') + (self.repo / ".workspace/Agent-System-Frontend/src").mkdir(parents=True) + self.call(self.repo, "bash", "scripts/lint-architecture.sh") + (backend / "internal/server").mkdir() + source.write_text(source.read_text() + 'import _ "git-ssh.u1680832.nyat.app/weichen/Agent-System-Backend.git/internal/server"\n') + result = self.call(self.repo, "bash", "scripts/lint-architecture.sh", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("backend/app backend/server", result.stdout) + self.assertEqual(json.loads((policy / "architecture-baseline.json").read_text()), ["backend/app backend/store"]) + + @unittest.skipUnless(shutil.which("go"), "Go is required for boundary gates") + def test_boundary_gate_uses_isolated_map_and_rejects_new_backend_internal_import(self): + self.adopt() + names = ("Agent-System-Backend", "Agent-System-Frontend", "Agent-Intent", "Agent-Native", "Agent-Squad") + modules = {name: "git-ssh.u1680832.nyat.app/weichen/" + name + ".git" for name in names} + entries = [{"id": name, "repo": str(self.app), "path": ".workspace/" + name, + "role": "application" if name in names[:2] else "go-library", "modules": [], "target": "main"} for name in names] + (self.repo / "components.json").write_text(json.dumps({"schema": 1, "components": entries})) + (self.repo / "components.lock.json").write_text(json.dumps({"schema": 1, "components": {name: {"commit": self.app_sha} for name in names[:2]}})) + policy = self.repo / "policy" + policy.mkdir() + (policy / "architecture.yaml").write_text("backend: .workspace/Agent-System-Backend/internal\nfrontend: .workspace/Agent-System-Frontend/src\ncomponents: {}\n") + (policy / "architecture-baseline.json").write_text("[]") + (policy / "lib-deps-allowlist.txt").write_text("# No sibling-library imports\n") + mapping = {"schema": 1, "root_commit": self.git(self.repo, "rev-parse", "HEAD").stdout.strip(), "components": {}} + for name in names: + path = self.base / "isolated" / name + path.mkdir(parents=True) + if name != "Agent-System-Frontend": + (path / "go.mod").write_text("module " + modules[name] + "\n\ngo 1.23\n") + (path / "source.go").write_text("package fixture\n") + mapping["components"][name] = {"path": str(path), "commit": self.app_sha, "repo": str(self.app)} + backend = self.base / "isolated/Agent-System-Backend" + (backend / "internal/store").mkdir(parents=True) + (backend / "internal/store/store.go").write_text("package store\n") + sdk = backend / "pkg/extension" + sdk.mkdir(parents=True) + source = sdk / "sdk.go" + source.write_text("package extension\n") + (self.base / "isolated/Agent-System-Frontend/src").mkdir() + source_map = self.base / "source-map.json" + source_map.write_text(json.dumps(mapping)) + env = self.env | {"COMPOSITION_SOURCE_MAP": str(source_map)} + self.call(self.repo, "bash", "scripts/lint-boundaries.sh", env=env) + source.write_text('package extension\nimport _ "' + modules["Agent-System-Backend"] + '/internal/store"\n') + result = self.call(self.repo, "bash", "scripts/lint-boundaries.sh", env=env, check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("boundary: pkg/extension imports", result.stdout) + # A forged source identity cannot substitute for the locked application. + source.write_text("package extension\n") + mapping["components"]["Agent-System-Backend"]["commit"] = "0" * 40 + source_map.write_text(json.dumps(mapping)) + result = self.call(self.repo, "bash", "scripts/lint-boundaries.sh", env=env, check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("locked source", result.stdout) + + def test_verify_detects_nested_git_operation_inside_new_workspace(self): + self.adopt() + wt = self.worktree() + self.workspace(wt, "prepare") + nested = wt / ".workspace/App/private/Rules" + self.git(wt, "clone", str(self.rules), str(nested)) + lock = nested / ".git/index.lock" + lock.write_text("active nested writer\n") + result = self.call(wt, "python3", "scripts/check-worktree.py", "verify", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertIn("active Git operation/lock", result.stdout) + self.assertEqual(lock.read_text(), "active nested writer\n") + + def test_old_task_sync_preserves_unique_legacy_commit_staging_dirty_and_ignored_files(self): + self.git(self.repo, "submodule", "add", "--force", str(self.app), "modules/App") + self.git(self.repo, "commit", "-m", "Old gitlink") + self.git(self.repo, "push", "origin", "main") + wt = self.worktree() + self.git(wt, "submodule", "update", "--init") + legacy = wt / "modules/App" + self.git(legacy, "switch", "-c", "feature/unique") + (legacy / "content").write_text("unpublished commit\n") + self.git(legacy, "commit", "-am", "Unique component history") + (legacy / "content").write_text("staged component change\n") + self.git(legacy, "add", "content") + (legacy / "content").write_text("unstaged component change\n") + (legacy / "private").mkdir() + (legacy / "private/unique").write_text("ignored unique data\n") + before = (self.git(legacy, "show-ref").stdout, self.git(legacy, "ls-files", "--stage").stdout, + self.git(wt, "rev-parse", "HEAD").stdout) + self.git(self.repo, "rm", "--cached", "modules/App") + self.git(self.repo, "rm", ".gitmodules") + self.git(self.repo, "commit", "-m", "Retire old gitlink") + self.adopt() + result = self.task(wt, "sync", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertNotIn("[synced]", result.stdout) + self.assertEqual((self.git(legacy, "show-ref").stdout, self.git(legacy, "ls-files", "--stage").stdout, + self.git(wt, "rev-parse", "HEAD").stdout), before) + self.assertEqual((legacy / "content").read_text(), "unstaged component change\n") + self.assertEqual((legacy / "private/unique").read_text(), "ignored unique data\n") + + def test_old_task_text_conflict_keeps_legacy_source_and_reports_no_success(self): + self.git(self.repo, "submodule", "add", "--force", str(self.app), "modules/App") + self.git(self.repo, "commit", "-m", "Old gitlink") + self.git(self.repo, "push", "origin", "main") + wt = self.worktree() + self.git(wt, "submodule", "update", "--init") + (wt / "tracked").write_text("task branch choice\n") + self.git(wt, "commit", "-am", "Task text change") + legacy = wt / "modules/App" + before = self.git(legacy, "show-ref").stdout + (self.repo / "tracked").write_text("main branch choice\n") + self.git(self.repo, "commit", "-am", "Main text change") + self.git(self.repo, "rm", "--cached", "modules/App") + self.git(self.repo, "rm", ".gitmodules") + self.git(self.repo, "commit", "-m", "Retire legacy index") + self.adopt() + result = self.task(wt, "sync", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertNotIn("[synced]", result.stdout) + self.assertTrue(self.git(wt, "ls-files", "-u").stdout.strip()) + self.assertEqual(self.git(legacy, "show-ref").stdout, before) + self.assertEqual((legacy / "content").read_text(), "app v1\n") + + def test_precheck_rejects_borrowed_rules_cache_symlink(self): + self.adopt() + self.task(self.repo, "precheck") + source = next(path for path in (self.base / "cache/agent-system/rules").iterdir() if path.is_dir()) + borrowed = self.base / "borrowed-rules" + source.rename(borrowed) + source.symlink_to(borrowed, target_is_directory=True) + before = self.git(borrowed, "show-ref").stdout + result = self.task(self.repo, "precheck", check=False) + self.assertNotEqual(result.returncode, 0, result.stdout) + self.assertNotIn("[verdict] READY", result.stdout) + self.assertEqual(self.git(borrowed, "show-ref").stdout, before) + self.assertEqual((borrowed / "core/baseline.md").read_text(), "# Baseline\n") + + +if __name__ == "__main__": + unittest.main()