Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
60bb6f2
vendor: prepare pinned Hermes source adoption
Kitahl Aug 28, 2026
49ff2df
ci: bootstrap phase 2 Hermes vendoring
Kitahl Aug 29, 2026
d69efb8
ci: repair phase 2 Hermes vendoring bootstrap
Kitahl Aug 29, 2026
5f9b8d0
ci: register repaired Phase 2 vendoring bootstrap
Kitahl Aug 29, 2026
2a629c8
ci: preserve exact upstream bytes during Phase 2 vendoring
Kitahl Aug 29, 2026
5f99c6a
security: replace vendored Hermes snapshot with pinned gitlink
Kitahl Aug 29, 2026
dda78ea
fix(hermes): preserve runtime materialization state on gitlink storage
Kitahl Aug 29, 2026
a1f6ac2
bridge: add observation firewall and Soul-gated FAST-P6 finalizer
Kitahl Aug 29, 2026
c3aa2d1
fix(fast-p6): normalize pinned Hermes hook argument names
Kitahl Aug 29, 2026
2497537
fix(fast-p6): keep observation provenance bridge-owned
Kitahl Aug 29, 2026
04e1994
docs: publish FAST-P6 checkpoint receipt
Kitahl Aug 29, 2026
fc8ca81
foil: add FAST-P7 advisory live-capability routing
Kitahl Aug 29, 2026
9747572
fix(fast-p7): expose repository package root to verifier
Kitahl Aug 29, 2026
711e34e
docs: publish FAST-P7 checkpoint receipt
Kitahl Aug 29, 2026
2c3d5f1
docs: advance fast-build handoff through FAST-P7
Kitahl Aug 29, 2026
554ee85
cli: add FAST-P8 user-facing alpha entry point
Kitahl Aug 29, 2026
6990322
fix(fast-p8): normalize wrapped CLI help output
Kitahl Aug 29, 2026
b7057dd
docs: publish FAST-P8 alpha checkpoint
Kitahl Aug 29, 2026
6a50046
docs: add Codex FAST-P8 integration handoff
Kitahl Aug 29, 2026
35c0880
Merge current research archive into native runtime branding base
Kitahl Sep 3, 2026
a483ae7
chore: stage validated Apparatus brand payload
Kitahl Sep 3, 2026
111a8fe
chore: permit intentional Markdown hard breaks in brand gate
Kitahl Sep 3, 2026
63353eb
brand: apply Elenchion Apparatus classical-scientific system
github-actions[bot] Sep 3, 2026
0cb491e
validation: recognize Apparatus public identity
Kitahl Sep 3, 2026
3ba5edf
security: pin two non-secret estimator false positives
Kitahl Sep 3, 2026
0221cc1
validation: check renamed README aliases directly
Kitahl Sep 3, 2026
a77c727
brand: adopt Lattice Prism and gemstone names
Kitahl Sep 3, 2026
0656d70
brand: update claims register for Lattice Prism
Kitahl Sep 3, 2026
eb936a9
brand: present Lattice Prism gemstone system
Kitahl Sep 3, 2026
4b08b77
brand: encode Prism gemstone naming system
Kitahl Sep 3, 2026
6a39469
chore: stage Prism gemstone rebrand applicator
Kitahl Sep 3, 2026
1acb88e
chore: run Prism gemstone rebrand applicator
Kitahl Sep 3, 2026
b5a35b4
chore: allow intentional Markdown hard breaks in Prism brand note
Kitahl Sep 3, 2026
6863ddd
brand: rename public system to Lattice Prism gemstone architecture
github-actions[bot] Sep 3, 2026
72165cb
chore: stage Bohr Array rebrand applicator
Kitahl Sep 3, 2026
86ad014
chore: run Bohr Array rebrand applicator
Kitahl Sep 3, 2026
272a0f5
brand: rename public system to Bohr Array
github-actions[bot] Sep 3, 2026
facedd8
brand: finalize Bohr Array public identity
Kitahl Sep 3, 2026
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
543 changes: 543 additions & 0 deletions .github/phase5_verify.py

Large diffs are not rendered by default.

198 changes: 198 additions & 0 deletions .github/phase6_verify.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
"""Bounded FAST-P6 observation bridge and Soul finalizer verification."""

from __future__ import annotations

import importlib.util
import json
import os
from pathlib import Path
import subprocess
import sys
import tempfile
import threading
from typing import Any

REPO = Path(__file__).resolve().parent.parent
PHASE5_HELPER = REPO / ".github" / "phase5_verify.py"


def _load_phase5() -> Any:
spec = importlib.util.spec_from_file_location("phase5_verify", PHASE5_HELPER)
if spec is None or spec.loader is None:
raise RuntimeError("cannot load the retained FAST-P5 verification helper")
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module


def _read_observations(runtime_home: Path) -> list[dict[str, Any]]:
values: list[dict[str, Any]] = []
for path in sorted((runtime_home / "observations").rglob("*.json")):
value = json.loads(path.read_text(encoding="utf-8"))
value["_path"] = str(path)
values.append(value)
return values


def _forbidden_authority_fields(value: Any) -> set[str]:
forbidden = {
"verdict",
"receipt",
"receipts",
"evidence_class",
"release",
"released",
"cleared",
"obligation_clearance",
}
found: set[str] = set()
if isinstance(value, dict):
found.update(forbidden.intersection(value))
for item in value.values():
found.update(_forbidden_authority_fields(item))
elif isinstance(value, list):
for item in value:
found.update(_forbidden_authority_fields(item))
return found


def main() -> None:
phase5 = _load_phase5()
phase5._source_boundary()
task_id = phase5._create_task()
before = phase5._task_state(task_id)
server = phase5.Phase5Server()
thread = threading.Thread(target=server.serve_forever, daemon=True)
thread.start()

try:
with tempfile.TemporaryDirectory(prefix="gauntlet-phase6-") as temporary:
home = Path(temporary)
runtime = home / ".gauntlet" / "runtime"
phase5._write_runtime_config(runtime, server.server_address[1])
environment = dict(os.environ)
environment.update(
{
"HOME": str(home),
"HERMES_YOLO_MODE": "1",
"HERMES_ACCEPT_HOOKS": "1",
"HERMES_INTERACTIVE": "1",
}
)
completed = subprocess.run(
[
sys.executable,
"-m",
"gauntlet_host.launcher",
"Use gauntlet_task_status, then report that status was observed.",
"--task-id",
task_id,
"--model",
"phase5-mock",
"--provider",
"custom",
"--timeout",
"90",
"--json",
],
cwd=REPO,
env=environment,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
encoding="utf-8",
errors="replace",
check=False,
)
print(completed.stdout, end="")
if completed.stderr:
print(completed.stderr, file=sys.stderr, end="")
assert completed.returncode == 2
finalized = json.loads(completed.stdout)

assert finalized["schema"] == "gauntlet.finalization.v1"
assert finalized["task_id"] == task_id
assert finalized["state"] == "UNRESOLVED"
assert finalized["accepted"] is False
assert finalized["final_response"] == "phase5 status observed"
assert finalized["worker_status"] == "OK"
assert finalized["worker_event"] == "worker.turn_completed"
assert finalized["release_gate_invoked"] is True
assert finalized["release_gate_verdict"] == "UNKNOWN"
assert finalized["release_eligible"] is False
assert finalized["task_release_performed"] is False
assert finalized["canonical_receipt_created"] is False
assert finalized["unresolved"]

tool_request = phase5._tool_request(server.chat_requests)
result_request = phase5._result_request(server.chat_requests)
names = {
item["function"]["name"]
for item in tool_request.get("tools", [])
}
assert {"gauntlet_task_status", "gauntlet_release_status"} <= names
tool_messages = [
message
for message in result_request.get("messages", [])
if message.get("tool_call_id") == phase5.TARGET_CALL_ID
]
assert len(tool_messages) == 1
status = json.loads(tool_messages[0]["content"])
assert status["task_id"] == task_id
assert status["release"]["verdict"] == "UNKNOWN"
assert status["read_only"] is True
assert status["mutation_performed"] is False

observations = _read_observations(runtime)
matching = [
item
for item in observations
if item.get("tool") == "gauntlet_task_status"
]
assert len(matching) == 1
observation = matching[0]
assert observation["schema"] == "gauntlet.tool-observation.v1"
assert observation["event"] == "runtime.tool.finished"
assert observation["task_id"] == task_id
assert observation["status"] == "OK"
assert observation["runtime_session_id"]
assert observation["tool_call_id"] == phase5.TARGET_CALL_ID
assert len(observation["input_hash"]) == 64
assert len(observation["output_hash"]) == 64
assert observation["authority_ceiling"] == "OBSERVATION_ONLY"
assert observation["canonical_receipt_created"] is False
assert observation["canonical_state_mutated"] is False
assert observation["provenance"]["raw_input_persisted"] is False
assert observation["provenance"]["raw_output_persisted"] is False
assert not _forbidden_authority_fields(observation)

after = phase5._task_state(task_id)
assert after == before
task = json.loads((phase5.TASKS / f"{task_id}.json").read_text())
assert task["released"] is False
assert task["active"] is True
assert not any(phase5.RECEIPTS.glob("*.json"))
assert not (home / ".hermes").exists()

summary = {
"schema": "gauntlet.fast-checkpoint-verification.v1",
"fast_milestone": "FAST-P6",
"task_id": task_id,
"model_round_trips": len(server.chat_requests),
"observations_recorded": len(observations),
"status_observations": len(matching),
"release_gate_verdict": finalized["release_gate_verdict"],
"unresolved_not_accepted": finalized["accepted"] is False,
"canonical_task_unchanged": after == before,
"canonical_receipts_created": 0,
"ordinary_hermes_home_created": False,
}
print(json.dumps(summary, indent=2, sort_keys=True))
finally:
server.shutdown()
server.server_close()
thread.join(timeout=5)


if __name__ == "__main__":
main()
Loading