Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
802 commits
Select commit Hold shift + click to select a range
9f7574f
docs: record source indentation buyer gap
seonghobae Aug 20, 2026
49804b0
Merge branch 'main' into feat/analysis-run-name-evidence-lineage
github-actions[bot] Aug 20, 2026
f13bc3f
feat: enrich semantic hints from source catalogs
seonghobae Aug 20, 2026
adbb72d
fix: reject non-decomposed vision regions
seonghobae Aug 20, 2026
766b742
docs: refresh protected gate baseline
seonghobae Aug 20, 2026
4d3d7ae
docs: record corrected image region evidence
seonghobae Aug 20, 2026
85dbfb5
fix: trim source catalog lookup codes
seonghobae Aug 20, 2026
efd4aab
docs: record catalog hint boundary
seonghobae Aug 20, 2026
deca246
docs: record exact-head validation evidence
seonghobae Aug 20, 2026
82b7b39
docs: record live browser acceptance
seonghobae Aug 20, 2026
69b8909
docs: refresh live gate topology
seonghobae Aug 20, 2026
b83be70
style: normalize merged branch whitespace
seonghobae Aug 20, 2026
f922322
Merge remote-tracking branch 'origin/feat/analysis-run-name-evidence-…
seonghobae Aug 20, 2026
d1d4930
Merge current main into feat/analysis-run-name-evidence-lineage
seonghobae Aug 20, 2026
49d85d0
Merge remote-tracking branch 'origin/fix/oidc-deep-link-locale' into …
seonghobae Aug 20, 2026
40c9168
Merge remote-tracking branch 'origin/fix/buyer-image-evidence' into c…
seonghobae Aug 20, 2026
fc7969e
Merge remote-tracking branch 'origin/feat/analysis-run-name-evidence-…
seonghobae Aug 20, 2026
516603c
Merge remote-tracking branch 'origin/fix/oidc-deep-link-locale' into …
seonghobae Aug 20, 2026
3072e01
Merge remote-tracking branch 'origin/fix/buyer-image-evidence' into c…
seonghobae Aug 20, 2026
a903fff
Merge remote-tracking branch 'origin/fix/project-bound-summary-action…
seonghobae Aug 20, 2026
d36e106
Merge remote-tracking branch 'origin/fix/stale-summary-buyer-continui…
seonghobae Aug 20, 2026
ca3f56a
Merge remote-tracking branch 'origin/codex/fix-mixed-body-indentation…
seonghobae Aug 20, 2026
e84994e
Merge remote-tracking branch 'origin/codex/post-structure-case-fixes'…
seonghobae Aug 20, 2026
ab27898
fix: refresh content after summary ingestion
seonghobae Aug 20, 2026
e14dd95
test: cover lineage graph interactions
seonghobae Aug 20, 2026
ee52819
merge: sync buyer evidence branch with main
seonghobae Aug 20, 2026
dcbd4c1
merge: preserve concurrent main synchronization
seonghobae Aug 20, 2026
2d7f899
fix: bound OIDC return state parsing
seonghobae Aug 20, 2026
3a32312
Merge remote-tracking branch 'origin/feat/analysis-run-name-evidence-…
seonghobae Aug 20, 2026
e5ee5db
Merge remote-tracking branch 'origin/fix/oidc-deep-link-locale' into …
seonghobae Aug 20, 2026
b2d4c10
fix: restrict synthetic cleanup to demo scopes
seonghobae Aug 20, 2026
41036e2
test: cover empty synthetic cleanup
seonghobae Aug 20, 2026
9e17c2a
fix: validate buyer image sources at render boundary
seonghobae Aug 20, 2026
1fa42f8
Merge remote-tracking branch 'origin/fix/buyer-image-evidence' into c…
seonghobae Aug 20, 2026
446abeb
Merge remote-tracking branch 'origin/fix/project-bound-summary-action…
seonghobae Aug 20, 2026
36a879b
Merge remote-tracking branch 'origin/fix/stale-summary-buyer-continui…
seonghobae Aug 20, 2026
bb9c78e
Merge remote-tracking branch 'origin/codex/fix-mixed-body-indentation…
seonghobae Aug 20, 2026
1e762d5
Merge remote-tracking branch 'origin/codex/post-structure-case-fixes'…
seonghobae Aug 20, 2026
9a45941
fix: expose unexpected content channel defects
seonghobae Aug 20, 2026
0816d59
Merge remote-tracking branch 'origin/codex/normalize-source-indent-se…
seonghobae Aug 20, 2026
9e59b70
fix: expose recoverable content batch failures
seonghobae Aug 20, 2026
18fdaa9
Merge remote-tracking branch 'origin/codex/normalize-source-indent-se…
seonghobae Aug 20, 2026
17fa14f
test: define directional accessible lineage graph contract
seonghobae Aug 21, 2026
3ab6ba7
test: avoid duplicate lineage marker identities
seonghobae Aug 21, 2026
c5bbb52
feat: make event lineage direction and evidence explicit
seonghobae Aug 21, 2026
6be794a
fix: keep lineage graph legible across themes and widths
seonghobae Aug 21, 2026
89daa52
fix: expose lineage evidence by default
seonghobae Aug 21, 2026
d8b7eef
Merge remote-tracking branch 'origin/feat/analysis-run-name-evidence-…
seonghobae Aug 21, 2026
4bb2344
docs: align orchestrator runtime pin
seonghobae Aug 21, 2026
4e40e26
Merge remote-tracking branch 'origin/feat/analysis-run-name-evidence-…
seonghobae Aug 21, 2026
fbecd77
Merge remote-tracking branch 'origin/fix/oidc-deep-link-locale' into …
seonghobae Aug 21, 2026
46ca533
Merge remote-tracking branch 'origin/fix/buyer-image-evidence' into c…
seonghobae Aug 21, 2026
4f029ea
test: require accessible lineage graph regions
seonghobae Aug 21, 2026
63269e4
feat: make lineage graph structure accessible
seonghobae Aug 21, 2026
33baae5
test(frontend): specify customer master tree hardening
seonghobae Aug 21, 2026
b32e177
style: add lineage graph interaction states
seonghobae Aug 21, 2026
a285256
docs: add lineage graph Storybook states
seonghobae Aug 21, 2026
c5fa8c2
docs: record lineage DAG evidence improvements
seonghobae Aug 21, 2026
17ff911
Merge remote-tracking branch 'origin/fix/project-bound-summary-action…
seonghobae Aug 21, 2026
efaef8a
test: keep lineage node controls exposed to assistive technology
seonghobae Aug 21, 2026
077509e
fix: expose lineage node controls outside image semantics
seonghobae Aug 21, 2026
1fb1626
docs: record buyer lineage DAG design boundary
seonghobae Aug 21, 2026
e38df62
Merge remote-tracking branch 'origin/fix/stale-summary-buyer-continui…
seonghobae Aug 21, 2026
1faed2f
Merge remote-tracking branch 'origin/codex/fix-mixed-body-indentation…
seonghobae Aug 21, 2026
e3f00ea
Merge remote-tracking branch 'origin/codex/post-structure-case-fixes'…
seonghobae Aug 21, 2026
1875e65
fix(a11y): separate customer tree from evidence panel
seonghobae Aug 21, 2026
cabe3bb
test: cover isolated roots and fused-score labeling
seonghobae Aug 21, 2026
d668267
fix: omit empty lineage evidence tables
seonghobae Aug 21, 2026
67e39c9
test: expose ORG and SKOS ontology boundary gaps
seonghobae Aug 21, 2026
f80998b
docs: add isolated lineage Storybook state
seonghobae Aug 21, 2026
c7ecfa8
fix: separate organizations from SKOS classifications
seonghobae Aug 21, 2026
865ec0d
feat: publish core ontology SHACL constraints
seonghobae Aug 21, 2026
3f3ec01
Merge remote-tracking branch 'origin/codex/normalize-source-indent-se…
seonghobae Aug 21, 2026
a9c0385
docs: amend ontology ADR for ORG SKOS and SHACL boundaries
seonghobae Aug 21, 2026
996db8c
docs: align ontology loader with ORG and SHACL contracts
seonghobae Aug 21, 2026
19bd247
docs: record organization ontology interoperability fix
seonghobae Aug 21, 2026
cccf80c
fix(frontend): integrate customer master tree safely
seonghobae Aug 21, 2026
4228c48
merge: preserve concurrent customer-master updates
seonghobae Aug 21, 2026
c19d05e
docs: record Event Lineage Figma frame IDs
seonghobae Aug 21, 2026
21074cf
fix(a11y): make customer tree ownership explicit
seonghobae Aug 21, 2026
ca1ee63
ci: verify customer hierarchy finalization
seonghobae Aug 21, 2026
2b77e3d
docs: finalize customer hierarchy evidence
seonghobae Aug 21, 2026
be4c254
ci: remove stale cross-branch pnpm repair workflow
seonghobae Aug 21, 2026
de9a9cf
Merge remote-tracking branch 'origin/feat/analysis-run-name-evidence-…
seonghobae Aug 21, 2026
3532062
docs: finalize customer hierarchy evidence
seonghobae Aug 21, 2026
9924465
merge: preserve exact customer hierarchy evidence
seonghobae Aug 21, 2026
a157220
test: require lineage meaning and legend disclosure
seonghobae Aug 21, 2026
2d595d0
test: require five-locale lineage meaning copy
seonghobae Aug 21, 2026
94dbfeb
feat: add localized lineage meaning copy
seonghobae Aug 21, 2026
5f12e91
feat: disclose lineage legend and inference boundary
seonghobae Aug 21, 2026
5d63e1c
style: add lineage legend and inference notice
seonghobae Aug 21, 2026
e04b128
docs: record lineage meaning and legend disclosure
seonghobae Aug 21, 2026
34a3603
test: require actionable lineage empty state and Space activation
seonghobae Aug 21, 2026
088b1d5
test: require localized lineage empty-state next action
seonghobae Aug 21, 2026
507d520
feat: localize actionable lineage empty state
seonghobae Aug 21, 2026
0db9bd7
feat: make the lineage empty state actionable
seonghobae Aug 21, 2026
c883483
docs: record actionable lineage empty state
seonghobae Aug 21, 2026
86e2134
test: require mobile evidence-card labels
seonghobae Aug 21, 2026
0b0cacd
feat: label mobile lineage evidence cards
seonghobae Aug 21, 2026
f9df5ea
fix: guard lineage dag layout against cycles
seonghobae Aug 21, 2026
0d827fc
fix: keep provider errors behind product boundaries
seonghobae Aug 21, 2026
d58edc8
fix: close provider error leaks at write endpoints
seonghobae Aug 21, 2026
711f027
merge current main into #258
seonghobae Aug 21, 2026
678df0d
fix: keep unauthenticated admin controls out of login
seonghobae Aug 21, 2026
abb99aa
merge concurrent provider error boundary fix
seonghobae Aug 21, 2026
44e8dcf
fix: normalize unexpected provider failures
seonghobae Aug 21, 2026
5158934
fix: normalize summary enrichment failures
seonghobae Aug 21, 2026
f4563df
docs: plan forward-only fast stabilization
seonghobae Aug 21, 2026
0d7fd47
test: reproduce lineage date specificity defect
seonghobae Aug 21, 2026
6f4712d
fix: preserve muted lineage event-date styling
seonghobae Aug 21, 2026
f5e23b5
fix: close remaining provider error leaks
seonghobae Aug 21, 2026
1fad94f
Merge protected main into Event Lineage stack
seonghobae Aug 21, 2026
8314f3c
ci: verify and repair OIDC return fallback
seonghobae Aug 21, 2026
2c84824
fix: validate provider chat response envelopes
seonghobae Aug 21, 2026
c8dcc27
Merge remote-tracking branch 'refs/remotes/origin/feat/analysis-run-n…
seonghobae Aug 21, 2026
7f4a5c9
ci: expose PR 258 repair as a visible exact-head check
seonghobae Aug 21, 2026
e175ecd
ci: run the PR 258 repair through the recognized test workflow
seonghobae Aug 21, 2026
c48d88b
ci: remove completed self-modifying repair workflows
seonghobae Aug 21, 2026
899b44a
Merge branch 'feat/analysis-run-name-evidence-lineage' of https://git…
seonghobae Aug 21, 2026
c135c41
ci: keep tests workflow read-only
seonghobae Aug 21, 2026
6c9f86d
Merge commit 'c135c41ba65e02a5598647adcfc978002f275673' into HEAD
seonghobae Aug 21, 2026
336730f
fix: keep unauthenticated admin controls gated
seonghobae Aug 21, 2026
0e63ba0
fix: align Event Lineage shell with UI UX guide (#350)
seonghobae Aug 21, 2026
7f29b97
docs: record customer master tree/filter scope gap
seonghobae Aug 21, 2026
8bed77e
docs: record customer master tree/filter scope gap (#364)
seonghobae Aug 21, 2026
f51b2bc
docs: decide customer master scope facets
seonghobae Aug 21, 2026
c2816f7
docs: anchor customer scope ADR to merged head
seonghobae Aug 21, 2026
63ce399
fix: style 5W1H compactly and order R&R by ontology hierarchy
seonghobae Aug 21, 2026
765a12c
feat: expose customer master scope facets
seonghobae Aug 21, 2026
6a43dca
docs: record customer master scope implementation
seonghobae Aug 21, 2026
f669916
fix: cluster R&R subsidiary organizations under their parent
seonghobae Aug 21, 2026
ad4403e
feat: expose observed customer hierarchy facets
seonghobae Aug 21, 2026
7974894
docs: record observed hierarchy facet
seonghobae Aug 21, 2026
c8b32c7
fix: keep observed customer navigation fail closed
seonghobae Aug 21, 2026
453fee4
feat: add account_affiliation scope facet (ADR 0125 step 1)
seonghobae Aug 21, 2026
96c0ac3
fix: make post detail popup keyboard accessible
seonghobae Aug 21, 2026
a4ae004
docs: refresh exact-head product gap baseline
seonghobae Aug 21, 2026
5fb4c1f
fix: keep demo scope out of customer master queries
seonghobae Aug 21, 2026
6cdb782
docs: record demo-scope authorization regression
seonghobae Aug 21, 2026
884dc97
fix: recompute observed hierarchy after scope filtering
seonghobae Aug 21, 2026
dac963e
docs: record hierarchy facet filtering fix
seonghobae Aug 21, 2026
1eef321
fix: standardize visible keyboard focus
seonghobae Aug 21, 2026
a9e5e84
docs: record shared focus baseline
seonghobae Aug 21, 2026
aef31c3
merge: reconcile lineage-dag-regression base
seonghobae Aug 21, 2026
302ae73
docs: record active semantic parsing PR
seonghobae Aug 21, 2026
e2ebd15
fix: share post visibility policy SQL
seonghobae Aug 21, 2026
4a17dd3
docs: record shared visibility review repair
seonghobae Aug 21, 2026
cc33aaf
docs: record ontology explorer stabilization
seonghobae Aug 21, 2026
09b47cc
fix: keep modal focus inside visible controls
seonghobae Aug 21, 2026
fbffec4
docs: record modal focus review repair
seonghobae Aug 21, 2026
e6d94c2
docs: record current frontend verification
seonghobae Aug 21, 2026
31bbfe1
feat: implement ADR 0125 scope facets for Customer Master
seonghobae Aug 21, 2026
497ef8b
docs: record full backend verification
seonghobae Aug 21, 2026
d38ef6f
fix: fully contain popup keyboard navigation
seonghobae Aug 21, 2026
a5aa0da
fix: contain focus trap from hidden descendants
seonghobae Aug 21, 2026
47932b9
docs: record popup focus repair
seonghobae Aug 21, 2026
696f8d4
docs: record nested hidden focus repair
seonghobae Aug 21, 2026
d66132a
fix: remove unshipped global ask migration dependency
seonghobae Aug 21, 2026
db30471
Merge commit '8bed77e7e7b91b633bb92d3a82d0187c387206af' into HEAD
seonghobae Aug 21, 2026
67beb79
test: count customer master SQL audit
seonghobae Aug 21, 2026
588dc91
fix: keep disclosure summaries keyboard reachable
seonghobae Aug 21, 2026
f014e85
fix: cap observed customer master entities
seonghobae Aug 21, 2026
ae48aaa
fix: intersect customer scope with authorized entities
seonghobae Aug 21, 2026
d3c3102
feat: expand standards-aligned semantic ontology and retrieval
seonghobae Aug 21, 2026
7a0d025
fix: preserve numbered footnotes and empty table cells (#367)
seonghobae Aug 21, 2026
849986b
Merge remote-tracking branch 'origin/docs/customer-master-scope-adr' …
seonghobae Aug 21, 2026
a3b8591
docs: record R&R role/relationship conflation and catalog gap
seonghobae Aug 21, 2026
74b92eb
fix: exclude demo entities before customer cap
seonghobae Aug 21, 2026
aa24734
feat(frontend): persist workspace navigation state
seonghobae Aug 21, 2026
ee420e0
chore: vendor agent skill sources
seonghobae Aug 21, 2026
b709940
fix: mark AdminPanel's required field for screen readers, not just vi…
seonghobae Aug 21, 2026
99dae67
fix(frontend): clarify VOC filter labels and accessibility
seonghobae Aug 21, 2026
860545f
fix: close knowledge graph boundary gaps (#376)
seonghobae Aug 21, 2026
9f8f4b7
Merge pull request #380 from seonghobae/docs/customer-master-scope-adr
seonghobae Aug 21, 2026
1f12c86
fix: keep migration 0105 excluded from the compose allowlist
seonghobae Aug 21, 2026
67910ed
feat(board): clarify and filter source detail states
seonghobae Aug 21, 2026
e347666
fix(header): disclose authorized corporation and business unit scope
seonghobae Aug 21, 2026
d549516
fix: replay global ask history migration
seonghobae Aug 21, 2026
e1e69d3
fix: enforce writing-state evidence boundaries
seonghobae Aug 21, 2026
e44a216
fix(content): skip writing posts in analysis queue
seonghobae Aug 21, 2026
fb3ea51
fix: normalize source detail state filters
seonghobae Aug 21, 2026
03b0610
Merge remote-tracking branch 'user-fork/feat/board-source-detail-stat…
seonghobae Aug 21, 2026
b5882f7
fix: normalize padded detail state boundaries
seonghobae Aug 21, 2026
a9dcd34
Merge remote-tracking branch 'refs/remotes/user-fork/pr384-current' i…
seonghobae Aug 21, 2026
7f00783
fix: keep writing state and report fields buyer-safe
seonghobae Aug 21, 2026
caf3872
fix: hide unavailable source state filters
seonghobae Aug 21, 2026
cf620ae
feat: preserve source commercial context hints
seonghobae Aug 21, 2026
3113730
feat: preserve source commercial context hints
seonghobae Aug 21, 2026
b6adf3c
feat: expose source lineage evidence
seonghobae Aug 21, 2026
eb7b862
fix: scope source-context demo eligibility
seonghobae Aug 21, 2026
b2fe8b8
fix: gate writing post analysis requests
seonghobae Aug 21, 2026
ce2b72c
Merge branch 'feat/board-source-detail-state-filter' of https://githu…
seonghobae Aug 21, 2026
00c89e4
Normalize writing state in content recovery
seonghobae Aug 21, 2026
67288da
fix: apply source commercial context migration
seonghobae Aug 21, 2026
352f48a
Merge remote-tracking branch 'origin/docs/customer-master-scope-adr' …
seonghobae Aug 21, 2026
5365aae
Align source context migration and evidence tests
seonghobae Aug 21, 2026
1211ded
Merge branch 'feat/board-source-detail-state-filter' of https://githu…
seonghobae Aug 21, 2026
c14b539
Merge branch 'feat/board-source-detail-state-filter' of https://githu…
seonghobae Aug 21, 2026
e5f93ab
docs: refresh product gap exact-head baseline
seonghobae Aug 21, 2026
92efa05
Merge remote-tracking branch 'user-fork/feat/board-source-detail-stat…
seonghobae Aug 21, 2026
2fba326
docs: reconcile merged PR evidence
seonghobae Aug 21, 2026
3f554c0
fix: gate writing-state derived content
seonghobae Aug 21, 2026
c188545
Merge remote-tracking branch 'user-fork/feat/board-source-detail-stat…
seonghobae Aug 21, 2026
ec6a829
Merge pull request #366 from ContextualWisdomLab/feat/customer-master…
seonghobae Aug 21, 2026
fb4bad5
fix: keep source context complete in global ask
seonghobae Aug 21, 2026
f688f0e
Merge remote-tracking branch 'user-fork/feat/board-source-detail-stat…
seonghobae Aug 21, 2026
b5bcbba
Merge remote-tracking branch 'origin/feat/lineage-dag-regression' int…
seonghobae Aug 21, 2026
6a3fd38
docs: record current PR 384 exact head
seonghobae Aug 21, 2026
3e6878d
fix: reconcile customer master scope UI merge
seonghobae Aug 21, 2026
83ace33
Revert "chore: vendor agent skill sources"
seonghobae Aug 21, 2026
671e10c
Merge customer-master scope base into PR384 repair
seonghobae Aug 21, 2026
2ca009b
docs: record PR384 verification baseline
seonghobae Aug 21, 2026
ae4ad1d
test: remove duplicate commercial migration replay
seonghobae Aug 21, 2026
2312564
Merge remote-tracking branch 'origin/docs/customer-master-scope-adr' …
seonghobae Aug 21, 2026
5f6e337
Merge remote-tracking branch 'user-fork/feat/board-source-detail-stat…
seonghobae Aug 21, 2026
1f4e175
Merge remote-tracking branch 'user-fork/feat/board-source-detail-stat…
seonghobae Aug 21, 2026
f1aeae9
docs: track PR384 remote fixture merge
seonghobae Aug 21, 2026
d2d4b92
Merge branch 'feat/board-source-detail-state-filter' of https://githu…
seonghobae Aug 21, 2026
e8637fb
docs: align PR384 baseline with hosted head
seonghobae Aug 21, 2026
ab8d808
fix(chat): remove duplicate linked-post state column
seonghobae Aug 21, 2026
341a852
style(chat): normalize ingestion imports
seonghobae Aug 21, 2026
86e2f4d
fix: preserve identity hints beside lifecycle state
seonghobae Aug 21, 2026
140f91e
fix(semantics): preserve identity hints beside lifecycle state
seonghobae Aug 21, 2026
0cbcede
fix(ui): keep popup layout within three responsive tiers
seonghobae Aug 21, 2026
e793de0
feat: expose explicit semantic project relations
seonghobae Aug 21, 2026
44d4081
Merge remote-tracking branch 'refs/remotes/user-fork/feat/board-sourc…
seonghobae Aug 21, 2026
c8f7c4a
fix(summary): distinguish failed image ingestion
seonghobae Aug 21, 2026
cc0b50a
fix(summary): make image retry action explicit
seonghobae Aug 21, 2026
2a54d5f
fix(api): ignore blank post filter values
seonghobae Aug 21, 2026
f402f8f
test(api): cover blank VOC filters
seonghobae Aug 21, 2026
e4c4a3c
fix: keep observed hierarchy facets on ancestors
seonghobae Aug 21, 2026
1bffa5a
fix: preserve numeric source item hints
seonghobae Aug 21, 2026
13bf132
fix(frontend): skip content fetch for writing posts
seonghobae Aug 21, 2026
fd960ea
fix(queue): include commercial source context
seonghobae Aug 21, 2026
a4ef1e3
merge: preserve commercial context queue fix
seonghobae Aug 21, 2026
a32bbda
fix(api): restore source-state and analysis boundaries
seonghobae Aug 21, 2026
5e37378
feat: expose source context and project-safe summary hints
seonghobae Aug 21, 2026
d5d6668
Merge branch 'feat/board-source-detail-state-filter' of https://githu…
seonghobae Aug 21, 2026
a046da4
fix(api): import shared source visibility predicate
seonghobae Aug 21, 2026
68902cb
docs(adr): define TEPP topic-lineage consumption boundary (TRSL-TM + …
seonghobae Aug 22, 2026
577fa5c
feat(analysis-run): add topic-lineage kind mirroring TEPP's fail-clos…
seonghobae Aug 22, 2026
95daf2c
fix(security): suppress asyncpg-sqli false positives in global_ask_hi…
seonghobae Aug 22, 2026
8e469ed
fix: enforce topic-lineage envelope contract and retire buyer wording
seonghobae Aug 23, 2026
91b7e1c
fix: complete global ask next-action contract
seonghobae Aug 23, 2026
6e73395
feat(lineage): add evidence/inference/prediction status-mark primitive
seonghobae Aug 23, 2026
d0dbb36
fix: preserve stale image summary continuity
seonghobae Aug 23, 2026
c5c0929
fix: refresh stale summaries when evidence is available
seonghobae Aug 23, 2026
e6031d6
test(e2e): walk the fail-closed topic-lineage row end to end
seonghobae Aug 23, 2026
cb08377
docs(changelog): reconcile Global Ask history entries
seonghobae Aug 24, 2026
4928ee3
fix(summary): formalize Korean endings on the JSON parse path too
seonghobae Aug 24, 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
80 changes: 0 additions & 80 deletions .github/workflows/repair-global-ask-pnpm-v2.yml

This file was deleted.

8 changes: 4 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ reimplementing them:
tree assembly (`reconstruct.py`'s `_walk`/`thread_messages` calls).
- [RankWeave](https://github.com/ContextualWisdomLab/RankWeave) for
multi-channel score fusion (`weighted_convex_fuse` in
`reconstruct.py`) and the buyer-facing Rankings port
`reconstruct.py`) and the reader-facing Rankings port
(`rankweave_client.py`) -- never invent a fused score or a theta.
- [TEPP](https://github.com/ContextualWisdomLab/TEPP)'s published wire
contract for calibrated measurement (`tepp_client.py`) -- never
Expand Down Expand Up @@ -127,7 +127,7 @@ contextual-orchestrator owns model discovery and selection.
retaining the original asset and provenance. Recognize image DOM/visual
regions before OCR, descriptions, Keyman extraction, or embeddings. Store
region-level evidence; never show an internal LLM instruction such as
`This post is an image` to a buyer.
`This post is an image` to a reader.

## Source parsing and semantic units

Expand All @@ -146,10 +146,10 @@ contextual-orchestrator owns model discovery and selection.
- Remove presentation-only visual line alignment inside a paragraph (for
example continuation lines manually aligned after `-`, `*`, `1.`, or `.`)
from derived semantic text, while retaining the source body and meaningful
list/heading nesting. A buyer-facing post view must render semantic
list/heading nesting. A reader-facing post view must render semantic
paragraphs, not the authoring application's spacing workaround.
- Image descriptions, OCR text, and region evidence are analysis artifacts,
not buyer-facing prompt instructions. Buyer UI shows the source content and
not reader-facing prompt instructions. The workspace UI shows the source content and
useful captions/evidence only, with provenance where appropriate.

## Pluggable channels: never fake a missing signal
Expand Down
10 changes: 5 additions & 5 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ flowchart LR
| `chunking.py` | Splits a document into meaning-identifiable units (paragraph, sentence, DOM, conversation-turn) plus embedded-image extraction, in document order |
| `embedding_client.py` | Pluggable text-embedding channel (`Null` default, `OpenAiCompatible` real impl) + `chunked_max_similarity` |
| `adjudication_client.py` | Pluggable LLM-judgment channel (`Null` default, `ContextualOrchestrator` real impl) |
| `image_content.py` | Pluggable vision channel: OCR + object recognition/tagging for embedded images (`Null` default, `OpenAiCompatibleVisionClient` real impl). The product popup (`frontend/src/PostBody.tsx`) renders each `data:image` payload in document order so the buyer sees the picture, not the base64 string; GET does not call the vision client. |
| `image_content.py` | Pluggable vision channel: OCR + object recognition/tagging for embedded images (`Null` default, `OpenAiCompatibleVisionClient` real impl). The product popup (`frontend/src/PostBody.tsx`) renders each `data:image` payload in document order so the reader sees the picture, not the base64 string; GET does not call the vision client. |
| `tepp_client.py` | TEPP's published `AnalysisRunRequest` wire contract, pluggable transport |
| `rankweave_client.py` | Fail-closed RankWeave ranking port (`weighted_reciprocal_rank_fuse` in-process; never invent a fused score or a theta) |
| `reconstruct.py` | The pipeline: group → candidate window → score → fuse → thread |
Expand Down Expand Up @@ -326,7 +326,7 @@ Keymen are affiliated with (`lineageweave/affiliate_tree.py`, loaded by
set of those leaves, not the whole company directory -- a sibling the
post never mentions is omitted. People on the tree are buttons that
reuse `GET /api/keymen/{person_id}/related` so the popup Keyman walk
starts from the affiliation the buyer clicked. A resolved organization
starts from the affiliation the reader clicked. A resolved organization
is the same walk via `GET /api/corporate-entities/{id}/related`. An affiliation that did not resolve to
a `corporate_entity` row stays as its own root (`resolved=false`); that
is the same never-guess-a-parent rule
Expand Down Expand Up @@ -467,15 +467,15 @@ truly have no dated open tickets.

## Phase 6-M2: authorized analysis-run evidence (read projection)

Issue #79's first buyer-visible Milestone 2 slice is a source-redacting
Issue #79's first reader-visible Milestone 2 slice is a source-redacting
read of the #89 registry. `GET /api/analysis-runs` and
`GET /api/analysis-runs/{id}` require `post_read` and apply the scope
in SQL: the requester always sees their own run; a corporate-entity or
process-unit scope is visible only to affiliated accounts; a
thread-group scope is visible only when the account can already see a
post in that group; `all_visible` is requester-only. Hidden runs 404. Detail also lists ABAC-visible post titles in the
run's scope whose `created_at` is at or before `knowledge_cutoff`
(ADR 0016) so a buyer can open a post the run was allowed to know
(ADR 0016) so a reader can open a post the run was allowed to know
without seeing later live rows or hidden bodies. Detail also returns
revision and configuration digest prefixes.
`POST /api/analysis-runs` records a Pending lineage run on a new
Expand Down Expand Up @@ -925,7 +925,7 @@ code. Wired into both `keyman_ingestion.py`'s affiliation loop and
## Standards-complete W3C PROV-O provenance layer

ADR 0011 separates standards-complete provenance from the compact
buyer-facing navigation graph. `lineageweave/prov_o.py` validates
reader-facing navigation graph. `lineageweave/prov_o.py` validates
and materializes all 50 normative PROV-O properties, including
literal-valued times/values and qualified Influence resources.
`migrations/0017_prov_o_standard_relations.sql` stores definitions,
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.d/2.12.6-frontend-build-gate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## Fixed

- Keep the unauthenticated login surface free of authenticated admin controls and remove unused OIDC imports so TypeScript production builds pass.
4 changes: 4 additions & 0 deletions CHANGELOG.d/2.12.6-provider-error-boundary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
## Fixed

- Keep contextual-orchestrator, OIDC, RankWeave, TEPP, and durable-ingestion diagnostics behind stable product error boundaries while retaining the original exception for server-side chaining.
- Keep browser 5xx and transport failures behind the same stable client error boundary.
5 changes: 5 additions & 0 deletions CHANGELOG.d/2.12.6-remove-self-modifying-repair-workflows.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
## Fixed

- Removed completed repair-only GitHub Actions that could write to feature
branches. Product fixes now require ordinary reviewed commits and the normal
protected Checks path.
8 changes: 8 additions & 0 deletions CHANGELOG.d/2.12.7-lineage-dag-evidence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
### Changed

- Made the buyer Event Lineage DAG explicitly directional with parent-to-child arrowheads whose paths stop outside node circles.
- Preserved authored graph width behind a keyboard-focusable horizontal scroll region instead of shrinking deep lineages.
- Added visible event dates, a redundant visual/text legend, and an accessible exact-value evidence table for lineage relations, dates, and fused scores.
- Added five-locale buyer copy stating that reconstructed continuation edges do not prove causality or authoritative fact.
- Replaced the internal "seed posts" empty-state language with an actionable five-locale instruction to add eligible source records and rebuild Event Lineage.
- Added synthetic Storybook states for branching, selected-root, isolated-root, and empty lineage surfaces.
4 changes: 4 additions & 0 deletions CHANGELOG.d/global-ask-history-compose-replay.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
### Fixed

- Replay the Global Ask conversation-history migration in the Compose database
initializer so existing volumes create the tables required by Ask history.
72 changes: 72 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,83 @@ All notable changes to this project are documented here. Format follows

## [Unreleased]

### Added

- Playwright e2e harness (`frontend/playwright.config.ts`, `npm run
test:e2e`) with the ADR 0132 fail-closed spec
(`frontend/e2e/topic-lineage-fail-closed.spec.ts`): a seeded Failed
topic-lineage run must show its caption, connect-a-transport next
action, and detail-only failure code, and must render no
evidence/inference/prediction mark without a TEPP envelope. Skips
itself, with the ADR 0001/0042 reason named, on deployments holding
real source data.

- Registered the `analysis_run_topic_lineage` analysis-run kind (migrations
0131/0132, ADR 0132), the LineageWeave-side consumption boundary for
TEPP's Temporal Relational Shared-Latent Topic Measurement (TRSL-TM,
TEPP ADR 0012) and CHRONOS/TDT event-intelligence status (TEPP ADR 0016).
It mirrors the existing TEPP measurement path exactly: submits through
`tepp_client`, fails closed (`tepp_not_available` /
`tepp_result_not_persisted`) until TEPP publishes a completed envelope,
and never computes a topic identity or event prediction locally.
`make seed` now also writes a Demo Corp topic-lineage run alongside the
existing lineage/TEPP/period-report rows.

- `EvidenceStatusMark`, a reusable evidence/inference/prediction status
badge (ADR 0132 decision 5, TEPP ADR 0016) distinguishing status by label
text and glyph shape, not color alone. Ships ahead of the Event Lineage
DAG topic-thread wiring it is designed for, so review and Storybook
coverage (`Analysis/EvidenceStatusMark`) are available now; it is
presentational only and never infers a status itself.

- Persisted Global Ask conversation history (ADR 0126, superseding the
non-persistence consequence in ADR 0090): migration
`0105_global_ask_conversation_history.sql` and
`backend/app/global_ask_history.py` store each account's questions,
answers, next actions, retrieved source posts, cited posts, and
reader-safe evidence facts, and re-apply current post visibility on
read so a revoked post drops from history while the stored answer
stays. Ask history now survives navigation and a new browser session
instead of living only in the client.

### Changed

- Renamed "Buyer" terminology to reader/workspace naming across the frontend
shell, backend evidence helpers, and living docs (ADR 0119). LineageWeave
has no explicit buyer role, so `BuyerNav`/`BuyerDestination` became
`WorkspaceNav`/`WorkspaceDestination`, `.buyer-gnb*` CSS became
`.workspace-gnb*`, and prose referring to the reading user now says
"reader" instead of "buyer". Historical ADRs and changelog entries keep
their original wording as a point-in-time record.

### Fixed

- The post-detail dialog focus trap now excludes descendants of `aria-hidden`
content as well as collapsed `details`, keeping keyboard focus inside the
visible modal controls.

- `make smoke` and `make seed` now run through the locked project `uv`
environment, so local OIDC and synthetic-data workflows resolve the same
pinned dependencies as CI.
- The workspace Event Lineage global Search action now retries focus after the
board finishes loading, so navigation from Customer master, Calendar, or
Ask Agent lands the cursor in the search box. The handled request is consumed,
so later board navigation does not steal focus, and Search closes an open
mobile drawer like every other destination change.
- Mobile Event Lineage evidence cards now read their translated column labels
from the rendered cells instead of hardcoded English CSS, and the two drawer
close controls have distinct accessible names.
- Event Lineage SVG edges now retain their instance-specific direction markers,
so parent-to-child arrows remain visible when multiple lineage groups render.
- All OpenAI-compatible chat-completion consumers now validate the shared
response envelope before parsing it, preventing malformed provider bodies
from escaping as raw `KeyError` or response-shape details.
- Customer Master integration fixtures no longer reference the Global Ask
history migration for their own setup; they apply only the shipped
scope-facet migration directly, since Global Ask's persisted history
(see Added, ADR 0126) is unrelated to Customer Master scope fixtures.
- The static SQL review contract now counts the Customer Master evidence query
that uses closed schema fragments and bound entity ids.

## [2.12.6] - 2026-08-20

Expand Down
19 changes: 19 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,22 @@ cited source. After that next action, the popup lands the first cited
evidence. Changing the week first still
focuses the report period field. Mean θ stays on the period-report
panel.

## Analysis-run topic lineage (ADR 0132)

`make seed` also writes a Demo Corp topic-lineage run on the same shared
snapshot, alongside the lineage, TEPP, and period-report rows. The
topic-lineage kind (`analysis_run_topic_lineage`, migration 0131) submits
through the same `tepp_client` boundary as TEPP (ADR 0022), requesting
TEPP's Temporal Relational Shared-Latent Topic Measurement (TRSL-TM) and
CHRONOS/TDT event-intelligence status instead of calibrated psychometric
measurement. A missing transport or an unused accepted envelope is Failed
(`tepp_not_available` / `tepp_result_not_persisted`), the same as TEPP. Do
not invent a topic identity, a CHRONOS event prediction, or a local topic
model of any kind. `POST /api/analysis-runs` still 422s this kind — Create
does not invent a Pending topic-lineage row; connect a TEPP transport from
a Failed topic-lineage row and re-run through
`POST /api/analysis-runs/{id}/start`, exactly like TEPP. A Succeeded
envelope persists into `analysis_run_topic_lineage_result` (migration 0132)
as an opaque, versioned JSON envelope until TEPP's topic-identity/CHRONOS
schema stabilizes into dedicated columns.
2 changes: 1 addition & 1 deletion add_translations.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
for eng, trans in translations.items():
content = content.replace(f' Refresh: "새로 고침",', f' Refresh: "새로 고침",\n "{eng}": "{trans["ko"]}",')
content = content.replace(f' Refresh: "조회",', f' Refresh: "조회",\n "{eng}": "{trans["ko"]}",')

content = content.replace(f' Refresh: "刷新",', f' Refresh: "刷新",\n "{eng}": "{trans["zh"]}",')
content = content.replace(f' Refresh: "更新",', f' Refresh: "更新",\n "{eng}": "{trans["ja"]}",')
content = content.replace(f' Refresh: "Làm mới",', f' Refresh: "Làm mới",\n "{eng}": "{trans["vi"]}",')
Expand Down
23 changes: 16 additions & 7 deletions backend/app/analysis_run_ingestion.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,13 @@
_LINEAGE_RUN_KIND = "analysis_run_lineage"
_TEPP_RUN_KIND = "analysis_run_tepp"
_REPORT_RUN_KIND = "analysis_run_report"
_TOPIC_LINEAGE_RUN_KIND = "analysis_run_topic_lineage"
_CORPORATE_SCOPE = "analysis_scope_corporate_entity"
_CAPTURE_CONTRACT_VERSION = "analysis-run-capture-v1"
_KIND_SCHEMA_VERSION = {
"analysis_run_lineage": "lineage-run-v1",
"analysis_run_tepp": "tepp-run-v1",
"analysis_run_topic_lineage": "topic-lineage-run-v1",
}

_RUN_LIST_SQL = f"""
Expand Down Expand Up @@ -249,7 +251,7 @@ async def fetch_outbox_deliveries(
"""Labeled claim/delivery events for one already-visible run.

Missing outbox tables mean migration 0023 is not applied. Stream
entry ids stay off the payload -- they are not buyer evidence.
entry ids stay off the payload -- they are not reader-facing evidence.
"""
try:
rows = await conn.fetch(
Expand Down Expand Up @@ -285,7 +287,7 @@ async def _serialize_runs(
conn: asyncpg.Connection,
rows: list[asyncpg.Record],
) -> list[dict[str, Any]]:
"""Project registry rows into the authorized buyer-facing payload."""
"""Project registry rows into the authorized reader-facing payload."""
if not rows:
return []
count_rows = await _counts_by_run(conn, [str(row["analysis_run_id"]) for row in rows])
Expand Down Expand Up @@ -346,7 +348,7 @@ async def fetch_visible_analysis_runs(
"""Runs the account requested or whose scope they may already walk.

Once real source-import evidence is visible, the synthetic `make seed`
Demo Corp runs stop appearing here -- a buyer must not mistake that
Demo Corp runs stop appearing here -- a reader must not mistake that
fabricated narrative for real evidence (ADR 0001 / ADR 0042).
"""
# Safe SQL: this immutable module query contains only closed schema SQL; request values remain bound below.
Expand Down Expand Up @@ -611,18 +613,25 @@ def __init__(self, status_code: int, detail: str) -> None:


def _require_lineage_create_kind(run_kind_code: str) -> None:
"""Reject TEPP and report writes so this path cannot fake those products.
"""Reject TEPP, topic-lineage, and report writes so this path cannot fake those products.

TEPP stays a ``tepp_client`` wire path. Period reports stay on the
Reports panel rebuild. A Pending TEPP row that never called the
transport is a fabricated measurement request.
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.
"""
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 == _REPORT_RUN_KIND:
raise AnalysisRunCreateError(
422,
Expand Down
Loading
Loading