Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
27f925a
feat: R&R's named actor is a PROV-O Agent, not always a person (0.68.0)
seonghobae Aug 14, 2026
7e1c0a2
fix: keep R&R examples synthetic and validate actor_type_code
seonghobae Aug 14, 2026
57b217d
feat: capture Keyman job title and avoid same-name merges (v0.69.0)
seonghobae Aug 14, 2026
94bf669
fix: seed synthetic Keyman titles so the panel is not empty
seonghobae Aug 14, 2026
cd01c76
fix: read Keycloak admin password from the environment
seonghobae Aug 14, 2026
cb0122a
feat: R&R actor can be a team, meso-level between person and org (v0.…
seonghobae Aug 14, 2026
86e7419
feat: resolve and search-verify abbreviated organization names (v0.71.0)
seonghobae Aug 14, 2026
578e709
fix: recover image OCR/caption fields independently, not one strict m…
seonghobae Aug 14, 2026
6ec0dfd
Merge remote-tracking branch 'origin/main' into feat/role-responsibil…
seonghobae Aug 14, 2026
f11f23d
feat: R&R team/organization actors get a shared cross-post identity (…
seonghobae Aug 14, 2026
24d7cf2
feat: auto-create a real counterparty org into the corporate hierarch…
seonghobae Aug 14, 2026
cc92d29
chore: stage reviewed PROV-O payload 1/6 [skip ci]
seonghobae Aug 14, 2026
e9d7a59
chore: stage reviewed PROV-O payload 2/6 [skip ci]
seonghobae Aug 14, 2026
721bfb0
chore: stage reviewed PROV-O payload 3/6 [skip ci]
seonghobae Aug 14, 2026
75f4fa8
chore: stage reviewed PROV-O payload 4/6 [skip ci]
seonghobae Aug 14, 2026
d5d9885
chore: stage reviewed PROV-O payload 5/6 [skip ci]
seonghobae Aug 14, 2026
06ca8ba
chore: stage reviewed PROV-O payload 6a/7 [skip ci]
seonghobae Aug 14, 2026
9a0a120
chore: stage reviewed PROV-O payload 6b/7 [skip ci]
seonghobae Aug 14, 2026
fa9dc60
ci: bootstrap complete PROV-O relation support
seonghobae Aug 14, 2026
3d80208
ci: normalize generated documentation before PROV-O commit
seonghobae Aug 14, 2026
a52758a
ci: separate PROV-O implementation push from workflow installation
seonghobae Aug 14, 2026
a7ee7d3
feat: implement every normative PROV-O relation (v0.76.0)
github-actions[bot] Aug 14, 2026
1cb464f
ci: remove one-shot PROV-O bootstrap workflow
seonghobae Aug 14, 2026
fd22002
ci: add exact-head PROV-O standards contract
seonghobae Aug 14, 2026
eb3506e
ci: repair PROV-O review findings with locked dependencies
seonghobae Aug 14, 2026
48b7545
ci: lock PROV-O coverage tooling before review repair
seonghobae Aug 14, 2026
fb96cca
test: resolve PROV-O review and lock coverage tooling
github-actions[bot] Aug 14, 2026
ad24df6
ci: remove one-shot PROV-O review repair workflow
seonghobae Aug 14, 2026
8b4ce71
ci: install PROV-O contract dependencies from uv lock
seonghobae Aug 14, 2026
e58d9d1
chore: stage core review hardening script [skip ci]
seonghobae Aug 14, 2026
ada5ef2
chore: stage schema and regression review fixes [skip ci]
seonghobae Aug 14, 2026
50af06b
ci: run bounded review-hardening repair
seonghobae Aug 14, 2026
132d99c
chore: patch review-support anchors before execution [skip ci]
seonghobae Aug 14, 2026
0df792e
ci: repair review-script indentation anchors
seonghobae Aug 14, 2026
be1e837
chore: preserve four-space anchors in review support script
seonghobae Aug 14, 2026
d863648
chore: preserve function indentation in review repair output
seonghobae Aug 14, 2026
2135f6a
ci: preserve generated function indentation before repair
seonghobae Aug 14, 2026
a75a549
chore: preserve valid unreferenced PROV reference updates
seonghobae Aug 14, 2026
11e385d
ci: use runner-provided rustup for pinned toolchain
seonghobae Aug 14, 2026
4cda891
fix: serialize corporate-entity creation against a real observed dead…
seonghobae Aug 14, 2026
a067ec4
chore: fix generated regression helpers and polymorphic trigger
seonghobae Aug 14, 2026
d038452
fix: harden verified hierarchy and PROV persistence
github-actions[bot] Aug 14, 2026
2b2e29f
ci: remove completed review-hardening workflow
seonghobae Aug 14, 2026
a1f0b9a
ci: run exact locked tests against PostgreSQL
seonghobae Aug 14, 2026
f96341e
build: install backend from committed uv lock
seonghobae Aug 14, 2026
704a38a
docs: de-identify corporate creation lock evidence
seonghobae Aug 14, 2026
1eca863
noop
seonghobae Aug 14, 2026
014a884
fix(security): hash-pin Docker uv bootstrap
seonghobae Aug 14, 2026
0b7e5ec
fix(security): enforce hash-verified uv bootstrap
seonghobae Aug 14, 2026
c077ea2
test(docs): reject duplicate and placeholder ADRs
seonghobae Aug 14, 2026
b378908
fix: harden vision parsing and PROV-O contracts
seonghobae Aug 14, 2026
8cc0fe6
fix: normalize emphasized vision tags
seonghobae Aug 14, 2026
707f73b
docs: align team identity ADR with SQL contract
seonghobae Aug 14, 2026
5b14bbc
docs: align organization resolution ADR with implementation
seonghobae Aug 14, 2026
88a58d6
fix: preserve emphasized vision values
seonghobae Aug 14, 2026
7c4b5a0
ci: repair final PR 74 review blockers
seonghobae Aug 15, 2026
60be118
test(red): define transaction and timezone review contracts
seonghobae Aug 15, 2026
4e725c0
ci: retry verified PR 74 review repair
seonghobae Aug 15, 2026
45cc7b6
test(red): observe current review regressions
seonghobae Aug 15, 2026
56a0eec
ci: complete verified PR 74 review repair
seonghobae Aug 15, 2026
e7a2de0
fix: restore ADR 0012 lock and reject XSD +14:01 offsets
seonghobae Aug 15, 2026
044723f
ci: remove completed PR 74 repair workflows
seonghobae Aug 15, 2026
3f4f6f5
ci: verify and remove temporary PR 74 repair workflows
seonghobae Aug 15, 2026
1ba727d
test(red): bound enrichment outside summary transactions
seonghobae Aug 15, 2026
dba428a
ci: finish PR 74 transaction-boundary repair
seonghobae Aug 15, 2026
15ac044
fix: isolate catalog enrichment from summary writes
seonghobae Aug 15, 2026
f50a2d8
ci: stage PR 74 organization enrichment repair
seonghobae Aug 15, 2026
f6acac3
ci: run verified PR 74 organization enrichment repair
seonghobae Aug 15, 2026
2ace79e
ci: remove superseded organization repair scaffolding
seonghobae Aug 15, 2026
09d6acc
test(red): require source-aware person mention projection
seonghobae Aug 15, 2026
dd6e5a0
ci: stage person-projection reconciliation repair
seonghobae Aug 15, 2026
0d71b1e
ci: verify source-aware person and KG projection
seonghobae Aug 15, 2026
15be1c7
ci: harden person-projection repair transforms
seonghobae Aug 15, 2026
87791f9
ci: run hardened person-projection repair
seonghobae Aug 15, 2026
0c72b3a
ci: complete fresh-install and seed projection repair
seonghobae Aug 15, 2026
a9fef12
ci: verify complete person-projection repair
seonghobae Aug 15, 2026
3420d09
ci: isolate PR 74 repair bootstrap failures
seonghobae Aug 16, 2026
a86e430
ci: preserve focused projection failure evidence
seonghobae Aug 16, 2026
57cad1f
test(db): recognize idempotent table declarations
seonghobae Aug 16, 2026
6998ab3
ci: rerun source-aware projection repair after schema test fix
seonghobae Aug 16, 2026
a8f7e6e
fix(data): reconcile source-aware person graph evidence
Aug 16, 2026
6077442
docs: record source-aware person projection repair
seonghobae Aug 16, 2026
3bd4fb0
feat: show related-person business-side labels (v0.78.0) (#80)
seonghobae Aug 16, 2026
80905cf
Merge branch 'main' into feat/role-responsibility-agent-ontology
seonghobae Aug 16, 2026
59cde23
docs: fold adaptive-orchestration 0.78.0 fragment into changelog
cursoragent Aug 16, 2026
1dc213b
test(red): define normalized analysis-run registry
seonghobae Aug 15, 2026
242437a
feat(db): implement normalized analysis-run registry
seonghobae Aug 15, 2026
2af1dcd
feat(db): add fail-closed registry rollback
seonghobae Aug 15, 2026
a793c59
chore(db): apply analysis registry on fresh install
seonghobae Aug 15, 2026
a53a371
docs(adr): define normalized analysis-run ownership
seonghobae Aug 15, 2026
52bf5a9
docs(research): trace analysis registry standards
seonghobae Aug 15, 2026
b37e2aa
docs(plan): sequence normalized registry delivery
seonghobae Aug 15, 2026
57a5016
docs(changelog): record Milestone 2 registry slice
seonghobae Aug 15, 2026
8121a57
ci: verify clean normalized analysis registry
seonghobae Aug 15, 2026
94fa41e
ci: use canonical locked install steps for registry verification
seonghobae Aug 16, 2026
61fbfb4
ci: preserve analysis-run registry failure evidence
seonghobae Aug 16, 2026
519cada
fix(test): roll back aborted registry downgrade transaction
seonghobae Aug 16, 2026
6f6a252
ci: stage analysis-run registry hardening repair
seonghobae Aug 16, 2026
fac45ce
ci: verify immutable analysis-run evidence test-first
seonghobae Aug 16, 2026
aef0d16
fix(db): make analysis-run evidence immutable
Aug 16, 2026
e40f88a
feat: show authorized analysis-run evidence on the home page (v0.79.0…
seonghobae Aug 16, 2026
dc2517f
feat: open analysis-run detail from the home list (v0.80.0) (#100)
seonghobae Aug 16, 2026
e9bcd48
feat: show labeled analysis-run status history (v0.81.0) (#102)
seonghobae Aug 16, 2026
91d5a05
feat: open visible posts from an analysis-run detail (v0.82.0) (#103)
seonghobae Aug 16, 2026
fdab35e
docs(adr): keep registry ADR 0013 after #74 reused the number
cursoragent Aug 16, 2026
955d0b0
docs(changelog): point adaptive-orchestration note at ADR 0015
cursoragent Aug 16, 2026
f27ecfb
feat: rebase analysis-run registry onto current #74 head (#107)
seonghobae Aug 16, 2026
88a1a0f
fix: keep Keyman evidence and honor analysis-run cutoff (v0.83.0)
cursoragent Aug 16, 2026
8c3694f
fix: fail-closed TEPP seed on the shared Demo Corp snapshot (#118)
cursor[bot] Aug 16, 2026
dea0b3a
fix(ui): show analysis-run digest prefixes on detail (#121)
seonghobae Aug 16, 2026
e9c42ba
fix: keep failed-run next actions kind-specific (#124)
cursor[bot] Aug 16, 2026
44912a6
fix(ui): keep analysis-run digests audible and warn on live posts (v0…
cursor[bot] Aug 16, 2026
352a7a6
feat: let operators request a pending analysis run (v0.85.0) (#125)
cursor[bot] Aug 16, 2026
3c17fd3
feat: walk team and organization related nodes (v0.86.0) (#122)
cursor[bot] Aug 16, 2026
ca9bd82
fix: pin failed-run next actions to registered kinds
cursor[bot] Aug 16, 2026
7f2d4bc
feat(ui): show embedded post images instead of raw base64 (v0.86.1)
cursor[bot] Aug 16, 2026
6f79ecb
fix: bind R&R catalog ids without homonym joins (v0.86.2) (#141)
cursor[bot] Aug 16, 2026
39ed6eb
fix(ui): pin pending next-action copy to registered kinds (#148)
seonghobae Aug 16, 2026
69c035b
feat: add granted retention purge and Storybook tokens (v0.87.0)
seonghobae Aug 16, 2026
1cf0bd7
feat: start a pending lineage reconstruction (v0.88.0)
seonghobae Aug 16, 2026
e4d7461
feat: compare live post write clock with analysis-run cutoff (v0.89.0…
seonghobae Aug 16, 2026
ba5b8c1
feat: warn that cutoff-rewritten titles open the live body (v0.90.0) …
seonghobae Aug 16, 2026
3dfb251
feat: start TEPP through tepp_client; open reconstructed edges (v0.92…
seonghobae Aug 16, 2026
254c83d
feat: seed the A-100 fork and persist start on a durable outbox (v0.9…
seonghobae Aug 16, 2026
a2e745a
feat: show outbox delivery and seed the period-report analysis run (v…
seonghobae Aug 16, 2026
54c4312
feat: open the scored week from a period-report analysis run (v0.97.0…
seonghobae Aug 16, 2026
c7e9428
feat: open the corp grouping with the scored week (v0.98.0) (#199)
seonghobae Aug 17, 2026
7413fb4
fix: bind analysis-run visibility with parameterized SQL literals (v0…
seonghobae Aug 17, 2026
fbcd4df
feat: land the comparison strip on the opened Demo Corp row (v0.99.0)…
seonghobae Aug 17, 2026
1958d70
feat: name the next action on the landed Demo Corp report (v1.0.0) (#…
seonghobae Aug 17, 2026
37a652c
feat: land Demo Corp members under the opened-report next action (v1.…
seonghobae Aug 17, 2026
3bb3e86
feat: name the next action on the opened Demo Corp member (v1.2.0) (#…
seonghobae Aug 17, 2026
ed863fa
feat: focus Event Lineage when opening a landed report member (v1.3.0…
seonghobae Aug 17, 2026
49475a6
feat: mark the opened post current in Event Lineage (v1.4.0) (#206)
seonghobae Aug 17, 2026
3b8b2dc
feat: name Keyman and evaluation after the current Event Lineage node…
seonghobae Aug 17, 2026
ad3611e
feat: land Keyman and evaluation under the Event Lineage next action …
seonghobae Aug 17, 2026
17f6b67
feat: name the first Keyman after landed evaluation (v1.7.0) (#209)
seonghobae Aug 17, 2026
3ace4f6
feat: land first Keyman related nodes under the next action (v1.8.0) …
seonghobae Aug 17, 2026
60a73fd
feat: name the first related node after landed Ada West related (v1.9.0)
seonghobae Aug 17, 2026
d4d1048
feat: land first related nodes under the next action (v2.0.0) (#216)
seonghobae Aug 17, 2026
bda10d6
feat: show cutoff-known post body beside the live rewrite (v2.1.0) (#…
seonghobae Aug 17, 2026
68ffc12
feat: name Ask after Priya Nair related nodes are current (v2.2.0) (#…
seonghobae Aug 17, 2026
6bad1ee
feat: focus Ask after Priya Nair related nodes are current (v2.3.0) (…
seonghobae Aug 17, 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
94 changes: 94 additions & 0 deletions .github/workflows/prov-o-contract.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: PROV-O contract

on:
pull_request:
branches: [main]
paths:
- "lineageweave/prov_o.py"
- "tests/test_prov_o.py"
- "tests/test_prov_o_schema.py"
- "migrations/0017_prov_o_standard_relations.sql"
- "docs/ontology/prov-o-support-profile.ttl"
- "pyproject.toml"
- "uv.lock"
- ".github/workflows/prov-o-contract.yml"
push:
branches: [main]
paths:
- "lineageweave/prov_o.py"
- "tests/test_prov_o.py"
- "tests/test_prov_o_schema.py"
- "migrations/0017_prov_o_standard_relations.sql"
- "docs/ontology/prov-o-support-profile.ttl"
- "pyproject.toml"
- "uv.lock"
- ".github/workflows/prov-o-contract.yml"

permissions:
contents: read

concurrency:
group: prov-o-contract-${{ github.ref }}
cancel-in-progress: true

jobs:
standards-contract:
name: Registry, inference, coverage, PostgreSQL
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16-alpine@sha256:57c72fd2a128e416c7fcc499958864df5301e940bca0a56f58fddf30ffc07777
env:
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U postgres"
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
LINEAGEWEAVE_TEST_POSTGRES_ADMIN_DSN: postgresql://postgres:postgres@localhost:5432/postgres
steps:
- name: Checkout repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # actions/checkout@v7
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # actions/setup-python@v6
with:
python-version: "3.12"

- name: Set up locked Python dependency manager
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
with:
version: "0.11.28"
enable-cache: false

- name: Install the committed universal lock
run: uv sync --frozen --extra dev

Comment thread
seonghobae marked this conversation as resolved.
Fixed
- name: Verify complete relation behavior and 100 percent coverage
run: |
uv run --frozen python -m coverage run --branch --source=lineageweave.prov_o \
-m pytest -q tests/test_prov_o.py
uv run --frozen python -m coverage report --fail-under=100 lineageweave/prov_o.py

- name: Require a reachable PostgreSQL service
run: |
set -euo pipefail
for _ in $(seq 1 30); do
if pg_isready -h localhost -p 5432 -U postgres; then
exit 0
fi
sleep 2
done
echo "PostgreSQL service is unreachable; the schema contract would silently skip." >&2
exit 1

- name: Verify normalized PostgreSQL contracts
run: uv run --frozen python -m pytest -q tests/test_prov_o_schema.py

- name: Compile owned Python surface
run: uv run --frozen python -m compileall -q lineageweave/prov_o.py tests/test_prov_o.py tests/test_prov_o_schema.py
43 changes: 31 additions & 12 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ on:
push:
branches: [main]
pull_request:
branches: [main]

permissions:
contents: read
Expand All @@ -17,6 +16,20 @@ jobs:
pytest:
name: Full test suite
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16-alpine@sha256:57c72fd2a128e416c7fcc499958864df5301e940bca0a56f58fddf30ffc07777
env:
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U postgres"
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
LINEAGEWEAVE_TEST_POSTGRES_ADMIN_DSN: postgresql://postgres:postgres@localhost:5432/postgres
steps:
- name: Checkout repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # actions/checkout@v7
Expand All @@ -28,19 +41,22 @@ jobs:
with:
python-version: "3.12"

- name: Install pinned Rust toolchain
- name: Set up locked dependency manager
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
with:
version: "0.11.28"
enable-cache: false

- name: Select pinned Rust toolchain
run: |
# Same pin as backend/Dockerfile: fast-mlsirm's PyO3/maturin
# core has no wheel, so pip install -e ".[backend]" compiles it.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \
sh -s -- -y --profile minimal --default-toolchain 1.97.1
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
rustup toolchain install 1.97.1 --profile minimal
rustup default 1.97.1

- name: Install package and test dependencies
run: python -m pip install -e ".[dev,backend]"
- name: Install the committed universal lock
run: uv sync --frozen --extra dev --extra backend

- name: Run full test suite
run: python -m pytest -q
- name: Run full test suite against PostgreSQL
run: uv run --frozen python -m pytest -q

frontend:
name: Frontend lint, test, build
Expand All @@ -54,7 +70,6 @@ jobs:
- name: Set up Node
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # actions/setup-node@v5
with:
# Matches frontend/mise.toml's pin (setup-node doesn't parse mise.toml).
node-version: "24"

- name: Enable Corepack
Expand All @@ -75,3 +90,7 @@ jobs:
- name: Build
working-directory: frontend
run: pnpm run build

- name: Build Storybook
working-directory: frontend
run: pnpm run build-storybook
28 changes: 27 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,10 @@ summary/chat, or invented commitment. A missing signal and a
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.
adjudication does -- never a raw LLM API. Demo TEPP seed goes through
`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 @@ -80,11 +83,34 @@ floating Node version):
```bash
cd frontend && pnpm install
pnpm run lint && pnpm run test && pnpm run build
# Storybook inventory (ADR 0020 tokens): pnpm run build-storybook
```

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. Do not
expose purge on a public HTTP route.

`POST /api/analysis-runs/{id}/start` reconstructs a Pending lineage
cutoff bag through `reconstruct()` / `lineage_edge_specs` (ADR 0021 /
v0.88.0). TEPP and period-report start stay 422. 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.

## CI gates

`.github/workflows/tests.yml` runs the full suite on every PR to `main`.
Do not weaken, skip, or `continue-on-error` a failing check -- fix the
underlying cause or, for a genuine false positive in a third-party scanner,
add a narrow, documented suppression referencing the specific finding.
## W3C PROV-O boundary

- Add standard provenance through `lineageweave.prov_o` and the
normalized `provenance_*` schema, never by inventing another
`edge_type` alias for a W3C property.
- Qualified relations retain their Influence resource and imply the
corresponding unqualified relation.
- Appendix B inverse names normalize to the preferred W3C direction;
do not proliferate private inverse vocabulary.
- Keep `knowledge_graph_edge` an explicit navigation projection.
Loading
Loading