Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
272 commits
Select commit Hold shift + click to select a range
74f1eb2
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 25, 2026
1b5bea3
Merge branch 'chore/refresh-gap-baseline-20260826' of https://github.…
Aug 25, 2026
448d794
docs(gaps): record cancelled analysis queue
Aug 25, 2026
d7f4122
docs(gaps): reconcile cancelled analysis queue count
Aug 25, 2026
a1597b6
fix(ui): avoid empty analysis action column
Aug 25, 2026
d831048
docs(gaps): refresh dashboard and cancelled-run heads
Aug 25, 2026
2617520
fix(ui): align analysis run grid content
Aug 25, 2026
f431948
docs(gaps): mark merged event lineage delivery
Aug 25, 2026
492116b
docs(gaps): refresh current queue heads
Aug 25, 2026
21bb799
fix(ui): stack analysis runs on mobile
Aug 25, 2026
76e999c
docs(gaps): refresh responsive analysis queue head
Aug 25, 2026
9216d3a
docs(gaps): record baseline head
Aug 25, 2026
3f2318a
docs(gap): refresh dashboard PR exact head
Aug 25, 2026
c7e9319
docs(gap): record latest dashboard head
Aug 25, 2026
73aae42
docs(gaps): decompose ADR 0133 through 0137
Aug 25, 2026
ee66051
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 25, 2026
93bca32
docs(gaps): link ADR decomposition PR
Aug 25, 2026
99a44be
docs(gap): include ADR decomposition PR exact head
Aug 25, 2026
c6d95fc
Merge pull request #671 from ContextualWisdomLab/docs/adr-0133-0137-d…
seonghobae Aug 25, 2026
b0c3dc2
Merge pull request #669 from ContextualWisdomLab/feat/cancelled-analy…
seonghobae Aug 25, 2026
d1af00d
docs(gap): mark merged calendar PR historical
Aug 25, 2026
6d680a1
docs(gap): reconcile stacked PR queue
Aug 25, 2026
e05d138
docs(gap): record dashboard remediation head
Aug 25, 2026
2ae5ef3
docs(gap): record Global Ask PR exact head
Aug 25, 2026
5334a06
docs(gap): refresh current PR exact heads
Aug 25, 2026
1207e57
docs(gap): record TEPP lifecycle head
Aug 25, 2026
bd7e258
docs(gap): reconcile renumbered PR heads
Aug 25, 2026
f4fa917
docs(gap): record RankWeave stack head
Aug 26, 2026
8de279a
docs(gap): record project history display repair
Aug 26, 2026
0653f0d
docs(gap): record PostgreSQL gate RCA
Aug 26, 2026
a7a6445
docs(gaps): refresh exact-head queue after review repairs
Aug 26, 2026
3b087bc
feat(ask): persist per-post conversation history
Aug 26, 2026
29d05e4
docs(gap): track per-post Ask delivery evidence
Aug 26, 2026
9e2e97a
test(storybook): normalize mocked request URLs
Aug 26, 2026
c653663
fix(ask): preserve process-unit authorization context
Aug 26, 2026
51b9dfa
test(storybook): accept every fetch input shape
Aug 26, 2026
ac7eb4e
docs(gaps): record stacked Ask history candidate
Aug 26, 2026
10c4e1d
docs(gaps): record current stacked queue
Aug 26, 2026
70af96b
fix(ask): preserve localized and race-safe conversation history
Aug 26, 2026
f7f4580
docs(gaps): refresh current exact heads
Aug 26, 2026
2c32393
docs(gaps): record current Ask repair heads
Aug 26, 2026
84a9de3
docs(gaps): add customer-copy PR and schema RCA heads
Aug 26, 2026
4260af2
fix(ui): make recovery copy customer-actionable
Aug 26, 2026
2783500
fix(ask): complete conversation pagination recovery
Aug 26, 2026
224ee34
docs(gaps): refresh current PR repair heads
Aug 26, 2026
4394c0f
docs(gaps): record latest owner-contract and claim heads
Aug 26, 2026
fc27077
docs(gap): record public claim verification head
Aug 26, 2026
aede591
Merge branch 'chore/refresh-gap-baseline-20260826' into feat/post-ask…
seonghobae Aug 26, 2026
81c0a0d
docs(gap): record customer-copy audit head
Aug 26, 2026
ab1d203
docs(gaps): remove stale duplicate PR head
Aug 26, 2026
ae13d6b
Merge branch 'chore/refresh-gap-baseline-20260826' of https://github.…
Aug 26, 2026
8979c9b
docs(gap): refresh dashboard copy audit head
Aug 26, 2026
b1c4b3e
docs(gap): record latest customer-copy and dashboard heads
Aug 26, 2026
296bf40
docs(gap): record ask verification repair head
Aug 26, 2026
11f7643
fix(chat): separate saved turns from demo cache
Aug 26, 2026
9dfa784
docs(gaps): record saved-turn cache boundary
Aug 26, 2026
fad35d9
docs(gap): record ranking guidance test head
Aug 26, 2026
f40816b
docs(gap): record final ask verification stack head
Aug 26, 2026
6cd0b14
feat(ask): persist per-post conversation history
Aug 26, 2026
6bf2373
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
d19808f
fix(ask): preserve localized and race-safe conversation history
Aug 26, 2026
d9d14c0
Merge remote-tracking branch 'origin/feat/post-ask-conversation-histo…
Aug 26, 2026
ceb2f99
docs(gap): record conversation history rebase head
Aug 26, 2026
eb4d693
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
8f535f4
docs(gap): refresh conversation history head
Aug 26, 2026
caa656a
docs(gap): record stacked merges and queue size
Aug 26, 2026
d3c96fa
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
17a1313
fix(ui): make recovery copy customer-actionable
Aug 26, 2026
d3a2ad9
docs(gap): record public envelope guidance head
Aug 26, 2026
4597722
docs(gaps): record customer recovery copy head
Aug 26, 2026
bf7d6b8
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
aaca688
docs(gap): refresh conversation branch reconciliation
Aug 26, 2026
aca75ce
docs(gap): record latest source detail copy head
Aug 26, 2026
90b0d33
docs(gap): record portable Rust backend ADR head
Aug 26, 2026
f3da213
style(chat): reuse touch-target token
Aug 26, 2026
205b486
docs(gap): refresh current PR queue heads
Aug 26, 2026
f84be88
docs(gap): record latest dashboard branch head
Aug 26, 2026
b74efe0
docs(gap): record ontology branch test repair
Aug 26, 2026
771a518
docs(gap): refresh concurrent PR heads
Aug 26, 2026
0ba4e60
test(chat): use canonical history cursor fields
Aug 26, 2026
530de03
docs(gap): record semantic backfill and latest PR heads
Aug 26, 2026
dad43e1
docs(gap): record semantic worker quality repair
Aug 26, 2026
0f34ff7
docs(gap): record dashboard stack advancement
Aug 26, 2026
d333485
docs(gap): refresh customer-copy exact head
Aug 26, 2026
9a9b956
docs(gap): record latest customer-copy head
Aug 26, 2026
2625f5b
docs(gaps): reconcile live PR queue evidence
Aug 26, 2026
b9fd426
docs(gap): refresh dashboard stack exact head
Aug 26, 2026
3fd77e6
docs(gaps): record current exact-head queue
Aug 26, 2026
89e3da8
Merge branch 'chore/refresh-gap-baseline-20260826' of https://github.…
Aug 26, 2026
efe1284
docs(gap): capture expanded open-pr queue
Aug 26, 2026
591d2aa
docs(gaps): record cross-PR contract collisions
Aug 26, 2026
9c09442
docs(gap): refresh queued exact heads
Aug 26, 2026
80c5967
Merge pull request #677 from ContextualWisdomLab/feat/post-ask-conver…
seonghobae Aug 26, 2026
1dd4ab2
docs(gap): refresh latest queue heads
Aug 26, 2026
b3a1c4e
docs(gap): record protected queue merge progress
Aug 26, 2026
4790b43
docs(gap): refresh current stacked heads
Aug 26, 2026
ed06192
docs(gap): record baseline parent exact head
Aug 26, 2026
b093b7d
docs(gap): refresh exact-head queue evidence
Aug 26, 2026
efa28fc
fix(chat): keep repeated turns distinct
Aug 26, 2026
95ac10b
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
d474e97
docs(gap): record current baseline repair head
Aug 26, 2026
2944184
docs(gaps): record pooled embedding boundary
Aug 26, 2026
4279474
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
26b6028
docs(gap): refresh stacked PR heads
Aug 26, 2026
2dac7f6
docs(gap): record automatic retry copy repair
Aug 26, 2026
27cf1f4
docs(gaps): reconcile pooled embedding candidate
Aug 26, 2026
9b8a827
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
5df894e
docs(ontology): record live publication evidence
Aug 26, 2026
28b9d09
docs(gaps): record project ontology verification
Aug 26, 2026
e7cc4c7
docs(ontology): cite canonical namespace ADR
Aug 26, 2026
79b4901
docs(ontology): separate legacy identifier from mapping
Aug 26, 2026
9b5645f
docs(gaps): refresh automatic retry evidence
Aug 26, 2026
793931a
fix(chat): ignore stale history pages
Aug 26, 2026
0a13425
docs(gaps): refresh customer-copy evidence
Aug 26, 2026
0e95a20
docs(gaps): record customer-copy branch collision
Aug 26, 2026
ba19fc6
fix(chat): clear resolved history warning
Aug 26, 2026
2a2ec9c
docs(gaps): track analysis-run localization
Aug 26, 2026
244efc6
feat(i18n): localize analysis-run guidance
Aug 26, 2026
ea85595
docs(gaps): refresh exact PR queue
Aug 26, 2026
2e8578d
docs(gaps): record semantic window repair
Aug 26, 2026
7fc59bc
fix: keep analysis responsibility in product copy
Aug 26, 2026
bb4edab
fix(ask): lock evidence before citation persistence
Aug 26, 2026
b4b0301
fix: remove duplicate measurement handoff copy
Aug 26, 2026
da5652d
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
7fdd0ad
docs(ontology): record protected publication proof
Aug 26, 2026
55b5a48
feat(i18n): localize analysis-run guidance (#690)
seonghobae Aug 26, 2026
84e78f9
docs(gaps): record stack integration evidence
Aug 26, 2026
f882b53
fix(ui): use defined spacing tokens
Aug 26, 2026
7fd9f46
docs(gaps): resolve ontology ADR collisions
Aug 26, 2026
026c96f
docs(adr): assign unique conversation and ontology ids
Aug 26, 2026
69e1dbe
test(ask): align nullable conversation contract
Aug 26, 2026
f827122
docs(gaps): record collision-free open stack
Aug 26, 2026
763185f
docs(ontology): record legacy namespace statuses
Aug 26, 2026
b7328f3
docs(gaps): record cutoff and publication repairs
Aug 26, 2026
9350758
docs(gaps): align protected approval contract
seonghobae Aug 26, 2026
bc07cb8
docs(prd): preserve canonical disksage repository case
seonghobae Aug 26, 2026
e039454
docs(gaps): record project-time UI evidence
Aug 26, 2026
ad27b4c
feat: retry failed measurement runs
Aug 26, 2026
6023cea
docs: refresh exact-head PR inventory
Aug 26, 2026
37cc9ab
docs: correct ADR implementation references
Aug 26, 2026
74975de
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
a558733
fix: retain repeated Ask conversation turns
Aug 26, 2026
92e3b2e
docs(gaps): refresh semantic delivery evidence
Aug 26, 2026
ed4c46f
Merge latest product-gap baseline into measurement retry
Aug 26, 2026
3b093f2
docs(gaps): reconcile current stack evidence
Aug 26, 2026
294d251
fix: isolate measurement retry request keys
Aug 26, 2026
70a974f
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
006cd73
fix(ask): recover deleted conversation writes
Aug 26, 2026
efd5d41
fix(ask): ignore stale conversation errors
Aug 26, 2026
b7d097c
docs(gaps): record product semantic delivery stack
Aug 26, 2026
ef496f5
Merge latest gap baseline into measurement retry
Aug 26, 2026
cf95665
fix(ui): scope retry keys to failed runs
Aug 26, 2026
d312797
test(frontend): prove same-run retry key replay
Aug 26, 2026
60b4c60
Merge pull request #691 from ContextualWisdomLab/feat/analysis-run-me…
seonghobae Aug 26, 2026
c321fe3
docs(gaps): refresh ontology and semantic delivery evidence
Aug 26, 2026
d3dd929
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
56dc409
fix(ask): preserve evidence-change recovery boundary
Aug 26, 2026
c7f8f01
docs(gaps): refresh exact-head delivery snapshot
Aug 26, 2026
fcc2aaa
docs(gaps): record current semantic review evidence
Aug 26, 2026
836866a
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
e440a1f
docs(gaps): close current ontology review loop
Aug 26, 2026
19422ba
fix(chat): fence stale conversation pages
Aug 26, 2026
03c4cff
docs(gaps): remove closed unmerged delivery claim
Aug 26, 2026
886a0c6
docs(architecture): define accelerator service boundary (#695)
seonghobae Aug 26, 2026
b96a9bf
docs(architecture): correct RankWeave runtime ownership (#696)
seonghobae Aug 26, 2026
ec7fca7
docs(gaps): record accelerator ownership boundary
Aug 26, 2026
07a41cd
docs(architecture): cover Podman and Colima accelerators
Aug 26, 2026
0905fa9
docs(gaps): record source-bound product evidence
Aug 26, 2026
625495f
docs(architecture): cite Colima maintainers accurately
Aug 26, 2026
5a5fc28
docs(gaps): refresh central hourly loop evidence
Aug 26, 2026
7efa844
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
ad25b80
fix(chat): align source eligibility reauthorization
Aug 26, 2026
6f3e179
fix(security): document bounded eligibility SQL
Aug 26, 2026
45eaeaa
docs(gaps): refresh semantic PR exact heads
Aug 26, 2026
6de0e34
docs(gaps): reconcile delivered acceptance gaps
Aug 26, 2026
adad5be
docs(gaps): record current customer-copy evidence
Aug 26, 2026
a76dae3
docs(gaps): record protected ontology delivery and math debt
Aug 26, 2026
a048439
Merge remote-tracking branch 'origin/main' into chore/refresh-gap-bas…
Aug 26, 2026
83f5b15
style(docs): repair protected merge whitespace
Aug 26, 2026
27b3611
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
8a341ba
fix: fence post conversation requests
Aug 26, 2026
c2f0e87
docs(gaps): record exact-head load evidence
Aug 26, 2026
7e23a18
docs(gaps): refresh merge-forward head evidence
Aug 26, 2026
0bc2bc6
docs(gaps): track source turn contract candidate
Aug 26, 2026
ad3c593
docs(gaps): refresh conversation contract head
Aug 26, 2026
776e636
docs(gaps): record migration fixture repair
Aug 26, 2026
cb3ebfc
docs(gaps): refresh review repair heads
Aug 26, 2026
9f18571
fix: replace recovered conversation transcript
Aug 26, 2026
c263cab
docs(gaps): sync exact review repair heads
Aug 26, 2026
d6971d0
fix: reject partial conversation cursors
Aug 26, 2026
60a7925
docs(gaps): reconcile stacked merges and exact heads
Aug 26, 2026
897b88e
Merge remote-tracking branch 'origin/main' into codex/pr667-gap-refresh
Aug 26, 2026
f0314cc
docs(gaps): refresh owner-boundary exact heads
Aug 26, 2026
32179e7
docs(gaps): compose current owner stacks
Aug 26, 2026
0606863
docs(gaps): reconcile review repairs and voice stack
Aug 26, 2026
7b0090a
Merge branch 'chore/refresh-gap-baseline-20260826' of https://github.…
Aug 26, 2026
fccd567
docs(gaps): reconcile current review and stack heads
Aug 26, 2026
aea7deb
docs(gaps): refresh exact-head queue evidence
Aug 26, 2026
060f9e3
docs(gaps): refresh exact PR heads
Aug 26, 2026
6adf1e3
docs(gaps): record PR 639 merge repair
Aug 26, 2026
50703c1
docs(gaps): refresh graph provenance head
Aug 26, 2026
14d6df2
docs(gaps): refresh repaired PR heads
Aug 26, 2026
55ef163
docs(gaps): record scheduler and broken stack head
Aug 26, 2026
8707db5
docs(gaps): refresh customer-copy repair heads
Aug 26, 2026
93e45ba
docs(gaps): record frontend split reconciliation
Aug 26, 2026
760dffa
docs(gaps): add source coverage and stack evidence
Aug 26, 2026
715632d
docs(gaps): record repaired dashboard stack
Aug 26, 2026
76969f3
docs(gaps): refresh reconciled stack heads
Aug 26, 2026
3e432b4
docs(gap): refresh exact-head owner evidence
Aug 26, 2026
cac8bf0
docs(gaps): bind semantic coverage evidence
Aug 26, 2026
1e180c5
docs(gaps): refresh repaired PR heads
Aug 26, 2026
6e362f9
fix(chat): fence delayed answers by post
Aug 26, 2026
1754b2c
docs(gaps): refresh chat review heads
Aug 26, 2026
657dda0
docs(gaps): sync worker and Rust owner evidence
Aug 26, 2026
b4bfb70
docs(gaps): sync protected queue exact heads
Aug 26, 2026
958eb2a
docs(gaps): record merged provenance child
Aug 26, 2026
bdc3b0b
docs(gaps): sync semantic exact-head evidence
Aug 26, 2026
2bc24dd
docs(gaps): record open-head identifier audit
Aug 26, 2026
ee361ce
docs(gaps): refresh owner and Strix evidence
Aug 26, 2026
76a15ab
fix(chat): keep saved turns out of demo seed view
Aug 26, 2026
f1502eb
docs(gaps): sync semantic and migration stack heads
Aug 26, 2026
fccaef2
docs(gaps): sync current semantic and live stack evidence
Aug 26, 2026
ffde4b3
docs: refresh exact protected evidence
Aug 26, 2026
c7ec2b1
docs(gaps): refresh exact delivery evidence
Aug 26, 2026
05076d7
Merge commit 'refs/codex/pr667-current' into HEAD
Aug 26, 2026
497e817
docs(gaps): track current queue and security repair
Aug 26, 2026
26836cb
fix(chat): keep saved citation evidence reachable
Aug 26, 2026
014db02
Merge remote-tracking branch 'origin/chore/refresh-gap-baseline-20260…
Aug 26, 2026
50711ff
test(storybook): cover saved citation evidence
Aug 26, 2026
4855c38
docs: refresh current queue evidence
Aug 26, 2026
c2d11a8
docs: refresh exact-head product gap baseline
Aug 26, 2026
360d62a
docs: sync repaired research head
Aug 26, 2026
d8cf63b
fix(ui): retain measurement retry identity per run
Aug 26, 2026
964479b
docs: refresh exact-head product gap evidence
Aug 26, 2026
85c2b15
docs: refresh ontology queue evidence
Aug 26, 2026
2525244
fix(ui): clear Ask draft when changing posts
Aug 26, 2026
4d5eb5a
docs: reconcile semantic stack evidence
Aug 26, 2026
37c5c7a
fix(ui): serialize conversation loading and Ask
Aug 26, 2026
bc399e8
fix(ui): remove remaining internal customer copy
Aug 26, 2026
f1e71d5
fix(ui): replace implementation details with next actions
Aug 26, 2026
92a64c4
docs: refresh ontology stack exact heads
Aug 26, 2026
ec7438d
docs: record customer boundary audits
Aug 26, 2026
251640d
fix: keep Ask history pagination stable
Aug 26, 2026
3606e7e
docs: refresh exact-head product gap evidence
Aug 26, 2026
24644d7
docs: record repaired ontology stack check
Aug 26, 2026
e3f8a89
docs: track current semantic evidence queue
Aug 26, 2026
ea17b17
docs: reconcile live semantic delivery stack
Aug 26, 2026
5e653f1
docs: record semantic stack merges
Aug 26, 2026
e15c507
fix(history): recover deleted session before evidence check
Aug 26, 2026
0c0f4af
docs(gap): refresh exact protected queue evidence
seonghobae Aug 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -324,11 +324,14 @@ A run-bearing analysis-run registry empties only after an unrevoked
(ADR 0020 / v0.87.0). The documented phrase is not a secret. Do not
expose purge on a public HTTP route.

`POST /api/analysis-runs` records Pending lineage only (ADR 0017 /
v2.7.1). TEPP and period-report kinds 422 before any snapshot write.
`POST /api/analysis-runs/{id}/start` reconstructs a Pending lineage
cutoff bag through `reconstruct()` / `lineage_edge_specs` (ADR 0021 /
v0.88.0). Do not invent a theta.
`POST /api/analysis-runs` records Pending lineage, TEPP measurement, and
topic-lineage requests (ADR 0017 / ADR 0022); period-report and unknown kinds
422 before any snapshot write. A Failed measurement remains terminal, while
Retry creates and starts a new current-snapshot request through the outbox and
`tepp_client`. `POST /api/analysis-runs/{id}/start` reconstructs a Pending
lineage cutoff bag through `reconstruct()` / `lineage_edge_specs` (ADR 0021 /
v0.88.0) or submits supported measurement work through `tepp_client`. Do not
invent a theta.
Opening a cutoff-rewritten title shows **Body this run knew** from
`source_post_revision` beside the live rewrite (ADR 0025 / v2.1.0).
Do not invent the earlier sentence when no revision covers the cutoff.
Expand Down Expand Up @@ -375,8 +378,9 @@ A manual dispatch from another ref is not a publication path. The
repository-case public namespace
`https://contextualwisdomlab.github.io/LineageWeave/ontology#` is
canonical ([ADR 0207](docs/adr/0207-repository-case-ontology-namespace-canonical.md),
superseding ADR 0157, resolving issue #372); the lowercase form is a
deprecated compatibility vocabulary with validated term-kind mappings.
superseding ADR 0157 and amended by ADR 0236); the lowercase form is a
deprecated compatibility identifier mapped by a published compatibility
vocabulary, not a separately served namespace.
New runtime values, exports, fixtures, and database rows mint only
repository-case IRIs; `scripts/migrate_legacy_namespace.py` rewrites
stored lowercase IRIs (dry-run by default, never touching provenance
Expand Down
16 changes: 13 additions & 3 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,21 @@ authorization, provenance persistence, and UI projection only. The current
Python IRT/report, residual-map, similarity, graph-ranking, and fusion paths
are explicitly inventoried migration debt rather than evidence that this
repository owns their mathematics. They move by construct to TEPP,
fast-mlsirm, or RankWeave after versioned Rust CPU/GPU owner contracts pass
recovery/equivalence checks; affected product paths fail closed during each
cutover rather than substituting a local estimate. See
fast-mlsirm, or RankWeave after each owner's versioned contract passes
recovery/equivalence checks; TEPP and fast-mlsirm own Rust scientific compute,
while RankWeave owns its existing retrieval and comparison implementation.
Affected product paths fail closed during each cutover rather than substituting
a local estimate. See
`docs/doctoring/python-mathematical-compute-boundary-audit.md`.

ADR 0237 also keeps accelerator deployment outside this repository. MLX runs
as a native Apple-silicon inference service behind contextual-orchestrator;
scientific CPU/CUDA/OpenCL profiles belong to TEPP or fast-mlsirm. RankWeave
remains the dependency-free Python retrieval-fusion/evaluation owner behind its
published contract. LineageWeave Compose therefore does not reserve devices or
mount host drivers; its provider-neutral connectors consume versioned results
and fail closed when an owning service is unavailable.

## Data flow

```mermaid
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.d/2.21.2-cancelled-analysis-next-actions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 2.21.2 Name the next action for every cancelled analysis kind

Cancelled lineage, TEPP, topic-lineage, and period-report runs now tell the
operator the kind-specific valid next action. A terminal cancellation no
longer leaves the analysis list and detail without guidance.
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@ All notable changes to this project are documented here. Format follows

### Added

- Failed measurement and topic-lineage views can request and start a new
immutable current-snapshot run while retaining the Failed history.
- Analysis-run next actions, empty-snapshot guidance, and selected-post
guidance now follow the active English, Korean, Chinese, Japanese, or
Vietnamese locale. Customer copy describes the next product action without
exposing internal measurement transport boundaries; Storybook includes
desktop and phone status matrices.
- Account-owned per-post Ask conversations can be listed, reopened, and
continued with current authorization reapplied to cited evidence (ADR 0235).
- Persist explicit paragraph, list, table, MathML formula, and caller-parsed
conversation-turn semantic-unit kinds without inferring absent boundaries.
- Event Lineage now persists each reconstructed connection's independent
Expand Down Expand Up @@ -105,6 +114,10 @@ All notable changes to this project are documented here. Format follows

### Changed

- Ontology documentation now distinguishes the canonical dereferenceable
namespace from the published mapping document for legacy lowercase IRIs;
no customer or consumer is directed to a lowercase path that returns 404.

- ADRs 0011 and 0065 now include APA 7th References for the dated W3C
PROV-O and PROV-DM Recommendations (30 April 2013). Decisions are
unchanged.
Expand Down
5 changes: 3 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@ period-report run on one snapshot. The TEPP path goes through
Failed (`tepp_not_available` / `tepp_result_not_persisted`). Never
invent a theta or a local psychometric substitute.

- Failed TEPP is terminal -- open that row and connect a live TEPP
transport from it.
- Failed TEPP is terminal. Retry creates and starts a new current-snapshot
request through the existing outbox and `tepp_client`; it never mutates the
failed row or invents a local measurement.
- A failed lineage row retries reconstruction and does not mention TEPP;
a failed period-report row rebuilds the report.
- Pending rows claim nothing: pending TEPP is not a calibrated
Expand Down
49 changes: 20 additions & 29 deletions backend/app/analysis_run_ingestion.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@
lookup labels come back; source SQL, DSNs, raw records, and provider
payloads never do.

``create_pending_analysis_run`` (ADR 0017) writes snapshot, counts, frozen
membership, run, scope, and the first Pending event atomically. It
records lineage only. It does not reconstruct lineage, accept a TEPP
kind, or invent a score. ``enqueue_pending_analysis_run`` then
``create_pending_analysis_run`` (ADR 0017 / ADR 0022) writes snapshot,
counts, frozen membership, run, scope, and the first Pending event atomically.
It records a request, never a result or score. ``enqueue_pending_analysis_run`` then
``deliver_queued_analysis_run`` later reconstruct lineage (ADR 0021 /
ADR 0023) or submit TEPP through ``tepp_client`` (ADR 0022). Neither
path invents a TEPP score.
Expand Down Expand Up @@ -333,6 +332,8 @@ async def _serialize_runs(
}
if row["scope_entity_name"]:
item["scope_entity_name"] = row["scope_entity_name"]
if row["corporate_entity_id"]:
item["scope_corporate_entity_id"] = str(row["corporate_entity_id"])
if row["scope_key"]:
item["scope_key"] = row["scope_key"]
grouping_key = scope_grouping_key(row)
Expand Down Expand Up @@ -629,36 +630,25 @@ def __init__(self, status_code: int, detail: str) -> None:
self.detail = detail


def _require_lineage_create_kind(run_kind_code: str) -> None:
"""Reject TEPP, topic-lineage, and report writes so this path cannot fake those products.
def _require_requestable_run_kind(run_kind_code: str) -> None:
"""Allow requestable run kinds without claiming that work has completed.

TEPP and topic-lineage stay ``tepp_client`` wire paths (ADR 0022 /
ADR 0132). Period reports stay on the Reports panel rebuild. A Pending
TEPP or topic-lineage row that never called the transport is a
fabricated measurement request.
TEPP and topic-lineage execution still crosses ``tepp_client`` (ADR 0022 /
ADR 0132). A Pending row is an immutable request, not a calibrated result.
Period reports stay on the Reports panel rebuild path.
"""
if run_kind_code == _TEPP_RUN_KIND:
raise AnalysisRunCreateError(
422,
"Connect a TEPP transport from a Failed TEPP row; this endpoint "
"does not invent a measurement.",
)
if run_kind_code == _TOPIC_LINEAGE_RUN_KIND:
raise AnalysisRunCreateError(
422,
"Connect a TEPP transport from a Failed topic-lineage row; this "
"endpoint does not invent a topic model.",
)
if run_kind_code in {
_LINEAGE_RUN_KIND,
_TEPP_RUN_KIND,
_TOPIC_LINEAGE_RUN_KIND,
}:
return
if run_kind_code == _REPORT_RUN_KIND:
raise AnalysisRunCreateError(
422,
"Rebuild the period report from the Reports panel.",
)
if run_kind_code != _LINEAGE_RUN_KIND:
raise AnalysisRunCreateError(
422,
"Only lineage reconstruction can be requested here.",
)
raise AnalysisRunCreateError(422, "Choose a supported analysis run kind.")
Comment thread
seonghobae marked this conversation as resolved.


@dataclass(frozen=True)
Expand Down Expand Up @@ -785,11 +775,12 @@ async def create_pending_analysis_run(
) -> dict[str, Any]:
"""Insert snapshot, counts, frozen members, run, scope, and Pending.

Lineage only. Does not reconstruct, call TEPP, or invent a theta.
Does not reconstruct, call TEPP, or invent a theta. Pending measurement
and topic-lineage rows become work only through the start/outbox path.
Kind rejection happens before any snapshot or run insert.
Idempotent retries compare ``configuration_sha256``.
"""
_require_lineage_create_kind(run_kind_code)
_require_requestable_run_kind(run_kind_code)
if scope_kind_code != _CORPORATE_SCOPE:
raise AnalysisRunCreateError(
422,
Expand Down
12 changes: 6 additions & 6 deletions backend/app/analysis_run_start.py
Original file line number Diff line number Diff line change
Expand Up @@ -954,9 +954,9 @@ async def _claim_delivery_plan(
if weights is None:
raise AnalysisRunStartError(
503,
"Channel weights are not estimated yet for this run's active "
f"channels ({', '.join(sorted(active_channels))}). Run "
"scripts/estimate_channel_weights.py, then start this run again.",
"Lineage calibration evidence is unavailable for this run. Ask "
"your workspace administrator to complete calibration, then start "
"this run again.",
)
return _DeliveryPlan(
_LINEAGE_KIND,
Expand Down Expand Up @@ -986,9 +986,9 @@ def _execute_delivery_plan(
except _AdjudicationProviderError as exc:
raise AnalysisRunStartError(
503,
"The adjudication provider failed mid-reconstruction; nothing "
"was persisted. Check the contextual-orchestrator transport, "
"then start this run again.",
"Lineage reconstruction is temporarily unavailable. No result "
"was saved. Start this run again in a moment; if this continues, "
"contact your workspace administrator.",
) from exc
return _DeliveryOutcome(plan.work_kind_code, plan.started_at, tuple(edges))

Expand Down
27 changes: 14 additions & 13 deletions backend/app/global_ask_queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@
# trimmed stream) and are republished by the worker's recovery sweep.
_REPUBLISH_AFTER_SECONDS = 60
_RECOVERY_INTERVAL_SECONDS = 30.0
_ASK_RETRY_MESSAGE = (
"Ask Agent is unavailable. Retry in a moment. If this continues, "
"contact your workspace administrator."
)
# Hard ceiling on one job's answer computation. Without it a hung
# orchestrator round-trip kept a job `running` indefinitely (observed:
# 17+ minutes) and, before concurrent processing, stalled every job
Expand Down Expand Up @@ -168,11 +172,11 @@ def _verification_next_action(status_code: str) -> str:

return {
VERIFICATION_SKIPPED: "Enable public verification to check eligible public claims.",
VERIFICATION_UNAVAILABLE: "Configure public search and contextual-orchestrator, then retry.",
VERIFICATION_NO_PUBLIC_CLAIMS: "Inspect the internal cited posts; no public claim was eligible.",
VERIFICATION_UNAVAILABLE: "Ask a workspace administrator to enable public verification, then retry.",
VERIFICATION_NO_PUBLIC_CLAIMS: "Ask about a specific claim or narrow the time range, then retry.",
VERIFICATION_COMPLETED: "Inspect public evidence separately before any governed graph review.",
CLAIM_NOT_ENOUGH_INFORMATION: "Collect stronger authoritative evidence before accepting the claim.",
}.get(status_code, "Inspect the authorized cited posts and their evidence.")
}.get(status_code, "Ask about a specific claim or narrow the time range, then retry.")


async def _verify_public_claims(
Expand Down Expand Up @@ -348,7 +352,7 @@ def can_see(row: asyncpg.Record) -> bool:
record_server_failure("global_ask", exc, outcome="internal_error")
raise HTTPException(
status.HTTP_503_SERVICE_UNAVAILABLE,
"Ask Agent is unavailable: authorized evidence could not be assembled",
_ASK_RETRY_MESSAGE,
) from exc
cutoff_text = knowledge_cutoff.isoformat() if knowledge_cutoff else None
grounding_status = ask_grounding_status(sources, cutoff_text)
Expand Down Expand Up @@ -404,7 +408,7 @@ def can_see(row: asyncpg.Record) -> bool:
record_server_failure("global_ask", exc, outcome="provider_unavailable")
raise HTTPException(
status.HTTP_503_SERVICE_UNAVAILABLE,
"Ask Agent is unavailable: contextual-orchestrator could not complete the answer",
_ASK_RETRY_MESSAGE,
) from exc
except (KeyError, ValueError) as exc:
# Contract/schema fault: the orchestrator responded but its payload
Expand All @@ -413,7 +417,7 @@ def can_see(row: asyncpg.Record) -> bool:
record_server_failure("global_ask", exc, outcome="provider_unavailable")
raise HTTPException(
status.HTTP_503_SERVICE_UNAVAILABLE,
"Ask Agent is unavailable: contextual-orchestrator could not complete the answer",
_ASK_RETRY_MESSAGE,
) from exc
except Exception as exc:
# Unexpected defect. Keep the customer boundary and emit a full
Expand All @@ -422,7 +426,7 @@ def can_see(row: asyncpg.Record) -> bool:
record_server_failure("global_ask", exc, outcome="internal_error")
raise HTTPException(
status.HTTP_503_SERVICE_UNAVAILABLE,
"Ask Agent is unavailable: contextual-orchestrator could not complete the answer",
_ASK_RETRY_MESSAGE,
) from exc
cited_ids = list(answer.cited_post_ids)
verification_status, external_claims = await _verify_public_claims(
Expand Down Expand Up @@ -552,7 +556,7 @@ async def process_global_ask_job(
chat_client = chat_factory()
if not chat_client.available:
raise _SafeJobError(
"Ask Agent is unavailable: set ORCHESTRATOR_BASE_URL / ORCHESTRATOR_API_KEY"
_ASK_RETRY_MESSAGE
)
payload = await asyncio.wait_for(
compute_global_ask_answer(
Expand Down Expand Up @@ -588,16 +592,13 @@ async def process_global_ask_job(
# state / missing config) — never a provider-boundary leak.
detail = str(exc)
elif isinstance(exc, asyncio.TimeoutError):
detail = f"job exceeded the {JOB_DEADLINE_SECONDS}s deadline"
detail = _ASK_RETRY_MESSAGE
else:
# Provider responses/exceptions can carry credentials, gateway
# diagnostics, or model output (ADR 0123): never persist the
# raw exception text as a durable `failure_detail`. The
# traceback just logged keeps it for operator debugging only.
detail = (
"Ask Agent is unavailable: contextual-orchestrator returned "
"no complete evidence object"
)
detail = _ASK_RETRY_MESSAGE
async with pool.acquire() as conn:
await conn.execute(
"""
Expand Down
Loading
Loading