-
Notifications
You must be signed in to change notification settings - Fork 1
fix(tools): remove lexical pseudo-topic models #1297
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
Merged
Changes from 5 commits
Commits
Show all changes
25 commits
Select commit
Hold shift + click to select a range
4d9f23c
fix(tools): remove lexical pseudo-topic models
seonghobae 6f58d3d
fix(docs): restore complete changelog
seonghobae 3f1803b
docs: start canonical architecture decision index
seonghobae 77ff173
docs: record topic measurement authority ADR
seonghobae 26bbceb
docs: link topic measurement authority decision
seonghobae 0e1fc6f
docs: scope topic measurement ADR to Naruon
seonghobae a1a4676
test(tools): tighten topic boundary evidence
seonghobae 3906b0e
docs: complete topic intelligence decision package
seonghobae cb8a752
fix(docs): tighten topic contract evidence
seonghobae 6e3f613
Merge develop into fix/remove-lexical-topic-heuristics
seonghobae 59bfd5a
Merge develop into fix/remove-lexical-topic-heuristics
seonghobae 4fe5c9a
merge: sync with develop
seonghobae 682c32d
ci: add one-shot conflict-safe sync for PR 1297
seonghobae c906692
Merge develop into fix/remove-lexical-topic-heuristics
github-actions[bot] 0b0f6ac
chore: retrigger exact-head checks after develop sync
seonghobae 01fbdac
ci: add one-shot AGENTS guidance repair
seonghobae b99558d
ci: fix one-shot AGENTS repair trigger
seonghobae 61e9de0
ci: simplify one-shot AGENTS repair
seonghobae 6c5dbaa
ci: repair one-shot workflow YAML
seonghobae 7f2d34a
docs: clarify scoped identity dimensions
github-actions[bot] e8c8f43
chore: retrigger exact-head gates after scoped identity repair
seonghobae 13a6e66
Merge protected develop into topic boundary branch
seonghobae d417bcd
merge(develop): synchronize topic-intelligence candidate
seonghobae fd8a71f
Merge branch 'develop' into fix/remove-lexical-topic-heuristics
opencode-agent[bot] c8a785f
merge(develop): integrate current protected base
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| # ADR-0001: Structural topic measurement is a TEPP model-artifact boundary | ||
|
|
||
| **Status:** Accepted | ||
| **Date:** 2026-08-09 | ||
|
|
||
| ## Context | ||
|
|
||
| Naruon historically exposed `email_categorizer` and `meeting_agenda_generator` from small hard-coded Korean/English term tables. Those outputs were deterministic, but they were lexical rules presented through product names that implied semantic topic inference. That is not a Structural Topic Model and provides no fitted corpus-level topic identity, mixed-membership posterior, uncertainty, prevalence/content covariate effect, multilingual measurement evidence, or model-artifact provenance. | ||
|
|
||
| The CWL scientific boundary is already defined in TEPP: LLM-assisted multilingual semantic evidence may support measurement, while fitted statistical topic inference remains a versioned Rust-first model with explicit preprocessing/vocabulary, temporal availability and multilevel/multiple-membership structure where applicable. Naruon is a consuming workspace/product surface, not a second independent topic-estimation authority. | ||
|
|
||
| ## Decision | ||
|
|
||
| 1. Naruon's retained `keyword_extractor` remains explicitly lexical metadata only. It must never be described as a topic model or semantic classifier. | ||
| 2. Naruon will not replace removed pseudo-topic tools with a larger keyword table, embedding cluster, zero-shot labeler, or LLM prompt while naming the result Structural Topic Modeling. | ||
| 3. Production topic inference, when available, must consume a **versioned fitted TEPP model artifact** through a stable typed integration boundary. Naruon must not refit an STM per request. | ||
| 4. A valid inference request/result must bind at least: model artifact/version and digest; immutable source/document identity; frozen preprocessing and vocabulary; OOV/retained-token diagnostics; language profile/support status; relevant prevalence/content and multilevel/cross-classified/multiple-membership covariates; event/document/availability/knowledge-cutoff time semantics when the model uses them; mixed-membership topic proportions; posterior uncertainty/diagnostics; and explicit abstention/failure status. | ||
| 5. Human-readable topic labels and generated agenda/action summaries are presentation/generation artifacts. They are never the numeric topic identity and cannot change the fitted posterior. | ||
| 6. If the required TEPP model/API/artifact is unavailable, incompatible, under-supported for the document language, or cannot produce an evidence-valid posterior, Naruon fails closed. It does not fabricate `General`, empty agenda semantics, or an embedding/LLM substitute under the same contract. | ||
| 7. TEPP remains independently operable and Naruon remains independently useful without topic inference. Integration is optional and versioned; Naruon must not read TEPP's private database directly. | ||
|
|
||
| ## Alternatives rejected | ||
|
|
||
| ### Keep deterministic keyword categories | ||
|
|
||
| Rejected because deterministic lexical matching is not mixed-membership topic measurement and would preserve the original product-truth defect. | ||
|
|
||
| ### Use embeddings or clustering as a drop-in STM replacement | ||
|
|
||
| Rejected as a semantic product substitution. Such methods may be useful in separate features, but equal semantic usefulness does not make them an STM posterior or preserve the same prevalence/content/uncertainty contract. | ||
|
|
||
| ### Ask an LLM for topic labels at request time | ||
|
|
||
| Rejected as the statistical authority. LLMs may interpret or label fitted evidence behind a separate bounded contract, but request-time labels do not replace a fitted corpus-level model and its uncertainty. | ||
|
|
||
| ### Fit a fresh topic model for every Naruon request | ||
|
|
||
| Rejected because new-document inference must be comparable against a stable fitted model. Per-request refits destroy topic identity, reproducibility, governance, and longitudinal comparability. | ||
|
|
||
| ## Consequences | ||
|
|
||
| - PR #1297 removes the misleading pseudo-topic tools rather than shipping an unvalidated replacement. | ||
| - The next topic-related product work belongs first in TEPP: production fitted-model artifact and inference API, realistic model validation, then a Naruon adapter. | ||
| - Naruon tests must keep lexical utilities labelled lexical and must fail if removed pseudo-topic registry entries reappear without an accepted replacement contract. | ||
| - Any future adapter must carry model/provenance/uncertainty/diagnostic fields rather than only a label string. | ||
| - Product documentation must distinguish `implemented on protected develop`, `active PR`, and `accepted target`; this ADR does not claim TEPP topic inference exists today. | ||
|
|
||
| ## Verification / acceptance | ||
|
|
||
| Before a future topic-measurement adapter is promoted to protected `develop`, require: | ||
|
|
||
| - TEPP production artifact/inference API available at a versioned contract; | ||
| - fitted-model and preprocessing/vocabulary identity validation; | ||
| - positive, negative, OOV/insufficient-text, unsupported-language and model-unavailable tests; | ||
| - posterior normalization and uncertainty/diagnostic tests; | ||
| - multilevel/multiple-membership and temporal-covariate contract tests when those inputs are part of the fitted model; | ||
| - tenant/source authorization at the Naruon boundary; | ||
| - exact-head CI/security/coverage and independent review; | ||
| - no claim that topic labels or LLM interpretations are the numeric topic identity. | ||
|
|
||
| ## Supersession rule | ||
|
|
||
| Changing the statistical authority away from TEPP, changing new-document topic identity semantics, or authorizing Naruon to fit its own production topic models requires a superseding ADR plus synchronized product/technical/architecture/test/operability documentation and scientific validation evidence. |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| # Naruon Architecture Decision Records | ||
|
|
||
| This index records cross-cutting decisions that must survive beyond an individual pull request, implementation plan, or chat. `Accepted` means the decision governs architecture; it does not mean a future integration described by the ADR is already implemented on protected `develop`. | ||
|
|
||
| | ADR | Decision | Status | | ||
| |---|---|---| | ||
| | [ADR-0001](0001-topic-measurement-authority.md) | Structural topic measurement is a versioned TEPP model-artifact boundary, never a keyword/label heuristic | Accepted | | ||
|
|
||
| ## Change rule | ||
|
|
||
| Create or update an ADR when a change moves product authority between Naruon and another CWL service, introduces a new scientific/statistical inference contract, changes persistence or tenant authority, changes model/credential trust boundaries, or replaces a fail-closed product capability with a different production owner. | ||
|
|
||
| Every implementing PR must keep the corresponding source, tests, doctoring, architecture/operability contract, and CHANGELOG maturity truthful. An active PR or accepted target must not be described as protected-branch implementation before it is integrated and independently verified. |
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.
Uh oh!
There was an error while loading. Please reload this page.