Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# Depone

> Workflow designer + cross-platform evidence verifier for multi-agent AI systems.

[![License: MIT](https://img.shields.io/badge/License-MIT-4F46E5.svg)](LICENSE)
[![Agent skill](https://img.shields.io/badge/agent%20skill-Codex-4F46E5.svg)](SKILL.md)
[![Release](https://img.shields.io/github/v/release/Moonweave-Systems/depone?color=4F46E5)](https://github.com/Moonweave-Systems/depone/releases)
Expand Down Expand Up @@ -61,6 +59,7 @@ evidence gates.
| `depone validate-contracts` | Validate Agent Fabric contracts and fixtures |
| `depone agent-fabric-smoke` | Export the source-only Agent Fabric lifecycle smoke summary |
| `depone agent-fabric-harness-snapshot` | Export source-only harness capability snapshots |
| `depone agent-fabric-adapter-smoke` | Export source-only adapter smoke reports |
| `depone demo` | Run a complete design → compile → verify cycle |

### Verify: 4-Check Engine
Expand Down Expand Up @@ -158,6 +157,7 @@ python3 -m depone verify --self-test # 7/7 passed
python3 -m depone validate-contracts --self-test # 22/22 passed
python3 -m depone agent-fabric-smoke --self-test # source-only smoke export passed
python3 -m depone agent-fabric-harness-snapshot --self-test # harness snapshot export passed
python3 -m depone agent-fabric-adapter-smoke --self-test # adapter smoke export passed
python3 -m depone demo --self-test # full cycle passed
```

Expand Down
25 changes: 25 additions & 0 deletions depone/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import sys

from depone.cli import (
agent_fabric_adapter_smoke,
agent_fabric_harness_snapshot,
agent_fabric_smoke,
demo,
Expand Down Expand Up @@ -186,6 +187,28 @@ def main() -> None:
"--self-test", action="store_true", help="Run self-test and exit"
)

# agent-fabric-adapter-smoke
adapter_smoke_parser = sub.add_parser(
"agent-fabric-adapter-smoke",
help="Export source-only Agent Fabric adapter smoke reports",
)
adapter_smoke_parser.add_argument(
"--adapter-fixture", help="Reference adapter fixture JSON path"
)
adapter_smoke_parser.add_argument(
"--harness-snapshot",
default=None,
help="Optional harness snapshot JSON path; defaults to adapter harness",
)
adapter_smoke_parser.add_argument(
"--out",
default="agent-fabric-adapter-smoke.json",
help="Output path for adapter smoke report JSON",
)
adapter_smoke_parser.add_argument(
"--self-test", action="store_true", help="Run self-test and exit"
)

# demo
demo_parser = sub.add_parser(
"demo", help="Run a complete design→compile→verify cycle"
Expand Down Expand Up @@ -213,6 +236,8 @@ def main() -> None:
agent_fabric_smoke.run(args)
elif args.command == "agent-fabric-harness-snapshot":
agent_fabric_harness_snapshot.run(args)
elif args.command == "agent-fabric-adapter-smoke":
agent_fabric_adapter_smoke.run(args)
elif args.command == "demo":
demo.run(args)
else:
Expand Down
123 changes: 123 additions & 0 deletions depone/agent_fabric/adapter_smoke.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
"""Source-only Agent Fabric adapter smoke report."""

from __future__ import annotations

import hashlib
import json
from typing import Any

from depone.agent_fabric.reference_adapter import validate_reference_adapter_fixture

REPORT_KIND = "agent-fabric-adapter-smoke-report"
REPORT_SCHEMA_VERSION = "1.0"


def canonical_hash(value: Any) -> str:
"""Return a stable SHA-256 hash for JSON-compatible values."""
payload = json.dumps(value, sort_keys=True, separators=(",", ":"))
return hashlib.sha256(payload.encode("utf-8")).hexdigest()


def build_adapter_smoke_report(
adapter_fixture: dict[str, Any], harness_snapshot: dict[str, Any]
) -> dict[str, Any]:
"""Bind a reference adapter fixture to a source-only harness snapshot."""
adapter = (
adapter_fixture.get("adapter") if isinstance(adapter_fixture, dict) else {}
)
capture = (
adapter_fixture.get("capture") if isinstance(adapter_fixture, dict) else {}
)
harness = adapter.get("harness") if isinstance(adapter, dict) else None
adapter_mode = adapter.get("mode") if isinstance(adapter, dict) else None
executes_commands = (
adapter.get("executes_commands") if isinstance(adapter, dict) else None
)
trust_level = capture.get("trust_level") if isinstance(capture, dict) else None

validation_errors = validate_reference_adapter_fixture(adapter_fixture)
blockers: list[dict[str, Any]] = []
harness_entry = _find_harness_entry(harness_snapshot, harness)

if validation_errors:
blockers.append(
{
"code": "ERR_ADAPTER_FIXTURE_INVALID",
"message": "adapter fixture failed validation",
}
)
decision = "blocked-invalid-adapter-fixture"
elif harness_entry is None:
blockers.append(
{
"code": "ERR_ADAPTER_HARNESS_NOT_SNAPSHOTTED",
"message": "adapter harness is absent from the harness snapshot",
"harness": harness,
}
)
decision = "blocked-harness-not-in-snapshot"
elif harness_entry.get("status") == "unsupported-critical":
blockers.append(
{
"code": "ERR_ADAPTER_HARNESS_UNSUPPORTED_CRITICAL",
"message": "adapter harness snapshot is unsupported-critical",
"harness": harness,
}
)
decision = "blocked-unsupported-critical"
else:
decision = "ready-source-only"

return {
"kind": REPORT_KIND,
"schema_version": REPORT_SCHEMA_VERSION,
"decision": decision,
"harness": harness,
"harness_status": harness_entry.get("status") if harness_entry else None,
"adapter_name": adapter.get("name") if isinstance(adapter, dict) else None,
"adapter_mode": adapter_mode,
"executes_commands": executes_commands,
"trust_level": trust_level,
"validation_errors": validation_errors,
"blockers": blockers,
"source_hashes": {
"adapter_fixture": canonical_hash(adapter_fixture),
"harness_snapshot": canonical_hash(harness_snapshot),
},
"boundary": {
"executes_commands": False,
"calls_live_models": False,
"detects_installed_harness": False,
"inspects_mcp_runtime": False,
"trust_upgrade": False,
},
}


def _find_harness_entry(
harness_snapshot: dict[str, Any], harness: Any
) -> dict[str, Any] | None:
if not isinstance(harness, str):
return None
entries = harness_snapshot.get("harnesses", [])
if not isinstance(entries, list):
return None
for entry in entries:
if isinstance(entry, dict) and entry.get("name") == harness:
return entry
return None


def _self_test() -> None:
from pathlib import Path

from depone.agent_fabric.harness_snapshot import build_harness_snapshot

fixture_path = Path("depone/fixtures/agent_fabric/reference_adapter_shell.json")
fixture = json.loads(fixture_path.read_text())
report = build_adapter_smoke_report(fixture, build_harness_snapshot(["shell"]))
if report["decision"] != "ready-source-only":
raise AssertionError("expected shell reference fixture to be source-ready")
blocked = build_adapter_smoke_report(fixture, build_harness_snapshot(["codex"]))
if blocked["decision"] != "blocked-harness-not-in-snapshot":
raise AssertionError("expected missing harness to block")
71 changes: 71 additions & 0 deletions depone/cli/agent_fabric_adapter_smoke.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
"""depone agent-fabric-adapter-smoke — export source-only adapter smoke report."""

from __future__ import annotations

import argparse
import json
import sys
import tempfile
from pathlib import Path

from depone.agent_fabric.adapter_smoke import build_adapter_smoke_report
from depone.agent_fabric.harness_snapshot import build_harness_snapshot


def _read_object(path: Path, label: str) -> dict:
try:
value = json.loads(path.read_text())
except (OSError, json.JSONDecodeError) as exc:
print(f"Error: cannot read {label} JSON {path}: {exc}", file=sys.stderr)
sys.exit(1)
if not isinstance(value, dict):
print(f"Error: {label} JSON root must be an object", file=sys.stderr)
sys.exit(1)
return value


def run(args: argparse.Namespace) -> None:
if getattr(args, "self_test", False):
_self_test()
return

if not getattr(args, "adapter_fixture", None):
print(
"Usage: depone agent-fabric-adapter-smoke "
"--adapter-fixture <fixture.json> [--harness-snapshot snapshot.json]",
file=sys.stderr,
)
sys.exit(1)

fixture = _read_object(Path(args.adapter_fixture), "adapter fixture")
if getattr(args, "harness_snapshot", None):
snapshot = _read_object(Path(args.harness_snapshot), "harness snapshot")
else:
snapshot = build_harness_snapshot([fixture.get("adapter", {}).get("harness")])

report = build_adapter_smoke_report(fixture, snapshot)
out_path = Path(getattr(args, "out", "agent-fabric-adapter-smoke.json"))
out_path.parent.mkdir(parents=True, exist_ok=True)
out_path.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n")
print(f"Adapter smoke report written to {out_path}")
print(f" Decision: {report['decision']}")
print(f" Harness: {report['harness']}")


def _self_test() -> None:
print("depone agent-fabric-adapter-smoke --self-test")
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
out_path = root / "adapter-smoke.json"
args = argparse.Namespace(
self_test=False,
adapter_fixture="depone/fixtures/agent_fabric/reference_adapter_shell.json",
harness_snapshot=None,
out=str(out_path),
)
run(args)
report = json.loads(out_path.read_text())
if report.get("decision") != "ready-source-only":
print(" [FAIL] expected ready-source-only", file=sys.stderr)
sys.exit(1)
print(" [PASS] source-only adapter smoke report exported")
14 changes: 9 additions & 5 deletions docs/automation-roadmap.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Depone Automation Roadmap

Status: V3 entry runtime implemented; V7.5 frontier result review implemented; V8 frontier review ingestion implemented; V9 human gate resolution implemented; V10 product CLI implemented; V11 operator guidance implemented; V12-V20 product roadmap implemented; V52-V87 product evidence, graph timing, activation, and brand boundary gates implemented; V88 roadmap reconciliation audit implemented; V89 command safety gate implemented; V90 activation v2 implemented; V91 contract tiering implemented; V92 evidence oracle implemented; V93 workflow narrative implemented; V94 control deck score implemented; V95 score history implemented; V96 metric ladder implemented; V97 benchmark readiness implemented; V98 wave operator implemented; V99 wave receipt implemented; V100 promotion evidence implemented; V101 promotion route implemented; V102 deterministic live-proof recorder implemented; V103 live-proof comparison schema implemented; V104 product direction implemented; V105 verify wedge implemented; V106 multi-wave validation implemented; V107 Agent Fabric contracts and compiler implemented; V108 Agent Fabric reference adapter fixture implemented; V109 Agent Fabric capture bridge implemented; V110 Agent Fabric report assurance implemented; V111 Agent Fabric operator view implemented; V112 Agent Fabric lifecycle smoke implemented; V116 Agent Fabric smoke CLI implemented; V117 Agent Fabric harness snapshot implemented; V94-V101 meta layer frozen; live proof n=1 completed
Status: V3 entry runtime implemented; V7.5 frontier result review implemented; V8 frontier review ingestion implemented; V9 human gate resolution implemented; V10 product CLI implemented; V11 operator guidance implemented; V12-V20 product roadmap implemented; V52-V87 product evidence, graph timing, activation, and brand boundary gates implemented; V88 roadmap reconciliation audit implemented; V89 command safety gate implemented; V90 activation v2 implemented; V91 contract tiering implemented; V92 evidence oracle implemented; V93 workflow narrative implemented; V94 control deck score implemented; V95 score history implemented; V96 metric ladder implemented; V97 benchmark readiness implemented; V98 wave operator implemented; V99 wave receipt implemented; V100 promotion evidence implemented; V101 promotion route implemented; V102 deterministic live-proof recorder implemented; V103 live-proof comparison schema implemented; V104 product direction implemented; V105 verify wedge implemented; V106 multi-wave validation implemented; V107 Agent Fabric contracts and compiler implemented; V108 Agent Fabric reference adapter fixture implemented; V109 Agent Fabric capture bridge implemented; V110 Agent Fabric report assurance implemented; V111 Agent Fabric operator view implemented; V112 Agent Fabric lifecycle smoke implemented; V116 Agent Fabric smoke CLI implemented; V117 Agent Fabric harness snapshot implemented; V118 Agent Fabric adapter smoke implemented; V94-V101 meta layer frozen; live proof n=1 completed
Date: 2026-06-24

## Purpose
Expand Down Expand Up @@ -60,6 +60,7 @@ legacy/internal and intentionally deferred.
| Agent Fabric lifecycle smoke | source-only compile-to-report smoke summary for V107-V111 regression coverage | planned V112, lifecycle smoke implemented |
| Agent Fabric smoke CLI | operator-facing export of the source-only lifecycle smoke summary and optional Markdown view | planned V116, smoke CLI implemented |
| Agent Fabric harness snapshot | source-only export of shipped harness capability fixtures plus tool mapping coverage | planned V117, harness snapshot implemented |
| Agent Fabric adapter smoke | source-only binding of reference adapter fixtures to harness snapshots | planned V118, adapter smoke implemented |
| Harness benchmark | corpus and scoring gate for direct harness comparisons | planned V23, first benchmark gate implemented |
| README public page | source-bound benchmark graph on the GitHub landing page | planned V37, first publish slice implemented |
| Benchmark history | hash-bound report history ledger and trend graph artifacts | planned V38, first ledger slice implemented |
Expand Down Expand Up @@ -858,9 +859,9 @@ First canonical demo done means:
- unsafe and non-owned output paths are blocked;
- `fixtures/v51/manifest.json` passes with `decision: "keep"`.

### V52-V117: Product Evidence, Control Deck, And Agent Fabric Guardrails
### V52-V118: Product Evidence, Control Deck, And Agent Fabric Guardrails

Status: implemented through V117 Agent Fabric harness snapshot; the V103 live
Status: implemented through V118 Agent Fabric adapter smoke; the V103 live
two-arm comparison remains behind explicit approval; V94-V101 meta layer is
frozen.

Expand Down Expand Up @@ -959,6 +960,9 @@ Implemented continuation:
shipped harness capability fixtures plus deterministic tool mapping coverage.
It reports exact, approximated, and unsupported-critical harness states
without probing installed tools or upgrading trust.
- V118 added `depone agent-fabric-adapter-smoke`, a source-only report that
binds the shell reference adapter fixture to a harness snapshot with source
hashes, validation errors, and explicit no-execution boundaries.

Next roadmap direction:

Expand All @@ -970,8 +974,8 @@ Next roadmap direction:
migration gate proves compatibility.
4. Expand read-only or pre-isolated live execution only where V84/V85 and queue
preflight evidence permit it.
5. Use harness snapshots as the adapter-design input, then require paired
dogfood or adapter-smoke evidence before any public benefit claim.
5. Use adapter smoke reports as the adapter-design input, then require
paired dogfood or live adapter-smoke evidence before any public benefit claim.

## Strategic Decisions

Expand Down
1 change: 1 addition & 0 deletions docs/command-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ python3 -m depone verify plan.json --evidence ./evidence --out report.json --ope
python3 -m depone validate-contracts --all
python3 -m depone agent-fabric-smoke --profile profile.json --roles role.json --plan plan.json --out agent-fabric-smoke.json --operator-view-out operator-view.md
python3 -m depone agent-fabric-harness-snapshot --harness shell --harness codex --out agent-fabric-harness-snapshot.json
python3 -m depone agent-fabric-adapter-smoke --adapter-fixture depone/fixtures/agent_fabric/reference_adapter_shell.json --out agent-fabric-adapter-smoke.json
python3 -m depone demo --out out/depone-quickstart

python scripts/dwm.py plan "<objective>" --out out/v21/<run_id>
Expand Down
6 changes: 6 additions & 0 deletions docs/release-history.md
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,9 @@ promotion requires real release history.
- V117: `docs/v117-agent-fabric-harness-snapshot-spec.md` added the
`depone agent-fabric-harness-snapshot` export command for shipped harness
capability fixtures plus deterministic tool mapping coverage.
- V118: `docs/v118-agent-fabric-adapter-smoke-spec.md` added the
`depone agent-fabric-adapter-smoke` report that binds reference adapter
fixtures to harness snapshots without executing them.

## Current Public Boundaries

Expand Down Expand Up @@ -279,3 +282,6 @@ promotion requires real release history.
- V117 harness snapshots expose shipped capability and mapping coverage only;
they do not probe installed harnesses, inspect MCP runtime state, or prove
live permission enforcement.
- V118 adapter smoke reports bind fixtures to snapshots and validation errors;
they still do not execute commands, call models, or prove live adapter
enforcement.
Loading