Skip to content

feat(method): refuse house-voice style as unique content - #148

Merged
seonghobae merged 8 commits into
mainfrom
agent/style-source
Aug 24, 2026
Merged

feat(method): refuse house-voice style as unique content#148
seonghobae merged 8 commits into
mainfrom
agent/style-source

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

House-voice style residue stays explicit method structure (ADR 0004/0012). It is not unique latent content and is not erased by a stopword list. Recovery is the computed share of recovered kinds that match known truth versus collapsing every token to unique content.

Complementary to #147 (`section_source`), #145 (`stopword_deletion`), and #75 (`method_effects`: method source is not an inferential weight). This crate owns style-versus-unique-content identity.

Local gates:

  • `cargo test -p style_source --all-targets` GREEN after RED (package did not exist)
  • clippy `-D warnings` PASS
  • workspace contract PASS
  • docstring contract PASS
  • lines 16/16; nightly-2026-08-01 branches 6/6

Does not allocate migration `0008`. Does not recreate `section_source`, `stopword_deletion`, or `method_effects`.

Keep this PR draft. #46 is on main. Do not mass-undraft #47#147. If an hourly fire undrafts a PR, restore draft except when a qualifying independent APPROVE and exact-head required Checks already exist.

House-voice style residue stays explicit method structure (ADR 0004
and 0012). It is not unique latent content and is not erased by a
stopword list. Recovery is the computed share of style kinds that
match known truth versus collapsing every token to unique content.
@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 51 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 0d4cef4f-b285-4cb7-956b-521d4b2722d3

📥 Commits

Reviewing files that changed from the base of the PR and between 95257f4 and 531c1b7.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (18)
  • ARCHITECTURE.md
  • CHANGELOG.md
  • Cargo.toml
  • README.md
  • crates/style_source/Cargo.toml
  • crates/style_source/src/error.rs
  • crates/style_source/src/kind.rs
  • crates/style_source/src/lib.rs
  • crates/style_source/tests/crate_contract.rs
  • crates/style_source/tests/style_source_contract.rs
  • docs/TRACEABILITY.md
  • docs/adr/0004-shared-multilingual-latent-space.md
  • docs/adr/0012-temporal-relational-shared-latent-topic-measurement.md
  • docs/adr/README.md
  • docs/research/standards-and-literature.md
  • docs/research/style-source-identity.md
  • docs/validation/temporal-event-foundation.md
  • scripts/check_workspace_contract.py

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae marked this pull request as ready for review August 20, 2026 17:59
@seonghobae

Copy link
Copy Markdown
Contributor Author

Current head 3679355 merges protected main and fixes the previous exact-head CI root cause: repository rustfmt ordering in the style-source exports/tests. Focused proof passed: cargo fmt --all -- --check, cargo test -p style_source --offline (6 tests), workspace contracts, documentation validation, Rust docstring contract, and git diff --check. The exact-head Checks are rerunning; merge remains gated by one qualifying independent approval.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head validation update (f3f1504): fixed the quality contract to derive the Rust crate count from scripts/check_workspace_contract.py instead of hard-coding 10. Local evidence: 89 quality tests passed; coverage 100% (991/991 statements, 442/442 branches); workspace, docstring, documentation, and diff checks passed. Please review and rerun Checks against this exact head; merge remains subject to the repository's two independent approvals and protected rules.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head review fix (020b446): removed the duplicate active-PR Purpose-bound provider payloads ledger row; one implemented-main row now remains. Local validation passed: 89 quality tests, 100% statement/branch coverage (991/991, 442/442), workspace/docstring/documentation contracts, and diff check. Please re-review this exact head.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review

Review-only request for exact current head 020b4466c6ee548cd4fb6df038bdb708981859b0. Re-review the style-source Rust contract, temporal/multilevel semantics, APA 7 research traceability, coverage/docstring contracts, and current protected-merge requirements. Do not merge or enable auto-merge.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head failure RCA for 020b446: Strix produced Vulnerabilities 0, then failed because the local Caido guest bootstrap could not connect to 127.0.0.1:48080. This is a central Strix runtime-infrastructure failure, not a source vulnerability. The narrow fail-closed classifier repair is in ContextualWisdomLab/.github#1181; do not treat this old failed run as a clean security verdict until the central fix is merged and this exact head is rerun.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Queued @cwl-noema-review and @opencode-agent for PR #148 at head 020b4466c6ee548cd4fb6df038bdb708981859b0. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Root-cause owner update: central PR #1181 was closed as superseded, and canonical owner PR #1153 now carries the fix. Its current exact head is ; the Strix failure on this path was a real Medium diagnostic-disclosure finding, now repaired by allowlisting safe HTTP methods and redacting untrusted methods. Do not rerun unchanged TEPP Strix until the central fix is merged into protected main; then revalidate this PR's exact HEAD.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Root-cause owner update: central .github PR #1181 was closed as superseded, and canonical owner PR #1153 now carries the fix. Its current exact head is a82b8012be5d57f99c1a2b029f08837d4d10d564; the Strix failure on this path was a real Medium diagnostic-disclosure finding, now repaired by allowlisting safe HTTP methods and redacting untrusted methods. Do not rerun unchanged TEPP Strix until the central fix is merged into protected main; then revalidate this PR exact HEAD.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current exact-head triage: strix is the only completed failure on 020b4466c6ee548cd4fb6df038bdb708981859b0; the job log reports bounded Caido guest bootstrap infrastructure failure (loginAsGuest could not connect to 127.0.0.1:48080) with no vulnerability finding. The root-cause repair is in ContextualWisdomLab/.github#1176; re-run this exact head after that protected central workflow change lands. No source workaround or bypass is warranted.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head review refresh for 020b446:

  • House-voice style residue is kept separate from unique lexical or inferential content, preserving the method boundary.
  • Local diff, documentation, workspace, docstring, and formatting contracts pass. All non-Strix checks are passing; Strix is the only current failure and the required coverage evidence remains pending.
  • The Strix failure is the known Caido guest bootstrap curl at 127.0.0.1:48080 with Vulnerabilities 0. Its canonical owner is ContextualWisdomLab/.github PR 1153, which is still open; rerunning unchanged TEPP source would reproduce the infrastructure defect.
  • No TEPP source fix or bypass was made; merge remains withheld until the central repair is merged, Strix is rerun on this exact head, and qualifying approvals exist.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Rebased current head 4c0612f onto origin/main. The changelog conflict retains both feature and current-main entries; inherited documentation trailing whitespace was removed. Local merge-tree, git diff --cached --check, and cargo fmt --all -- --check pass. Exact-head hosted checks and required independent approvals remain required before protected merge; the prior Strix infrastructure failure is tracked separately from TEPP source.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head review request: exact head 4c0612fe717a40cebfb9ba1e31daaa7317607c9f has one provider-payload validation row; the duplicate-row finding is resolved on this exact head. All terminal checks are green and coverage-evidence remains queued. Please review this exact head. No merge bypass is requested.

@seonghobae
seonghobae enabled auto-merge (squash) August 24, 2026 00:56
@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head queue disposition

Exact head 4c0612fe717a40cebfb9ba1e31daaa7317607c9f is green across required Checks with no failed or queued gate. The bounded house-voice identity crate and documentation remain mechanically mergeable, but REVIEW_REQUIRED has no qualifying independent approval. WAIT_AND_REMEDIATE; no bypass.

@github-actions
github-actions Bot disabled auto-merge August 24, 2026 08:20
# Conflicts:
#	ARCHITECTURE.md
#	CHANGELOG.md
#	Cargo.lock
#	Cargo.toml
#	README.md
#	docs/TRACEABILITY.md
#	docs/adr/0004-shared-multilingual-latent-space.md
#	docs/adr/0012-temporal-relational-shared-latent-topic-measurement.md
#	docs/adr/README.md
#	docs/research/standards-and-literature.md
#	docs/validation/temporal-event-foundation.md
#	scripts/check_workspace_contract.py
#	tests/quality/test_check_docstrings.py
@seonghobae
seonghobae merged commit f85ed11 into main Aug 24, 2026
19 of 22 checks passed

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Devin Review found 4 new potential issues.

Open in Devin Review

Comment thread docs/TRACEABILITY.md
| global P0 topic identity with activity/dormancy/reactivation | ADR 0012 | future topic lineage/activity state | accepted-target |
| no default stopword deletion / no TF-IDF-BM25 inferential weighting | ADR 0004/0012; PRD/TRD | `stopword_deletion` default-list refusal on the active PR; TF-IDF/BM25 inferential-weight refusal remains accepted-target | partial |
| report template/section/copied/style/modality method effects | ADR 0004/0012; PRD/TRD | simulation truth factors implemented; estimator-side method model remains future | partial |
| no default stopword deletion / no TF-IDF-BM25 inferential weighting | ADR 0004/0012; PRD/TRD | future semantic/method-source model | accepted-target |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Traceability matrix marks a built capability as future work

The no default stopword deletion row is rewritten to future semantic/method-source model | accepted-target, dropping the reference to the stopword_deletion crate and downgrading it from partial. That crate exists on this branch and is still listed as implemented in CHANGELOG.md, ARCHITECTURE.md, and temporal-event-foundation.md, so the matrix now contradicts them.

Prompt for agents
The row for "no default stopword deletion / no TF-IDF-BM25 inferential weighting" in docs/TRACEABILITY.md was changed to "future semantic/method-source model | accepted-target", which removes the reference to the existing stopword_deletion crate and downgrades its maturity. The stopword_deletion crate is still present and documented as active-PR/accepted-target in CHANGELOG.md, ARCHITECTURE.md, and docs/validation/temporal-event-foundation.md. Restore the stopword_deletion crate reference and its correct maturity in this traceability row (e.g. keep the existing \`stopword_deletion\` default-list refusal wording) while adding any new style_source content elsewhere as intended.
Open in Devin Review

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

Comment on lines -39 to -41
Schofield, A., Magnusson, M., & Mimno, D. (2017). Pulling out the stops: Rethinking stopword removal for topic models. In *Proceedings of the 15th Conference of the European Chapter of the Association for Computational Linguistics: Volume 2, Short Papers* (pp. 432–436). Association for Computational Linguistics. https://doi.org/10.18653/v1/E17-2069

TEPP retains a logistic-normal CPU reference while allowing adapter backends that satisfy shared-latent, posterior, temporal, relational, and measurement-invariance contracts. Default or global stopword deletion is not a valid method for removing repeated report language; `stopword_deletion` refuses that treatment so boilerplate stays explicit method/background structure (Schofield, Magnusson, & Mimno, 2017).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Stopword-removal source dropped from central register

The Schofield, Magnusson & Mimno (2017) reference and the default-stopword-deletion refusal sentence are removed and replaced by a style-residue sentence. The stopword_deletion crate still makes that refusal claim, so its primary source no longer appears in the central register (only in docs/research/stopword-deletion.md).

Prompt for agents
In docs/research/standards-and-literature.md the Schofield, Magnusson & Mimno (2017) 'Pulling out the stops' reference and the sentence stating that default/global stopword deletion is refused were removed and replaced with a house-voice style-residue sentence. The stopword_deletion crate still exists and asserts the stopword-refusal claim. Restore the Schofield (2017) reference and the stopword-deletion refusal statement in this central register while keeping the newly added style-residue sentence, so both claims retain their primary sources.
Open in Devin Review

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

Comment on lines +4 to 5
**Implementation maturity:** accepted-target — style-versus-unique-content identity in `style_source` on the active PR; shared-space estimators remain accepted-target
**Implementation maturity:** partial — default stopword-deletion refusal is `stopword_deletion` on the active PR; shared-space estimators, language profiles, and TF-IDF/BM25 inferential-weight refusal remain accepted-target

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📝 Info: Stacked conflicting maturity headers in ADR 0004

ADR 0004 now carries two **Implementation maturity:** lines with conflicting values (accepted-target vs partial). This follows the existing stacked-line convention in ADR 0012, so it looks deliberate, but no single line states the authoritative maturity.

Open in Devin Review

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

Comment on lines +70 to +84
pub fn identity_recovery_rate(
truth: &[StyleKind],
decided: &[StyleKind],
) -> Result<f64, StyleSourceError> {
if truth.is_empty() || truth.len() != decided.len() {
return Err(StyleSourceError::InvalidStylePayload);
}
let mut matches = 0_u32;
for (truth_kind, decided_kind) in truth.iter().zip(decided) {
if truth_kind == decided_kind {
matches += 1;
}
}
Ok(f64::from(matches) / truth.len() as f64)
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📝 Info: Recovery rate fail-closed logic is correct for empty/mismatched slices

identity_recovery_rate in kind.rs guards with truth.is_empty() || truth.len() != decided.len(). This covers all invalid-payload cases: empty truth, empty decided (length mismatch), and unequal lengths. The zip then only iterates matching pairs, and the divisor uses truth.len(), so the rate is a valid fraction in [0,1]. No off-by-one or division-by-zero risk exists.

Open in Devin Review

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant