Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
9701b3d
feat(topic): logistic-normal ALR coordinates with true-parameter RMSE
seonghobae Aug 13, 2026
130bc71
test(topic): expose unstable ALR overflow path
seonghobae Aug 14, 2026
e76a0de
test(topic): reject inverse underflow to a zero simplex part
seonghobae Aug 14, 2026
30ae9e0
fix(topic): script stable ALR and preserve shared ledgers
seonghobae Aug 14, 2026
bce4ac6
chore(ci): verify PR 48 stable log-ratio repair
seonghobae Aug 14, 2026
c95ebe1
fix(topic): stabilize extreme log-ratio coordinates
github-actions[bot] Aug 14, 2026
5106f4b
docs(topic): specify stable inverse reference coordinate
seonghobae Aug 14, 2026
0269df0
test(topic): detect hidden simplex mass with compensated summation
seonghobae Aug 14, 2026
d70f5c7
fix(topic): validate simplex mass with compensated summation
seonghobae Aug 14, 2026
0c3d88d
test(topic): keep compensated-sum fixture clippy-clean
seonghobae Aug 14, 2026
0d7c65f
style(topic): apply pinned rustfmt output
seonghobae Aug 14, 2026
f3540fa
test(quality): include topic measurement in docstring inventory
seonghobae Aug 14, 2026
ab29247
test(topic): cover non-finite compensated simplex mass
cursoragent Aug 17, 2026
4ae9b5d
feat(topic): add sequential Egozcue ILR coordinates
cursoragent Aug 17, 2026
a52dd55
test(topic): hit non-finite ILR centered-log reconstruction
cursoragent Aug 17, 2026
30c1d1f
test(topic): recover three-part sequential ILR in unit tests
cursoragent Aug 18, 2026
2f08cdd
docs(adr): align 0010 and 0013 maturity with merged main
cursoragent Aug 18, 2026
6fe6a78
chore(docs): remove trailing whitespace from ADR maturity lines
seonghobae Aug 19, 2026
d1f3dc3
fix(coverage): ignore Rust multiline string fragments
seonghobae Aug 19, 2026
4b54dc8
test(topic): assert direct Aitchison distance recovery
seonghobae Aug 20, 2026
543982c
fix(coverage): parse Rust strings and comments statefully
seonghobae Aug 20, 2026
621cae0
docs: record stateful coverage parser repair
seonghobae Aug 20, 2026
8e88b33
docs(topic): define ILR pairwise distance
seonghobae Aug 20, 2026
f352e15
docs: trace logratio claims to sources
seonghobae Aug 20, 2026
ff41714
fix(quality): parse Rust literal state in coverage gate
seonghobae Aug 20, 2026
45224e5
docs: record Rust literal coverage hardening
seonghobae Aug 20, 2026
7769df7
Merge current main into topic coordinate contract
seonghobae Aug 21, 2026
7340399
docs(adr): align maturity index with source decisions
seonghobae Aug 21, 2026
26a9fde
feat(topic): recover pairwise Aitchison distance from ILR
seonghobae Aug 23, 2026
578961a
style(topic): rustfmt ILR recovery contract
seonghobae Aug 23, 2026
1dd3953
fix(topic): satisfy clippy similar-names on ILR contract
seonghobae Aug 23, 2026
b7214a8
fix(coverage): track nested Rust block-comment depth
seonghobae Aug 23, 2026
16899f3
fix(coverage): count code after multiline strings
seonghobae Aug 23, 2026
e337391
fix(coverage): scan code after block comments
seonghobae Aug 23, 2026
b3dc7da
feat(topic): publish bounded TRSL topic lineage artifacts (#191)
seonghobae Aug 23, 2026
6110d36
fix: fail closed on log-ratio division underflow
seonghobae Aug 23, 2026
2e595d8
merge: reconcile topic log-ratio coordinates with protected main
seonghobae Aug 25, 2026
96e556f
test(quality): cover blank-predecessor commas and escaped char literals
cursoragent Aug 25, 2026
c879a89
docs(research): restore Graham Neubig initial in Liu 2023
cursoragent Aug 25, 2026
6510405
Merge remote-tracking branch 'origin/main' into rebase/48
seonghobae Aug 25, 2026
2084c84
docs(adr): remap analysis-run execution to ADR 0022
cursoragent Aug 25, 2026
04f05ea
Merge remote-tracking branch 'origin/main' into rebase/48
seonghobae Aug 25, 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
10 changes: 10 additions & 0 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ flowchart LR

Every boundary must be independently usable and expose versioned contracts for integration with organization repositories, `naruon`, and `contextual-orchestrator`.

The `analysis_engine` vertical slice is intentionally separate from `tepp_api`:
the API owns wire contracts while the engine owns deterministic execution. It
does not replace the future topic or psychometric estimators and does not read
another service's application tables.

## Implemented foundation topology

Task 1 materializes the first storage-independent workspace boundaries. The
Expand All @@ -61,6 +66,9 @@ boundaries above remain the target modular MSA architecture.
| `persistence_postgres` | PostgreSQL repositories and migrations |
| `corpus_split` | cutoff-safe, relation-aware partitioning |
| `tepp_simulation` | known-truth temporal/event data generation |
| `validation_core` | RMSE, bias, coverage, graph, and Monte Carlo metrics |
| `tepp_api` | versioned DTO, schema, terminal-result, and export contracts |
| `location_membership` | location is not entity identity and not a language channel |
Comment on lines +69 to +71

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Duplicate rows in ARCHITECTURE foundation-crate table

The added rows for validation_core and tepp_api duplicate the existing rows immediately below them, each now listed twice with conflicting descriptions. location_membership is also re-added though it already appears in the file.

Suggested change
| `validation_core` | RMSE, bias, coverage, graph, and Monte Carlo metrics |
| `tepp_api` | versioned DTO, schema, terminal-result, and export contracts |
| `location_membership` | location is not entity identity and not a language channel |
| `topic_measurement` | logistic-normal ALR and sequential Egozcue ILR topic coordinates |
| `analysis_engine` | bounded cutoff-safe temporal evidence readiness execution and digest-bound terminal artifacts |
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

| `validation_core` | RMSE, bias, coverage, graph, Monte Carlo, and exact-head claim-promotion metrics |
| `tepp_api` | versioned DTO, schema, and export contracts |
| `prompt_source` | prompt boilerplate is not unique latent content and not stopword deletion |
Expand Down Expand Up @@ -102,6 +110,8 @@ boundaries above remain the target modular MSA architecture.
| `compute_backend` | VRAM-budgeted streamed planning, executable OOM retry plans, and a compensated CPU `f64` reference |
| `episode_membership` | episode membership cannot escape the episode event-time interval |
| `membership_target` | language, episode, template, department, and opportunity-pool targets cannot collapse into entity or project |
| `topic_measurement` | logistic-normal ALR and sequential Egozcue ILR topic coordinates |
| `analysis_engine` | bounded cutoff-safe temporal evidence readiness execution and digest-bound terminal artifacts |
| `psychometric_core` | posterior-aware structural input gates, CWC within/between OLS plus the contextual effect, event-time log-rate, unequal-interval discrete-lag remapping, constant-predictor discrete effect, time-varying-predictor discrete effect (Eq. 14), exact scalar discrete process noise (Driver et al., 2017, Eq. 3), lagged latent covariance and unconditional latent variance (Driver et al., 2017, Eq. 3–4), stationary within-subject variance (Driver et al., 2017, Eq. 4 as `Δt → ∞`; `asymDIFFUSION`), trait-plus-state variance (Driver et al., 2017, §4.3 `TRAITVAR`; not process noise), observed-indicator variance and lagged observed covariance (Driver et al., 2017, Eq. 5; Table 2 `MANIFESTVAR` is `Θ`, not `Var(y)`; `MANIFESTTRAITVAR` is not `MANIFESTVAR`; `Θ` does not enter lagged observed covariance; observed-indicator mean is `τ + λ μ`; `MANIFESTMEANS` is not `E(y)`; `CINT` is not `MANIFESTMEANS`; discrete latent mean is `exp(a Δt) μ_0 + (exp(a Δt) − 1)/a κ`; `T0MEANS` is not `μ_t`; `CINT` is not the discrete increment; evolved observed mean is `τ + λ μ_t`; `τ + λ μ_0` is not `E(y_t)`; contemporaneous `TDPREDEFFECT` impulse is `m x`, not `CINT`, not `TIPREDEFFECT`, and not Voelkle Eq. 14; Eq. 5 of that contemporaneous impulse is `τ + λ(μ_t + m x)`, and `τ + λ μ_t` is not that observed mean; time-independent `TIPREDEFFECT` increment is `A^{-1}[e^{A Δt} − I] B z`, not `CINT`, not `M x`, not Voelkle Eq. 14, and not the coefficient `B`; Eq. 5 of that increment is `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)`, and `τ + λ μ_t` is not that observed mean; `τ + λ(μ_t + m x)` is not that observed mean; `τ + λ(μ_t + e^{a(t−u)} m x)` is not that observed mean when `u ≠ t`; within-interval `TDPREDEFFECT` carry is `e^{A(t−u)} M x` for `t0 < u < t`, not the contemporaneous Dirac, not `CINT`, not `TIPREDEFFECT`, and not Voelkle Eq. 14; Eq. 5 of that carry is `τ + λ(μ_t + e^{a(t−u)} m x)`, and `τ + λ μ_t` is not that observed mean; `τ + λ(μ_t + m x)` is not that carried observed mean when `u ≠ t`; first-occasion `T0TIPREDEFFECT` shift is `t0_b z` and Eq. 3 first-summand carry is `e^{A Δt} t0_b z` (`T0TIPREDEFFECT` is not `TIPREDEFFECT` `B`; `t0_b z` is not `A^{-1}[e^{A Δt} − I] B z`; `e^{A Δt} t0_b z` is not `t0_b z`; Eq. 5 of that carry is `τ + λ(μ_t + e^{a Δt} t0_b z)`, and `τ + λ μ_t` is not that observed mean; `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` is not that observed mean), first-occasion `T0TDPREDEFFECT` shift is `t0_m x0` and Eq. 3 first-summand carry is `e^{A Δt} t0_m x0` (`T0TDPREDEFFECT` is not `TDPREDEFFECT` `M`; `t0_m x0` is not `M x`; `e^{A Δt} t0_m x0` is not `t0_m x0`; `e^{A Δt} t0_m x0` is not `e^{A(t−u)} M x` for `t0 < u < t`; `t0_m x0` is not `t0_b z`; an impulse at `u ≤ t0` that used `M` is already in `η(t0)` as `TDPREDEFFECT`, not as `T0TDPREDEFFECT`; Eq. 5 of that carry is `τ + λ(μ_t + e^{a Δt} t0_m x0)`, and `τ + λ μ_t` is not that observed mean; `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` is not that observed mean; `τ + λ(μ_t + e^{a Δt} t0_b z)` is not that observed mean; §7.2 level-change `CINT` is `κ = −a m x` with `a < 0` so `−κ / a = m x` (`−a m x` is not the dissipating Dirac, not a free `CINT`, not `TIPREDEFFECT`, and not the extra near-zero-drift latent process also named in §7.2; Eq. 3 of that setting is `(1 − e^{a Δt}) m x`, which is not `m x`, not `κ`, and not `TIPREDEFFECT`; §7.2 extra-process contribution is `a_{ηξ} x (e^{ε Δt} − e^{a Δt}) / (ε − a)` (`ε = a` is `a_{ηξ} x Δt e^{a Δt}`; identification `TDPREDEFFECT` on the extra process is 1; printed extra `DRIFT` is `−0.000001`; not `κ = −a m x`, not `(1 − e^{a Δt}) m x`, and not the dissipating Dirac `m x`; `ε ≥ 0` fails closed; Eq. 5 of that contribution is `τ + λ(μ_t + a_{ηξ} x (e^{ε Δt} − e^{a Δt}) / (ε − a)`; the extra process has `LAMBDA` 0 and is not an observed indicator; `τ + λ μ_t` is not that observed mean; `τ + λ(μ_t + m x)` is not that observed mean; the contribution is not `E(y_t)`; the evolved-plus-contribution latent mean is not `E(y_t)`; after-t0 extra-process `TDPREDEFFECT` is `a_{ηξ} x (e^{ε(t−u)} − e^{a(t−u)}) / (ε − a)` for `t0 < u < t` while `μ_t` uses `Δt`; Eq. 5 of that after-t0 contribution is `τ + λ(μ_t + a_{ηξ} x (e^{ε(t−u)} − e^{a(t−u)}) / (ε − a)`; the first-occasion extra-process observed mean is not that observed mean when `u ≠ t0`; `e^{a(t−u)} m x` is a Dirac on the original process, not this `DRIFT` drive; §7.2 `asymTIPREDEFFECT` is `-B z / a` for `a < 0` (`-B z / a` is not the coefficient `B`, not `A^{-1}[e^{A Δt} − I] B z`, not `CINT`, and not `M x`; §7.2 `addedTIPREDVAR` is `(B / a)² v`, not `TRAITVAR`, not `asymDIFFUSION`, and not `-B z / a`; Table 2 `asymCINT` is `-κ / a` for `a < 0` and is not `κ`, not `A^{-1}[e^{A Δt} − I] κ`, not `T0MEANS`, and not `-B z / a`; p. 16 stationary `T0MEANS` is `-κ / a + −B z / a` and is not free `T0MEANS`, not `asymCINT` alone, not `asymTIPREDEFFECT` alone, and not the finite-interval discrete latent mean; Eq. 5 of that constrained mean is `τ + λ(−κ / a + −B z / a)`; `τ + λ μ_0` is not that observed mean; `τ + λ(−κ / a)` is not that observed mean when `B z ≠ 0`; `τ + λ μ_t` is not that observed mean; `MANIFESTMEANS` is not `E(y_0)`; the constrained latent mean is not `E(y_0)`; stationary `T0VAR` is `trait + −q / (2 a) + (B / a)² v` (not free `T0VAR`, not `asymDIFFUSION` alone, not `TRAITVAR` alone, not `addedTIPREDVAR` alone, and not the finite-interval discrete latent variance. Eq. 5 of that constrained variance is `λ²(trait + −q / (2 a) + (B / a)² v) + θ + ψ` (JSS PDF re-opened 2026-08-22T03:20Z; form the stationary latent variance first, then `λ² p + θ + ψ`; `λ² p_0` is not that observed variance; `λ²(−q / (2 a)) + θ` is not that observed variance when `TRAITVAR` or `addedTIPREDVAR` is nonzero; `MANIFESTVAR` is not `Var(y_0)`; the constrained latent variance is not `Var(y_0)`); lagged stationary `T0VAR` is `trait + e^{a Δt}(−q / (2 a)) + (B / a)² v` (trait and `addedTIPREDVAR` do not decay; contemporaneous `T0VAR` is not that lagged map; decaying the constrained total as if it were all state is not that lagged map; Eq. 5 of that lagged covariance is `λ²(trait + e^{a Δt}(−q / (2 a)) + (B / a)² v) + ψ`; `Θ` does not enter; contemporaneous `Var(y_0)` is not that lagged observed covariance; the lagged latent covariance is not that observed covariance); later-occasion stationary `T0VAR` is `trait + e^{2 a Δt}(−q / (2 a)) + Q_Δt + (B / a)² v` (trait and `addedTIPREDVAR` do not enter `Q_Δt`; under stationarity that composition equals contemporaneous `T0VAR`; evolving the constrained total as if it were all state is not that later map; the lagged covariance omits `Q_Δt`; `Q_Δt` is not that later map; Eq. 5 of that later-occasion variance is `λ²(trait + e^{2 a Δt}(−q / (2 a)) + Q_Δt + (B / a)² v) + θ + ψ`; lagged observed covariance omits `Q_Δt` and `θ`; `MANIFESTVAR` is not `Var(y_t)`; the later-occasion latent variance is not `Var(y_t)`))), irregular already-centered residual lag, Rubin `T` on OLS loadings, and strong-gated latent means (two-observation residual variance is identically `0` and caps at strong/scalar; Putnick & Bornstein, 2016) |


Expand Down
25 changes: 24 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,21 @@ All notable changes to TEPP are documented here. The format follows Keep a Chang
- `psychometric_core` posterior-aware structural input gates: construct classification, refusal of raw-proportion Pearson/OLS, explicit ALR-versus-ILR geometry boundaries, CPU `f64` OLS recovery, posterior-draw loading point-estimate averaging without Rubin uncertainty claims, invariance-gated latent-mean comparison, and causal-heuristic refusal (ADR 0005 first production slice; no new migration).
### Added

- `topic_measurement` bounded deterministic CPU `f64` TRSL-TM reference estimator: canonical CSR/CSC inputs, cutoff-safe documents, standardized event time, weighted multiple memberships, prevalence covariates, explicit predecessor/successor regularization, multi-seed generalized EM, diagonal Laplace uncertainty, and fitted topic-lineage counts with known-truth RMSE plus exact line/branch coverage (ADR 0012; no persistence or accelerated-backend claim).
- `topic_measurement` logistic-normal additive log-ratio and sequential Egozcue isometric log-ratio coordinates: fail-closed simplex validation, max-shifted stable ALR/ILR inverses with true-parameter RMSE, pairwise CLR Aitchison distance recovered by ILR Euclidean isometry for valid composition pairs, and refusal of TF-IDF/BM25/keyword scores as inferential topic coordinates (ADR 0012 first production slice; no new migration).
- Coverage contract now excludes Rust multiline string continuation records emitted by LLVM LCOV, keeping the 100% authored-line gate focused on executable production lines.
- Coverage source classification now scans Rust normal/raw/byte strings, comments, and character literals with escape-aware state, preserving executable string method calls and ignoring quoted comments.
- Quality-gate coverage tests now exercise blank-predecessor structural commas and escaped character literals in the authored-line scanner, including the past-EOF fail-closed path.
- Restored Graham Neubig's correct APA 7 initial in the Liu et al. (2023) prompting-survey register entry after the protected-main rebase.
- After protected-main consolidation #215, the analysis-run execution decision is recorded as ADR 0022 so it does not collide with ADR 0021 LineageWeave project-history.
- Registered the analysis-engine gap-closure doctoring in the canonical documentation map so its product and scientific traceability record is discoverable.
- Authored Rust coverage classification now ignores standalone structural closing parentheses, preventing formatting-only LCOV rows from appearing as uncovered production behavior.
- `analysis_engine` vertical slice (ADR 0022): bounded Rust execution from an accepted analysis run to either a cutoff-safe readiness result or a validated `tepp.trsl_topic_lineage.v1` artifact from the ADR-0012 estimator. Topic artifacts preserve fitted predecessor/successor edges, connectable-post and lineage counts, request/snapshot/cutoff bindings, SHA-256 identity, and fail-closed non-convergence/tamper behavior with exact line/branch coverage. This remains active-PR evidence and does not claim causal or psychometric authority.
- Coverage classification preserves the final expression line of multiline Rust `match` guards while respecting preceding-arm boundaries, keeping the 100% authored-line gate conservative.
- `tepp_api` fail-closed analysis-result boundaries: status constructors reject
terminal envelopes that cannot fit the default 64 KiB status limit, and
standalone terminal results reject knowledge cutoffs in the future.
- `tepp_api` request-bound terminal analysis results and typed analysis-run status/read responses: accepted/running states cannot carry measurement evidence, terminal results bind exact request and receipt identities, and succeeded/failed payloads remain digest-bound or content-redacted.
- `evidence_core` embedded-image units: `data:image/<type>;base64,...` URIs keep their original source spans and media types, and cannot be used as lexical inference text.
- `persistence_postgres` entity/project target SQL now rejects empty, oversized, or hostile type/status labels before insert; interpolated codes are restricted to lowercase ASCII `snake_case` characters so membership foreign keys remain referentially safe (ADR 0003 / ADR 0013).
- `persistence_postgres` live SQLx transport retains one pool-backed PostgreSQL connection per session so tenant binding and the following statement share a session, and closes the connection and owned runtime safely from another Tokio runtime (ADR 0013).
Expand Down Expand Up @@ -181,7 +196,7 @@ All notable changes to TEPP are documented here. The format follows Keep a Chang
- `tepp_api` purpose-bound provider-payload minimization: time-bounded `PurposeGrant` evaluation, fail-closed expired/not-yet-valid/inverted/cross-tenant/impossible-calendar denial, semantic UTC calendar validation, refusal to copy identity mappings into model-provider payloads or ordinary logs, preservation of opaque analytical identifiers and membership roles (no blanket PII mask), a separately authorized scientific re-identification path, and an internally bound FIPS 180-4 SHA-256 audit digest appended through `ReidentificationAuditSink` before disclosure.
- `persistence_postgres` backup/restore integrity: restored snapshots stay unusable until tenant, canonical `SHA-256`, knowledge-cutoff eligibility, temporal window order, and append-only triggers revalidate; SQL probes raise `restore integrity failed` (ADR 0013).
- `persistence_postgres` concurrent document-write stress: atomic revise `DO` block that requires exactly one open `system_to` close, SQLSTATE mapping onto `ConcurrentWriteConflict` / `DuplicateDocumentRecord`, and live multi-session insert/revise/append-only proofs. No new migration number.
- `tepp_api` naruon HTTP interchange: versioned `https` POST contracts for analysis-run create and modular export authorization that refuse table-access URLs, review/Copilot credential headers, reserved standard-header redefinition, principal-only export idempotency keys, and lexical inference claims (ADR 0011).
- `tepp_api` naruon HTTP interchange: versioned `https` POST contracts for analysis-run create and modular export authorization that refuse table-access URLs, provider-specific API-key/secret and review/Copilot credential headers, malformed extra HTTP fields, reserved standard-header redefinition, principal-only export idempotency keys, and lexical inference claims (ADR 0011).
- `persistence_postgres` audit-event SQL contracts: append-only insert that refuses empty, oversized, or hostile `action_code` values before SQL is rendered.
- `network_analysis` compositional cluster gates: raw topic proportions cannot be treated as Euclidean coordinates; recovered clusters are scored with label-invariant pair precision and recall against known truth.
- `persistence_postgres` event-instance SQL contracts: bitemporal insert and as-known-at lookup that refuse inverted valid/system windows and hostile type/lifecycle labels before SQL is rendered.
Expand Down Expand Up @@ -247,6 +262,9 @@ All notable changes to TEPP are documented here. The format follows Keep a Chang

### Changed

- ALR and ILR inverse normalization now fails closed when division would turn
a representable subnormal weight into a zero simplex part; runtime images
are pinned to the reviewed multi-platform Rust and Debian OCI digests.
- `psychometric_core` scalar forward map `φ(Δt) = exp(a Δt)` now refuses binary64 underflow to `+0`. Voelkle et al. (2012, Eq. 7; ZORA accepted manuscript p. 16) write discrete auto-effects as `e^{a Δt}`, which are strictly positive; `a = ln(φ) / Δt` requires `φ > 0`. Direct overflow already failed closed. The Newton residual path refuses a mapped `+0` the same way.
- The docstring discovery test compares crate-root names to `EXPECTED_CRATES` instead of a hardcoded count of 10, so `semantic_core` is required and an unapproved extra crate fails closed.
- The LineageWeave temporal-context read exchange no longer emits a fabricated
Expand All @@ -273,6 +291,11 @@ All notable changes to TEPP are documented here. The format follows Keep a Chang
head SHA to that exact-head register, including #201 `6afd650667e1` (RFC 5646
cited once; first GAP-005 slice, not implemented-main), stacked drafts
#202–#204, and #164 `ff2e645b1785` as the predecessor register head. Duplicate
PR #179 remains closed. Stacked-merged heads and queued Checks are not
implemented-main.
- Rust LCOV quality gating now ignores visibility-qualified function signatures
and structural match-arm labels that LLVM reports as zero-hit non-executable
lines.
PR #179 remains closed. Stacked-merged heads and queued Checks are not
implemented-main.
- Removed the completed one-shot PR #51 repair job from `docs-quality.yml`; the
Expand Down
28 changes: 28 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ members = [
"crates/compute_backend",
"crates/episode_membership",
"crates/membership_target",
"crates/topic_measurement",
"crates/analysis_engine",
"crates/psychometric_core",
]
default-members = [
Expand Down Expand Up @@ -108,6 +110,8 @@ default-members = [
"crates/compute_backend",
"crates/episode_membership",
"crates/membership_target",
"crates/topic_measurement",
"crates/analysis_engine",
"crates/psychometric_core",
]

Expand Down
Loading
Loading