Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
1f31342
feat: rebuild OTS turns from the session transcript (ARN-109)
rita-aga Aug 11, 2026
2a0b42b
fix: feed the OTS emitter real tool spans and per-turn facts (ARN-109)
rita-aga Aug 11, 2026
c88abdf
docs: amend ADR-0035 and prove the emitter against the kernel OTS str…
rita-aga Aug 11, 2026
c6ad080
fix: bound token-level signals written to a SessionEntry
rita-aga Aug 11, 2026
0411f59
fix: seal the tool-span document once and keep its marker out of deci…
rita-aga Aug 11, 2026
e2306a0
fix: set prompt-side token ids once instead of concatenating them
rita-aga Aug 11, 2026
9702741
fix: point the session-tree resource at SessionEntries, not a TemperF…
rita-aga Aug 11, 2026
5fa7b03
fix: count tool arguments against the trajectory inline budget
rita-aga Aug 11, 2026
567f00a
perf: bound the leaf-recovery search in the OTS emitter
rita-aga Aug 11, 2026
d7a5eb8
fix: address codex review findings (ARN-291 lane temperpaw)
rita-aga Aug 11, 2026
d261d9c
fix: make OTS trajectories say what they were built without (ARN-109)
rita-aga Aug 12, 2026
4db565e
fix: close the remaining paths where lost evidence reads as complete …
rita-aga Aug 12, 2026
2c499a6
style: re-indent the emitter closure body
rita-aga Aug 12, 2026
53ab6f5
test: match the transcript error arm by braces, not by indentation
rita-aga Aug 12, 2026
f4dd562
fix: stop the failure path from trapping, and bound every essential v…
rita-aga Aug 12, 2026
90751b2
fix(scripts): make the OTS proof runnable again
rita-aga Aug 12, 2026
7de28cc
fix: close six more paths where a short record reads as whole (ARN-109)
rita-aga Aug 12, 2026
42e6736
fix: count each token signal once in every accumulator, not just one
rita-aga Aug 12, 2026
c9b8450
chore: bump temper to a747f7d4 and delete the interim carriers
rita-aga Aug 12, 2026
583592d
fix: scope the restored OpenRouter fallback tool-call id
rita-aga Aug 12, 2026
16eb43a
fix: never build a turn the pinned kernel refuses (ARN-109)
rita-aga Aug 12, 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
10 changes: 10 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,5 +71,15 @@ jobs:
cargo test --locked -p temperpaw --quiet
cargo test --locked -p paw-codex-worker --quiet
cargo test --manifest-path os-apps/paw-patrol/wasm/review_gate_lifecycle/Cargo.toml --quiet
# os-app WASM modules are their own workspaces, so `-p temperpaw` does
# not reach them. These five carry the OTS trajectory contract — the
# emitter that reads the record, the two writers that produce it, and
# the gate that fails when the temper pin gains the JCS fields. A gate
# nothing runs is not a gate (ADR-0035 section 17).
cargo test --manifest-path os-apps/paw-agent/wasm/emit_ots_trajectory/Cargo.toml --quiet
cargo test --manifest-path os-apps/paw-agent/wasm/provider_response_applier/Cargo.toml --quiet
cargo test --manifest-path os-apps/paw-agent/wasm/wasm-helpers/Cargo.toml --quiet
cargo test --manifest-path os-apps/paw-agent/wasm/openai-chat-wire/Cargo.toml --quiet
cargo test --manifest-path os-apps/paw-agent/wasm/monty_repl/Cargo.toml --quiet
- name: Dashboard build
run: cd dashboard && npm run build
47 changes: 30 additions & 17 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion crates/paw-codex-worker/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ libc = "0.2"
reqwest = { version = "0.12", features = ["json", "stream"] }
serde = { workspace = true }
serde_json = { workspace = true }
temper-observe = { git = "https://github.com/nerdsane/temper.git", rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d" }
temper-observe = { git = "https://github.com/nerdsane/temper.git", rev = "a747f7d40cb556371168f8460bc72806c3574d2b" }
tokio = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
16 changes: 8 additions & 8 deletions crates/temperpaw/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ path = "src/main.rs"

[dependencies]
# Temper platform engine
temper-platform = { git = "https://github.com/nerdsane/temper.git", rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d" }
temper-observe = { git = "https://github.com/nerdsane/temper.git", rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d" }
temper-server = { git = "https://github.com/nerdsane/temper.git", rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d", features = ["observe"] }
temper-runtime = { git = "https://github.com/nerdsane/temper.git", rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d" }
temper-jit = { git = "https://github.com/nerdsane/temper.git", rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d" }
temper-authz = { git = "https://github.com/nerdsane/temper.git", rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d" }
temper-store-postgres = { git = "https://github.com/nerdsane/temper.git", rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d" }
temper-store-turso = { git = "https://github.com/nerdsane/temper.git", rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d" }
temper-platform = { git = "https://github.com/nerdsane/temper.git", rev = "a747f7d40cb556371168f8460bc72806c3574d2b" }
temper-observe = { git = "https://github.com/nerdsane/temper.git", rev = "a747f7d40cb556371168f8460bc72806c3574d2b" }
temper-server = { git = "https://github.com/nerdsane/temper.git", rev = "a747f7d40cb556371168f8460bc72806c3574d2b", features = ["observe"] }
temper-runtime = { git = "https://github.com/nerdsane/temper.git", rev = "a747f7d40cb556371168f8460bc72806c3574d2b" }
temper-jit = { git = "https://github.com/nerdsane/temper.git", rev = "a747f7d40cb556371168f8460bc72806c3574d2b" }
temper-authz = { git = "https://github.com/nerdsane/temper.git", rev = "a747f7d40cb556371168f8460bc72806c3574d2b" }
temper-store-postgres = { git = "https://github.com/nerdsane/temper.git", rev = "a747f7d40cb556371168f8460bc72806c3574d2b" }
temper-store-turso = { git = "https://github.com/nerdsane/temper.git", rev = "a747f7d40cb556371168f8460bc72806c3574d2b" }

# Paw transport (local)
paw-transport = { path = "../paw-transport" }
Expand Down
16 changes: 11 additions & 5 deletions crates/temperpaw/tests/datadog_observability_contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,17 @@ fn collect_cargo_manifests(root: &Path, relative_dir: &Path, files: &mut Vec<Pat
fn temper_dependency_pin_uses_budgeted_wasm_host_call_revision() {
let manifest = load_text("crates/temperpaw/Cargo.toml");
let lockfile = load_text("Cargo.lock");
let expected_rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d";
let expected_rev = "a747f7d40cb556371168f8460bc72806c3574d2b";
let pre_llmobs_opt_out_rev = "510a0d9bc9517f7819d66849446cdf6aff2d5295";
let observe_wait_only_rev = "6ccc483af87abbf6d9b060d0e6a6def3adfe6718";
let host_boundary_rev = "7b170cf71246e01c337e81062b54ea8c597b9293";
let parent_only_rev = "4fbfcb971c7c9513ad6605cb8376a8c492c21482";
let parentless_rev = "ffa0a15212966dbada3db8da6e652f081e5f261b";
let legacy_rev = "5a19c5f4406e95533896a860b5da15a7a68a70ee";
// Superseded by the JCS OTS schema merge: rolling back to it would leave the
// emitter writing contract fields the structs no longer model, and the OTS
// round-trip test would fail to compile rather than at runtime.
let pre_jcs_schema_rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d";

for temper_crate in [
"temper-platform",
Expand Down Expand Up @@ -96,8 +100,10 @@ fn temper_dependency_pin_uses_budgeted_wasm_host_call_revision() {
&& !manifest.contains(parentless_rev)
&& !lockfile.contains(parentless_rev)
&& !manifest.contains(host_boundary_rev)
&& !lockfile.contains(host_boundary_rev),
"TemperPaw must not pin Temper revs without budgeted WASM host-call deadlines, complete WASM host-boundary observability, hard-coded LLMObs identity, parentless direct LLMObs spans, or one-span LLMObs traces"
&& !lockfile.contains(host_boundary_rev)
&& !manifest.contains(pre_jcs_schema_rev)
&& !lockfile.contains(pre_jcs_schema_rev),
"TemperPaw must not pin Temper revs without budgeted WASM host-call deadlines, complete WASM host-boundary observability, hard-coded LLMObs identity, parentless direct LLMObs spans, one-span LLMObs traces, or the pre-JCS OTS schema"
);
assert!(
!manifest.contains(pre_llmobs_opt_out_rev) && !lockfile.contains(pre_llmobs_opt_out_rev),
Expand All @@ -112,7 +118,7 @@ fn temper_dependency_pin_uses_budgeted_wasm_host_call_revision() {
#[test]
fn wasm_sdk_dependencies_pin_same_temper_runtime_revision_as_server() {
let root = repo_root();
let expected_rev = "804633e2c5cab3b0bd334f78bfb5ea23aca1858d";
let expected_rev = "a747f7d40cb556371168f8460bc72806c3574d2b";
let expected_dependency = format!(
"temper-wasm-sdk = {{ git = \"https://github.com/nerdsane/temper.git\", rev = \"{expected_rev}\""
);
Expand Down Expand Up @@ -1929,7 +1935,7 @@ fn wasm_guest_observability_live_proof_is_temper_native_and_datadog_backed() {

assert!(
probe_manifest.contains("temper-wasm-sdk")
&& probe_manifest.contains("804633e2c5cab3b0bd334f78bfb5ea23aca1858d"),
&& probe_manifest.contains("a747f7d40cb556371168f8460bc72806c3574d2b"),
"proof WASM must build against the same guest SDK runtime rev as production modules"
);
}
Loading