global setup and configuration.

This commit is contained in:
jb
2026-08-24 16:33:11 -04:00
parent 10f64b593b
commit 31c9363dbb
95 changed files with 12641 additions and 41 deletions
@@ -0,0 +1,75 @@
{
"packs": {
"pack-phrases-core": [
"academic_excess",
"acknowledgment_loop",
"ai_vocabulary",
"assistant_artifact",
"communication_artifact",
"conclusion_scaffold",
"copula_avoidance",
"editorializing",
"emphasis_crutch",
"false_agency",
"false_concession",
"false_range",
"filler",
"filler_opener",
"formulaic_challenges",
"generic_conclusion",
"jargon",
"knowledge_cutoff",
"meta",
"novelty_inflation",
"numbered_list_inflation",
"performative",
"promotional",
"reader_addressing",
"reader_steering",
"reasoning_chain",
"rhetorical_question",
"rhetorical_setup",
"significance_inflation",
"superficial_ing",
"throat_clearing",
"unnecessary_permission",
"vague_attribution",
"vague_endorsement"
],
"pack-structure": [
"macro_both_sidesism",
"macro_redemption_arc",
"macro_preview_recap",
"macro_over_determination",
"macro_emotional_flatness"
],
"pack-register-guards": [
"hedge_stack",
"parenthetical_hedging"
],
"pack-voice": [
"anthropomorphic_shipping",
"anti_slop_register",
"binary_contrast",
"colon_reveal",
"contrastive_definition",
"dramatic_fragment",
"em_dash_overuse",
"exclamation_overuse",
"formatting",
"fragment_template",
"headline_cadence",
"headline_container_agency",
"imperative_slogan",
"negative_listing",
"negative_parallelism",
"numeric_parallelism",
"slogan_fragment",
"spec_fragment",
"staccato_fragmentation",
"tool_agency_reflexive",
"tool_agency_volitional"
],
"pack-facts": []
}
}
@@ -0,0 +1,28 @@
# Pack: Facts
Use this pack for facts and constraints that must survive a rewrite. Do not judge style or phrase quality.
## Look For
- Constraints from `extract_constraints.py`: numbers, dates, times, names, URLs, emails, quoted text, code identifiers, currencies, percentages, units, ranges.
- Negations, conditionals, and scope words surfaced by preservation validation: "not", "unless", "except", "only", "must", "may", "can", "at least", "no more than".
- Approximation traps: "roughly 60%" is not "60%"; "Q2" is not "June"; "under 500 ms" is not "500 ms".
- Proper-noun and party relationships: Apple sued Qualcomm is not Qualcomm sued Apple.
- Technical literals: API names, flags, file paths, version numbers, protocol names.
## Emit
Return JSON findings only:
```json
{"span":"roughly 60%","rule":"approximate_quantity","pack":"pack-facts","severity":"hard","note":"Keep the approximation marker with the number."}
```
Use `hard` for exact facts, negations, scope, and quantities. Use `soft` for phrasing that appears factual but may be compressible.
## Examples
- "p99 latency fell to 180 ms on June 18" -> report p99, 180 ms, June 18.
- "roughly 60%" -> report the approximation and number together.
- "The team improved performance." -> no finding; style claim without a concrete constraint.
- "`--strict` failed on v2.1.0" -> report flag and version.
@@ -0,0 +1,30 @@
# Pack: Phrases Core
Use this pack only for scanner-backed phrase, jargon, and scaffold tells. Do not judge facts, register-preservation, macro structure, or the rewriter's house style here.
## Look For
- Throat-clearing and reader steering: "here's the thing", "let's dive in", "to answer your question".
- Emphasis crutches and inflated significance: "let that sink in", "underscores the importance", "a testament to".
- Business, academic, and promotional vocabulary used as generic polish: "leverage", "seamless", "vibrant", "rich cultural heritage".
- Vague attribution or false agency: unnamed "experts", numbers that "speak for themselves", data that "tells a story".
- Formulaic scaffolds: ordinal sequencing, generic conclusions, rhetorical setup questions, novelty claims, numbered-list hype.
Use `references/taboo-phrases.md` as the authoritative phrase catalog. Report only spans this pack owns.
## Emit
Return JSON findings only:
```json
{"span":"...","rule":"throat_clearing","pack":"pack-phrases-core","severity":"hard","note":"Cut the opener and start with the claim."}
```
Use `hard` for always-bad boilerplate and `soft` for context-dependent wording. Leave legitimate literal, legal, medical, code, or domain-specific uses unreported.
## Examples
- "Here's the thing: the data speaks for itself." -> report "Here's the thing" and "speaks for itself".
- "The loan used 3:1 leverage." -> no finding; finance sense is literal.
- "This update unlocks seamless cross-functional synergy." -> report "seamless" and "synergy".
- "Some critics argue the policy failed." -> report vague attribution unless the critics are named nearby.
@@ -0,0 +1,30 @@
# Pack: Register Guards
Use this pack to find wording that must survive a rewrite. Do not flag ordinary slop phrases and do not rewrite. This pack prevents harm.
## Look For
- Legal scope and negation: "arguably", "may", "shall", "must", "unless", "except", "not", "does not", section references, liability limits, indemnity terms.
- Medical and scientific uncertainty: "may cause", "can increase", "studies suggest", "preliminary", "observational", "does not establish causation", confidence limits, cohort limits.
- Security and safety absolutes: "never", "always", "must", "all input", "no secrets", "do not mix", when they define a rule or warning.
- Scope words and quantities: "most", "some", "only", "at least", "no more than", percentages, ranges, dates, named parties.
- Anti-dehedging traps: a phrase that looks cautious but carries the claim's certainty, exception, or legal burden.
Run on the whole text, not paragraph chunks, because scope can be established earlier than the sentence being rewritten.
## Emit
Return JSON findings only:
```json
{"span":"arguably does not rise to gross negligence","rule":"legal_negation_scope","pack":"pack-register-guards","severity":"hard","note":"Hedge and negation are load-bearing; preserve them exactly."}
```
Every finding is a preservation constraint. Use `hard` when changing it could invert or strengthen the claim; `soft` when it is likely load-bearing but needs human review.
## Examples
- "The incident arguably does not rise to gross negligence under Section 12(b)." -> report the full legal hedge/negation span.
- "Users should never store secrets in client-side code." -> report "never store secrets".
- "It is worth noting that the button is blue." -> no finding; ordinary filler belongs to another pack.
- "The trial may cause drowsiness in some patients." -> report "may" and "some patients".
@@ -0,0 +1,31 @@
# Pack: Structure
Use this pack for document-level AI structure. Do not report isolated phrases unless they create a macro pattern.
## Look For
- `structure_scan.py` flags: `sentence_burstiness`, `conclusion_coda`, `bold_colon_listicle`, `one_line_staccato`, `connective_paragraph_openers`, `signpost_density`, `opener_repetition`, `participial_closer_share`.
- Concrete thresholds to self-check: average sentence length under 8 or over 34 words is suspicious; sentence-length variance under 18 on 5+ sentences suggests uniform rhythm; 3+ one-line paragraphs under 8 words suggests staccato; 3+ consecutive paragraphs opened by connectives/signposts suggests scaffolding; 4+ repeated paragraph openers is blocking; 35%+ participial sentence endings suggests templated cadence.
- Judge-only macro tells from `taboo-phrases.md`: both-sidesism, templated redemption arc, preview/recap symmetry, over-determination, uniform emotional register.
- `silhouette_scan.py` flags idea arrangement above the surface: `scaffold_opener_share`, `callback_content` (recap loop), `role_entropy_bits`, `preview_fulfillment`, `heading_preview`, composited into `silhouette_penalty` (flags at `>= 1.0`).
- A high `silhouette_penalty` means the document follows a template outline (preview-then-fulfill, rotating scaffold openers, closing recap); cite the specific flagged metric, not just the composite.
- Cue-deletion evades silhouette but not surface repetition: pair `silhouette_scan` with `structure_scan` (`opener_repetition`, `one_line_staccato`) so a stripped-connective attack still fails one of the two fences.
Genre matters. `--genre docs` can allow reference-doc structure; `--genre social` can allow deliberate social cadence. Output still fails if the genre excuse is false.
## Emit
Return JSON findings only:
```json
{"span":"paragraphs 2-5","rule":"connective_paragraph_openers","pack":"pack-structure","severity":"hard","note":"Paragraphs advance by scaffold words instead of content."}
```
Quote the smallest span that shows the macro pattern. For whole-document patterns, use paragraph ranges.
## Examples
- "However... In addition... Consequently... In the end..." -> report connective scaffold and coda.
- A technical comparison with "In Rails / In Django / In raw SQL" once -> no finding.
- A story that always moves problem -> lesson -> uplift -> moral -> report `macro_redemption_arc`.
- A report whose conclusion only recaps the intro -> report `macro_preview_recap`.
@@ -0,0 +1,33 @@
# Pack: Voice
Use this pack for manufactured voice and the skill's own replacement tells. Do not report core phrase boilerplate or factual/register constraints.
## Look For
- Anti-slop register: bare fragment contrasts such as "Not the tool. The team."; forced punch endings; repeated two- or three-word sentences.
- Elegant variation and synonym cycling that calls attention to itself instead of clarifying.
- Dramatic fragments, binary contrasts, negative parallelism, colon reveals, and rhetorical setups.
- Contrastive-definition tails ("X is a build step, not an output."), two-beat imperative slogans ("Emit tokens. Ship bytes."), repeated "<plural noun> that <verb>." fragments, "One X, N Y." numeric parallelism, and abstractions that "ship inside" things.
- Standalone slogan/spec fragment lines and headers: "N X, one Y." slogan cadence ("Four presets, one input.") and "N noun-phrase, past-participle ..." spec-sheet fragments ("Eight criteria, scored 1 to 5."). Flagged only when the whole line is the fragment; the same shape embedded in a sentence is a literal count and stays clean. Soft.
- Headline slogan cadence: the "Short statement. Short statement." two-beat rhythm repeated across a document's headlines ("One command. A real URL." / "Reviewers click. The agent fixes."). One is voice; three or more is template grammar. Frequency-gated, soft.
- Headline container agency: a calendar or program container delivers an artifact or outcome ("Week 1 ends with a calibrated eval"; "Demo day closes the cohort"). Name the completion criterion, mechanism, result, or decision instead. Literal boundaries such as "Week 1 ends on Friday" stay clean. Soft.
- Tool anthropomorphism: an inanimate tool-noun given human agency. Reflexive self-agency fires anywhere ("The suite defends itself." / "The rules update themselves." / "It graded its own reflection."); strongly-volitional verbs (decides, hunts, wants, knows, believes, cares, refuses, judges, thinks) fire only on a standalone headline line ("The bench decides which model does which job." / "It hunts instances, not word lists."). Ordinary technical register stays clean ("the parser reads the file", "the model learns the distribution", "the test cleans up after itself"). Soft.
- Punctuation performance: em-dash clusters, exclamation overuse, decorative bolding, title case inside body prose.
- Warmth stripped into telegraphese: an email or narrative that loses natural softeners and sounds colder than the source.
## Emit
Return JSON findings only:
```json
{"span":"Not the tooling. The conversations.","rule":"anti_slop_register","pack":"pack-voice","severity":"hard","note":"Bare fragment contrast is the skill's own tell; rewrite as varied prose."}
```
Mark `hard` when the cadence is itself a recognizable formula. Mark `soft` when it may be genre-appropriate but needs review.
## Examples
- "Not the strategy. The execution." -> report `anti_slop_register`.
- "We tested the API, fixed the retry path, and shipped." -> no finding.
- "The result: alignment. The cost: trust." -> report colon reveal / fragment cadence.
- "Thanks for sending this over. Could you send the figures by Friday?" -> no finding; natural warmth.