Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
667 commits
Select commit Hold shift + click to select a range
6617e17
feat: queue post-content analysis durably
seonghobae Aug 20, 2026
d24c180
fix(import): allow repeated source lookup keys
seonghobae Aug 20, 2026
bd5a858
fix(docs): assign post-content ADR a unique number
seonghobae Aug 20, 2026
942f044
feat: add keyverse-bound mcp api key management
seonghobae Aug 20, 2026
6579a9b
revert: keep MCP key management out of buyer root stack
seonghobae Aug 20, 2026
c2e49bf
security: document safe composed SQL
seonghobae Aug 20, 2026
f6aaff6
fix: preserve OIDC post deep links
seonghobae Aug 20, 2026
3673bf2
ci: verify audited safe-SQL suppressions
seonghobae Aug 20, 2026
ed8cabf
ci: harden audited safe-SQL repair anchors
seonghobae Aug 20, 2026
40dc015
fix(ci): remove self-modifying SQL repair workflow
seonghobae Aug 20, 2026
23abc4d
chore: record current main ancestry in Buyer root
seonghobae Aug 20, 2026
246c251
test(security): reject dynamic asyncpg statement construction
seonghobae Aug 20, 2026
b1c819e
fix: render resolved post structure for ordinary paragraphs
seonghobae Aug 20, 2026
6d36360
fix: hide source offsets from image accessibility labels
seonghobae Aug 20, 2026
d65986a
fix: requeue incomplete post embeddings
seonghobae Aug 20, 2026
331cd62
fix: align static SQL contract with safe composition
seonghobae Aug 20, 2026
559b8eb
ci: repair PR 258 static SQL review findings
seonghobae Aug 20, 2026
6330640
ci: repair PR 258 one-shot template
seonghobae Aug 20, 2026
961e698
chore: reconcile remote PR 258 repair commit
seonghobae Aug 20, 2026
c82e321
fix: pass embedding model to backend
seonghobae Aug 20, 2026
cedf135
fix(ci): remove self-modifying PR 258 repair workflow
seonghobae Aug 20, 2026
1d2bcf2
chore: reconcile remote PR 258 follow-up commits
seonghobae Aug 20, 2026
ec6b5cf
fix(ci): remove PR 258 workflow template
seonghobae Aug 20, 2026
c898099
fix(security): bind customer-hint SQL to a static statement
seonghobae Aug 20, 2026
0533c2f
fix(security): precompile demo-scope SQL statements
seonghobae Aug 20, 2026
12484e3
chore: reconcile static customer-hint SQL fix
seonghobae Aug 20, 2026
8202a22
chore: reconcile precompiled demo-scope SQL fix
seonghobae Aug 20, 2026
5a9cbaf
fix(security): precompile relationship-network SQL
seonghobae Aug 20, 2026
ca867e9
fix(security): precompile Keyman backfill selectors
seonghobae Aug 20, 2026
e8a2411
chore: reconcile precompiled relationship-network SQL fix
seonghobae Aug 20, 2026
98522c2
chore: reconcile precompiled Keyman backfill selectors
seonghobae Aug 20, 2026
a61ef17
fix(security): precompile summary backfill selectors
seonghobae Aug 20, 2026
f8d4f3d
test: apply image-region embedding migration in API fixture
seonghobae Aug 20, 2026
0c0a439
chore: reconcile precompiled summary backfill selectors
seonghobae Aug 20, 2026
0d710c3
fix(security): precompile content backfill selectors
seonghobae Aug 20, 2026
26db1cf
fix(security): move synthetic cleanup identifiers into PostgreSQL
seonghobae Aug 20, 2026
4afb12b
test(security): require static reviewed asyncpg statements
seonghobae Aug 20, 2026
b00b539
Merge remote-tracking branch 'origin/feat/analysis-run-name-evidence-…
seonghobae Aug 20, 2026
22ef394
fix(backfill): preserve process-unit semantic hint name
seonghobae Aug 20, 2026
2f8ecde
fix: wire provider embeddings through orchestrator
seonghobae Aug 20, 2026
3b33185
Merge remote-tracking branch 'origin/feat/analysis-run-name-evidence-…
seonghobae Aug 20, 2026
db9af8c
fix: retain embedding provider URL during startup
seonghobae Aug 20, 2026
97a8a4d
fix: keep orchestrator provider URL for embedding startup
seonghobae Aug 20, 2026
d4bb9ce
Merge remote-tracking branch 'origin/feat/analysis-run-name-evidence-…
seonghobae Aug 20, 2026
e6da5ac
chore: stage exact SQL review repair payload
seonghobae Aug 20, 2026
44f07d5
fix(security): keep relationship-network SQL literal
seonghobae Aug 20, 2026
f5bcbd0
fix(security): keep demo-scope SQL literal
seonghobae Aug 20, 2026
2599cd2
fix(security): keep customer-hint SQL literal
seonghobae Aug 20, 2026
f91c422
fix(security): keep Keyman selector SQL literal
seonghobae Aug 20, 2026
7e5eccd
fix(security): use one literal summary selector
seonghobae Aug 20, 2026
1aaee8f
fix(security): use one literal content selector
seonghobae Aug 20, 2026
3fec7e4
fix: requeue incomplete post content jobs
seonghobae Aug 20, 2026
8235b16
fix(security): keep synthetic cleanup SQL literal
seonghobae Aug 20, 2026
80043b9
test(security): require literal reviewed SQL statements
seonghobae Aug 20, 2026
9b3794c
Merge commit '8235b16faec2460b31156256025f17def44b22dc' of https://gi…
seonghobae Aug 20, 2026
add3017
fix: keep ADR numbers unique and remove repair artifact
seonghobae Aug 20, 2026
65e3c17
Merge commit '80043b95f682d8f1e68407f992c56126e3e387a4' of https://gi…
seonghobae Aug 20, 2026
7d1de78
feat: queue real post content backfill through valkey
seonghobae Aug 20, 2026
175dc4c
chore: configure project test import path
seonghobae Aug 20, 2026
480d2a1
Merge commit '175dc4c5fd88ff48acee8de0dcdb9562a2498118' of https://gi…
seonghobae Aug 20, 2026
ddcb567
fix(security): keep queue backfill SQL literal
seonghobae Aug 20, 2026
e2e3852
test(security): cover queue backfill SQL boundary
seonghobae Aug 20, 2026
ae2b285
perf: parallelize visual region evidence
seonghobae Aug 20, 2026
3a4fd87
fix: require a majority of tokens for relation corroboration
seonghobae Aug 20, 2026
102cf24
test(frontend): match embedded image accessibility label
seonghobae Aug 20, 2026
dc8b0f9
docs: ground orchestration policy in primary sources
seonghobae Aug 20, 2026
d523819
style: tokenize repeated colors and add dark-mode badge variants
seonghobae Aug 20, 2026
226586c
docs(adr): record buyer surface Figma file
seonghobae Aug 20, 2026
27f3647
docs+test: ADR and regression test for badge/accent tokens
seonghobae Aug 20, 2026
d1da70d
fix: keep 0060 migration allowlist entry as its own case arm
seonghobae Aug 20, 2026
b065fb8
fix(security): audit every reviewed SQL composition site
seonghobae Aug 20, 2026
4f63d9d
fix: align embedded image accessibility assertion
seonghobae Aug 20, 2026
d4092cb
merge: retain exact embedded image accessibility contract
seonghobae Aug 20, 2026
bee9685
fix: recover post content queue leases
seonghobae Aug 20, 2026
a2807fd
fix: allow slow structured post adjudication
seonghobae Aug 20, 2026
acd4d30
fix: bound post content queue retries
seonghobae Aug 20, 2026
c0e5f62
Merge remote-tracking branch 'origin/feat/analysis-run-name-evidence-…
seonghobae Aug 20, 2026
23133fd
fix: align integration fixtures with current contracts
seonghobae Aug 20, 2026
15e1a37
feat: persist requester and processor evidence
seonghobae Aug 20, 2026
ca27d12
docs: record product gap baseline
seonghobae Aug 20, 2026
1c260f2
fix: keep summaries available when enrichment times out
seonghobae Aug 20, 2026
218e84d
docs: align product gap evidence with current head
seonghobae Aug 20, 2026
c110885
fix: fence stale post-content worker leases
seonghobae Aug 20, 2026
de3cdff
merge: retain concurrent summary timeout repair
seonghobae Aug 20, 2026
61a300a
merge: retain concurrent product gap evidence
seonghobae Aug 20, 2026
4ce7492
test: apply action migration to projection fixtures
seonghobae Aug 20, 2026
7d8e901
Merge remote-tracking branch 'origin/feat/analysis-run-name-evidence-…
seonghobae Aug 20, 2026
faa1a21
fix: stop failed evidence panels from loading forever
seonghobae Aug 20, 2026
e2859ee
docs: record bounded summary refresh evidence
seonghobae Aug 20, 2026
bf599ac
fix: document audited asyncpg queries
seonghobae Aug 20, 2026
4ba1533
docs: track latest protected-head audit
seonghobae Aug 20, 2026
9d627d1
docs: record entity-resolution PR correction
seonghobae Aug 20, 2026
f8d2fa9
fix: preserve semantic source unit boundaries
seonghobae Aug 20, 2026
09a9ca1
fix: preserve oidc deep links across callback storage
seonghobae Aug 20, 2026
e02cb11
fix: render buyer-facing image evidence
seonghobae Aug 20, 2026
b0edd9b
fix: label unavailable image evidence
seonghobae Aug 20, 2026
f7d11e3
docs: avoid oidc adr number collision
seonghobae Aug 20, 2026
116a8dc
Merge remote-tracking branch 'origin/fix/oidc-deep-link-locale' into …
seonghobae Aug 20, 2026
5deb067
docs: avoid buyer image adr number collision
seonghobae Aug 20, 2026
cd6301b
fix: bind summary actions to source-grounded projects
seonghobae Aug 20, 2026
3efdff3
test: cover project-bound summary action round trip
seonghobae Aug 20, 2026
1e5ac11
docs: record buyer gap checkpoint evidence
seonghobae Aug 20, 2026
313d38a
docs: align image evidence ADR heading
seonghobae Aug 20, 2026
e0dbc38
docs: align OIDC ADR heading
seonghobae Aug 20, 2026
4d1736e
fix: preserve legacy action evidence delimiters
seonghobae Aug 20, 2026
c01001d
Merge branch 'fix/project-bound-summary-actions' of https://github.co…
seonghobae Aug 20, 2026
e81aff8
docs: refresh buyer gap audit checkpoint
seonghobae Aug 20, 2026
d442287
docs: record current project action head
seonghobae Aug 20, 2026
0eb70c9
feat: bind summary events to source-grounded projects
seonghobae Aug 20, 2026
60b52f2
Merge remote-tracking branch 'origin/fix/project-bound-summary-action…
seonghobae Aug 20, 2026
a49b315
docs: record full checkpoint verification
seonghobae Aug 20, 2026
8220673
fix(summary): normalize project keys before persistence
seonghobae Aug 20, 2026
3c74f1f
Merge commit 'a49b315e6e0ad3c2369d56a77fa6fd50d2230a0a' into codex/fi…
seonghobae Aug 20, 2026
bd4e96b
docs: refresh exact-head buyer gap audit
seonghobae Aug 20, 2026
42e6230
test(summary): cover project key sentinel normalization
seonghobae Aug 20, 2026
a4d1de5
test(image): cover source placement and OCR rendering
seonghobae Aug 20, 2026
d8b7f56
fix: preserve stale summary buyer continuity
seonghobae Aug 20, 2026
2218ee7
fix: keep post content recovery alive
seonghobae Aug 20, 2026
b7ed772
test(summary): cover stale continuity and retry
seonghobae Aug 20, 2026
c914f76
feat: add explicit post content retry
seonghobae Aug 20, 2026
bff4c9d
test(queue): cover explicit retry rejection
seonghobae Aug 20, 2026
ba60842
docs(queue): complete retry command docstrings
seonghobae Aug 20, 2026
18dfddf
fix(ontology): align person mention direction with KG triples
seonghobae Aug 20, 2026
9648110
docs: record audited safe SQL gate
seonghobae Aug 20, 2026
c301e2e
fix: reconcile backfill content with job ledger
seonghobae Aug 20, 2026
4016e2b
fix(ui): preserve indentation after mixed content
seonghobae Aug 20, 2026
20b9177
Merge remote-tracking branch 'origin/fix/stale-summary-buyer-continui…
seonghobae Aug 20, 2026
e219e48
docs: record post content recovery evidence
seonghobae Aug 20, 2026
8b0e1d8
docs(ui): clarify indentation matching boundary
seonghobae Aug 20, 2026
5873966
test(ui): cover missing source unit fallback
seonghobae Aug 20, 2026
4bc21e4
fix: serialize per-post vision region analysis
seonghobae Aug 20, 2026
69b96e9
Merge remote-tracking branch 'origin/fix/stale-summary-buyer-continui…
seonghobae Aug 20, 2026
d4807f0
fix(ui): preserve adjacent table boundaries
seonghobae Aug 20, 2026
d9b4b51
fix: preserve honest image evidence rendering
seonghobae Aug 20, 2026
cea0e7b
fix: separate source whitespace from explicit structure
seonghobae Aug 20, 2026
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
34a0c98
fix: retain partial image regions
seonghobae Aug 20, 2026
799671a
docs: record partial image region gap
seonghobae Aug 20, 2026
41d164c
test: cover partial parent vision failure
seonghobae 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
a4627d6
fix: reject unbounded visual locator regions
seonghobae Aug 20, 2026
80dc0ab
docs: refresh exact-head product gap audit
seonghobae Aug 20, 2026
ec47fbf
test: cover visual region fallback branches
seonghobae Aug 20, 2026
98c92ef
docs: refresh exact-head product gap audit
seonghobae Aug 20, 2026
3a335ad
test: cover visual region fallback branches
seonghobae Aug 20, 2026
6478994
docs: record current audit head
seonghobae Aug 20, 2026
ecc6c47
Merge current visual-region checkpoint into audit
seonghobae Aug 20, 2026
39acad3
docs: repair stacked audit traceability
seonghobae Aug 20, 2026
71f0940
fix: fall back from malformed visual locator output
seonghobae Aug 20, 2026
df941f7
docs: refresh stacked PR exact heads
seonghobae Aug 20, 2026
d2c2038
docs: record audit refresh head
seonghobae Aug 20, 2026
fdd62a6
docs: refresh visual locator exact-head evidence
seonghobae Aug 20, 2026
b83be70
style: normalize merged branch whitespace
seonghobae Aug 20, 2026
f6e2e05
Merge remote-tracking branch 'origin/fix/validate-partial-image-regio…
seonghobae Aug 20, 2026
26ed4cf
docs: refresh current visual stack state
seonghobae Aug 20, 2026
0d55382
docs: record visual stack audit head
seonghobae Aug 20, 2026
885a4e8
docs: align visual stack gate states
seonghobae Aug 20, 2026
66e3e55
fix: preserve semantic footnote structure
seonghobae Aug 20, 2026
d86af3b
docs: record footnote structure checkpoint
seonghobae Aug 20, 2026
2ee9e65
fix: classify OOXML footnote containers
seonghobae Aug 20, 2026
5176dde
fix: distinguish footnote citations from definitions
seonghobae Aug 20, 2026
c743215
Merge remote-tracking branch 'origin/docs/current-gap-audit' into doc…
seonghobae Aug 20, 2026
d4408c6
docs: record footnote citation guard
seonghobae Aug 20, 2026
704d32e
docs: record fresh runtime aggregate evidence
seonghobae Aug 20, 2026
5c5b71c
docs: align runtime evidence head
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
4f87b10
docs: record embedding provenance guard
seonghobae Aug 20, 2026
6d32e8d
docs: align stacked audit head
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
0f8bc28
Merge remote-tracking branch 'origin/codex/normalize-source-indent-se…
seonghobae Aug 20, 2026
5d29001
Merge remote-tracking branch 'origin/codex/preserve-partial-image-reg…
seonghobae Aug 20, 2026
8bcfea8
test: keep invalid locator fallback coordinate-free
seonghobae Aug 20, 2026
b010388
Merge remote-tracking branch 'origin/fix/validate-partial-image-regio…
seonghobae Aug 20, 2026
d80d691
Merge remote-tracking branch 'origin/docs/current-gap-audit' into HEAD
seonghobae Aug 20, 2026
b1d1b10
docs: keep PR 320 status under its checkpoint
seonghobae Aug 20, 2026
7a49d3e
docs: refresh PR 324 exact-head evidence
seonghobae Aug 20, 2026
ab27898
fix: refresh content after summary ingestion
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
8e56a37
docs: record current exact-head gap checkpoint
seonghobae Aug 20, 2026
bb9c78e
Merge remote-tracking branch 'origin/codex/fix-mixed-body-indentation…
seonghobae Aug 20, 2026
d65f3bb
docs: retain current buyer stack roots
seonghobae Aug 20, 2026
1e762d5
Merge remote-tracking branch 'origin/codex/post-structure-case-fixes'…
seonghobae Aug 20, 2026
2673dac
fix: safely handle malformed region locator output
seonghobae Aug 20, 2026
9a45941
fix: expose unexpected content channel defects
seonghobae Aug 20, 2026
8bcc6d6
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
ba93fd7
Merge remote-tracking branch 'origin/codex/normalize-source-indent-se…
seonghobae Aug 20, 2026
3f2e60b
Merge remote-tracking branch 'origin/codex/preserve-partial-image-reg…
seonghobae Aug 20, 2026
91a95a9
fix: safely handle malformed region locator output
seonghobae Aug 20, 2026
835a3bb
Merge remote-tracking branch 'origin/codex/preserve-partial-image-reg…
seonghobae Aug 21, 2026
7a8bedf
Merge remote-tracking branch 'origin/fix/validate-partial-image-regio…
seonghobae Aug 21, 2026
858f7e4
docs: record current exact-head review gates
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
df990d0
docs: refresh current queue roots
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
ef3e25f
docs: record buyer-stack restack
seonghobae Aug 21, 2026
f9d32a4
Merge remote-tracking branch 'origin/docs/current-gap-audit' into doc…
seonghobae Aug 21, 2026
8501b97
Merge branch 'docs/current-gap-audit-current-checkpoint' of https://g…
seonghobae Aug 21, 2026
46ca533
Merge remote-tracking branch 'origin/fix/buyer-image-evidence' into c…
seonghobae Aug 21, 2026
fb24f25
Merge remote-tracking branch 'origin/docs/current-gap-audit-current-c…
seonghobae Aug 21, 2026
17ff911
Merge remote-tracking branch 'origin/fix/project-bound-summary-action…
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
e263214
Merge branch 'docs/current-gap-audit-current-checkpoint' of https://g…
seonghobae Aug 21, 2026
e9e98e0
docs: record MCP key boundary closure
seonghobae Aug 21, 2026
acc5976
Merge remote-tracking branch 'origin/codex/normalize-source-indent-se…
seonghobae Aug 21, 2026
cf7331a
style: use deferred region result annotation
seonghobae Aug 21, 2026
53c2b25
Merge remote-tracking branch 'origin/codex/preserve-partial-image-reg…
seonghobae Aug 21, 2026
c0b8f53
Merge remote-tracking branch 'origin/fix/validate-partial-image-regio…
seonghobae Aug 21, 2026
e80466d
Merge remote-tracking branch 'origin/docs/current-gap-audit' into doc…
seonghobae Aug 21, 2026
c43edff
Merge remote-tracking branch 'origin/docs/current-gap-audit-current-c…
seonghobae Aug 21, 2026
c271eb4
feat: enforce Korean UI standards on top of latest PR stack
seonghobae Aug 21, 2026
ee0195a
feat: parameterize brand name for future admin configuration
seonghobae Aug 21, 2026
00efbbb
feat: add admin screen for tenant configuration
seonghobae Aug 21, 2026
38f2a73
feat: backend API and DB connection for admin tenant settings
seonghobae Aug 21, 2026
9cfa453
fix: revert bad chunking sed from uiux restack
seonghobae Aug 21, 2026
cb1ae15
fix: rename duplicate ADR 0117 to 0118
seonghobae Aug 21, 2026
b0c0c4e
docs: correct UI UX ADR number
seonghobae Aug 21, 2026
dd7156d
feat: close extraction gaps (5W1H, events, Keymen) and update baseline
seonghobae Aug 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
21 changes: 20 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ VALKEY_PORT=16379
KEYCLOAK_ADMIN=admin
KEYCLOAK_ADMIN_PASSWORD=admin_dev_only
KEYCLOAK_PORT=18080
OIDC_CLOCK_SKEW_SECONDS=5
# Browser/API access tokens must be minted for this backend resource.
# Local Keycloak emits this audience through realm-export.json. Production
# Keyverse/OIDC deployments may instead set KEYVERSE_AUDIENCE/OIDC_AUDIENCE.
OIDC_AUDIENCE=lineageweave-api

BACKEND_PORT=18420

Expand All @@ -27,4 +32,18 @@ BACKEND_PORT=18420
# running contextual-orchestrator to turn the channels on.
ORCHESTRATOR_BASE_URL=
ORCHESTRATOR_API_KEY=
VISION_MODEL=

# GitHub workflows inject the canonical provider names from masked secrets.
# Non-GitHub Compose runs also accept the operator's ~/.env compatibility
# names below; docker-compose maps them to the canonical names without
# exposing them to the frontend or committing them.
# Canonical provider endpoint for contextual-orchestrator.
LLM_GATEWAY_API_URL=
# Compatibility alias; LLM_GATEWAY_API_URL wins when both are set.
LLM_GATEWAY_URL=
LLM_GATEWAY_API_KEY=
LLM_GATEWAY_EMBEDDING_MODEL=
LLM_API_GATEWAY=
LLM_API_KEY=
CALDAV_BASE_URL=
CONTEXTUAL_ORCHESTRATOR_ALLOWED_PROVIDER_HOSTS=
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ __pycache__/
.DS_Store
.codegraph/
.env

.coverage
159 changes: 126 additions & 33 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,23 @@ Cross-agent conventions for `LineageWeave`, readable by any coding agent

A demo BI prototype that reconstructs git-branch-style lineage between
scattered short records. See [ARCHITECTURE.md](ARCHITECTURE.md) for the
design and [`docs/lineage-bi-research-notes.md`](docs/lineage-bi-research-notes.md)
for the literature it is grounded in.
design, [ADR 0084](docs/adr/0084-lineage-research-grounding.md) for the
normative research-grounding policy, and
[`docs/lineage-bi-research-notes.md`](docs/lineage-bi-research-notes.md) for
supporting literature and aggregate evidence.

## Hard rule: no real data, ever
## Hard rule: no real data in repository artifacts

This repo ships **synthetic data only** (`lineageweave/fixtures.py`) and
must never reference, by name or otherwise identifiably, any real
organization whose data motivated this design. Never add a fixture, test
case, screenshot, or example derived from a real organization's records. If you are extending this repo to validate against
real data, do that validation entirely outside this repository (a private
scratch script against a local database is fine) and only bring back
**aggregate, non-identifying findings** -- see how
`docs/lineage-bi-research-notes.md`'s "2.6%" validation number is phrased:
a statistic, never a title, name, or id.
This repository ships **synthetic fixtures only** (`lineageweave/fixtures.py`)
and must never commit or expose, by name or otherwise identifiably, any real
organization's records. Never add a real record to a fixture, test case,
screenshot, example, log, benchmark artifact, or documentation.

The private runtime is different: the product is expected to read an
authorized real PostgreSQL source through its configured import/data boundary.
Keep those records outside git and return only authorized, provenance-bearing
product evidence. Validation results brought back into this repository must be
aggregate and non-identifying -- a statistic, never a title, name, or id.

## Reuse before you build

Expand All @@ -44,6 +47,111 @@ reimplementing them:
Before adding a new dependency, check whether an existing org repo already
does it (`gh repo list ContextualWisdomLab`).

## Decision records and model boundary

- Read the applicable `docs/adr/` records before making an architectural,
schema, provider, model, or runtime decision. Record a new decision before
implementing a new policy; do not resolve ADR conflicts by intuition.
- All LLM, VISION, embedding, and structured-output traffic crosses
`contextual-orchestrator`. This repository never calls a provider API
directly and never uses a monkey patch to repair an upstream capability.
- Compose loads provider transport credentials from `~/.env` into the
orchestrator service. Never copy those values into this repository, an
image, a fixture, a log, or a committed agent configuration.
- `LLM_GATEWAY_MODEL`, `VISION_MODEL`, and provider-specific model selectors
are not LineageWeave configuration. Model discovery, capability selection,
reasoning effort, protocol negotiation, and VISION selection belong to
contextual-orchestrator and must follow its paper-grounded ADRs.
- MLX and any other local runtime are not public provider contracts. Use the
provider-neutral gateway boundary; historical benchmark material is not
runtime configuration.

## ADR-first and paper-grounded model decisions

ADRs are normative. Before making an architectural, schema, provider, agent,
LLM, VISION, routing, reasoning-effort, or persistence decision, read the
relevant ADRs first. If the ADR does not cover the decision, write or update
the ADR before changing code, tests, Docker configuration, or runtime policy.
Do not use an implementation preference to silently override an ADR.

Model-related decisions are governed by [ADR
0076](docs/adr/0076-paper-grounded-model-policy.md) and may rely only on the
paper sources cited there and in contextual-orchestrator's literature register:
the Fugu technical report, TRINITY, and Conductor. Provider model ordering,
model-name size guesses, undocumented benchmarks, and local intuition are not
evidence for model quality, routing, reasoning effort, agent count, synthesis,
or VISION selection. If the papers do not support a policy, leave it
undecided or unavailable rather than inventing a heuristic.

The canonical provider credentials are runtime-only from `~/.env` through the
Compose `env_file` boundary. Never copy `~/.env` into the repository or image,
print its values, or persist them. Do not add `LLM_GATEWAY_MODEL`; the upstream
contextual-orchestrator owns model discovery and selection.

## LLM and VISION boundary

- Use `LLM_GATEWAY_API_KEY` and `LLM_GATEWAY_API_URL` from the user's `~/.env`
at runtime. Keep compatibility aliases only at the process boundary; do not
introduce a second credential source or a repository-local secret.
- Every LLM and VISION operation goes through contextual-orchestrator. This
includes adjudication, summaries, Keyman/entity extraction, post chat,
paragraph structure, image region recognition, OCR, image descriptions, and
embeddings. Do not call a provider SDK or raw `/v1/chat/completions` or
`/v1/responses` endpoint from LineageWeave.
- One post shares one orchestrator session id across its LLM and VISION work.
Pass bounded provenance metadata with each request, including post id,
corporate entity code, PU, author id, source system, and visibility when
available. Do not persist an ad hoc `user_account + post_id` session key;
use normalized third-normal-form tables and the ADR-defined foreign keys.
- Do not set `LLM_GATEWAY_MODEL` or select a model by provider order, model
name, parameter count, or local intuition. Blank provider agents must be
expanded and selected by contextual-orchestrator. Reasoning effort defaults
to `auto`; `low`, `medium`, `high`, and `xhigh` are capability/paper-policy
inputs, not a local model ranking heuristic. Never force `none` merely
because a model is not known to be a reasoning model.
- Responses API `developer` and Chat Completions `system` are compatible
instruction roles at the orchestrator boundary. The orchestrator owns the
translation and provider capability handling; do not fork prompts per
transport in this repository.
- Treat `LLM_GATEWAY_API_URL` as an opaque OpenAI-compatible gateway endpoint.
Do not add MLX/local-server URL schemes, port lists, local defaults,
chat-template injection, or vendor-specific bootstrap exceptions in
LineageWeave. Provider-specific capability translation belongs upstream.
- `response_format`, `tools`, Responses API requests, `json_object`, and
`json_schema` must remain multi-agent workflows. A structured response or a
repair attempt must not silently fall back to a single-agent passthrough.
Preserve schema validation, synthesis, repair, session, and cost lineage.
- VISION is an orchestrator capability, not a frontend-only enhancement. For
unsupported image formats, convert at ingestion; for transparent PNGs,
flatten transparent pixels onto white for the derived analysis image while
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.

## Source parsing and semantic units

- Preserve the source representation and provenance, then derive semantic
paragraph/list/table/image-region units for search, ontology, and embeddings.
Do not flatten a post into one opaque body string.
- Paragraph structure may come from HTML DOM and CSS, visible leading spaces or
` `, and OOXML/MS Word paragraph or run properties. Combine those
signals with contextual-orchestrator adjudication when evidence conflicts;
heuristics are not authoritative and must not be the only fallback for an
unresolved structure decision.
- Source-system codes may be enriched with catalog display names under ADR
0117. Pass those names to contextual-orchestrator as labeled lookup hints
only; never promote them to an entity binding, customer fact, project fact,
or imported-author affiliation without post evidence.
- 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
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
useful captions/evidence only, with provenance where appropriate.

## Pluggable channels: never fake a missing signal

`NullEmbeddingClient`, `NullAdjudicationClient`,
Expand All @@ -58,13 +166,9 @@ confidently-negative signal are different things. Keyman extraction,
entity-relationship classification, post summary, in-popup chat, and
commitment derivation go through contextual-orchestrator the same way
adjudication does -- never a raw LLM API. Demo TEPP seed goes through
`tepp_client` the same way: a missing transport or an unpublished
envelope is Failed (`tepp_not_available` / `tepp_result_not_persisted`).
A published accepted acknowledgement is Failed /
`tepp_completed_result_unsupported` and may be shown as aggregate
transport evidence (ADR 0035). Never stamp Succeeded from that ack or
from a LineageWeave-local completed envelope, and never invent a theta
or a local psychometric substitute.
`tepp_client` the same way: a missing transport or an unused accepted
envelope is Failed (`tepp_not_available` / `tepp_result_not_persisted`),
never a fabricated theta or a local psychometric substitute.

## Tests

Expand All @@ -82,7 +186,7 @@ in the same spirit) -- never against real data, per the hard rule above.
against a live local stack (`make up`) and self-skip without one -- see
[README.md](README.md#local-product-stack-docker-compose).

Period leftover pairs (ADR 0028 / 0029) are computed in
Period leftover pairs (ADR 0017 / 0018) are computed in
`lineageweave/leftover_pairs.py` from the residual after a real
GRM/GPCM score, never invented. Missing cells stay out of the
Gabriel factorization. Closest and farthest post–criterion pairs
Expand All @@ -101,9 +205,8 @@ pnpm run lint && pnpm run test && pnpm run build

A run-bearing analysis-run registry empties only after an unrevoked
`analysis_run_retention_grant` and `GRANT analysis_run_retention_admin`
(ADR 0020 / v0.87.0). The documented phrase is not a secret. The same
call empties reconstruction children when those tables exist
(ADR 0032 / v2.10.4). Do not expose purge on a public HTTP route.
(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.
Expand All @@ -113,9 +216,6 @@ v0.88.0). 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.
After `make seed`, the January 12 Demo Corp lineage and TEPP runs list
Demo public post and do not list Late Demo public post (2026-01-13).
The live post list still shows Late Demo (ADR 0016).

A corporate-entity similarity result has three outcomes: unique, miss,
or tie (ADR 0026). A tie is not a miss. Keep the organization name
Expand All @@ -130,13 +230,6 @@ R&R chips read the catalog id stored on `post_summary_role`
backfill leaves a role unbound when two same-named mentions already
exist on the post.

A listed analysis-run that then 404s must stay generic: do not name the thread or the cutoff,
and do not say the run is not visible (ADR 0014 / ADR 0018). After
that 404, re-read the authorized list so the stale row does not stay
clickable. Announce the next action with `role="alert"` without
moving focus. Remaining visible runs stay clickable. Request remains
the named reconstruction control.

## CI gates

`.github/workflows/tests.yml` runs the full suite on every PR to `main`.
Expand Down
Loading
Loading