-
Notifications
You must be signed in to change notification settings - Fork 0
feat(longitudinal): persist immutable observation evidence #248
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
seonghobae
merged 50 commits into
main
from
feat/longitudinal-observation-persistence-20260818
Aug 26, 2026
Merged
Changes from all commits
Commits
Show all changes
50 commits
Select commit
Hold shift + click to select a range
e36af18
test(longitudinal): require durable observation persistence
seonghobae 223c402
feat(longitudinal): add immutable observation schema
seonghobae 96d9fd5
feat(longitudinal): persist immutable observation evidence
seonghobae 219ad3f
feat(longitudinal): expose observation persistence adapter
seonghobae 2bbe2ab
test(longitudinal): require tenant-bound persistence
seonghobae 8b2b04a
feat(longitudinal): isolate observation evidence by tenant
seonghobae 4e83c0d
feat(longitudinal): bind persisted observations to tenant
seonghobae 263494e
test(longitudinal): require tenant-scoped restart recovery
seonghobae 3891688
fix(longitudinal): restore durable observations after restart
seonghobae cf66f3d
fix(longitudinal): preserve checked membership sequence loading
seonghobae 561f999
fix(longitudinal): satisfy strict rustdoc lint
seonghobae c0ad5d8
Merge branch 'main' into feat/longitudinal-observation-persistence-20…
github-actions[bot] bf8351d
test(longitudinal): reject membership-less persisted observations
seonghobae 5fb0985
fix(longitudinal): reject observations without memberships
seonghobae b1ab98b
test(longitudinal): preserve corrupt-restore loader coverage
seonghobae 3b24bce
fix(longitudinal): satisfy doc-markdown gate
seonghobae 456cf12
test(longitudinal): cover immutable replay classification boundaries
seonghobae bc1ad6c
test(longitudinal): keep replay coverage formatted
seonghobae 65bca82
test(longitudinal): avoid client helper shadowing
seonghobae 7d69fc5
test(longitudinal): structure replay matrix for clippy
seonghobae 27ee781
fix(longitudinal): clarify persistence reference errors
seonghobae bf4b3ce
test(longitudinal): reject numeric references and clock-code mismatch
seonghobae a514b66
fix(longitudinal): enforce opaque refs and clock anomaly integrity
seonghobae 052cd95
fix(longitudinal): preserve corruption probes with insert-time clock …
seonghobae b4b6505
Merge branch 'main' into feat/longitudinal-observation-persistence-20…
opencode-agent[bot] 78892b2
Merge branch 'main' into feat/longitudinal-observation-persistence-20…
opencode-agent[bot] 46816e4
fix(longitudinal): isolate schema integrity tests and rustfmt
cursoragent 73dadc6
fix(longitudinal): cover persist query errors and rustdoc clippy
cursoragent a436b5a
test(session-http): tolerate peer close during invalid framing
cursoragent dad81fc
test(longitudinal): reject Unicode numeric separators in DB refs
seonghobae 1f86a81
fix(longitudinal): align DB numeric separator guard
seonghobae 46bf001
test(longitudinal): reject control characters in DB refs
seonghobae 6483b72
fix(longitudinal): reject unsafe DB reference controls
seonghobae 8b0fbe1
test(longitudinal): require anomaly CHECK defense
seonghobae fb5e161
fix(longitudinal): enforce clock anomaly relation in CHECK
seonghobae 9a080b7
test(longitudinal): preserve corrupt-history recovery probe
seonghobae b3cb2ea
fix(longitudinal): keep hyphen literal in reference regex
seonghobae 441cea8
test(longitudinal): pin digit-bearing opaque reference contract
seonghobae b472cea
style(longitudinal): restore schema test trailing newline
seonghobae 377777e
Merge protected main into longitudinal observation reconciliation
seonghobae 8b34b24
test(longitudinal): require Unicode numeric parity in PostgreSQL
seonghobae c6b0583
fix(longitudinal): align PostgreSQL numeric refs with Rust
seonghobae dfb18f4
merge(main): reconcile longitudinal persistence with scoring adapter
seonghobae b9e7b8d
docs(longitudinal): distinguish active persistence from shipped flow
seonghobae 2a2b85d
docs(longitudinal): map active PostgreSQL observation schema
seonghobae 10394d6
docs(longitudinal): record active durable observation slice
seonghobae b5b1a36
docs(longitudinal): record tenant-scoped source identity
seonghobae 75e4d0a
chore(longitudinal): reconcile observation persistence with current main
seonghobae ccb0b4b
Merge branch 'main' into feat/longitudinal-observation-persistence-20…
opencode-agent[bot] 49a4b23
Merge branch 'main' into feat/longitudinal-observation-persistence-20…
seonghobae File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📝 Info: AS_BUILT prose describes membership rows as 'zero-or-more' but the schema requires at least one
AS_BUILT_SCHEMA.md describes the physical split as preserving "one logical observation record with zero-or-more explicit membership-share evidence rows." The enforced invariant actually requires the shares to total exactly 10,000, i.e. at least one row; a header-only commit fails (verified by postgres_longitudinal_observation_schema_integrity.rs). The 'zero-or-more' phrasing understates the enforced cardinality. Minor documentation imprecision rather than a functional defect.
Was this helpful? React with 👍 or 👎 to provide feedback.