From aa2cbab87e9193632fd6ff933e41594de140b26a Mon Sep 17 00:00:00 2001 From: Codex Date: Sat, 5 Sep 2026 19:38:28 +0900 Subject: [PATCH 1/3] fix(voice): preserve additional evidence correction history --- backend/app/source_post_voice_ingestion.py | 71 ++++-- ...256-evidence-bearing-voice-combinations.md | 43 ++++ tests/test_additional_voice_history_live.py | 241 ++++++++++++++++++ tests/test_source_post_voice_ingestion.py | 20 +- 4 files changed, 352 insertions(+), 23 deletions(-) create mode 100644 tests/test_additional_voice_history_live.py diff --git a/backend/app/source_post_voice_ingestion.py b/backend/app/source_post_voice_ingestion.py index 609a71f4f..c137e33a4 100644 --- a/backend/app/source_post_voice_ingestion.py +++ b/backend/app/source_post_voice_ingestion.py @@ -3,6 +3,7 @@ from __future__ import annotations from typing import TYPE_CHECKING +from uuid import uuid4 if TYPE_CHECKING: import asyncpg @@ -88,9 +89,46 @@ async def persist_additional_voice_assignment( truth_status_code: str, evidence_post_id: str, ) -> None: - """Atomically bind one additional Voice to an authorized evidence post.""" - assignment_iri = str(LW[f"voice-assignment/{post_id}/{voice_type_code}"]) + """Retain cutoff history when authorized additional Voice evidence changes.""" async with conn.transaction(): + # Imported-primary changes hold this same row lock. Read the current + # interval only after acquiring it, including when this write waited. + await conn.execute( + "select post_id from source_post where post_id = $1::uuid for update", + post_id, + ) + current = await conn.fetchrow( + """ + select voice.is_primary, voice.truth_status_code, + evidence.node_id as evidence_post_id + from source_post_voice voice + left join provenance_assertion assertion + on assertion.assertion_id = voice.provenance_assertion_id + and assertion.relation_code = 'prov_was_derived_from' + left join provenance_resource_binding evidence + on evidence.resource_id = assertion.object_resource_id + and evidence.node_type_code = 'node_post' + where voice.post_id = $1::uuid and voice.voice_type_code = $2 + and voice.effective_to is null + """, + post_id, + voice_type_code, + ) + if current is not None: + if current["is_primary"]: + raise PrimaryVoiceAssignmentError( + "the imported primary Voice cannot be changed through the additional-voice path" + ) + if ( + current["truth_status_code"] == truth_status_code + and str(current["evidence_post_id"]) == evidence_post_id + ): + return + change_at = await conn.fetchval("select clock_timestamp()") + assignment_id = uuid4() + assignment_iri = str( + LW[f"voice-assignment/{post_id}/{voice_type_code}/{assignment_id}"] + ) evidence_resource_id = await _post_resource_id(conn, evidence_post_id) assignment_resource_id = await conn.fetchval( """ @@ -139,28 +177,31 @@ async def persist_additional_voice_assignment( ) if assertion_id is None: raise RuntimeError("Voice evidence derivation was not persisted") - stored = await conn.fetchrow( + await conn.execute( + """ + update source_post_voice + set effective_to = $3 + where post_id = $1::uuid and voice_type_code = $2 + and effective_to is null and not is_primary + """, + post_id, + voice_type_code, + change_at, + ) + await conn.execute( """ insert into source_post_voice - (post_id, voice_type_code, is_primary, truth_status_code, + (voice_assignment_id, post_id, voice_type_code, is_primary, truth_status_code, provenance_assertion_id, effective_from, recorded_at) - values ($1::uuid, $2, false, $3, $4::uuid, now(), now()) - on conflict (post_id, voice_type_code) where effective_to is null do update - set truth_status_code = excluded.truth_status_code, - provenance_assertion_id = excluded.provenance_assertion_id, - recorded_at = now() - where not source_post_voice.is_primary - returning voice_type_code + values ($6::uuid, $1::uuid, $2, false, $3, $4::uuid, $5, $5) """, post_id, voice_type_code, truth_status_code, assertion_id, + change_at, + assignment_id, ) - if stored is None: - raise PrimaryVoiceAssignmentError( - "the imported primary Voice cannot be changed through the additional-voice path" - ) __all__ = ["PrimaryVoiceAssignmentError", "persist_additional_voice_assignment"] diff --git a/docs/adr/0256-evidence-bearing-voice-combinations.md b/docs/adr/0256-evidence-bearing-voice-combinations.md index 79279130d..bd462e854 100644 --- a/docs/adr/0256-evidence-bearing-voice-combinations.md +++ b/docs/adr/0256-evidence-bearing-voice-combinations.md @@ -87,6 +87,49 @@ compound lookup codes. ## Data model +### Amendment: preserve revisions of additional evidence (2026-09-05) + +Status: proposed amendment; protected integration and release acceptance pending. + +In the context of correcting an additional Voice's recorded evidence, facing +loss of earlier cutoff states, we decided for serialized half-open assignment +revisions and against overwriting the current row or rejecting all corrections, +to achieve auditable historical truth and derivation evidence, accepting one +additional persisted interval per material correction and per-Post lock waits. + +An authorized repeat write may change an additional Voice's truth state or +derivation evidence. Updating its current row in place destroys the earlier +cutoff view. Serialize these writes with imported-primary changes by locking +the carrying `source_post` row before reading the current assignment. An exact +repeat of the same truth state and bound evidence Post is a no-op. Otherwise, +close the existing additional interval and insert a new assignment at the same +database `clock_timestamp()`, read after the lock is acquired. Retain the old +truth state, assertion, start, and recorded time. A primary conflict fails +before writing provenance. Any failure rolls back the entire replacement. + +Each new additional interval uses its existing `voice_assignment_id` UUID in +its canonical PROV Entity IRI, under +`voice-assignment/{post_id}/{voice_type_code}/{voice_assignment_id}`. Earlier +IRIs and assertions remain unchanged. Reusing a post/code-only Entity for a +later interval would merge distinct derivations; overwriting or rejecting all +authorized corrections would respectively erase history or remove the existing +upsert capability. Neither alternative satisfies the cutoff contract. + +This reuses migration 0237/0243 identities and half-open intervals; it adds no +schema, Voice code, inference, or release number. Public payload shapes and +evidence authorization stay unchanged. PostgreSQL row locking and the database +clock supply ordering; no application timestamp repair is permitted. Historical +states already overwritten before this amendment remain unavailable. Synthetic +PostgreSQL tests must prove correction, exact retry, rollback, concurrent writes, +primary protection, and distinct persisted PROV derivations. Authenticated API +and rendered UI acceptance remain separate requirements. + +Authority: [PostgreSQL transaction isolation](https://www.postgresql.org/docs/18/transaction-iso.html) +and [W3C PROV-O derivation](https://www.w3.org/TR/prov-o/#wasDerivedFrom), +alongside ADR 0252's existing database-clock and interval contract. These sources +support concurrency and provenance semantics, not stakeholder classification or +population inference. + ```mermaid classDiagram class SourcePost { diff --git a/tests/test_additional_voice_history_live.py b/tests/test_additional_voice_history_live.py new file mode 100644 index 000000000..90bb27b46 --- /dev/null +++ b/tests/test_additional_voice_history_live.py @@ -0,0 +1,241 @@ +"""Synthetic PostgreSQL proof of additional-Voice correction history (ADR 0256).""" + +from __future__ import annotations + +import asyncio +import os +from contextlib import closing + +import asyncpg +import pytest + +from backend.app.source_post_voice_ingestion import ( + PrimaryVoiceAssignmentError, + persist_additional_voice_assignment, +) +from test_source_post_voice_history_live import ( + _connect, + _insert_synthetic_post, + _postgres_available, + voice_history_dsn, # noqa: F401 -- reuse the full-schema database fixture +) + +pytestmark = pytest.mark.skipif( + not _postgres_available(), reason="synthetic PostgreSQL test database unavailable" +) + +_HISTORY = """ +select voice.voice_assignment_id, voice.truth_status_code, + voice.effective_from, voice.effective_to, voice.recorded_at, + voice.provenance_assertion_id, assertion.subject_resource_id, + evidence.node_id as evidence_post_id + from source_post_voice voice + join provenance_assertion assertion + on assertion.assertion_id = voice.provenance_assertion_id + join provenance_resource_binding evidence + on evidence.resource_id = assertion.object_resource_id + where voice.post_id = $1::uuid and voice.voice_type_code = 'vops' + order by voice.effective_from +""" + + +def _posts(dsn: str) -> tuple[str, str, str]: + with closing(_connect(dsn)) as connection, connection.cursor() as cursor: + cursor.execute( + "insert into common_lookup_value (lookup_category, lookup_code, lookup_label) " + "values ('node_type', 'node_post', 'Post') on conflict do nothing" + ) + return tuple(_insert_synthetic_post(cursor) for _ in range(3)) + + +async def _write(conn, post, evidence, truth="truth_observed"): + await persist_additional_voice_assignment( + conn, post_id=post, voice_type_code="vops", + truth_status_code=truth, evidence_post_id=evidence, + ) + + +def test_correction_preserves_cutoff_and_distinct_provenance(voice_history_dsn): + """Changing evidence retains the first interval; an exact retry changes nothing.""" + post, first_evidence, second_evidence = _posts(voice_history_dsn) + + async def exercise(): + conn = await asyncpg.connect(voice_history_dsn) + try: + await _write(conn, post, first_evidence) + before = dict((await conn.fetch(_HISTORY, post))[0]) + cutoff = await conn.fetchval("select clock_timestamp()") + await _write(conn, post, second_evidence, "truth_proposed") + rows = await conn.fetch(_HISTORY, post) + assert len(rows) == 2 + historical, current = map(dict, rows) + assert historical | {"effective_to": None} == before + assert historical["effective_to"] == current["effective_from"] + assert historical["effective_from"] <= cutoff < historical["effective_to"] + assert str(historical["evidence_post_id"]) == first_evidence + assert str(current["evidence_post_id"]) == second_evidence + assert current["truth_status_code"] == "truth_proposed" + assert current["effective_to"] is None + assert current["subject_resource_id"] != historical["subject_resource_id"] + assert current["provenance_assertion_id"] != historical["provenance_assertion_id"] + await _write(conn, post, second_evidence, "truth_proposed") + assert [dict(row) for row in await conn.fetch(_HISTORY, post)] == [historical, current] + await _write(conn, post, first_evidence) + assert len(await conn.fetch(_HISTORY, post)) == 3 + finally: + await conn.close() + + asyncio.run(exercise()) + + +@pytest.mark.skipif( + os.environ.get("LINEAGEWEAVE_TEST_VOICE_OIDC") != "1", + reason="opt in with the synthetic Compose OIDC and Valkey services", +) +def test_authenticated_api_retains_prior_truth_and_rejects_hidden_evidence( + voice_history_dsn, monkeypatch, +): + """Real JWKS, RBAC, PostgreSQL, and Valkey preserve the authorized API history.""" + import httpx + import redis.asyncio as redis + + from backend.app import main + from backend.app.activity_stream import _stream_key, get_valkey + from backend.app.auth import _decode_access_token + from backend.app.config import load_settings + from backend.app.db import get_pool + from lineageweave.http_client import post_form + + for key in os.environ: + if key.startswith(("KEYVERSE_", "OIDC_", "KEYCLOAK_")): + monkeypatch.delenv(key) + token = post_form( + "http://localhost:18080/realms/lineageweave-demo/protocol/openid-connect/token", + {"client_id": "lineageweave-frontend", "grant_type": "password", + "username": "demo.analyst", "password": "lineageweave-demo-only"}, + timeout=10, + )["access_token"] + subject = _decode_access_token(token, load_settings())["sub"] + post, evidence, hidden = _posts(voice_history_dsn) + + async def exercise(): + pool = await asyncpg.create_pool(voice_history_dsn, min_size=1, max_size=2) + valkey = redis.from_url("redis://localhost:16379/0", decode_responses=True) + overrides = main.app.dependency_overrides.copy() + main.app.dependency_overrides[get_pool] = lambda: pool + main.app.dependency_overrides[get_valkey] = lambda: valkey + try: + async with pool.acquire() as conn: + await conn.execute( + "insert into common_lookup_value (lookup_category, lookup_code, lookup_label) values " + "('post_visibility','public','Public'), ('permission','post_read','Read posts'), " + "('permission','post_admin','Manage posts') on conflict do nothing" + ) + await conn.execute("update source_post set visibility_code='public' where post_id=any($1::uuid[])", [post, evidence]) + account = await conn.fetchval( + "insert into user_account (external_subject_id,display_name,email_address) " + "values ($1,'Synthetic API reviewer','voice-api@example.test') returning user_account_id", subject, + ) + role = await conn.fetchval( + "insert into access_role (role_code,role_name) values ('voice_history_test','Synthetic Voice reviewer') returning access_role_id" + ) + await conn.execute("insert into account_role_assignment values ($1,$2)", account, role) + await conn.execute("insert into role_permission values ($1,'post_read')", role) + async with httpx.AsyncClient(transport=httpx.ASGITransport(app=main.app), base_url="http://synthetic.test") as client: + route = f"/api/posts/{post}/voice-assignments" + payload = {"voice_type_code": "vops", "truth_status_code": "truth_observed", "evidence_post_id": evidence} + assert (await client.post(route, json=payload)).status_code == 401 + client.headers["Authorization"] = f"Bearer {token}" + assert (await client.post(route, json=payload)).status_code == 403 + async with pool.acquire() as conn: + await conn.execute("insert into role_permission values ($1,'post_admin')", role) + assert (await client.post(route, json=payload | {"evidence_post_id": hidden})).status_code == 403 + assert (await client.post(route, json=payload)).status_code == 201 + async with pool.acquire() as conn: + cutoff = await conn.fetchval("select clock_timestamp()") + assert (await client.post(route, json=payload | {"truth_status_code": "truth_proposed"})).status_code == 201 + historical = await client.get(f"/api/posts/{post}", params={"as_of": cutoff.isoformat()}) + live = await client.get(f"/api/posts/{post}") + assert historical.status_code == live.status_code == 200 + prior_voices, current_voices = historical.json()["voice_types"], live.json()["voice_types"] + assert next(v for v in prior_voices if v["code"] == "vops")["truth_status_code"] == "truth_observed" + assert next(v for v in current_voices if v["code"] == "vops")["truth_status_code"] == "truth_proposed" + assert next(v for v in current_voices if v["is_primary"])["code"] == "voc" + assert hidden not in historical.text + live.text + async with pool.acquire() as conn: + assert len(await conn.fetch(_HISTORY, post)) == 2 + finally: + main.app.dependency_overrides.clear() + main.app.dependency_overrides.update(overrides) + await valkey.delete(_stream_key(post)) + await valkey.aclose() + await pool.close() + + asyncio.run(exercise()) + + +def test_invalid_correction_and_primary_conflict_leave_no_partial_write(voice_history_dsn): + """A rejected correction keeps the old evidence and rolls back new provenance.""" + post, evidence, replacement = _posts(voice_history_dsn) + + async def exercise(): + conn = await asyncpg.connect(voice_history_dsn) + try: + await _write(conn, post, evidence) + before = await conn.fetch(_HISTORY, post) + count = await conn.fetchval("select count(*) from provenance_resource") + with pytest.raises((asyncpg.CheckViolationError, asyncpg.ForeignKeyViolationError)): + await _write(conn, post, replacement, "invalid_synthetic_truth") + assert await conn.fetch(_HISTORY, post) == before + assert await conn.fetchval("select count(*) from provenance_resource") == count + with pytest.raises(PrimaryVoiceAssignmentError): + await persist_additional_voice_assignment( + conn, post_id=post, voice_type_code="voc", + truth_status_code="truth_observed", evidence_post_id=replacement, + ) + assert await conn.fetchval("select count(*) from provenance_resource") == count + finally: + await conn.close() + + asyncio.run(exercise()) + + +def test_waiting_correction_uses_post_lock_clock_and_preserves_primary(voice_history_dsn): + """A write begun before its predecessor cannot backdate the next interval.""" + post, first_evidence, second_evidence = _posts(voice_history_dsn) + + async def exercise(): + first = await asyncpg.connect(voice_history_dsn) + second = await asyncpg.connect(voice_history_dsn) + task = None + try: + await _write(first, post, first_evidence) + async with first.transaction(): + await first.execute("select post_id from source_post where post_id=$1::uuid for update", post) + task = asyncio.create_task(_write(second, post, first_evidence)) + # Observe actual PostgreSQL lock waiting, not a guessed sleep interval. + async with asyncio.timeout(5): + while not await first.fetchval( + "select exists(select 1 from pg_stat_activity where pid=$1 and wait_event_type='Lock')", + second.get_server_pid(), + ): + await asyncio.sleep(0) + await _write(first, post, second_evidence) + await asyncio.wait_for(task, 5) + rows = await first.fetch(_HISTORY, post) + assert len(rows) == 3 + assert rows[0]["effective_to"] == rows[1]["effective_from"] + assert rows[1]["effective_to"] == rows[2]["effective_from"] + assert rows[0]["effective_from"] < rows[1]["effective_from"] < rows[2]["effective_from"] + assert rows[2]["effective_to"] is None + assert await first.fetchval( + "select voice_type_code from source_post_voice where post_id=$1::uuid and is_primary and effective_to is null", post, + ) == "voc" + finally: + if task is not None and not task.done(): + task.cancel() + await asyncio.gather(task, return_exceptions=True) + await first.close() + await second.close() + + asyncio.run(exercise()) diff --git a/tests/test_source_post_voice_ingestion.py b/tests/test_source_post_voice_ingestion.py index 52fdf0b1f..83f07dbb5 100644 --- a/tests/test_source_post_voice_ingestion.py +++ b/tests/test_source_post_voice_ingestion.py @@ -4,6 +4,7 @@ import asyncio from contextlib import asynccontextmanager +from datetime import datetime, timezone from typing import Any import pytest @@ -22,7 +23,7 @@ def __init__( ) -> None: self.primary_conflict = primary_conflict self.calls: list[tuple[str, tuple[object, ...]]] = [] - self.fetchvals = iter( + self.fetchvals = iter([datetime(2026, 9, 5, tzinfo=timezone.utc)] + ( ["evidence-resource", "assignment-resource", "assertion"] if existing_evidence else [ @@ -32,7 +33,7 @@ def __init__( "assignment-resource", "assertion", ] - ) + )) @asynccontextmanager async def transaction(self): @@ -48,10 +49,10 @@ async def fetchval(self, query: str, *args: object) -> Any: self.calls.append((query, args)) return next(self.fetchvals) - async def fetchrow(self, query: str, *args: object) -> dict[str, str] | None: - """Return no row only when the imported primary blocks the write.""" + async def fetchrow(self, query: str, *args: object) -> dict[str, object] | None: + """Return the current primary conflict before any provenance write.""" self.calls.append((query, args)) - return None if self.primary_conflict else {"voice_type_code": str(args[1])} + return {"is_primary": True} if self.primary_conflict else None def test_additional_voice_creates_prov_derivation_and_assignment_atomically() -> None: @@ -70,12 +71,14 @@ def test_additional_voice_creates_prov_derivation_and_assignment_atomically() -> sql = "\n".join(query for query, _args in conn.calls) assert "prov_was_derived_from" in sql - assert "where effective_to is null" in sql - assert "where not source_post_voice.is_primary" in sql - assert "where effective_to is null" in sql + assert "and effective_to is null and not is_primary" in sql + assert "set truth_status_code" not in sql + assert "set effective_to = $3" in sql assert "voice-assignment/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1/vops" in str( conn.calls ) + assert "for update" in conn.calls[0][0] + assert sql.index("for update") < sql.index("clock_timestamp()") def test_additional_voice_cannot_demote_imported_primary() -> None: @@ -92,6 +95,7 @@ def test_additional_voice_cannot_demote_imported_primary() -> None: evidence_post_id="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa2", ) ) + assert not any("insert into" in query for query, _ in conn.calls) def test_existing_evidence_binding_is_typed_as_a_prov_entity() -> None: From b8dd36e713ea1cb123de272fe61314145448e818 Mon Sep 17 00:00:00 2001 From: Codex Date: Sat, 5 Sep 2026 19:50:46 +0900 Subject: [PATCH 2/3] test(voice): audit retained and corrected perspective states --- ...story-combined-evidence-desktop-20260905.png | Bin 0 -> 15838 bytes ...istory-combined-evidence-mobile-20260905.png | Bin 0 -> 11882 bytes ...tory-corrected-evidence-desktop-20260905.png | Bin 0 -> 15828 bytes ...story-corrected-evidence-mobile-20260905.png | Bin 0 -> 11964 bytes docs/storybook-inventory.md | 2 +- .../components/VoicePerspectiveList.stories.tsx | 14 ++++++++++++++ 6 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 docs/screenshots/voice-history-combined-evidence-desktop-20260905.png create mode 100644 docs/screenshots/voice-history-combined-evidence-mobile-20260905.png create mode 100644 docs/screenshots/voice-history-corrected-evidence-desktop-20260905.png create mode 100644 docs/screenshots/voice-history-corrected-evidence-mobile-20260905.png diff --git a/docs/screenshots/voice-history-combined-evidence-desktop-20260905.png b/docs/screenshots/voice-history-combined-evidence-desktop-20260905.png new file mode 100644 index 0000000000000000000000000000000000000000..3fe655f16a3ba3fff4f5ac5aaf6c6726a8ed6f1f GIT binary patch literal 15838 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 bAq-S4;7kJQAB;KV4%ANx1@UT8qoDr*yeopi literal 0 HcmV?d00001 diff --git a/docs/screenshots/voice-history-corrected-evidence-desktop-20260905.png b/docs/screenshots/voice-history-corrected-evidence-desktop-20260905.png new file mode 100644 index 0000000000000000000000000000000000000000..9070db88e0c3ea30aeb9ff3221ac320a9f7b2419 GIT binary patch literal 15828 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 literal 0 HcmV?d00001 diff --git a/docs/storybook-inventory.md b/docs/storybook-inventory.md index 62c5f9cf3..5a62b0964 100644 --- a/docs/storybook-inventory.md +++ b/docs/storybook-inventory.md @@ -9,7 +9,7 @@ operator-facing control you can click before changing product CSS. | `Reports/LeftoverPairList` | Read closest/farthest leftover pairs with named `R`, `Y`/`E`, rank, `U`, `s`, `e`, `x`, `R̂`, `ξ`/`ζ`, and `d`, then open that post. The leftover-map graphic display sits above the pair buttons when coordinates are finite, leftover-map axes name persisted leftover-map axis share, leftover-map axis ticks name persisted coordinates, and pair segments name persisted leftover-map distance. | `LeftoverPairList`, `LeftoverMapPlot`, `ticket-list`, `post-badge` | | `Workspace/OperationsDashboard` | Compare Event and post counts, inspect external-information coverage, then open the cited source behind a claim, handover, or repeat-issue fact. `EvidenceReady`, `NarrowViewport`, `AnalysisPendingAndMissingEvidence`, `AnalysisFailed`, and `LoadError` cover populated, mobile, unavailable-evidence, analysis-pending, retryable failure, and transport-error states. | `--color-dashboard-*`, `OperationsDashboard` | | `Post/SimilarVocPanel` | Compare ontology/semantic similar VOC and prior action evidence, then open the source; unavailable states show no fabricated TEPP theta or weight. | `SimilarVocPanel.css`, `SimilarVocPanel` | -| `Post/Recorded perspectives` | Read the imported primary and every evidence-connected additional Voice with its recorded truth state instead of flattening them into one compound category. `CombinedEvidence`, `RejectedEvidence`, and `NarrowViewport` cover desktop, rejected-evidence, and narrow layouts. | `VoicePerspectiveList`, `ticket-list`, `post-meta` | +| `Post/Recorded perspectives` | Read the imported primary and every evidence-connected additional Voice with its recorded truth state instead of flattening them into one compound category. `CombinedEvidence`, `CorrectedEvidence`, `RejectedEvidence`, and `NarrowViewport` cover the retained Observed state, corrected Proposed state, rejected evidence, and narrow layouts. The 2026-09-05 `voice-history-*-desktop-20260905.png` and `voice-history-*-mobile-20260905.png` screenshots in `docs/screenshots/` audit these existing tokens at 1440 and 390 CSS pixels; these are synthetic component renders, separate from authenticated API evidence. | `VoicePerspectiveList`, `ticket-list`, `post-meta` | | `Post/Connect perspective` | Choose one unassigned Voice and an explicit evidence state, then record the open post as its evidence. `Ready`, `Completed`, and `NarrowViewport` cover untouched, successful, and mobile states. | `VoiceAssignmentForm`, `admin-form`, `btn-primary` | | `Evidence/CitationChip` | Click a cited title to open that source post. | `--color-chip-border`, `--radius-chip`, `CitationChip` | | `Evidence/OrganizationAliasChip` | Click a cataloged org; the parenthetical is the unique corroborated SKOS companion. | `--color-chip-border`, `--radius-chip`, `OrganizationAliasChip` | diff --git a/frontend/src/components/VoicePerspectiveList.stories.tsx b/frontend/src/components/VoicePerspectiveList.stories.tsx index d081a3e75..c13a73d53 100644 --- a/frontend/src/components/VoicePerspectiveList.stories.tsx +++ b/frontend/src/components/VoicePerspectiveList.stories.tsx @@ -42,6 +42,20 @@ export const NarrowViewport: Story = { parameters: { viewport: { defaultViewport: "mobile1" } }, }; +export const CorrectedEvidence: Story = { + args: { + voices: meta.args.voices.map((voice) => ( + voice.is_primary ? voice : { ...voice, truth_status_code: "truth_proposed" } + )), + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await expect(canvas.getByText("Voice of Customer (Observed)")).toBeVisible(); + await expect(canvas.getByText("Voice of Process (Proposed)")).toBeVisible(); + await expect(canvas.getByText("Evidence connected")).toBeVisible(); + }, +}; + export const RejectedEvidence: Story = { args: { voices: [ From e6c1d157dad9f0d26ee703de455b2106a77b34d9 Mon Sep 17 00:00:00 2001 From: Codex Date: Sat, 5 Sep 2026 19:59:03 +0900 Subject: [PATCH 3/3] docs(voice): pin queue and synthetic acceptance evidence --- ...velopment-loop-20260905-voice-history.json | 3627 +++++++++++++++++ docs/product-technical-gap-baseline.md | 105 + 2 files changed, 3732 insertions(+) create mode 100644 docs/development-loop-20260905-voice-history.json diff --git a/docs/development-loop-20260905-voice-history.json b/docs/development-loop-20260905-voice-history.json new file mode 100644 index 000000000..c41656318 --- /dev/null +++ b/docs/development-loop-20260905-voice-history.json @@ -0,0 +1,3627 @@ +{ + "observed_at_utc": "2026-09-05T10:57:25+00:00", + "protected_main": "83eba56149eb802cd63642c507c324c9976ec78e", + "candidate_implementation_head": "b8dd36e713ea1cb123de272fe61314145448e818", + "candidate_pr": 936, + "parent_pr": 780, + "parent_head": "1d8fa267b059289e77301a09985dfac70a439814", + "open_prs": [ + { + "pr": 936, + "head": "b8dd36e713ea1cb123de272fe61314145448e818", + "base_branch": "fix/voice-export-authority-20260828", + "base_head": "1d8fa267b059289e77301a09985dfac70a439814", + "draft": false, + "merge_state": "UNSTABLE", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "QUEUED": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 935, + "head": "7c5f9c11c2b9a4bef4aa2e6d3c7926d92b7d15d3", + "base_branch": "codex/voice-gap-20260905", + "base_head": "3060dd7000791160c2bcc98351af129899ff32ff", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 934, + "head": "3060dd7000791160c2bcc98351af129899ff32ff", + "base_branch": "fix/voice-export-authority-20260828", + "base_head": "1d8fa267b059289e77301a09985dfac70a439814", + "draft": false, + "merge_state": "UNSTABLE", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "QUEUED": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 933, + "head": "de4e6cf9a48b042af0bb1128fa9b194abd1952a5", + "base_branch": "docs/public-surface-deepwiki", + "base_head": "00e90e03ae1afb7f13ae843dd578694d0f72b325", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 2, + "SKIPPED": 2 + }, + "exact_head_nonpassing_terminal_checks": [ + "Full test suite", + "Frontend lint, test, build" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 932, + "head": "fe01453821105e62274a754797f6bf51a2b9ae7d", + "base_branch": "feat/i18n-versioned-translation-ledger", + "base_head": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 929, + "head": "2a8ed5d02f4a3082b346d923d754c1ff37ebff52", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": true, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 17, + "QUEUED": 11, + "SKIPPED": 3 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 928, + "head": "322b58247e933592ceb6d6eab6cac258ee5335cd", + "base_branch": "feat/leftover-map-axis-origin-badge-v21150", + "base_head": "34595e41ee65b89a468efeebf64fee86eff881d9", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 927, + "head": "34595e41ee65b89a468efeebf64fee86eff881d9", + "base_branch": "feat/leftover-map-compare-axis-origin-badge-v21140", + "base_head": "ede308929b20f24a56c5ff3ae2211dd84d20f3ae", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 926, + "head": "ede308929b20f24a56c5ff3ae2211dd84d20f3ae", + "base_branch": "feat/leftover-map-compare-plot-origin-badge-v21130", + "base_head": "76ebcb10a72955a68c616c02e6e0732db0800f93", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 925, + "head": "8cbaad528c9aaa8d4e356db1577b932fa85ac686", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 7, + "SUCCESS": 11, + "CANCELLED": 9 + }, + "exact_head_nonpassing_terminal_checks": [ + "CodeQL compatibility analysis (actions)", + "Semgrep (multi-language SAST)", + "CodeQL compatibility analysis (javascript-typescript)", + "CodeQL compatibility analysis (python)", + "noema-review", + "admit-current-head", + "strix", + "trivy-fs", + "scorecard" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 921, + "head": "76ebcb10a72955a68c616c02e6e0732db0800f93", + "base_branch": "feat/leftover-map-plot-origin-badge-v21120", + "base_head": "d54c5611cc693bb7a85e9164814761417ccb563e", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 920, + "head": "d54c5611cc693bb7a85e9164814761417ccb563e", + "base_branch": "feat/leftover-map-compare-list-criterion-origin-badge-v21110", + "base_head": "a91d2ec56bad922f9159e17649f77d229a0f98d3", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 919, + "head": "caf8ee0f576eb23dc80d907fccfdcd6a4cecb232", + "base_branch": "fix/contextual-orchestrator-owner-boundary", + "base_head": "e5711282c48cc20d0a88fb56a9e382d500989c72", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 918, + "head": "a91d2ec56bad922f9159e17649f77d229a0f98d3", + "base_branch": "feat/leftover-map-compare-list-post-origin-badge-v21100", + "base_head": "8192b48560a919c800ec47927adc966179a2b572", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 917, + "head": "8192b48560a919c800ec47927adc966179a2b572", + "base_branch": "feat/leftover-map-list-criterion-origin-badge-v21090", + "base_head": "7978e92561e16a3ea4e2837fef1f35fe0bec3f3c", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 916, + "head": "7978e92561e16a3ea4e2837fef1f35fe0bec3f3c", + "base_branch": "feat/leftover-map-list-post-origin-badge-v21080", + "base_head": "371bb82cea8437f907249d6e8b166f63dfe5bb8e", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 915, + "head": "8c74712f2af4acf76871c71a9fd72c6aa2912f4a", + "base_branch": "feat/dichotomous-measurement-policy", + "base_head": "c316bfbde8644feda7e49579d43cc162e99b0bad", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 914, + "head": "64340c0a86f876f32d0a37ef17321f3d9b993818", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": true, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "QUEUED": 14, + "SKIPPED": 4 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 913, + "head": "371bb82cea8437f907249d6e8b166f63dfe5bb8e", + "base_branch": "feat/leftover-map-compare-plot-criterion-origin-badge-v21070", + "base_head": "2ac677bae522eb1925edc6bd105f1f57a287f73e", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 912, + "head": "2ac677bae522eb1925edc6bd105f1f57a287f73e", + "base_branch": "feat/leftover-map-compare-plot-post-origin-badge-v21060", + "base_head": "f2a1860185714d2921162a754425065d867bcce6", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 911, + "head": "5d40eed35a0b6e0d182397f8d02b29c38e9bdd17", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": true, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 27, + "FAILURE": 6, + "SKIPPED": 5, + "QUEUED": 1 + }, + "exact_head_nonpassing_terminal_checks": [ + "CodeQL compatibility analysis (actions)", + "CodeQL compatibility analysis (javascript-typescript)", + "CodeQL compatibility analysis (python)", + "noema-review", + "dependency-review", + "strix" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 909, + "head": "e82aed38c0997588529e21fe0e1bf4159f3c198c", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 14, + "SKIPPED": 5 + }, + "exact_head_nonpassing_terminal_checks": [ + "Analyze (python)", + "Analyze (actions)", + "Detect CodeQL languages", + "admit-current-head", + "required-workflow-bootstrap", + "scan-pr-queue", + "Detect changed scope", + "Detect changed scope", + "Detect changed scope", + "Full test suite", + "cancel-superseded-opencode-review-runs", + "Admit current pull request head", + "Frontend lint, test, build", + "cancel-superseded-pr-runs" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 908, + "head": "00e90e03ae1afb7f13ae843dd578694d0f72b325", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 13, + "SKIPPED": 10, + "SUCCESS": 6 + }, + "exact_head_nonpassing_terminal_checks": [ + "Analyze (python)", + "admit-current-head", + "Detect changed scope", + "Detect changed scope", + "CodeQL compatibility analysis (actions)", + "cancel-superseded-opencode-review-runs", + "Admit current pull request head", + "CodeQL compatibility analysis (javascript-typescript)", + "CodeQL compatibility analysis (python)", + "admit-current-head", + "cancel-superseded-pr-runs", + "trivy-fs", + "scorecard" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 907, + "head": "847a15e73e69bfc768d517a83fa8706aecfafe7e", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": true, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 7, + "SUCCESS": 22, + "FAILURE": 5, + "CANCELLED": 2 + }, + "exact_head_nonpassing_terminal_checks": [ + "CodeQL compatibility analysis (actions)", + "CodeQL compatibility analysis (javascript-typescript)", + "CodeQL compatibility analysis (python)", + "noema-review", + "strix", + "publish-manual-pr-evidence-status", + "opencode-review" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 904, + "head": "09d7be51a6b599769fb78371c9995a99d7df6974", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 11, + "SKIPPED": 7, + "SUCCESS": 10 + }, + "exact_head_nonpassing_terminal_checks": [ + "Detect changed scope", + "CodeQL compatibility analysis (actions)", + "Semgrep (multi-language SAST)", + "Admit current pull request head", + "CodeQL compatibility analysis (javascript-typescript)", + "CodeQL compatibility analysis (python)", + "noema-review", + "admit-current-head", + "cancel-superseded-pr-runs", + "trivy-fs", + "scorecard" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 903, + "head": "e325b3f63fdb9c34a7c62ae58045ec36e34b1879", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 11, + "SKIPPED": 7, + "SUCCESS": 10 + }, + "exact_head_nonpassing_terminal_checks": [ + "Analyze (actions)", + "CodeQL compatibility analysis (actions)", + "Semgrep (multi-language SAST)", + "CodeQL compatibility analysis (javascript-typescript)", + "CodeQL compatibility analysis (python)", + "noema-review", + "admit-current-head", + "cancel-superseded-pr-runs", + "strix", + "trivy-fs", + "scorecard" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 902, + "head": "c316bfbde8644feda7e49579d43cc162e99b0bad", + "base_branch": "fix/contextual-orchestrator-owner-boundary", + "base_head": "e5711282c48cc20d0a88fb56a9e382d500989c72", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 901, + "head": "d44cd875a93cb929b6e30b744976d2c19e67d981", + "base_branch": "fix/voice-export-authority-20260828", + "base_head": "1d8fa267b059289e77301a09985dfac70a439814", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 899, + "head": "e5711282c48cc20d0a88fb56a9e382d500989c72", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 12, + "SKIPPED": 5 + }, + "exact_head_nonpassing_terminal_checks": [ + "Analyze (python)", + "Analyze (actions)", + "Detect CodeQL languages", + "admit-current-head", + "required-workflow-bootstrap", + "scan-pr-queue", + "Detect changed scope", + "Detect changed scope", + "Detect changed scope", + "cancel-superseded-opencode-review-runs", + "Admit current pull request head", + "cancel-superseded-pr-runs" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 897, + "head": "c4194085f7bc0c7383f994da81d6a8146b695dc8", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 15, + "SKIPPED": 8 + }, + "exact_head_nonpassing_terminal_checks": [ + "Analyze (python)", + "Analyze (actions)", + "Detect CodeQL languages", + "admit-current-head", + "required-workflow-bootstrap", + "scan-pr-queue", + "Detect changed scope", + "Detect changed scope", + "Detect changed scope", + "cancel-superseded-opencode-review-runs", + "Admit current pull request head", + "noema-review", + "cancel-superseded-pr-runs", + "strix", + "publish-manual-pr-evidence-status" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 893, + "head": "f2a1860185714d2921162a754425065d867bcce6", + "base_branch": "feat/leftover-map-plot-post-origin-badge-v21050", + "base_head": "c941929c7244f64e31e5ceca8b3c6f6bcb1e3541", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 892, + "head": "c941929c7244f64e31e5ceca8b3c6f6bcb1e3541", + "base_branch": "feat/leftover-map-plot-criterion-origin-badge-v21040", + "base_head": "47dd988d6b5cdea713b163b40702235b65af5ffe", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 891, + "head": "47dd988d6b5cdea713b163b40702235b65af5ffe", + "base_branch": "feat/leftover-map-axis-tick-origin-badge-v21030", + "base_head": "4bfb490d3e2bd8dd74caabaf2922ac3f6755749a", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 889, + "head": "4bfb490d3e2bd8dd74caabaf2922ac3f6755749a", + "base_branch": "feat/leftover-map-compare-axis-tick-origin-badge-v21020", + "base_head": "7637fc8bbe165be297794a74187aa1065e82486c", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 888, + "head": "e5f38f3bda1caa1d48975204918c994a6a3dff3f", + "base_branch": "feat/dashboard-case-metrics", + "base_head": "f40e4ed8020a7db4099730d558da942a0f331614", + "draft": true, + "merge_state": "DIRTY", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 3, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "FAILURE": 1, + "SUCCESS": 1 + }, + "exact_head_nonpassing_terminal_checks": [ + "Full test suite" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 887, + "head": "7637fc8bbe165be297794a74187aa1065e82486c", + "base_branch": "feat/leftover-map-compare-plot-tick-origin-badge-v21010", + "base_head": "4a31a41f9036cad4ba35ed16b8fdf1c1212e4847", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 886, + "head": "4a31a41f9036cad4ba35ed16b8fdf1c1212e4847", + "base_branch": "feat/leftover-map-plot-tick-origin-badge-v21000", + "base_head": "7a6c0384f4d82544541b6af70cf178c51ed60d62", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 885, + "head": "7a6c0384f4d82544541b6af70cf178c51ed60d62", + "base_branch": "feat/leftover-map-compare-list-criterion-coordinates-v2990", + "base_head": "bcbb7ce03f92304ccdc34fb014a8db8e3bf8a659", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 884, + "head": "bcbb7ce03f92304ccdc34fb014a8db8e3bf8a659", + "base_branch": "feat/leftover-map-compare-list-post-coordinates-v2980", + "base_head": "bdd48e23a16358b91a652e45c4373c6f45e389fa", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 883, + "head": "bdd48e23a16358b91a652e45c4373c6f45e389fa", + "base_branch": "feat/leftover-map-list-criterion-coordinates-v2970", + "base_head": "094d1a0c8bcfd4b351f9665c47a84c510cbab94d", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 3, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 882, + "head": "094d1a0c8bcfd4b351f9665c47a84c510cbab94d", + "base_branch": "feat/leftover-map-list-post-coordinates-v2960", + "base_head": "167888d669ba1b44c7dd0209ab26c9be9f19bf93", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 4, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 881, + "head": "167888d669ba1b44c7dd0209ab26c9be9f19bf93", + "base_branch": "feat/leftover-map-plot-post-coordinates-v2950", + "base_head": "c69459a3597a8a8af618417ce2c2a57a3114930b", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 3, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 880, + "head": "c69459a3597a8a8af618417ce2c2a57a3114930b", + "base_branch": "feat/leftover-map-compare-plot-post-coordinates-v2940", + "base_head": "d9972c260b1864e0b6391cbf050686e0bdd73359", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 879, + "head": "d9972c260b1864e0b6391cbf050686e0bdd73359", + "base_branch": "feat/leftover-map-compare-plot-criterion-coordinates-v2930", + "base_head": "617b97126a14337a4848f2b5663ada381ae693c0", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 3, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 878, + "head": "617b97126a14337a4848f2b5663ada381ae693c0", + "base_branch": "feat/leftover-map-plot-criterion-coordinates-v2920", + "base_head": "89ed56b17acec187fd8e5f756c6b9a6a8f00438c", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 877, + "head": "86b8eaab48a4b47610d539bb941b97eb24b7e951", + "base_branch": "feat/leftover-map-axis-tick-share-badge-v2910", + "base_head": "d19f1fdc18cf16bac0e80bf6ae4257b831a4a619", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 876, + "head": "89ed56b17acec187fd8e5f756c6b9a6a8f00438c", + "base_branch": "feat/leftover-map-axis-tick-share-badge-v2910", + "base_head": "d19f1fdc18cf16bac0e80bf6ae4257b831a4a619", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 875, + "head": "d19f1fdc18cf16bac0e80bf6ae4257b831a4a619", + "base_branch": "feat/leftover-map-compare-axis-tick-share-badge-v2900", + "base_head": "ba58c21a92966fe098988e528020d5528978d06c", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 874, + "head": "ba58c21a92966fe098988e528020d5528978d06c", + "base_branch": "feat/leftover-map-plot-tick-share-badge-v2890", + "base_head": "923bcfe8a9146286ec3098adb784f55ffe32a78e", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 873, + "head": "923bcfe8a9146286ec3098adb784f55ffe32a78e", + "base_branch": "feat/leftover-map-compare-plot-tick-share-badge-v2880", + "base_head": "7bdc562b222ab7681ff6b929a7b3fb2cd8068a3c", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 3, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 872, + "head": "7bdc562b222ab7681ff6b929a7b3fb2cd8068a3c", + "base_branch": "feat/leftover-map-axis-tick-badge-v2870", + "base_head": "e9e4c2a622219bfbddfe71c74b14483f7b36aa5c", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 871, + "head": "e9e4c2a622219bfbddfe71c74b14483f7b36aa5c", + "base_branch": "feat/leftover-map-compare-axis-tick-badge-v2860", + "base_head": "b086d97675586ee83f5478d7b4e3bf84b0a5da8c", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 870, + "head": "b086d97675586ee83f5478d7b4e3bf84b0a5da8c", + "base_branch": "feat/leftover-map-compare-plot-tick-axis-badge-v2850", + "base_head": "98a29e4adf0daad8bd30c945e41d45922051312d", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 869, + "head": "98a29e4adf0daad8bd30c945e41d45922051312d", + "base_branch": "feat/leftover-map-plot-tick-axis-badge-v2840", + "base_head": "5218a5c0e6821451efdfac0c1286ef7273081af7", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 868, + "head": "5218a5c0e6821451efdfac0c1286ef7273081af7", + "base_branch": "feat/leftover-map-compare-plot-axis-badge-v2830", + "base_head": "cf7bb55db1ba098e4ab264605634a686e4664d56", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 867, + "head": "cf7bb55db1ba098e4ab264605634a686e4664d56", + "base_branch": "feat/leftover-map-axis-singular-only-v2820", + "base_head": "593b8d8246c73226e224d2a9d251668649cbb54f", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 866, + "head": "593b8d8246c73226e224d2a9d251668649cbb54f", + "base_branch": "feat/leftover-map-plot-axis-singular-v2810", + "base_head": "a3613acf8cafac056850ec7ebc45f6d77f77a074", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 865, + "head": "a3613acf8cafac056850ec7ebc45f6d77f77a074", + "base_branch": "feat/leftover-map-compare-axis-singular-v2800", + "base_head": "52b3597e5c6b825f988a9c8a7c68ae1653535982", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 863, + "head": "52b3597e5c6b825f988a9c8a7c68ae1653535982", + "base_branch": "feat/leftover-map-axis-singular-v2790", + "base_head": "f24b664ce88bb2b3898fcaa0fd0ee7f69c5e12f7", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 862, + "head": "f24b664ce88bb2b3898fcaa0fd0ee7f69c5e12f7", + "base_branch": "feat/leftover-map-compare-plot-singular-v2780", + "base_head": "3aac452eef781f3c1a5da258cd1c0c548e4930e6", + "draft": true, + "merge_state": "UNSTABLE", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 1, + "FAILURE": 1 + }, + "exact_head_nonpassing_terminal_checks": [ + "Frontend lint, test, build" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 861, + "head": "3aac452eef781f3c1a5da258cd1c0c548e4930e6", + "base_branch": "feat/leftover-map-compare-plot-ticks-v2770", + "base_head": "40fa5bdbfb9223a7ca89fccea47451a419d81048", + "draft": true, + "merge_state": "UNSTABLE", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 3, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 1, + "FAILURE": 1 + }, + "exact_head_nonpassing_terminal_checks": [ + "Frontend lint, test, build" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 860, + "head": "40fa5bdbfb9223a7ca89fccea47451a419d81048", + "base_branch": "feat/leftover-map-compare-plot-distance-v2760", + "base_head": "9ba8535327bb2d42d5305d84017e6cd08a110c68", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 4, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 859, + "head": "9ba8535327bb2d42d5305d84017e6cd08a110c68", + "base_branch": "feat/leftover-map-compare-plot-rank-v2750", + "base_head": "4b9184fd83f6749e25384d7bcf5d9d7721437b77", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 858, + "head": "4b9184fd83f6749e25384d7bcf5d9d7721437b77", + "base_branch": "feat/leftover-map-compare-plot-expected-v2740", + "base_head": "ade9ed5cc2f0530eb62d2d473d14d2ffb41eddba", + "draft": true, + "merge_state": "DIRTY", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": {}, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 857, + "head": "ade9ed5cc2f0530eb62d2d473d14d2ffb41eddba", + "base_branch": "feat/leftover-map-compare-plot-observed-v2730", + "base_head": "cf3b6d4195f2ccb5fba5b8d3359f018c8f26332d", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 856, + "head": "cf3b6d4195f2ccb5fba5b8d3359f018c8f26332d", + "base_branch": "feat/leftover-map-compare-plot-residual-v2720", + "base_head": "1087b16f2dba743bc0d1d4e08ff50811b5845393", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 855, + "head": "1087b16f2dba743bc0d1d4e08ff50811b5845393", + "base_branch": "feat/leftover-map-compare-plot-unexplained-leftover-v2710", + "base_head": "935cdea99c7c53ec7e99e4f455cd0653e34f4e30", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 854, + "head": "935cdea99c7c53ec7e99e4f455cd0653e34f4e30", + "base_branch": "feat/leftover-map-compare-plot-cross-share-v2700", + "base_head": "c4f79bc9ba4bc23317c8aa184aecd74eb1971704", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 853, + "head": "c4f79bc9ba4bc23317c8aa184aecd74eb1971704", + "base_branch": "feat/leftover-map-compare-plot-unexplained-share-v2690", + "base_head": "2c34896b5fcf8f306103d28a610aced0a9d964b4", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 852, + "head": "2c34896b5fcf8f306103d28a610aced0a9d964b4", + "base_branch": "feat/leftover-map-compare-plot-explained-share-v2680", + "base_head": "2d6e8e778e2abb491b3a3c0a8b085c8230c9def4", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 851, + "head": "2d6e8e778e2abb491b3a3c0a8b085c8230c9def4", + "base_branch": "feat/leftover-map-compare-plot-reconstruction-v2670", + "base_head": "85451d87c9ddb4559a13366b1352af1bea7aafa0", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 850, + "head": "85451d87c9ddb4559a13366b1352af1bea7aafa0", + "base_branch": "feat/leftover-map-compare-plot-incomplete-item-v2660", + "base_head": "43ce1936bfc3b035e591898ad5141a1b81cc526c", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 849, + "head": "43ce1936bfc3b035e591898ad5141a1b81cc526c", + "base_branch": "feat/leftover-map-compare-plot-incomplete-post-v2650", + "base_head": "6707725ecaeb47c33c8a55b0801c8156527c6f01", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 4, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 848, + "head": "6707725ecaeb47c33c8a55b0801c8156527c6f01", + "base_branch": "feat/leftover-map-compare-plot-item-coverage-v2640", + "base_head": "47797643dc5c3071a7bbe3970ab563755113aa5b", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 847, + "head": "9bb4f07a61a9275953974ef276a4af81940ba883", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 15, + "SKIPPED": 5 + }, + "exact_head_nonpassing_terminal_checks": [ + "Analyze (python)", + "Analyze (actions)", + "Detect CodeQL languages", + "admit-current-head", + "required-workflow-bootstrap", + "scan-pr-queue", + "Detect changed scope", + "Detect changed scope", + "Detect changed scope", + "cancel-superseded-opencode-review-runs", + "Admit current pull request head", + "noema-review", + "cancel-superseded-pr-runs", + "strix", + "publish-manual-pr-evidence-status" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 846, + "head": "47797643dc5c3071a7bbe3970ab563755113aa5b", + "base_branch": "feat/leftover-map-compare-plot-coverage-v2630", + "base_head": "7c026df8d85f9eeae9850f44cdf5e1bc6d644aa7", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 845, + "head": "7c026df8d85f9eeae9850f44cdf5e1bc6d644aa7", + "base_branch": "feat/leftover-map-compare-plot-axis-share-v2620", + "base_head": "95538f9980dcba70a6d6d174500d00c7af01df6c", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 844, + "head": "95538f9980dcba70a6d6d174500d00c7af01df6c", + "base_branch": "feat/leftover-map-compare-graphic-v2610", + "base_head": "ee467df2f0e322623d74e948144b78bc27964aff", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 843, + "head": "2a5ab4d735a1240997150578b151c6b6492e2f43", + "base_branch": "feat/leftover-map-compare-axis-share-v2610", + "base_head": "12e40c93acb8473075199d8c8124b85b3d39adff", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 842, + "head": "12e40c93acb8473075199d8c8124b85b3d39adff", + "base_branch": "feat/leftover-map-compare-coordinates-payload-v2600", + "base_head": "cbf994462ec787d4d3e7a2749f913f62fd9c96d0", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 841, + "head": "ee467df2f0e322623d74e948144b78bc27964aff", + "base_branch": "feat/leftover-map-compare-coordinates-payload-v2600", + "base_head": "cbf994462ec787d4d3e7a2749f913f62fd9c96d0", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 840, + "head": "cbf994462ec787d4d3e7a2749f913f62fd9c96d0", + "base_branch": "feat/leftover-map-compare-coordinates-v2590", + "base_head": "51bf33a83b8a03e0dc4de65422313e38c9d45a21", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 3, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 839, + "head": "51bf33a83b8a03e0dc4de65422313e38c9d45a21", + "base_branch": "feat/leftover-map-compare-rank-v2580", + "base_head": "6c7c66fc4a39dc140f85e93d87f899ddb0695229", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 838, + "head": "6c7c66fc4a39dc140f85e93d87f899ddb0695229", + "base_branch": "feat/leftover-map-compare-expected-v2570", + "base_head": "e6638a8e1d93b89376c004c60db9f016e03f00e0", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 837, + "head": "e6638a8e1d93b89376c004c60db9f016e03f00e0", + "base_branch": "feat/leftover-map-compare-observed-v2560", + "base_head": "ada0c86e86c0e1570269d3a5d1f9121624938797", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 836, + "head": "ada0c86e86c0e1570269d3a5d1f9121624938797", + "base_branch": "feat/leftover-map-compare-residual-v2550", + "base_head": "a825c336d87a4f481717e45800630e4805ab15bc", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 835, + "head": "a825c336d87a4f481717e45800630e4805ab15bc", + "base_branch": "feat/leftover-map-compare-unexplained-v2540", + "base_head": "18d89b498a58d68ec58100065d71664f2c691347", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 833, + "head": "18d89b498a58d68ec58100065d71664f2c691347", + "base_branch": "feat/leftover-map-compare-cross-share-v2530", + "base_head": "2cefc0b63436989210bca3204e7750e87edba662", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 831, + "head": "2cefc0b63436989210bca3204e7750e87edba662", + "base_branch": "feat/leftover-map-compare-unexplained-share-v2520", + "base_head": "4d82c2872cc27e08c0357cb4b7cf071ab81ab9d7", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 829, + "head": "4d82c2872cc27e08c0357cb4b7cf071ab81ab9d7", + "base_branch": "feat/leftover-map-compare-explained-share-v2510", + "base_head": "ead81bd3f51005f083871dc0bd49148a42a351b2", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 828, + "head": "e79137611f0d3041ad836c21e49a95bf7ef1001e", + "base_branch": "feat/leftover-map-compare-incomplete-item-v2490", + "base_head": "bca6baabd917478bf4f6b688ec2755cde95e3575", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 3, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 827, + "head": "ead81bd3f51005f083871dc0bd49148a42a351b2", + "base_branch": "feat/leftover-map-compare-reconstruction-v2500", + "base_head": "a4bf239f1cf07ea29bd49b28300f252be0ca7a19", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 826, + "head": "a4bf239f1cf07ea29bd49b28300f252be0ca7a19", + "base_branch": "feat/leftover-map-compare-incomplete-item-v2490", + "base_head": "bca6baabd917478bf4f6b688ec2755cde95e3575", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 3, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 825, + "head": "bca6baabd917478bf4f6b688ec2755cde95e3575", + "base_branch": "feat/leftover-map-compare-incomplete-post-v2480", + "base_head": "8b2ed956b2ba66e3aa2d149b701c242e3b016dd9", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 824, + "head": "8b2ed956b2ba66e3aa2d149b701c242e3b016dd9", + "base_branch": "feat/leftover-map-compare-item-coverage-v2470", + "base_head": "6726353a13798c0d1566821de9885f1783ebe35f", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 823, + "head": "eb172c40d8ecd08f3e1c220cbf3117b488cddb30", + "base_branch": "feat/leftover-map-plot-singular-v2460", + "base_head": "b7222713a69acdf3d32bbce992001a2433946d21", + "draft": false, + "merge_state": "UNSTABLE", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 1, + "FAILURE": 1 + }, + "exact_head_nonpassing_terminal_checks": [ + "Frontend lint, test, build" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 822, + "head": "6726353a13798c0d1566821de9885f1783ebe35f", + "base_branch": "feat/leftover-map-compare-coverage-v2460", + "base_head": "11a785533ba52e6b1c6854203818902e38736dc5", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 821, + "head": "11a785533ba52e6b1c6854203818902e38736dc5", + "base_branch": "feat/leftover-map-list-post-coverage-helper-v2450", + "base_head": "a2c965511d26923bd878ec56d655fb8a0183c4d7", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 820, + "head": "b7222713a69acdf3d32bbce992001a2433946d21", + "base_branch": "feat/leftover-map-list-post-coverage-helper-v2450", + "base_head": "a2c965511d26923bd878ec56d655fb8a0183c4d7", + "draft": true, + "merge_state": "UNSTABLE", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 1, + "FAILURE": 1 + }, + "exact_head_nonpassing_terminal_checks": [ + "Frontend lint, test, build" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 819, + "head": "a2c965511d26923bd878ec56d655fb8a0183c4d7", + "base_branch": "feat/leftover-map-list-incomplete-item-v2440", + "base_head": "aa3208959950637b52001457e7d4dfc1ef1764eb", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 818, + "head": "aa3208959950637b52001457e7d4dfc1ef1764eb", + "base_branch": "feat/leftover-map-list-incomplete-post-v2430", + "base_head": "ef30930271a729044af2f690df04f0b89f751ffd", + "draft": false, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 817, + "head": "ef30930271a729044af2f690df04f0b89f751ffd", + "base_branch": "feat/leftover-map-list-item-coverage-v2420", + "base_head": "1e3d13ea5fa5744e8c0b9b7b4e8470fceb7630ea", + "draft": true, + "merge_state": "CLEAN", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 2, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SUCCESS": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 816, + "head": "326a2f016f7bbf1f01bffdffa8b96a9b1451b6c0", + "base_branch": "feat/leftover-map-plot-incomplete-item-v2410", + "base_head": "63092ded55a7c7d65b0f6586980b20d0d30f587d", + "draft": true, + "merge_state": "UNSTABLE", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "QUEUED": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 815, + "head": "c9f864383ebc9222bb3e69008e51b81ce14540cb", + "base_branch": "feat/leftover-map-plot-incomplete-v2400", + "base_head": "d837883c67fa9753f4b0cbf4326d33759bdd98eb", + "draft": true, + "merge_state": "UNSTABLE", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 1, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "QUEUED": 2 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 814, + "head": "d837883c67fa9753f4b0cbf4326d33759bdd98eb", + "base_branch": "feat/leftover-map-plot-item-coverage-v2390", + "base_head": "de2a8a8b8fe275542f3350c649c7bca759b049a3", + "draft": true, + "merge_state": "DIRTY", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": {}, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 813, + "head": "bf593e713a5fa1879b26fd89ea6677e5b9f2cd48", + "base_branch": "feat/leftover-map-plot-coverage-v2380", + "base_head": "64964cb6c14703a9b4bd74bed16d43844d49d102", + "draft": true, + "merge_state": "DIRTY", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": {}, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 812, + "head": "3bbc5dbc984e60692dafe8a5a7e284c91f644b17", + "base_branch": "feat/leftover-map-segment-rank-v2370", + "base_head": "e626a1d0770208d6f821e06542091aa2ead87f25", + "draft": true, + "merge_state": "DIRTY", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": {}, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 811, + "head": "98c794fe1f94b8c5a49a8ecbeced0141e3900ffc", + "base_branch": "feat/leftover-map-segment-explained-share-v2300", + "base_head": "5a8afbd9099efae658ee3c2a9b02ceaa3b78022c", + "draft": true, + "merge_state": "DIRTY", + "review_decision": null, + "auto_merge": false, + "unresolved_threads": 4, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": {}, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 808, + "head": "ef38ddc9cf4f81c6a30050fa2409d294779fbd93", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 8, + "SUCCESS": 11, + "CANCELLED": 11 + }, + "exact_head_nonpassing_terminal_checks": [ + "CodeQL compatibility analysis (actions)", + "Semgrep (multi-language SAST)", + "CodeQL compatibility analysis (javascript-typescript)", + "CodeQL compatibility analysis (python)", + "noema-review", + "admit-current-head", + "osv-scan", + "dependency-review", + "strix", + "trivy-fs", + "scorecard" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 802, + "head": "32f1cda10a2a1a6cabd64a3ae6f59bd6f0b20fd6", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": true, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "QUEUED": 16, + "SKIPPED": 3 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 780, + "head": "1d8fa267b059289e77301a09985dfac70a439814", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": false, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": true, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 11, + "QUEUED": 3, + "SKIPPED": 8, + "SUCCESS": 5 + }, + "exact_head_nonpassing_terminal_checks": [ + "admit-current-head", + "required-workflow-bootstrap", + "Detect changed scope", + "Detect changed scope", + "Detect changed scope", + "CodeQL compatibility analysis (actions)", + "cancel-superseded-opencode-review-runs", + "Admit current pull request head", + "CodeQL compatibility analysis (javascript-typescript)", + "CodeQL compatibility analysis (python)", + "cancel-superseded-pr-runs" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 774, + "head": "0e4ba4e00a1578aba6f80fa25d7d779516b9af96", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 15, + "SKIPPED": 5 + }, + "exact_head_nonpassing_terminal_checks": [ + "Analyze (python)", + "Analyze (actions)", + "Detect CodeQL languages", + "admit-current-head", + "required-workflow-bootstrap", + "scan-pr-queue", + "Detect changed scope", + "Detect changed scope", + "Detect changed scope", + "cancel-superseded-opencode-review-runs", + "Admit current pull request head", + "noema-review", + "cancel-superseded-pr-runs", + "strix", + "publish-manual-pr-evidence-status" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 772, + "head": "781ebb11a00b50bf1956ff3536eef46160271931", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 15, + "SKIPPED": 5 + }, + "exact_head_nonpassing_terminal_checks": [ + "Analyze (python)", + "Analyze (actions)", + "Detect CodeQL languages", + "admit-current-head", + "required-workflow-bootstrap", + "scan-pr-queue", + "Detect changed scope", + "Detect changed scope", + "Detect changed scope", + "cancel-superseded-opencode-review-runs", + "Admit current pull request head", + "noema-review", + "cancel-superseded-pr-runs", + "strix", + "publish-manual-pr-evidence-status" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 771, + "head": "9a4dbfcd46d955cd758148cf55cfd5ee795b02cd", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 15, + "SKIPPED": 5 + }, + "exact_head_nonpassing_terminal_checks": [ + "Analyze (python)", + "Analyze (actions)", + "Detect CodeQL languages", + "admit-current-head", + "required-workflow-bootstrap", + "scan-pr-queue", + "Detect changed scope", + "Detect changed scope", + "Detect changed scope", + "cancel-superseded-opencode-review-runs", + "Admit current pull request head", + "noema-review", + "cancel-superseded-pr-runs", + "strix", + "publish-manual-pr-evidence-status" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 770, + "head": "101cd8acc1d510382ea928d4f6bb9c84b199349d", + "base_branch": "main", + "base_head": "83eba56149eb802cd63642c507c324c9976ec78e", + "draft": true, + "merge_state": "BLOCKED", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "CANCELLED": 15, + "SKIPPED": 5 + }, + "exact_head_nonpassing_terminal_checks": [ + "Analyze (python)", + "Analyze (actions)", + "Detect CodeQL languages", + "admit-current-head", + "required-workflow-bootstrap", + "scan-pr-queue", + "Detect changed scope", + "Detect changed scope", + "Detect changed scope", + "cancel-superseded-opencode-review-runs", + "Admit current pull request head", + "noema-review", + "cancel-superseded-pr-runs", + "strix", + "publish-manual-pr-evidence-status" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 702, + "head": "93e7b81d096ddfc1fda9080c9c6a9784cbfbcec2", + "base_branch": "main", + "base_head": "ff7431bd1851c03e737808d22c6a2d43968582f9", + "draft": true, + "merge_state": "DIRTY", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 6, + "SUCCESS": 8, + "FAILURE": 1 + }, + "exact_head_nonpassing_terminal_checks": [ + "strix" + ], + "current_head_independent_approvals": 0 + }, + { + "pr": 679, + "head": "135dfe7c4266c7a2098c622b7c9976eaf7304cdd", + "base_branch": "main", + "base_head": "ff7431bd1851c03e737808d22c6a2d43968582f9", + "draft": true, + "merge_state": "DIRTY", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 7, + "SUCCESS": 21 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 672, + "head": "a3e87a89185fae03c5f18c79e2d97d12c73e8af9", + "base_branch": "main", + "base_head": "ff7431bd1851c03e737808d22c6a2d43968582f9", + "draft": true, + "merge_state": "DIRTY", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 6, + "SUCCESS": 19 + }, + "exact_head_nonpassing_terminal_checks": [], + "current_head_independent_approvals": 0 + }, + { + "pr": 667, + "head": "0c0f4af572a94e63cc8ea4545e48f5eda32a389c", + "base_branch": "main", + "base_head": "ff7431bd1851c03e737808d22c6a2d43968582f9", + "draft": true, + "merge_state": "DIRTY", + "review_decision": "REVIEW_REQUIRED", + "auto_merge": false, + "unresolved_threads": 0, + "thread_pagination_complete": true, + "checks_pagination_complete": true, + "exact_head_checks": { + "SKIPPED": 8, + "SUCCESS": 19, + "FAILURE": 1 + }, + "exact_head_nonpassing_terminal_checks": [ + "strix" + ], + "current_head_independent_approvals": 0 + } + ], + "open_issue_count": 16, + "main_ruleset": { + "organization_id": 18156473, + "repository_id": 21065108, + "independent_approvals_required": 1, + "stale_approvals_dismissed": true, + "resolved_threads_required": true, + "last_push_approval_required": false, + "unattributed_changes_extra_approval": true, + "workflows": [ + "opencode-review", + "pr-review-merge-scheduler", + "security-scan", + "strix", + "sast-semgrep", + "noema-review", + "codeql-pr" + ] + }, + "adr_number_collisions": { + "0355": [ + { + "pr": 920, + "path": "docs/adr/0355-leftover-map-plot-origin-badge.md", + "blob": "6b8083b67431defdc791edab76a32c3a24d51516" + }, + { + "pr": 915, + "path": "docs/adr/0355-dynamic-evaluation-lineage.md", + "blob": "6330370573cf122b7af9c3dc5fe1d63c466bfb2d" + } + ], + "0301": [ + { + "pr": 902, + "path": "docs/adr/0301-dichotomous-measurement-policy.md", + "blob": "705421dcd2a1135c55b64e09adda72a3f89e081d" + }, + { + "pr": 838, + "path": "docs/adr/0301-leftover-map-compare-rank.md", + "blob": "e55d8e797b0e5284321d5de4c925d89509b2c1cc" + } + ], + "0300": [ + { + "pr": 899, + "path": "docs/adr/0300-contextual-orchestrator-owner-boundary.md", + "blob": "d5aa8d058d87605dc32036485051872dafc82af9" + }, + { + "pr": 837, + "path": "docs/adr/0300-leftover-map-compare-expected.md", + "blob": "657df5920068a4bc5313eb0317a8f20ded11c438" + } + ], + "0279": [ + { + "pr": 888, + "path": "docs/adr/0279-global-ask-exact-semantic-index.md", + "blob": "e9d62ce41e78074411d2e49386881e2846a1da5d" + }, + { + "pr": 811, + "path": "docs/adr/0279-leftover-map-segment-expected.md", + "blob": "f01adbd8d8203196f4e209c239f000d2d8143c2e" + } + ], + "0335": [ + { + "pr": 877, + "path": "docs/adr/0335-leftover-map-compare-plot-tick-origin-badge.md", + "blob": "319006db0b46a6bebc674b942b6aaa19407a2928" + }, + { + "pr": 876, + "path": "docs/adr/0335-leftover-map-plot-criterion-coordinates.md", + "blob": "547d6b5c85702d3b2581d69327da39530a9371a7" + } + ], + "0305": [ + { + "pr": 844, + "path": "docs/adr/0305-leftover-map-compare-plot-axis-share.md", + "blob": "84245f23680dfc6751e7b3762a536ffbb1240b40" + }, + { + "pr": 843, + "path": "docs/adr/0305-leftover-map-compare-rank-payload.md", + "blob": "a72449295cf0dd679e34ecc8e96c5013a97e160a" + } + ], + "0304": [ + { + "pr": 842, + "path": "docs/adr/0304-leftover-map-compare-axis-share.md", + "blob": "f54656a451ff7e160599959f2516fba03b7dfc56" + }, + { + "pr": 841, + "path": "docs/adr/0304-leftover-map-compare-graphic.md", + "blob": "aa08bd6e5b15badf1c8ac83c5533a43324559a03" + } + ], + "0293": [ + { + "pr": 828, + "path": "docs/adr/0293-leftover-map-compare-axis-share.md", + "blob": "f7fd01b5ab562e7f1b60819bdde4c107428a2731" + }, + { + "pr": 826, + "path": "docs/adr/0293-leftover-map-compare-reconstruction.md", + "blob": "4796af038293c988c7efce682e65181b9d62c87c" + } + ], + "0290": [ + { + "pr": 823, + "path": "docs/adr/0290-leftover-map-axis-singular.md", + "blob": "8136e690af869eb680d9b3122c7dc0c91e8c0be3" + }, + { + "pr": 822, + "path": "docs/adr/0290-leftover-map-compare-item-coverage.md", + "blob": "96537b0cefc1a49137130678cec99b8b9016ac91" + } + ], + "0289": [ + { + "pr": 821, + "path": "docs/adr/0289-leftover-map-compare-coverage.md", + "blob": "7a01f702418f464856468f1f269260f80128f88a" + }, + { + "pr": 820, + "path": "docs/adr/0289-leftover-map-plot-singular.md", + "blob": "ac71f507cabc3d6a8440b8e18cab157bcc524b3b" + } + ] + }, + "new_migration_prefix_conflicts": {}, + "parallel_release_numbers": { + "2.92.0": [ + 876, + 877 + ], + "2.62.0": [ + 843, + 844 + ], + "2.61.0": [ + 841, + 842 + ], + "2.50.0": [ + 826, + 828 + ], + "2.47.0": [ + 822, + 823 + ], + "2.46.0": [ + 820, + 821 + ] + }, + "closed_unmerged_parent": { + "parent": 640, + "child": 888 + }, + "current_runtime_aggregate": { + "source_post_rows": 43189, + "voice_schema_available": true, + "connections": 3, + "lock_waiters": 0, + "scope": "descriptive census count only; not candidate deployment or population inference" + }, + "validation": { + "protected_main_regression": "failed: one retained additional assignment instead of two", + "synthetic_postgresql_oidc_api_tests_passed": 14, + "frontend_tests_passed": 534, + "frontend_lint": "passed", + "frontend_build": "passed", + "rendering": [ + { + "story": "combined-evidence", + "viewport": { + "width": 1440, + "height": 900 + }, + "horizontalOverflow": false, + "file": "../docs/screenshots/voice-history-combined-evidence-desktop-20260905.png" + }, + { + "story": "corrected-evidence", + "viewport": { + "width": 1440, + "height": 900 + }, + "horizontalOverflow": false, + "file": "../docs/screenshots/voice-history-corrected-evidence-desktop-20260905.png" + }, + { + "story": "combined-evidence", + "viewport": { + "width": 390, + "height": 844 + }, + "horizontalOverflow": false, + "file": "../docs/screenshots/voice-history-combined-evidence-mobile-20260905.png" + }, + { + "story": "corrected-evidence", + "viewport": { + "width": 390, + "height": 844 + }, + "horizontalOverflow": false, + "file": "../docs/screenshots/voice-history-corrected-evidence-mobile-20260905.png" + } + ], + "rendering_scope": "synthetic Storybook components; separate from real OIDC/JWKS ASGI API tests; full authenticated browser flow unverified", + "ontology_schema_docstring_contracts_passed": 66 + }, + "load_observation": { + "code_head": "576c561d85c7f7aa8df9b254456fbb9aa1f9cea5", + "synthetic_posts": 3, + "oidc": "real demo realm", + "postgresql": "full migrations in disposable database on lineageweave service", + "gateway": "official contextual-orchestrator, runtime-only credential", + "runs": [ + { + "vus": 1, + "duration": "10s", + "exit_code": 0, + "summary": { + "metrics": { + "http_req_sending": { + "p(90)": 0.013, + "p(95)": 0.016, + "avg": 0.06389425186485376, + "min": 0.003, + "med": 0.007, + "max": 81.307 + }, + "data_received": { + "count": 3829690, + "rate": 277575.69967966044 + }, + "vus": { + "value": 1, + "min": 0, + "max": 1 + }, + "http_reqs": { + "count": 2279, + "rate": 165.1817822251791 + }, + "http_req_duration{expected_response:true}": { + "avg": 11.142058358929333, + "min": 3.933, + "med": 8.768, + "max": 2706.167, + "p(90)": 13.9954, + "p(95)": 17.034699999999997 + }, + "http_req_tls_handshaking": { + "med": 0, + "max": 0, + "p(90)": 0, + "p(95)": 0, + "avg": 0, + "min": 0 + }, + "lineageweave_read_duration": { + "p(90)": 15.181600000000001, + "p(95)": 18.372149999999998, + "avg": 11.165796442687757, + "min": 5.832, + "med": 9.897, + "max": 133.194 + }, + "iterations": { + "rate": 55.01227411536241, + "count": 759 + }, + "lineageweave_ask_enqueue_duration": { + "p(95)": 2706.167, + "avg": 2706.167, + "min": 2706.167, + "med": 2706.167, + "max": 2706.167, + "p(90)": 2706.167 + }, + "data_sent": { + "count": 3447013, + "rate": 249839.29385404178 + }, + "http_req_waiting": { + "max": 2705.99, + "p(90)": 13.9384, + "p(95)": 16.861599999999996, + "avg": 11.037645458534435, + "min": 3.873, + "med": 8.72 + }, + "iteration_duration": { + "min": 7.433209, + "med": 11.2005, + "max": 320.076959, + "p(90)": 17.4728504, + "p(95)": 23.018278899999995, + "avg": 13.197518237154158 + }, + "http_req_connecting": { + "avg": 0.023038174637999127, + "min": 0, + "med": 0, + "max": 51.886, + "p(90)": 0, + "p(95)": 0 + }, + "lineageweave_ask_poll_duration": { + "med": 6.404, + "max": 106.233, + "p(90)": 9.6066, + "p(95)": 10.961799999999998, + "avg": 7.140480895915675, + "min": 3.933 + }, + "checks": { + "passes": 2277, + "fails": 0, + "value": 1 + }, + "vus_max": { + "value": 1, + "min": 1, + "max": 1 + }, + "http_req_failed": { + "passes": 0, + "fails": 2279, + "value": 0 + }, + "http_req_blocked": { + "avg": 0.17454102676611846, + "min": 0, + "med": 0.002, + "max": 359.037, + "p(90)": 0.004, + "p(95)": 0.007 + }, + "http_req_duration": { + "p(90)": 13.9954, + "p(95)": 17.034699999999997, + "avg": 11.142058358929333, + "min": 3.933, + "med": 8.768, + "max": 2706.167 + }, + "lineageweave_ask_state_observations": { + "rate": 55.01227411536241, + "count": 759 + }, + "http_req_receiving": { + "avg": 0.04051864853005731, + "min": 0.012, + "med": 0.033, + "max": 1.272, + "p(90)": 0.063, + "p(95)": 0.085 + } + }, + "setup_data": { + "token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwYTRXdnBHWGkxdV9MN01pSmNnRjhOY2xNMzlhT1dLb1ZHWGZ1bFdjQkN3In0.eyJleHAiOjE3ODg2MDYzNDgsImlhdCI6MTc4ODYwNTQ0OCwianRpIjoiYTM1MzFmMjItYjliMy00MDJjLWFkNzQtMzNhODQ5Y2FiN2E1IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDoxODA4MC9yZWFsbXMvbGluZWFnZXdlYXZlLWRlbW8iLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDoxODAwMS9tY3AiLCJsaW5lYWdld2VhdmUtYXBpIl0sInN1YiI6ImFkMGY4YzNjLWFkZTAtNDhiYy05OGMwLTI3NWZhZmNhNmYzMiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImxpbmVhZ2V3ZWF2ZS1mcm9udGVuZCIsInNpZCI6IjUyOTI5MWZlLTljZjctNDY4YS05ZjNlLTI3ODU5MjU4OWVlNiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovL2xvY2FsaG9zdDozNTE3MyIsImh0dHA6Ly9sb2NhbGhvc3Q6MTUxNzMiLCJodHRwOi8vbG9jYWxob3N0OjUxNzMiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbInBvc3Rfdmlld2VyIl19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiY29ycF9jb2RlIjoiREVNTy1DT1JQLTAxIiwibmFtZSI6IkRlbW8gQW5hbHlzdCIsInByZWZlcnJlZF91c2VybmFtZSI6ImRlbW8uYW5hbHlzdCIsImdpdmVuX25hbWUiOiJEZW1vIiwiZmFtaWx5X25hbWUiOiJBbmFseXN0IiwicHVfY29kZSI6IkRFTU8tUFUtQSIsImVtYWlsIjoiZGVtby5hbmFseXN0QGV4YW1wbGUudGVzdCJ9.oiUhEmcBN09RNtBudzFbwjeHIALFpCZ59O8geo0Fq6ZVKFnQqfrLF8MAVqFhTYa8wCZvpEDyNbLNxKugJInQFPouZikYeifA7vYHviYu558YaMcz8nnekxVeepSFzylTfVnaXyYxArg2gMJuFrAipV_f18cC70dOvLDQBMx1bQt4vxbBO3EHIBHlfHP7hjst9BsUk3O9vAuDhgmnlRQWRNhzBImcQb1mRDYSvlAW-rrWlM36Ha1afqqmlzafBWp1xG60KkSMxC6s6J9ex_gX91HgiN6ulbO6tDh_MdFg8_R8Kc0-3Wn5lJgRTAWuchdTYXEOYode91TdYvOnvzz-dQ", + "askJobId": "6c9533d2-07dc-4c2b-8ca0-276050a4c670" + }, + "root_group": { + "path": "", + "id": "d41d8cd98f00b204e9800998ecf8427e", + "groups": {}, + "checks": { + "posts read succeeds": { + "fails": 0, + "name": "posts read succeeds", + "path": "::posts read succeeds", + "id": "dcada67cb0c9855685a76d2188f20bcb", + "passes": 759 + }, + "lineage read succeeds": { + "passes": 759, + "fails": 0, + "name": "lineage read succeeds", + "path": "::lineage read succeeds", + "id": "c8a5187266a8f4d8daeab1d6fa1b5078" + }, + "Ask poll succeeds": { + "id": "c52c13a088a06409eb53d86b13a59273", + "passes": 759, + "fails": 0, + "name": "Ask poll succeeds", + "path": "::Ask poll succeeds" + } + }, + "name": "" + } + }, + "samples": [ + { + "elapsed_seconds": 2.454, + "postgresql": [ + { + "state": "active", + "wait": "none", + "count": 1 + }, + { + "state": "idle", + "wait": "Client", + "count": 2 + } + ], + "ask_jobs": {}, + "valkey": { + "connected_clients": 4, + "blocked_clients": 3, + "used_memory": 1110008, + "instantaneous_ops_per_sec": 5, + "rejected_connections": 0 + }, + "shared_service_usage": [ + { + "Name": "lineageweave-postgres-1", + "CPUPerc": "0.77%", + "MemUsage": "206.2MiB / 7.737GiB", + "PIDs": "12" + }, + { + "Name": "lineageweave-orchestrator-1", + "CPUPerc": "0.01%", + "MemUsage": "76.78MiB / 7.737GiB", + "PIDs": "6" + }, + { + "Name": "lineageweave-voice-history-test-valkey-20260905", + "CPUPerc": "0.18%", + "MemUsage": "5.387MiB / 7.737GiB", + "PIDs": "5" + } + ], + "local_backend_cpu_memory_percent": "0.1 0.1" + }, + { + "elapsed_seconds": 17.101, + "postgresql": [ + { + "state": "active", + "wait": "none", + "count": 1 + }, + { + "state": "idle", + "wait": "Client", + "count": 2 + } + ], + "ask_jobs": {}, + "valkey": { + "connected_clients": 4, + "blocked_clients": 3, + "used_memory": 1134696, + "instantaneous_ops_per_sec": 2, + "rejected_connections": 0 + }, + "shared_service_usage": [ + { + "Name": "lineageweave-postgres-1", + "CPUPerc": "0.66%", + "MemUsage": "206.2MiB / 7.737GiB", + "PIDs": "12" + }, + { + "Name": "lineageweave-orchestrator-1", + "CPUPerc": "0.01%", + "MemUsage": "76.78MiB / 7.737GiB", + "PIDs": "6" + }, + { + "Name": "lineageweave-voice-history-test-valkey-20260905", + "CPUPerc": "0.19%", + "MemUsage": "5.398MiB / 7.737GiB", + "PIDs": "5" + } + ], + "local_backend_cpu_memory_percent": "0.1 0.1" + }, + { + "elapsed_seconds": 22.485, + "postgresql": [ + { + "state": "active", + "wait": "none", + "count": 1 + }, + { + "state": "idle", + "wait": "Client", + "count": 2 + } + ], + "ask_jobs": {}, + "valkey": { + "connected_clients": 4, + "blocked_clients": 3, + "used_memory": 1134696, + "instantaneous_ops_per_sec": 2, + "rejected_connections": 0 + }, + "shared_service_usage": [ + { + "Name": "lineageweave-postgres-1", + "CPUPerc": "43.48%", + "MemUsage": "215.9MiB / 7.737GiB", + "PIDs": "13" + }, + { + "Name": "lineageweave-orchestrator-1", + "CPUPerc": "2.22%", + "MemUsage": "77.01MiB / 7.737GiB", + "PIDs": "7" + }, + { + "Name": "lineageweave-voice-history-test-valkey-20260905", + "CPUPerc": "0.15%", + "MemUsage": "5.441MiB / 7.737GiB", + "PIDs": "5" + } + ], + "local_backend_cpu_memory_percent": "33.6 0.2" + }, + { + "elapsed_seconds": 28.455, + "postgresql": [ + { + "state": "active", + "wait": "none", + "count": 1 + }, + { + "state": "idle", + "wait": "Client", + "count": 2 + }, + { + "state": "idle", + "wait": "none", + "count": 1 + } + ], + "ask_jobs": { + "running": 1 + }, + "valkey": { + "connected_clients": 5, + "blocked_clients": 3, + "used_memory": 1165792, + "instantaneous_ops_per_sec": 3, + "rejected_connections": 0 + }, + "shared_service_usage": [ + { + "Name": "lineageweave-postgres-1", + "CPUPerc": "38.43%", + "MemUsage": "219.7MiB / 7.737GiB", + "PIDs": "14" + }, + { + "Name": "lineageweave-orchestrator-1", + "CPUPerc": "2.62%", + "MemUsage": "79.07MiB / 7.737GiB", + "PIDs": "8" + }, + { + "Name": "lineageweave-voice-history-test-valkey-20260905", + "CPUPerc": "0.14%", + "MemUsage": "5.449MiB / 7.737GiB", + "PIDs": "5" + } + ], + "local_backend_cpu_memory_percent": "25.6 0.2" + }, + { + "elapsed_seconds": 34.407, + "postgresql": [ + { + "state": "active", + "wait": "Client", + "count": 1 + }, + { + "state": "active", + "wait": "none", + "count": 1 + }, + { + "state": "idle", + "wait": "Client", + "count": 3 + } + ], + "ask_jobs": { + "running": 1 + }, + "valkey": { + "connected_clients": 5, + "blocked_clients": 3, + "used_memory": 1165776, + "instantaneous_ops_per_sec": 2, + "rejected_connections": 0 + }, + "shared_service_usage": [ + { + "Name": "lineageweave-postgres-1", + "CPUPerc": "0.97%", + "MemUsage": "219.7MiB / 7.737GiB", + "PIDs": "14" + }, + { + "Name": "lineageweave-orchestrator-1", + "CPUPerc": "1.43%", + "MemUsage": "79.19MiB / 7.737GiB", + "PIDs": "7" + }, + { + "Name": "lineageweave-voice-history-test-valkey-20260905", + "CPUPerc": "0.20%", + "MemUsage": "5.449MiB / 7.737GiB", + "PIDs": "5" + } + ], + "local_backend_cpu_memory_percent": "0.1 0.1" + } + ] + }, + { + "vus": 4, + "duration": "10s", + "exit_code": 0, + "summary": { + "metrics": { + "http_req_connecting": { + "max": 0.397, + "p(90)": 0, + "p(95)": 0, + "avg": 0.0006347799511002446, + "min": 0, + "med": 0 + }, + "http_req_sending": { + "med": 0.008, + "max": 19.943, + "p(90)": 0.03, + "p(95)": 0.06, + "avg": 0.02675183374083156, + "min": 0.003 + }, + "http_req_waiting": { + "avg": 30.76516442542792, + "min": 8.105, + "med": 22.411, + "max": 278.577, + "p(90)": 58.566900000000025, + "p(95)": 80.14359999999998 + }, + "data_sent": { + "count": 4949422, + "rate": 477167.795067302 + }, + "lineageweave_read_duration": { + "avg": 34.34393761467884, + "min": 13.802, + "med": 24.208, + "max": 229.092, + "p(90)": 65.29800000000003, + "p(95)": 85.70935 + }, + "http_req_duration{expected_response:true}": { + "min": 8.139, + "med": 22.502, + "max": 278.819, + "p(90)": 58.713300000000004, + "p(95)": 80.22269999999996, + "avg": 30.892914425427808 + }, + "http_req_blocked": { + "med": 0.002, + "max": 19.958, + "p(90)": 0.01, + "p(95)": 0.027, + "avg": 0.015119498777506294, + "min": 0.001 + }, + "http_req_failed": { + "passes": 0, + "fails": 3272, + "value": 0 + }, + "lineageweave_ask_poll_duration": { + "max": 197.019, + "p(90)": 46.240000000000016, + "p(95)": 61.67654999999999, + "avg": 23.773040366972474, + "min": 8.139, + "med": 16.426000000000002 + }, + "http_reqs": { + "count": 3272, + "rate": 315.44956672924883 + }, + "lineageweave_ask_state_observations": { + "count": 1090, + "rate": 105.08558304855782 + }, + "iteration_duration": { + "min": 15.692458, + "med": 25.9076665, + "max": 229.948375, + "p(90)": 70.31170420000001, + "p(95)": 92.60787514999998, + "avg": 36.68698062477064 + }, + "http_req_duration": { + "max": 278.819, + "p(90)": 58.713300000000004, + "p(95)": 80.22269999999996, + "avg": 30.892914425427808, + "min": 8.139, + "med": 22.502 + }, + "vus": { + "value": 4, + "min": 4, + "max": 4 + }, + "lineageweave_ask_enqueue_duration": { + "avg": 20.399, + "min": 20.399, + "med": 20.399, + "max": 20.399, + "p(90)": 20.399, + "p(95)": 20.399 + }, + "http_req_receiving": { + "min": 0.01, + "med": 0.043, + "max": 17.265, + "p(90)": 0.146, + "p(95)": 0.2187999999999994, + "avg": 0.10099816625916852 + }, + "data_received": { + "count": 5498592, + "rate": 530112.6112533355 + }, + "http_req_tls_handshaking": { + "avg": 0, + "min": 0, + "med": 0, + "max": 0, + "p(90)": 0, + "p(95)": 0 + }, + "checks": { + "fails": 0, + "passes": 3270, + "value": 1 + }, + "iterations": { + "count": 1090, + "rate": 105.08558304855782 + }, + "vus_max": { + "value": 4, + "min": 4, + "max": 4 + } + }, + "setup_data": { + "askJobId": "ec358ece-d93b-4adf-bcbb-45c9709adc64", + "token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwYTRXdnBHWGkxdV9MN01pSmNnRjhOY2xNMzlhT1dLb1ZHWGZ1bFdjQkN3In0.eyJleHAiOjE3ODg2MDYzNzIsImlhdCI6MTc4ODYwNTQ3MiwianRpIjoiYWJiNzBjOGItYjU3Zi00Yzg0LWIyNzItZjQxMjlhNmIxZjc5IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDoxODA4MC9yZWFsbXMvbGluZWFnZXdlYXZlLWRlbW8iLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDoxODAwMS9tY3AiLCJsaW5lYWdld2VhdmUtYXBpIl0sInN1YiI6ImFkMGY4YzNjLWFkZTAtNDhiYy05OGMwLTI3NWZhZmNhNmYzMiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImxpbmVhZ2V3ZWF2ZS1mcm9udGVuZCIsInNpZCI6ImJmYTA0NjFhLTZhZjYtNGJiNy1iM2E5LWM4ZWViNTYzNDg1OCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovL2xvY2FsaG9zdDozNTE3MyIsImh0dHA6Ly9sb2NhbGhvc3Q6MTUxNzMiLCJodHRwOi8vbG9jYWxob3N0OjUxNzMiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbInBvc3Rfdmlld2VyIl19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiY29ycF9jb2RlIjoiREVNTy1DT1JQLTAxIiwibmFtZSI6IkRlbW8gQW5hbHlzdCIsInByZWZlcnJlZF91c2VybmFtZSI6ImRlbW8uYW5hbHlzdCIsImdpdmVuX25hbWUiOiJEZW1vIiwiZmFtaWx5X25hbWUiOiJBbmFseXN0IiwicHVfY29kZSI6IkRFTU8tUFUtQSIsImVtYWlsIjoiZGVtby5hbmFseXN0QGV4YW1wbGUudGVzdCJ9.islVrzLEXfBc6Zq9s7rJ-N01grRSXT9mGnEA1hy38xrHUNPMRKuLWcrBJgtQEzPuxMLEY3hyliSDKWWwATvxMfIirMDr4CBum4nbSHT4JN32JkzL-tZ8fAlzA9Dd80t6cGLCnBsnrdC_XKi2E9hKcmApHjhmubAdXCvA6Ih3HylMFRwEZ0R14flhtZeCEbrLKHq4Sy9ihSLpOQNc1jKEugMTw21IqRNSqZcb2QxDsBc3136F5_JTQRjjJ0nzMtq00WUM9VguUFNGBm70KsquA8ab8mZCe2Wml9VdL-gtCao-M88aSdE07vqkE-2ZDqCao7440Z_Rn9NU7mhYpf9gkg" + }, + "root_group": { + "name": "", + "path": "", + "id": "d41d8cd98f00b204e9800998ecf8427e", + "groups": {}, + "checks": { + "posts read succeeds": { + "id": "dcada67cb0c9855685a76d2188f20bcb", + "passes": 1090, + "fails": 0, + "name": "posts read succeeds", + "path": "::posts read succeeds" + }, + "lineage read succeeds": { + "id": "c8a5187266a8f4d8daeab1d6fa1b5078", + "passes": 1090, + "fails": 0, + "name": "lineage read succeeds", + "path": "::lineage read succeeds" + }, + "Ask poll succeeds": { + "fails": 0, + "name": "Ask poll succeeds", + "path": "::Ask poll succeeds", + "id": "c52c13a088a06409eb53d86b13a59273", + "passes": 1090 + } + } + } + }, + "samples": [ + { + "elapsed_seconds": 0.176, + "postgresql": [ + { + "state": "active", + "wait": "none", + "count": 1 + }, + { + "state": "idle", + "wait": "Client", + "count": 4 + } + ], + "ask_jobs": { + "running": 1 + }, + "valkey": { + "connected_clients": 5, + "blocked_clients": 3, + "used_memory": 1165776, + "instantaneous_ops_per_sec": 3, + "rejected_connections": 0 + }, + "shared_service_usage": [ + { + "Name": "lineageweave-postgres-1", + "CPUPerc": "1.21%", + "MemUsage": "219.7MiB / 7.737GiB", + "PIDs": "14" + }, + { + "Name": "lineageweave-orchestrator-1", + "CPUPerc": "11.42%", + "MemUsage": "80.03MiB / 7.737GiB", + "PIDs": "7" + }, + { + "Name": "lineageweave-voice-history-test-valkey-20260905", + "CPUPerc": "0.23%", + "MemUsage": "5.449MiB / 7.737GiB", + "PIDs": "5" + } + ], + "local_backend_cpu_memory_percent": "0.1 0.1" + }, + { + "elapsed_seconds": 5.261, + "postgresql": [ + { + "state": "active", + "wait": "none", + "count": 1 + }, + { + "state": "idle", + "wait": "Client", + "count": 4 + } + ], + "ask_jobs": { + "running": 1 + }, + "valkey": { + "connected_clients": 5, + "blocked_clients": 3, + "used_memory": 1165776, + "instantaneous_ops_per_sec": 3, + "rejected_connections": 0 + }, + "shared_service_usage": [ + { + "Name": "lineageweave-postgres-1", + "CPUPerc": "93.53%", + "MemUsage": "245.7MiB / 7.737GiB", + "PIDs": "20" + }, + { + "Name": "lineageweave-orchestrator-1", + "CPUPerc": "1.55%", + "MemUsage": "80.83MiB / 7.737GiB", + "PIDs": "8" + }, + { + "Name": "lineageweave-voice-history-test-valkey-20260905", + "CPUPerc": "0.17%", + "MemUsage": "5.449MiB / 7.737GiB", + "PIDs": "5" + } + ], + "local_backend_cpu_memory_percent": "54.9 0.2" + }, + { + "elapsed_seconds": 7.327, + "postgresql": [ + { + "state": "active", + "wait": "none", + "count": 1 + }, + { + "state": "idle", + "wait": "Client", + "count": 10 + } + ], + "ask_jobs": { + "running": 2 + }, + "valkey": { + "connected_clients": 5, + "blocked_clients": 3, + "used_memory": 1165760, + "instantaneous_ops_per_sec": 4, + "rejected_connections": 0 + }, + "shared_service_usage": [ + { + "Name": "lineageweave-postgres-1", + "CPUPerc": "66.50%", + "MemUsage": "245.6MiB / 7.737GiB", + "PIDs": "20" + }, + { + "Name": "lineageweave-orchestrator-1", + "CPUPerc": "3.22%", + "MemUsage": "82.16MiB / 7.737GiB", + "PIDs": "8" + }, + { + "Name": "lineageweave-voice-history-test-valkey-20260905", + "CPUPerc": "0.20%", + "MemUsage": "5.449MiB / 7.737GiB", + "PIDs": "5" + } + ], + "local_backend_cpu_memory_percent": "45.2 0.2" + }, + { + "elapsed_seconds": 12.079, + "postgresql": [ + { + "state": "active", + "wait": "none", + "count": 2 + }, + { + "state": "idle", + "wait": "Client", + "count": 9 + } + ], + "ask_jobs": { + "running": 2 + }, + "valkey": { + "connected_clients": 5, + "blocked_clients": 3, + "used_memory": 1166800, + "instantaneous_ops_per_sec": 3, + "rejected_connections": 0 + }, + "shared_service_usage": [ + { + "Name": "lineageweave-postgres-1", + "CPUPerc": "66.16%", + "MemUsage": "246.6MiB / 7.737GiB", + "PIDs": "20" + }, + { + "Name": "lineageweave-orchestrator-1", + "CPUPerc": "28.62%", + "MemUsage": "82.96MiB / 7.737GiB", + "PIDs": "8" + }, + { + "Name": "lineageweave-voice-history-test-valkey-20260905", + "CPUPerc": "0.33%", + "MemUsage": "5.449MiB / 7.737GiB", + "PIDs": "5" + } + ], + "local_backend_cpu_memory_percent": "29.8 0.1" + }, + { + "elapsed_seconds": 15.269, + "postgresql": [ + { + "state": "active", + "wait": "none", + "count": 2 + }, + { + "state": "idle", + "wait": "Client", + "count": 9 + } + ], + "ask_jobs": { + "running": 2 + }, + "valkey": { + "connected_clients": 5, + "blocked_clients": 3, + "used_memory": 1168848, + "instantaneous_ops_per_sec": 3, + "rejected_connections": 0 + }, + "shared_service_usage": [ + { + "Name": "lineageweave-postgres-1", + "CPUPerc": "0.52%", + "MemUsage": "245.1MiB / 7.737GiB", + "PIDs": "20" + }, + { + "Name": "lineageweave-orchestrator-1", + "CPUPerc": "19.05%", + "MemUsage": "84.07MiB / 7.737GiB", + "PIDs": "8" + }, + { + "Name": "lineageweave-voice-history-test-valkey-20260905", + "CPUPerc": "0.21%", + "MemUsage": "5.453MiB / 7.737GiB", + "PIDs": "5" + } + ], + "local_backend_cpu_memory_percent": "0.1 0.1" + } + ] + } + ] + }, + "load_limits": [ + "1 and 4 VUs for 10 seconds are diagnostic scenarios, not representative capacity/SLO or population inference", + "one Ask submission per scenario; observed two Running jobs; terminal answers not claimed", + "service CPU/memory samples include other workloads on shared PostgreSQL and gateway", + "Valkey blocked clients include intentional stream readers, not proof of saturation", + "no internal gateway queue/admission saturation measurement; no performance policy changed" + ], + "cleanup": { + "temporary_database": "removed", + "temporary_backend_process": "stopped", + "temporary_valkey_container": "removed after exited; no mounts", + "official_data_volumes": "untouched" + }, + "api_signature_audit": { + "heads_compared": 10, + "scope": "AST route function parameters and BaseModel annotations across current heads; includes inherited old-base drift, not automatically a conflicting new policy", + "divergent_definitions": { + "routes": { + "GET /api/dashboard": [ + { + "prs": [ + 667, + 672, + 679, + 702, + 780, + 904, + 911, + 914, + 929 + ], + "signature_sha256": "fdc3214f3ca8873bd8f88ba7346a66c012ccb1b3d359d6d82a76cdca2a6afcef" + }, + { + "prs": [ + 888 + ], + "signature_sha256": "9be3d9970010aa27c90e99ecaa3f552133aa91400af1945e6039c71863b8bdca" + } + ], + "GET /api/customer-master": [ + { + "prs": [ + 667, + 672, + 679, + 702, + 780, + 904, + 911, + 914, + 929 + ], + "signature_sha256": "7e9897adef7558f5426789c063bb32eb7ce34ea8813ff621a9b78ab718cf620a" + }, + { + "prs": [ + 888 + ], + "signature_sha256": "8fc37874f86dc61241b2c99e8eadedce6aa3186f43ae46b829d99b76a4bc2ebf" + } + ], + "GET /api/posts": [ + { + "prs": [ + 667, + 672, + 679, + 702, + 780, + 904, + 911, + 914, + 929 + ], + "signature_sha256": "75fbf38012699963f3eb4f59ef8ab04cd4decd71c534aba5c21a56cba693cb81" + }, + { + "prs": [ + 888 + ], + "signature_sha256": "8f06f278e5119c09a014738c3809e65727271f6e450bc12f2b37380902089654" + } + ], + "GET /api/posts/{post_id}": [ + { + "prs": [ + 667, + 672, + 679, + 702, + 780, + 904, + 911, + 914, + 929 + ], + "signature_sha256": "39823941f181e082433fc427da76746c95ef33d965c3f39bbb5dfd72655628a8" + }, + { + "prs": [ + 888 + ], + "signature_sha256": "b34990b915476f0fb2861c0e8fee106eb3c89a9079f9a50bac3044ea22b2f95b" + } + ], + "GET /api/rankings": [ + { + "prs": [ + 667, + 672, + 679, + 702, + 780, + 904, + 911, + 914, + 929 + ], + "signature_sha256": "7e9897adef7558f5426789c063bb32eb7ce34ea8813ff621a9b78ab718cf620a" + }, + { + "prs": [ + 888 + ], + "signature_sha256": "2efce8870ea59c645e0ac90ae3039c1d4041f088cab77d0ecb814fe6871e7ced" + } + ] + }, + "models": { + "ChatRequest": [ + { + "prs": [ + 672, + 679, + 702, + 780, + 888, + 904, + 911, + 914, + 929 + ], + "signature_sha256": "e9b8616d5072c006480c45b3bb246be9444288f1f308644efc046ae7c53173a6" + }, + { + "prs": [ + 667 + ], + "signature_sha256": "eef81bb5d2c44b70ec36863143df049dbd108f116c30a321fc9d194cd9651a1e" + } + ] + } + } + } +} diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 239e03da1..7433de8de 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,5 +1,110 @@ # Product & Technical Gap Baseline +## Current development-loop evidence — 2026-09-05 + +Snapshot collected at `2026-09-05T10:57:25+00:00`; protected `main` remains +`83eba56149eb802cd63642c507c324c9976ec78e`. This section supersedes the +queue and runtime claims in every historical snapshot below. The complete +[exact-head queue and load record](development-loop-20260905-voice-history.json) +contains all 119 open PRs, their bases, draft state, checks, approvals, and +unresolved-thread counts. There are 16 open issues; 98 PRs are draft, +21 are ready, and no current PR has an independent exact-head approval. +Required workflows still apply in addition to the organization ruleset's +approval and resolved-thread requirements. No protected merge occurred in this +cycle; no self-approval, bypass, force push, or stack-base merge was used. + +### Selected user-visible gap: corrections erased earlier Voice evidence + +Correcting an additional perspective overwrote its previous truth state and +source evidence. An earlier cutoff could therefore lose the assignment it had +previously shown. This was selected over duplicating translation (#929/#932), +export pagination/filter (#780/#934/#935), or customer hierarchy (#907/#909) +work: the loss is irreversible for evidence reviewers and the write path had +no open owning PR. Protected-main code reproduced one row where two historical +intervals were required. PR #936 now preserves the old interval and derivation, +serializes corrections with primary imports, and leaves an exact retry +unchanged. An invalid correction rolls back without replacing accepted evidence. + +Candidate implementation `b8dd36e713ea1cb123de272fe61314145448e818` is stacked on #780 at +`1d8fa267b059289e77301a09985dfac70a439814`. The parent's live-Post missing-import +repair is reused; it also exists in #911, so convergence must retain one copy. +Merge #780 through protection first, then retarget #936 to `main` and collect +fresh head/base/review/check evidence. Never merge this child into an unprotected +feature branch. #934 and #935 remain separate pagination/filter owners. + +| Evidence class | Current finding | Acceptance | +| --- | --- | --- | +| Normative product/architecture | Read current PRD, ADR 0246's twelve atomic Voices, ADR 0256's expandable evidence-bearing composition, ADR 0252's cutoff history, and ADR 0251's FJA I/O-psychology layer. The new ADR 0256 amendment is proposed pending integration. | No fixed combination codes, reclassification, invented weights, or new schema/version. | +| External authority | PostgreSQL transaction isolation and database-clock semantics; W3C PROV-O derivation. | These ground storage/concurrency; they do not establish stakeholder classification or statistical inference. | +| Current implementation | Correction history and interval-specific stored PROV identities; exact retries, rollback, concurrent waits, and primary protection. | Implemented in #936; not protected-main delivery. | +| Authenticated API | 14 targeted tests passed with full-schema synthetic PostgreSQL, real demo OIDC/JWKS, RBAC/ABAC, Valkey, historical/live truth, and hidden-evidence denial. | Real ASGI API with real services; full browser-to-API flow remains unverified. | +| Rendered UI | Frontend lint, 534 tests, and build passed. Existing `Post/Recorded perspectives` shows retained Observed and corrected Proposed states at 1440 and 390 CSS pixels without document overflow. | Four synthetic screenshots; separate component evidence, not deployed browser acceptance. | +| Current runtime aggregate | Official `lineageweave` PostgreSQL has 43,189 source rows and the Voice schema; the observation saw three connections and no lock waiters. | A non-identifying descriptive count, not proof that #936 runs there or a population estimate. | +| Open work | #936 is the history correction candidate; #780/#934/#935 own carrying/evidence and paged/filtered export acceptance. | Voice export and full protected acceptance remain unverified until their exact integrated head is proven. | + +### Queue and cross-PR contracts + +Normal auto-merge remains enabled on #780, #907, #911, #914, and #929; it was +also enabled on #802 with `--match-head-commit` at +`32f1cda10a2a1a6cabd64a3ae6f59bd6f0b20fd6`. Pending checks were not used to stop +safe work. #907/#911 also retain failed current-head checks; their queried run +logs returned HTTP 404, so no unverified failure cause or passing substitute is +asserted. There were no in-progress Actions at the inspected instant, hence no +stale run was cancelled and no new workflow cancellation policy was invented. +Closed-unmerged #640 still underlies #888; it is not a protected parent. + +Added-ADR identity collisions were found at 0279, 0289, 0290, 0293, 0300, +0301, 0304, 0305, 0335, and 0355 across separate open PRs; exact paths and +heads are in the snapshot. Parallel release-number claims include 2.46.0, +2.47.0, 2.50.0, 2.61.0, 2.62.0, and 2.92.0. No conflicting newly-added +migration prefix was found in the complete changed-file inventories. This is +not a proof of schema/API semantic compatibility: shared definitions and +existing occupational ADR aliases (#847 / issue #807) still require parent-first +convergence and API/schema regression checks. AST comparison across ten changed API heads also found divergent signatures +for Dashboard, Customer Master, Posts, Post detail, and Rankings, plus +`ChatRequest` annotation differences. The artifact groups exact signatures; +these include inherited old-base drift and are not assumed to be new conflicting +policies. This amendment allocates no ADR, migration, or release number and +preserves the current HTTP payload shape. + +### Synthetic authenticated load observation + +The repository's existing k6 HTTP scenario ran against a temporary fully +migrated database, the actual backend and workers, real demo OIDC, an ephemeral +Valkey service under Compose project `lineageweave`, and the official +contextual-orchestrator boundary using a runtime-only credential. It submitted +one synthetic Ask per scenario and polled its observable asynchronous status +while reading Posts and Event Lineage. No real record entered this workload. + +| Scenario | HTTP requests/s | HTTP p95 | HTTP error rate | Read p95 | Ask poll p95 | Ask enqueue | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | +| 1 VU, 10 seconds | 165.18 | 17.03 ms | 0% | 18.37 ms | 10.96 ms | 2,706.17 ms | +| 4 VUs, 10 seconds | 315.45 | 80.22 ms | 0% | 85.71 ms | 61.68 ms | 20.40 ms | + +These are short diagnostic observations, not a capacity threshold, latency SLO, +terminal-answer result, or population inference. Two Running Ask jobs were +observed. Samples reached 93.53% PostgreSQL CPU, 28.62% gateway CPU, and 54.9% +local backend CPU; shared-service samples include unrelated traffic. No sampled +PostgreSQL connection waited on a lock and Valkey rejected no connection. Its +three blocked clients are stream readers, not a demonstrated bottleneck. +Gateway admission/queue saturation and full-workload completion remain +unverified. The cold/warm enqueue difference has no isolated causal diagnosis, +so no timeout, pool size, worker count, or provider setting was changed. +Temporary database and backend process were removed/stopped; the exact temporary +Valkey container was stopped, observed exited with no mounts, and removed. +Official containers and data volumes were preserved. + +Canonical remote names were rechecked: `ContextualWisdomLab/LineageWeave`, +`RankWeave`, `ThreadWeave`, `TEPP`, `contextual-orchestrator`, `fast-mlsirm`, and +lowercase `disksage`. The PRD/authority register's `DiskSage` spelling is not the +remote canonical name. The related current authorities read were +contextual-orchestrator's `docs/product_planning.md` and `docs/architecture.md`, +TEPP's approved PRD, fast-mlsirm's PRD, RankWeave's architecture, and +ThreadWeave's PRD. Mathematical/model policies and inference remain with their +owners; this change adds no Python mathematical or psychometric operation. + +## Historical snapshots — not current release acceptance + > Exact-head development-loop snapshot: 2026-09-02 KST. Protected `main` is > `3f61c8242b9c02dec307a7396e83e28f7cdd9f3d`; the fresh inventory contains > 107 open PRs and 15 open non-PR issues. PR #780's remotely observed evidence