Files
ucwm/gates/simple_rules.md

224 lines
7.9 KiB
Markdown
Raw Permalink Normal View History

# Simple Rule-Based Gate Definitions
This file specifies the rule logic for the initial rule-based gate implementations. These are starter gates — high-recall, zero training cost, acceptable false positive rate.
Each gate spec below is language-agnostic. Any implementation must produce identical `GateSignal` outputs for the given inputs.
---
## Gate: `is_math`
**Detects:** numeric computation, arithmetic, algebra, equations.
**Rule logic:**
1. Activate if input contains any digit sequence (regex: `\d+`)
2. Activate if input contains math keywords: `how many`, `total`, `sum`, `difference`, `product`, `divided by`, `minus`, `plus`, `equals`, `more than`, `less than`, `percent`, `ratio`
3. Activate if input contains operator symbols: `+`, `-`, `*`, `/`, `=`, `%`, `^`
**Confidence assignment:**
- Multiple signals present → 0.95
- One signal, multiple instances → 0.85
- One signal, one instance → 0.70
---
## Gate: `has_entity_reference`
**Detects:** named or implied entities (people, organizations, places, objects, artifacts).
**Rule logic:**
1. Activate if any token starts with a capital letter and is not the first word of the sentence
2. Activate if input contains proper-noun indicators: `Mr.`, `Ms.`, `Dr.`, `the`, followed by capitalized noun
3. Activate if input contains pronouns: `he`, `she`, `they`, `it`, `him`, `her`, `them`
4. Activate if input contains possessive markers: `Alice's`, `Bob's`, `its`
**Confidence assignment:**
- Capital-letter token found → 0.90
- Pronoun only → 0.75
- Neither, but possessive marker found → 0.80
---
## Gate: `has_quantity`
**Detects:** counts, amounts, measures, percentages, ordinals.
**Rule logic:**
1. Activate if input contains a digit sequence
2. Activate if input contains number words: `one`, `two`, `three`, ... `ten`, `hundred`, `thousand`, `million`
3. Activate if input contains measure words: `apples`, `dollars`, `meters`, `kilograms`, `minutes`, `hours`, `days`
4. Activate if input contains ordinals: `first`, `second`, `third`, `last`
**Confidence assignment:**
- Digit + measure word → 0.99
- Digit only → 0.85
- Number word only → 0.80
---
## Gate: `has_ownership_transfer`
**Detects:** give, sell, take, receive, lose, transfer of possession.
**Rule logic:**
1. Activate if input contains transfer verbs: `give`, `gave`, `gives`, `take`, `took`, `takes`, `sell`, `sold`, `sells`, `receive`, `received`, `receives`, `lose`, `lost`, `loses`, `transfer`, `transferred`, `hand`, `handed`, `pass`, `passed`
2. Activate if input contains indirect-object patterns: `gave [entity] [object]`, `[entity] sold [object] to [entity]`
**Confidence assignment:**
- Transfer verb present → 0.92
- Indirect-object pattern confirmed → 0.97
---
## Gate: `has_temporal_relation`
**Detects:** before/after/during/recurring/sequential ordering.
**Rule logic:**
1. Activate if input contains temporal connectives: `before`, `after`, `during`, `when`, `then`, `next`, `later`, `previously`, `first`, `second`, `finally`, `since`, `until`, `while`
2. Activate if input contains time expressions: `yesterday`, `tomorrow`, `at noon`, `on Monday`, day/month/year patterns
3. Activate if input contains sequence markers: `step 1`, `then`, `afterward`, `subsequently`
**Confidence assignment:**
- Temporal connective + time expression → 0.97
- Temporal connective only → 0.82
- Sequence marker only → 0.75
---
## Gate: `has_logical_negation`
**Detects:** not, never, unless, except, no, without, deny, false.
**Rule logic:**
1. Activate if input contains negation words: `not`, `no`, `never`, `none`, `neither`, `nor`, `without`, `unless`, `except`, `deny`, `denied`, `false`, `incorrect`, `wrong`
2. Activate if input contains negative contractions: `isn't`, `aren't`, `wasn't`, `weren't`, `doesn't`, `don't`, `didn't`, `can't`, `won't`, `wouldn't`, `couldn't`, `shouldn't`
**Confidence assignment:**
- Negation word found → 0.92
---
## Gate: `has_causal_relation`
**Detects:** cause, effect, enable, block, because, therefore, so.
**Rule logic:**
1. Activate if input contains causal connectives: `because`, `therefore`, `so`, `thus`, `hence`, `consequently`, `as a result`, `due to`, `caused by`, `leads to`, `results in`, `enables`, `prevents`, `blocks`, `allows`
**Confidence assignment:**
- Causal connective found → 0.90
---
## Gate: `has_coreference`
**Detects:** pronouns and aliases that refer to previously mentioned entities.
**Rule logic:**
1. Activate if input contains personal pronouns: `he`, `she`, `they`, `it`, `him`, `her`, `them`, `his`, `hers`, `their`, `its`
2. Activate if input contains demonstrative references: `this`, `that`, `these`, `those` followed by a noun that was mentioned earlier
3. Activate if multiple entities are named AND pronouns are present
**Confidence assignment:**
- Pronoun present + multiple named entities → 0.90
- Pronoun only, single entity → 0.70
---
## Gate: `has_spatial_relation`
**Detects:** location, containment, direction, proximity.
**Rule logic:**
1. Activate if input contains spatial prepositions: `in`, `at`, `on`, `above`, `below`, `inside`, `outside`, `near`, `far`, `left`, `right`, `north`, `south`, `east`, `west`, `between`, `next to`, `adjacent to`
2. Activate if input contains place names (capitalized geographics) or location indicators: `street`, `city`, `country`, `room`, `building`, `floor`
**Confidence assignment:**
- Spatial preposition + place indicator → 0.92
- Spatial preposition only → 0.72
---
## Gate: `has_planning`
**Detects:** goals, steps, prerequisites, sequencing of actions.
**Rule logic:**
1. Activate if input contains planning vocabulary: `plan`, `goal`, `step`, `procedure`, `prerequisite`, `depends on`, `requires`, `in order to`, `so that`, `to achieve`
2. Activate if input contains numbered or ordered list markers
**Confidence assignment:**
- Planning vocabulary present → 0.88
---
## Gate: `has_social_intent`
**Detects:** beliefs, desires, obligations, deception, trust, social roles.
**Rule logic:**
1. Activate if input contains mental state verbs: `believe`, `believes`, `think`, `thinks`, `want`, `wants`, `know`, `knows`, `intend`, `intends`, `expect`, `expects`, `hope`, `hopes`
2. Activate if input contains obligation/permission words: `must`, `should`, `ought`, `may`, `allowed`, `permitted`, `required`, `obligated`
3. Activate if input contains social verbs: `promise`, `lie`, `deceive`, `trust`, `cooperate`, `compete`, `agree`, `refuse`
**Confidence assignment:**
- Mental state verb present → 0.85
- Obligation/permission word → 0.80
- Social verb → 0.90
---
## Gate: `requires_external_knowledge`
**Detects:** queries that require facts not present in the input text.
**Rule logic:**
1. Activate if input contains knowledge-seeking patterns: `who is`, `what is`, `where is`, `when did`, `how does`, `why does` combined with named entities
2. Activate if input references historical events, scientific facts, or world geography without providing context
**Note:** This gate has higher false-positive tolerance than most. When uncertain, fire.
**Confidence assignment:**
- Knowledge-seeking pattern with named entity → 0.85
- Named entity without provided context → 0.70
---
## Gate: `requires_synthesis_only`
**Detects:** inputs that are complete, self-contained, and require no structural decomposition.
**Rule logic:**
1. Activate only if all of the following hold:
- No other gates fire with confidence > 0.70
- Input is a direct factual statement with no quantities, entities, or relations to track
- Input length < 15 tokens
**Note:** This gate is a low-priority catch-all. It should rarely fire when other gates fire.
**Confidence assignment:**
- All conditions met → 0.80
---
## Implementation notes
- All keyword lists should be treated as seed lists. Implementors should extend them for their target domain.
- Case-insensitive matching is preferred.
- Lemmatization or stemming is recommended for verb forms.
- Do not hardcode language; design for swappable tokenizers and keyword tables.