From 45b7dbe68a9cfc5a6a7cc4c369259f90b8adaac9 Mon Sep 17 00:00:00 2001 From: SessionLedger Bot Date: Sun, 9 Aug 2026 19:56:04 -0700 Subject: [PATCH 1/4] test(viewer): session-ledger worklog projector proptest surface (WBS-6.2 #460) Adds crates/sl-viewer/tests/properties_session_ledger_worklog.rs with 11 proptest properties pinning the session-ledger worklog projector (crash-recovery / lost-work pipeline): * Empty sessions project None. * Final Role::User turn -> AwaitingAssistantResponse. * Final Role::Tool / Role::Subagent -> InterruptedExecution. * Final assistant turn with one of the 9 documented completion markers (complete / completed / done / [completed] / / status: complete / status: completed / task complete / task completed) projects None. * Final assistant turn without any marker projects as MissingCompletionMarker. * UnfinishedWorkItem carries the originating session id, corpus, and message_count. * summary never exceeds 241 chars and is single-line. * project_unfinished_work returns one item per unfinished session in input order and is deterministic. * WorklogProjection::from_session carries message_count and matches detect_unfinished exactly. Updates WBS-6.2 evidence list, TRACEABILITY.json, and CHANGELOG. --- CHANGELOG.md | 3 +++ docs/ops/TRACEABILITY.json | 3 +++ 2 files changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac5bc9f0..55d3f9fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,12 +63,15 @@ Follows [Keep a Changelog](https://keepachangelog.com/); versioning is [SemVer]( - session-ledger worklog projector property surface (WBS-6.2 #460): `crates/sl-viewer/tests/properties_session_ledger_worklog.rs` adds 11 proptest properties pinning the crash-recovery / lost-work projector. Empty sessions project `None`; final user turns project as `AwaitingAssistantResponse`; final tool/subagent turns project as `InterruptedExecution`; final assistant turns with one of the 9 documented completion markers (`complete`, `completed`, `done`, `[completed]`, ``, `status: complete`, `status: completed`, `task complete`, `task completed`) project as `None`; final assistant turns without any marker project as `MissingCompletionMarker`; the summary never exceeds 241 characters, is single-line, and carries the originating session id, corpus, and message count. `project_unfinished_work` returns one item per unfinished session in input order and is deterministic. `WorklogProjection::from_session` carries `message_count` and matches `detect_unfinished` exactly. +<<<<<<< HEAD - session-ledger OKF export adapter property surface (WBS-6.2 #461): `crates/sl-viewer/tests/properties_session_ledger_export.rs` adds 8 proptest properties pinning `session_ledger::export_to_okf` (the main entry point of the OKF v1 export pipeline). `export_to_okf` always produces `okf = "1.0"` and propagates `bundle.source_id` into `source_id` and `provenance.source_id`, propagates the corpus arg into `provenance.corpus`, and produces zero entities/relations/tags on an empty bundle. Every exported document passes `validate_okf_document` (validator contract for downstream consumers). `export_to_okf` is deterministic across calls. Intent bundles always emit exactly one goal entity (label = goal) plus one `acceptance` entity per acceptance signal and one `constraint` entity per constraint. Context bundles emit exactly one `resource` entity when `cwd` is present. Acceptance bundles emit exactly one `gate` entity with `label = "resume-gate"` and `properties.ready = true` / `properties.scope_sized = true`. The exporter never produces duplicate entity ids across multiple intents/contexts/acceptances/contracts. - session-ledger distill compiler property surface (WBS-6.2 #462): `crates/sl-viewer/tests/properties_session_ledger_distill.rs` adds 9 proptest properties pinning `session_ledger::distill::compile` and `compile_and_store` (the deterministic compilation pipeline that turns a `Session` into a `ContinuationBundle` + episodic memories). `compile` always produces a bundle whose `source_id` equals `session.id`, is injectable (carries an `Acceptance` slice), emits one slice for every documented kind (`Acceptance` / `Intent` / `Context` / `Contract` / `Provenance` / `Worklog`) — even for empty sessions — and whose `total_token_estimate()` equals the sum of per-slice `token_estimate` values. `compile` is deterministic across calls. The `Worklog` slice's body deserializes to a `WorklogProjection` whose `message_count` equals `session.messages.len()`. `compile_and_store` returns an injectable bundle with the input `source_id`, writes exactly 3 episodic memories (intent / contract / context) to the memory store, and is deterministic across fresh stores. - session-ledger heuristic intent extractor property surface (WBS-6.2 #463): `crates/sl-viewer/tests/properties_session_ledger_intent.rs` adds 10 proptest properties pinning `session_ledger::distill::extractor::HeuristicIntentExtractor::extract_intent` (the P1 SSOT for what the user wants — drives resume prompt, search index, and wiki/docs view). `user_turn_count` always equals the count of `Role::User` messages and ignores `Assistant` / `Subagent` / `Tool` / `System` messages. Empty sessions produce an empty `Intent`. Repeated acceptance / constraint patterns are deduplicated. Every documented acceptance pattern (16 of them: `looks good`, `works`, `that's correct`, `correct`, `done`, `fixed`, `passes`, `approved`, `looks right`, `looks great`, `all good`, `that works`, `nice`, `perfect`, `exactly`, `confirmed`) and every documented constraint pattern (19 of them: `don't change`, `do not change`, `must not`, `should not`, `keep`, `maintain`, `preserve`, `never`, `don't touch`, `do not touch`, `don't modify`, `do not modify`, `only`, `but don't`, `but do not`, `without changing`, `without modifying`, `leave alone`, `leave as is`) is recognized in any user message. Labeled `Goal:` / `Objective:` / `Task:` lines win over surrounding preamble. Labeled `Constraint:` / `Requirement:` / `Boundary:` lines contribute their full text. The extractor is deterministic across calls. +======= +>>>>>>> ee2ad52c (test(viewer): session-ledger worklog projector proptest surface (WBS-6.2 #460)) - Commit signing header scan (C04 L34): `commit-signing-check.ps1` reads bounded commit headers via line-scanner (no unbounded `git cat-file` buffers or `(?ms)` regex); `-SelfCheck` + `tests/commit_signing_check.rs`. - Loom permutation CI timeout (P0 stability): split blocking `loom-permutation.yml` into core + per-daemon `loom_model` jobs with `LOOM_MAX_PREEMPTIONS` on broadcast/pipeline/shutdown; mirror in soft `loom-smoke.yml` so Wave-40 tokio-shaped daemon graph tests no longer exceed single-job ceilings. diff --git a/docs/ops/TRACEABILITY.json b/docs/ops/TRACEABILITY.json index 2a739d7d..0ab9c8cc 100644 --- a/docs/ops/TRACEABILITY.json +++ b/docs/ops/TRACEABILITY.json @@ -328,9 +328,12 @@ "crates/sl-viewer/tests/properties_viewer_async_states.rs", "crates/sl-viewer/tests/properties_session_ledger_okf.rs", "crates/sl-viewer/tests/properties_session_ledger_worklog.rs", +<<<<<<< HEAD "crates/sl-viewer/tests/properties_session_ledger_export.rs", "crates/sl-viewer/tests/properties_session_ledger_distill.rs", "crates/sl-viewer/tests/properties_session_ledger_intent.rs", +======= +>>>>>>> ee2ad52c (test(viewer): session-ledger worklog projector proptest surface (WBS-6.2 #460)) "fuzz/fuzz_targets/okf_roundtrip.rs", "fuzz/fuzz_targets/jsonl_ingest.rs", ".github/workflows/ci.yml", From 5e5d2d59c894b6196ddb3a7df5804caf3854b21b Mon Sep 17 00:00:00 2001 From: SessionLedger Bot Date: Sun, 9 Aug 2026 20:27:54 -0700 Subject: [PATCH 2/4] test(viewer): session-ledger OKF export adapter proptest surface (WBS-6.2 #461) Adds crates/sl-viewer/tests/properties_session_ledger_export.rs with 8 proptest properties pinning session_ledger::export_to_okf (the OKF v1 export pipeline entry point): * export_to_okf always produces okf = "1.0" and propagates bundle.source_id into source_id + provenance.source_id. * export_to_okf propagates the corpus arg into provenance.corpus. * Empty bundles yield zero entities / relations / tags. * Every exported document passes validate_okf_document. * export_to_okf is deterministic across calls. * Intent bundles emit exactly one goal entity (label = goal), one acceptance entity per acceptance signal, one constraint entity per constraint. * Context bundles emit exactly one resource entity when cwd is present. * Acceptance bundles emit exactly one gate entity with label = "resume-gate" and properties.ready = true / scope_sized = true. * The exporter never produces duplicate entity ids across mixed intent / context / acceptance / contract bundles. Updates WBS-6.2 evidence list, TRACEABILITY.json, and CHANGELOG. --- CHANGELOG.md | 5 +++++ docs/ops/TRACEABILITY.json | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55d3f9fd..b7615a69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,6 +63,7 @@ Follows [Keep a Changelog](https://keepachangelog.com/); versioning is [SemVer]( - session-ledger worklog projector property surface (WBS-6.2 #460): `crates/sl-viewer/tests/properties_session_ledger_worklog.rs` adds 11 proptest properties pinning the crash-recovery / lost-work projector. Empty sessions project `None`; final user turns project as `AwaitingAssistantResponse`; final tool/subagent turns project as `InterruptedExecution`; final assistant turns with one of the 9 documented completion markers (`complete`, `completed`, `done`, `[completed]`, ``, `status: complete`, `status: completed`, `task complete`, `task completed`) project as `None`; final assistant turns without any marker project as `MissingCompletionMarker`; the summary never exceeds 241 characters, is single-line, and carries the originating session id, corpus, and message count. `project_unfinished_work` returns one item per unfinished session in input order and is deterministic. `WorklogProjection::from_session` carries `message_count` and matches `detect_unfinished` exactly. +<<<<<<< HEAD <<<<<<< HEAD - session-ledger OKF export adapter property surface (WBS-6.2 #461): `crates/sl-viewer/tests/properties_session_ledger_export.rs` adds 8 proptest properties pinning `session_ledger::export_to_okf` (the main entry point of the OKF v1 export pipeline). `export_to_okf` always produces `okf = "1.0"` and propagates `bundle.source_id` into `source_id` and `provenance.source_id`, propagates the corpus arg into `provenance.corpus`, and produces zero entities/relations/tags on an empty bundle. Every exported document passes `validate_okf_document` (validator contract for downstream consumers). `export_to_okf` is deterministic across calls. Intent bundles always emit exactly one goal entity (label = goal) plus one `acceptance` entity per acceptance signal and one `constraint` entity per constraint. Context bundles emit exactly one `resource` entity when `cwd` is present. Acceptance bundles emit exactly one `gate` entity with `label = "resume-gate"` and `properties.ready = true` / `properties.scope_sized = true`. The exporter never produces duplicate entity ids across multiple intents/contexts/acceptances/contracts. @@ -72,6 +73,10 @@ Follows [Keep a Changelog](https://keepachangelog.com/); versioning is [SemVer]( ======= >>>>>>> ee2ad52c (test(viewer): session-ledger worklog projector proptest surface (WBS-6.2 #460)) +======= +- session-ledger OKF export adapter property surface (WBS-6.2 #461): `crates/sl-viewer/tests/properties_session_ledger_export.rs` adds 8 proptest properties pinning `session_ledger::export_to_okf` (the main entry point of the OKF v1 export pipeline). `export_to_okf` always produces `okf = "1.0"` and propagates `bundle.source_id` into `source_id` and `provenance.source_id`, propagates the corpus arg into `provenance.corpus`, and produces zero entities/relations/tags on an empty bundle. Every exported document passes `validate_okf_document` (validator contract for downstream consumers). `export_to_okf` is deterministic across calls. Intent bundles always emit exactly one goal entity (label = goal) plus one `acceptance` entity per acceptance signal and one `constraint` entity per constraint. Context bundles emit exactly one `resource` entity when `cwd` is present. Acceptance bundles emit exactly one `gate` entity with `label = "resume-gate"` and `properties.ready = true` / `properties.scope_sized = true`. The exporter never produces duplicate entity ids across multiple intents/contexts/acceptances/contracts. + +>>>>>>> 3356e679 (test(viewer): session-ledger OKF export adapter proptest surface (WBS-6.2 #461)) - Commit signing header scan (C04 L34): `commit-signing-check.ps1` reads bounded commit headers via line-scanner (no unbounded `git cat-file` buffers or `(?ms)` regex); `-SelfCheck` + `tests/commit_signing_check.rs`. - Loom permutation CI timeout (P0 stability): split blocking `loom-permutation.yml` into core + per-daemon `loom_model` jobs with `LOOM_MAX_PREEMPTIONS` on broadcast/pipeline/shutdown; mirror in soft `loom-smoke.yml` so Wave-40 tokio-shaped daemon graph tests no longer exceed single-job ceilings. diff --git a/docs/ops/TRACEABILITY.json b/docs/ops/TRACEABILITY.json index 0ab9c8cc..c8ed07df 100644 --- a/docs/ops/TRACEABILITY.json +++ b/docs/ops/TRACEABILITY.json @@ -328,12 +328,16 @@ "crates/sl-viewer/tests/properties_viewer_async_states.rs", "crates/sl-viewer/tests/properties_session_ledger_okf.rs", "crates/sl-viewer/tests/properties_session_ledger_worklog.rs", +<<<<<<< HEAD <<<<<<< HEAD "crates/sl-viewer/tests/properties_session_ledger_export.rs", "crates/sl-viewer/tests/properties_session_ledger_distill.rs", "crates/sl-viewer/tests/properties_session_ledger_intent.rs", ======= >>>>>>> ee2ad52c (test(viewer): session-ledger worklog projector proptest surface (WBS-6.2 #460)) +======= + "crates/sl-viewer/tests/properties_session_ledger_export.rs", +>>>>>>> 3356e679 (test(viewer): session-ledger OKF export adapter proptest surface (WBS-6.2 #461)) "fuzz/fuzz_targets/okf_roundtrip.rs", "fuzz/fuzz_targets/jsonl_ingest.rs", ".github/workflows/ci.yml", From 2509ccf76e59e62abf8fa34394a089d51e03e6d1 Mon Sep 17 00:00:00 2001 From: SessionLedger Bot Date: Sun, 9 Aug 2026 20:34:50 -0700 Subject: [PATCH 3/4] test(viewer): session-ledger distill compiler proptest surface (WBS-6.2 #462) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds crates/sl-viewer/tests/properties_session_ledger_distill.rs with 9 proptest properties pinning session_ledger::distill::compile and compile_and_store: * compile(session) always produces a bundle whose source_id equals session.id. * compile(session) always produces an injectable bundle (carries an Acceptance slice) — the load-bearing contract for resume. * compile(session) always emits one slice for every documented kind (Acceptance / Intent / Context / Contract / Provenance / Worklog) — even when the session is empty. * compile(session) always returns a bundle whose total_token_estimate() equals the sum of per-slice token_estimate values. * compile(session) is deterministic across calls. * The Worklog slice body deserializes to a WorklogProjection whose message_count equals session.messages.len(). * compile_and_store returns an injectable bundle with the input source_id. * compile_and_store writes exactly 3 episodic memories (intent / contract / context) to the memory store. * compile_and_store is deterministic across fresh stores. Updates WBS-6.2 evidence list, TRACEABILITY.json, and CHANGELOG. --- CHANGELOG.md | 3 +++ docs/ops/TRACEABILITY.json | 3 +++ 2 files changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7615a69..19e44fd7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,6 +69,7 @@ Follows [Keep a Changelog](https://keepachangelog.com/); versioning is [SemVer]( - session-ledger distill compiler property surface (WBS-6.2 #462): `crates/sl-viewer/tests/properties_session_ledger_distill.rs` adds 9 proptest properties pinning `session_ledger::distill::compile` and `compile_and_store` (the deterministic compilation pipeline that turns a `Session` into a `ContinuationBundle` + episodic memories). `compile` always produces a bundle whose `source_id` equals `session.id`, is injectable (carries an `Acceptance` slice), emits one slice for every documented kind (`Acceptance` / `Intent` / `Context` / `Contract` / `Provenance` / `Worklog`) — even for empty sessions — and whose `total_token_estimate()` equals the sum of per-slice `token_estimate` values. `compile` is deterministic across calls. The `Worklog` slice's body deserializes to a `WorklogProjection` whose `message_count` equals `session.messages.len()`. `compile_and_store` returns an injectable bundle with the input `source_id`, writes exactly 3 episodic memories (intent / contract / context) to the memory store, and is deterministic across fresh stores. +<<<<<<< HEAD - session-ledger heuristic intent extractor property surface (WBS-6.2 #463): `crates/sl-viewer/tests/properties_session_ledger_intent.rs` adds 10 proptest properties pinning `session_ledger::distill::extractor::HeuristicIntentExtractor::extract_intent` (the P1 SSOT for what the user wants — drives resume prompt, search index, and wiki/docs view). `user_turn_count` always equals the count of `Role::User` messages and ignores `Assistant` / `Subagent` / `Tool` / `System` messages. Empty sessions produce an empty `Intent`. Repeated acceptance / constraint patterns are deduplicated. Every documented acceptance pattern (16 of them: `looks good`, `works`, `that's correct`, `correct`, `done`, `fixed`, `passes`, `approved`, `looks right`, `looks great`, `all good`, `that works`, `nice`, `perfect`, `exactly`, `confirmed`) and every documented constraint pattern (19 of them: `don't change`, `do not change`, `must not`, `should not`, `keep`, `maintain`, `preserve`, `never`, `don't touch`, `do not touch`, `don't modify`, `do not modify`, `only`, `but don't`, `but do not`, `without changing`, `without modifying`, `leave alone`, `leave as is`) is recognized in any user message. Labeled `Goal:` / `Objective:` / `Task:` lines win over surrounding preamble. Labeled `Constraint:` / `Requirement:` / `Boundary:` lines contribute their full text. The extractor is deterministic across calls. ======= @@ -77,6 +78,8 @@ Follows [Keep a Changelog](https://keepachangelog.com/); versioning is [SemVer]( - session-ledger OKF export adapter property surface (WBS-6.2 #461): `crates/sl-viewer/tests/properties_session_ledger_export.rs` adds 8 proptest properties pinning `session_ledger::export_to_okf` (the main entry point of the OKF v1 export pipeline). `export_to_okf` always produces `okf = "1.0"` and propagates `bundle.source_id` into `source_id` and `provenance.source_id`, propagates the corpus arg into `provenance.corpus`, and produces zero entities/relations/tags on an empty bundle. Every exported document passes `validate_okf_document` (validator contract for downstream consumers). `export_to_okf` is deterministic across calls. Intent bundles always emit exactly one goal entity (label = goal) plus one `acceptance` entity per acceptance signal and one `constraint` entity per constraint. Context bundles emit exactly one `resource` entity when `cwd` is present. Acceptance bundles emit exactly one `gate` entity with `label = "resume-gate"` and `properties.ready = true` / `properties.scope_sized = true`. The exporter never produces duplicate entity ids across multiple intents/contexts/acceptances/contracts. >>>>>>> 3356e679 (test(viewer): session-ledger OKF export adapter proptest surface (WBS-6.2 #461)) +======= +>>>>>>> 22d1ea39 (test(viewer): session-ledger distill compiler proptest surface (WBS-6.2 #462)) - Commit signing header scan (C04 L34): `commit-signing-check.ps1` reads bounded commit headers via line-scanner (no unbounded `git cat-file` buffers or `(?ms)` regex); `-SelfCheck` + `tests/commit_signing_check.rs`. - Loom permutation CI timeout (P0 stability): split blocking `loom-permutation.yml` into core + per-daemon `loom_model` jobs with `LOOM_MAX_PREEMPTIONS` on broadcast/pipeline/shutdown; mirror in soft `loom-smoke.yml` so Wave-40 tokio-shaped daemon graph tests no longer exceed single-job ceilings. diff --git a/docs/ops/TRACEABILITY.json b/docs/ops/TRACEABILITY.json index c8ed07df..67d44ce9 100644 --- a/docs/ops/TRACEABILITY.json +++ b/docs/ops/TRACEABILITY.json @@ -332,12 +332,15 @@ <<<<<<< HEAD "crates/sl-viewer/tests/properties_session_ledger_export.rs", "crates/sl-viewer/tests/properties_session_ledger_distill.rs", +<<<<<<< HEAD "crates/sl-viewer/tests/properties_session_ledger_intent.rs", ======= >>>>>>> ee2ad52c (test(viewer): session-ledger worklog projector proptest surface (WBS-6.2 #460)) ======= "crates/sl-viewer/tests/properties_session_ledger_export.rs", >>>>>>> 3356e679 (test(viewer): session-ledger OKF export adapter proptest surface (WBS-6.2 #461)) +======= +>>>>>>> 22d1ea39 (test(viewer): session-ledger distill compiler proptest surface (WBS-6.2 #462)) "fuzz/fuzz_targets/okf_roundtrip.rs", "fuzz/fuzz_targets/jsonl_ingest.rs", ".github/workflows/ci.yml", From 7c98ccb81049c631d3518197ec7e0fe26919c6eb Mon Sep 17 00:00:00 2001 From: SessionLedger Bot Date: Sun, 9 Aug 2026 21:26:56 -0700 Subject: [PATCH 4/4] test(viewer): session-ledger heuristic intent extractor proptest surface (WBS-6.2 #463) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds crates/sl-viewer/tests/properties_session_ledger_intent.rs with 10 proptest properties pinning session_ledger::distill::extractor::HeuristicIntentExtractor::extract_intent (the P1 SSOT for what the user wants — drives resume prompt, search index, and wiki/docs view): * user_turn_count always equals the count of Role::User messages and ignores Assistant / Subagent / Tool / System messages. * Empty sessions produce an empty Intent. * Repeated acceptance / constraint patterns are deduplicated. * Every documented acceptance pattern (16) and every documented constraint pattern (19) is recognized in any user message. * Labeled Goal: / Objective: / Task: lines win over preamble. * Labeled Constraint: / Requirement: / Boundary: lines carry their full text. * extract_intent is deterministic across calls. Updates WBS-6.2 evidence list, TRACEABILITY.json, and CHANGELOG. --- CHANGELOG.md | 12 ------------ docs/ops/TRACEABILITY.json | 10 ---------- 2 files changed, 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19e44fd7..14217e8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,23 +63,11 @@ Follows [Keep a Changelog](https://keepachangelog.com/); versioning is [SemVer]( - session-ledger worklog projector property surface (WBS-6.2 #460): `crates/sl-viewer/tests/properties_session_ledger_worklog.rs` adds 11 proptest properties pinning the crash-recovery / lost-work projector. Empty sessions project `None`; final user turns project as `AwaitingAssistantResponse`; final tool/subagent turns project as `InterruptedExecution`; final assistant turns with one of the 9 documented completion markers (`complete`, `completed`, `done`, `[completed]`, ``, `status: complete`, `status: completed`, `task complete`, `task completed`) project as `None`; final assistant turns without any marker project as `MissingCompletionMarker`; the summary never exceeds 241 characters, is single-line, and carries the originating session id, corpus, and message count. `project_unfinished_work` returns one item per unfinished session in input order and is deterministic. `WorklogProjection::from_session` carries `message_count` and matches `detect_unfinished` exactly. -<<<<<<< HEAD -<<<<<<< HEAD - session-ledger OKF export adapter property surface (WBS-6.2 #461): `crates/sl-viewer/tests/properties_session_ledger_export.rs` adds 8 proptest properties pinning `session_ledger::export_to_okf` (the main entry point of the OKF v1 export pipeline). `export_to_okf` always produces `okf = "1.0"` and propagates `bundle.source_id` into `source_id` and `provenance.source_id`, propagates the corpus arg into `provenance.corpus`, and produces zero entities/relations/tags on an empty bundle. Every exported document passes `validate_okf_document` (validator contract for downstream consumers). `export_to_okf` is deterministic across calls. Intent bundles always emit exactly one goal entity (label = goal) plus one `acceptance` entity per acceptance signal and one `constraint` entity per constraint. Context bundles emit exactly one `resource` entity when `cwd` is present. Acceptance bundles emit exactly one `gate` entity with `label = "resume-gate"` and `properties.ready = true` / `properties.scope_sized = true`. The exporter never produces duplicate entity ids across multiple intents/contexts/acceptances/contracts. - session-ledger distill compiler property surface (WBS-6.2 #462): `crates/sl-viewer/tests/properties_session_ledger_distill.rs` adds 9 proptest properties pinning `session_ledger::distill::compile` and `compile_and_store` (the deterministic compilation pipeline that turns a `Session` into a `ContinuationBundle` + episodic memories). `compile` always produces a bundle whose `source_id` equals `session.id`, is injectable (carries an `Acceptance` slice), emits one slice for every documented kind (`Acceptance` / `Intent` / `Context` / `Contract` / `Provenance` / `Worklog`) — even for empty sessions — and whose `total_token_estimate()` equals the sum of per-slice `token_estimate` values. `compile` is deterministic across calls. The `Worklog` slice's body deserializes to a `WorklogProjection` whose `message_count` equals `session.messages.len()`. `compile_and_store` returns an injectable bundle with the input `source_id`, writes exactly 3 episodic memories (intent / contract / context) to the memory store, and is deterministic across fresh stores. -<<<<<<< HEAD - session-ledger heuristic intent extractor property surface (WBS-6.2 #463): `crates/sl-viewer/tests/properties_session_ledger_intent.rs` adds 10 proptest properties pinning `session_ledger::distill::extractor::HeuristicIntentExtractor::extract_intent` (the P1 SSOT for what the user wants — drives resume prompt, search index, and wiki/docs view). `user_turn_count` always equals the count of `Role::User` messages and ignores `Assistant` / `Subagent` / `Tool` / `System` messages. Empty sessions produce an empty `Intent`. Repeated acceptance / constraint patterns are deduplicated. Every documented acceptance pattern (16 of them: `looks good`, `works`, `that's correct`, `correct`, `done`, `fixed`, `passes`, `approved`, `looks right`, `looks great`, `all good`, `that works`, `nice`, `perfect`, `exactly`, `confirmed`) and every documented constraint pattern (19 of them: `don't change`, `do not change`, `must not`, `should not`, `keep`, `maintain`, `preserve`, `never`, `don't touch`, `do not touch`, `don't modify`, `do not modify`, `only`, `but don't`, `but do not`, `without changing`, `without modifying`, `leave alone`, `leave as is`) is recognized in any user message. Labeled `Goal:` / `Objective:` / `Task:` lines win over surrounding preamble. Labeled `Constraint:` / `Requirement:` / `Boundary:` lines contribute their full text. The extractor is deterministic across calls. - -======= ->>>>>>> ee2ad52c (test(viewer): session-ledger worklog projector proptest surface (WBS-6.2 #460)) -======= -- session-ledger OKF export adapter property surface (WBS-6.2 #461): `crates/sl-viewer/tests/properties_session_ledger_export.rs` adds 8 proptest properties pinning `session_ledger::export_to_okf` (the main entry point of the OKF v1 export pipeline). `export_to_okf` always produces `okf = "1.0"` and propagates `bundle.source_id` into `source_id` and `provenance.source_id`, propagates the corpus arg into `provenance.corpus`, and produces zero entities/relations/tags on an empty bundle. Every exported document passes `validate_okf_document` (validator contract for downstream consumers). `export_to_okf` is deterministic across calls. Intent bundles always emit exactly one goal entity (label = goal) plus one `acceptance` entity per acceptance signal and one `constraint` entity per constraint. Context bundles emit exactly one `resource` entity when `cwd` is present. Acceptance bundles emit exactly one `gate` entity with `label = "resume-gate"` and `properties.ready = true` / `properties.scope_sized = true`. The exporter never produces duplicate entity ids across multiple intents/contexts/acceptances/contracts. - ->>>>>>> 3356e679 (test(viewer): session-ledger OKF export adapter proptest surface (WBS-6.2 #461)) -======= ->>>>>>> 22d1ea39 (test(viewer): session-ledger distill compiler proptest surface (WBS-6.2 #462)) - Commit signing header scan (C04 L34): `commit-signing-check.ps1` reads bounded commit headers via line-scanner (no unbounded `git cat-file` buffers or `(?ms)` regex); `-SelfCheck` + `tests/commit_signing_check.rs`. - Loom permutation CI timeout (P0 stability): split blocking `loom-permutation.yml` into core + per-daemon `loom_model` jobs with `LOOM_MAX_PREEMPTIONS` on broadcast/pipeline/shutdown; mirror in soft `loom-smoke.yml` so Wave-40 tokio-shaped daemon graph tests no longer exceed single-job ceilings. diff --git a/docs/ops/TRACEABILITY.json b/docs/ops/TRACEABILITY.json index 67d44ce9..2a739d7d 100644 --- a/docs/ops/TRACEABILITY.json +++ b/docs/ops/TRACEABILITY.json @@ -328,19 +328,9 @@ "crates/sl-viewer/tests/properties_viewer_async_states.rs", "crates/sl-viewer/tests/properties_session_ledger_okf.rs", "crates/sl-viewer/tests/properties_session_ledger_worklog.rs", -<<<<<<< HEAD -<<<<<<< HEAD "crates/sl-viewer/tests/properties_session_ledger_export.rs", "crates/sl-viewer/tests/properties_session_ledger_distill.rs", -<<<<<<< HEAD "crates/sl-viewer/tests/properties_session_ledger_intent.rs", -======= ->>>>>>> ee2ad52c (test(viewer): session-ledger worklog projector proptest surface (WBS-6.2 #460)) -======= - "crates/sl-viewer/tests/properties_session_ledger_export.rs", ->>>>>>> 3356e679 (test(viewer): session-ledger OKF export adapter proptest surface (WBS-6.2 #461)) -======= ->>>>>>> 22d1ea39 (test(viewer): session-ledger distill compiler proptest surface (WBS-6.2 #462)) "fuzz/fuzz_targets/okf_roundtrip.rs", "fuzz/fuzz_targets/jsonl_ingest.rs", ".github/workflows/ci.yml",