Content inventory · Playbook
Disposition ladder — R1–R5 and its parameters
The rule ladder a page-inventory disposition is decided by, and the thresholds each rung uses. bibarel implements the R1 conversion veto and a KEEP/UPDATE/PRUNE simplification of R3–R5; the rest is recorded here because the numbers are institutional judgement, not defaults, and a client asking “why is 300 words the rewrite line?” deserves an answer someone can check.
Salvaged from config/strategy/rules.base.yaml in the frozen nkp-studio repo. There, the ladder’s
order was code and only its parameters were data — the order below is reconstructed from the rule
labels those parameters name, so treat the rung order as the intent and the numbers as exact.
The ladder
Rungs are evaluated in order. The first rung that fires decides the page.
| Rung | Rule | Fires when | Effect |
|---|---|---|---|
| R1 | Conversion veto | conversions >= 1 |
Forced KEEP. Overrides every other signal. |
| R2 | Hub protection | Page has <= 0 own traffic but >= 1 trafficked descendant |
KEEP. A hub with no traffic of its own is still load-bearing. |
| R3 | Value signals + adequacy | clicks >= 1 or sessions >= 10 or impressions >= 50 |
KEEP if also adequate; below rewriteWordCountMin it becomes REWRITE instead. |
| R4 | Kill floor | sessions <= 0 and the floor test passes |
KILL. |
| R5 | Merge | Word count below thinWordCountMax |
MERGE into a stronger sibling. |
Parameters
| Parameter | Value | Rung | Meaning |
|---|---|---|---|
conversionVetoMin |
1 | R1 | Any conversion at all vetoes an automated touch |
hubOwnTrafficMax |
0 | R2 | “Zero own traffic” ceiling for hub protection |
minTraffickedDescendants |
1 | R2 | Trafficked children needed to protect a hub |
descendantTrafficMin |
5 | R2 | Clicks-or-sessions a descendant needs to count as trafficked |
keepMinClicks |
1 | R3 | |
keepMinSessions |
10 | R3 | |
keepMinImpressions |
50 | R3 | |
rewriteWordCountMin |
300 | R3 | Below this, a page that would KEEP becomes REWRITE |
thinWordCountMax |
300 | R5 | Below this, MERGE |
killMaxSessions |
0 | R4 | Floor leg |
floorMode |
conservative |
R4 | upgraded only after an operator runs the per-URL backlinks pull for kill candidates. Never auto-detected. |
linkHubMinChildren |
3 | structural | In-content links to N captured pages makes a page a hub. Additive only. |
rewriteWordCountMin and thinWordCountMax are deliberately equal. Keep them aligned unless the
divergence is intentional — the source config says so in a comment, because a gap between them
creates pages that are too thin to keep and too long to merge.
Constraints on the resulting plan
These do not decide a single page; they gate the plan as a whole.
| Id | Constraint | Value |
|---|---|---|
| C2 | A URL with clicks+sessions above this may never 301 to the homepage | 0 |
| C4 | A kill at or above this click count is an exception needing an explicit human decision | 10 |
| C7 | Exception groups a reviewer will look at — the one-screen review budget | 12 |
| C8 | Maximum click depth from root in the IA tree | 3 |
| C9 | Maximum net-new pages the proposal may declare (SOW page-cap aware) | 15 |
| C13 | No single owner may hold more than N% of keyword-map rows | 10% |
| C14 | At most N% of REWRITE pages may own zero keyword-map rows | 50% |
C13 and C14 exist because of a measured failure, not a theory: the first real strategy output had the homepage hoarding 282 of 1,166 keyword rows (24%), and 53% of rewrite-disposition pages owned zero keyword rows. A rewrite with no demand thesis is busywork. Head and brand terms belong to the homepage; service-intent demand must distribute to its topical service page.
Clustering controls
Medical sites repeat a few high-frequency tokens — “therapy”, “treatment”, “replacement”, “clinic” — across dozens of distinct intents. A 2-token overlap on those alone fuses unrelated queries into one mega-cluster.
| Parameter | Value |
|---|---|
clusterMinSharedTokens |
3 |
clusterDomainStopwords |
therapy, replacement, treatment, clinic (additive to the base stopword list, excluded from overlap counting) |