Notebook eligibility¶
Compatibility policy name: notebook_eligibility_v1
This is the only permitted stand-in for TranscriptX insight_eligibility in the core set. Ports must not invent per-module eligibility stubs, softeners, or silent bypasses. Modules that TX gated with insight_eligibility either:
Invoke this policy (required list below), or
Are explicitly ungated in this contract (documented deliberate choice), or
Use a named notebook-native substitute recorded here or in the pin row’s
semantic_delta(e.g.momentssalience fork — not an eligibility stub)
Used with analysis-document.md. Contributes to cache identity via analysis-run-storage.md. Outcomes: analysis-result.md.
Identity¶
Field |
Value |
|---|---|
|
|
|
|
Purpose¶
Decide which analysis units are eligible for modules that must not run on empty, excluded, or trivially non-content units.
Deterministic inputs¶
Input |
Notes |
|---|---|
Candidate |
From the adapter’s pre-eligibility unit list (same id/text/order/date/source_ref rules as analysis-document) |
Per-page include flag |
Page excluded from analysis ⇒ units for that |
Effective texts |
Already reflected in unit |
No randomness. No I/O. No Speakers. No wall-clock.
Deterministic outputs¶
{
"policy_id": "notebook_eligibility_v1",
"policy_version": "1",
"eligible_unit_ids": ["...", "..."], // sorted ascending
"decisions": [
{
"unit_id": "...",
"eligible": true | false,
"reason": "ok" | "excluded" | "empty_or_whitespace" | "too_short"
},
...
]
}
decisions sorted by unit_id ascending. eligible_unit_ids is exactly the set of decisions with eligible: true, sorted.
Rules (policy_version 1)¶
Evaluate each unit in isolation:
Reason |
Condition |
Eligible |
|---|---|---|
|
Backing page marked excluded from analysis |
no |
|
|
no |
|
After whitespace-trim, character length < 3 |
no |
|
otherwise |
yes |
If no units are eligible → modules that require this policy conclude outcome: skipped_not_applicable (see analysis-result edge-case table).
Modules that must invoke this policy¶
These modules must call notebook_eligibility_v1 and build their AnalysisDocument.units from the eligible set only (or equivalently filter before fingerprinting the document they persist):
keyphrasestopic_modelingbertopichighlightsinsights
Explicit core resolutions (no ad-hoc stubs)¶
Module / path |
Policy |
|---|---|
|
Required: |
|
Ungated relative to TX insight eligibility — runs on document text / units after blank+excluded omission |
|
Optional parent |
|
Not an eligibility bypass — notebook-native salience fork (no TX |
|
Ungated by this policy in the core set (blank/excluded pages still omitted by the adapter per analysis-document) |
Compatibility tests (required)¶
Implementation must include tests that:
Each required module invokes
notebook_eligibility_v1(not a private filter)Empty / whitespace / too-short / excluded units are dropped with the named reasons
Zero eligible units →
skipped_not_applicable, not emptysuccesswordcloudswithoutkeyphrasesstill succeeds on baseline pathNo module ships an inline “softened insight_eligibility” stub
Cache identity contribution¶
When a module uses this policy, analysis-run-storage cache identity must include:
eligibility_policy_id=notebook_eligibility_v1eligibility_policy_version=1eligibility_fingerprint= lowercase hex SHA-256 of compact UTF-8 JSON with sorted keys of the outputs object above (policy_id,policy_version,eligible_unit_ids,decisions)
Non-goals¶
Full TranscriptX
insight_eligibility/ genre gating (later disposition rows)Per-module private eligibility heuristics for the modules listed as required above
Treating “bypass” as an implementation free-for-all