Skip to content

Commit 557aea3

Browse files
research(english-gonol): correct primitive-layer contract and suffixiation
Return final-y behavior to the y character gonol definition-space: - add character definition layer (vowel/consonant/digit/operator/punctuation, letter pronunciation, orthographic behavior) with multi-definition origins - digits close number-name definitions from characters (3 -> three -> t,h,r,e,e) plus numerology definitions - add suffixiate(): affixiation between already-closed base and suffix gonols; resolves final-y interaction from the y character definition-space and the suffix's suffix-specific behavior without reopening either gonol - repair gonol contract/docs/tests that carried final-y behavior on suffix gonols (try+ing preserves y, try+ed resolves y-to-i) - frozen primitive-layer receipt experiments/primitive-layer-v0.json - full-corpus run and 1-7 sweep control remain byte-identical
1 parent 0e8384b commit 557aea3

12 files changed

Lines changed: 1225 additions & 56 deletions

research/english-gonol/README.md

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,25 @@ research/english-gonol/
7070
├── README.md
7171
├── english_gonol/
7272
│ ├── gonol.py # unified candidate constructor (identity edcm.gonol)
73-
│ ├── language/ # English lexical evidence over UCNS carrier
74-
│ └── orthogonal_carrier_sweep.py # 1-7 carrier experimental sweep
73+
│ ├── definition_affixiation_run.py # full-corpus definition re-affixiation
74+
│ ├── orthogonal_carrier_sweep.py # 1-7 carrier experimental sweep (control)
75+
│ ├── primitive_layer_run.py # character definitions + corrected suffixiation
76+
│ └── language/
77+
│ ├── character_definitions.py # primitive character definition-space
78+
│ ├── suffixiation.py # closed-gonol affixiation for suffixes
79+
│ └── data/ # affix + character definition tables
7580
├── tools/build_oewn2025_embeddings.py
7681
├── tests/
7782
├── docs/
7883
│ ├── GONOL_LANGUAGE_BOUNDARY.md
79-
│ └── orthogonal-carrier-sweep-v0.md
84+
│ ├── orthogonal-carrier-sweep-v0.md
85+
│ ├── oewn-orthogonal-affixiation-v0.md
86+
│ └── primitive-layer-correction-v0.md
8087
└── experiments/
8188
├── lexical/ # frozen lexical-floor run artifacts
82-
└── orthogonal-carrier-sweep-v0.json
89+
├── orthogonal-carrier-sweep-v0.json
90+
├── primitive-layer-v0.json
91+
└── oewn-affixiation-v0/ # full-corpus manifest (records local-only)
8392
```
8493

8594
## Entry points
@@ -132,6 +141,16 @@ See [`docs/oewn-orthogonal-affixiation-v0.md`](docs/oewn-orthogonal-affixiation-
132141
The large `records.jsonl` is local persisted state and is not committed; the
133142
committed `manifest.json` binds it via `records_sha256`.
134143

144+
The primitive-layer correction and extension (character definitions, digit
145+
number names, corrected suffixiation):
146+
147+
```bash
148+
python -m english_gonol.primitive_layer_run \
149+
--out experiments/primitive-layer-v0.json
150+
```
151+
152+
See [`docs/primitive-layer-correction-v0.md`](docs/primitive-layer-correction-v0.md).
153+
135154
## Research status
136155

137156
Standing: **stack-local research, not canon**. The construction is an

research/english-gonol/docs/GONOL_LANGUAGE_BOUNDARY.md

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ UCNS owns any exact geometric realization of that operation. The native Möbius/
6767

6868
English Gonol Construction applies affixiation to text-domain gonols. Linguistic prefixes and suffixes are one instance of affixiation; they do not define affixiation.
6969

70-
Suffix-coupling options that affect a suffix relation are carried by the relevant closed suffix gonol. For example, a closed `ing` suffix gonol may carry `suffix-coupling.final-y-after-consonant = preserve-y`; the suffix-coupling construction preserves that option through the suffix participant instead of storing an `ing` exception in a global morphology law or reopening the suffix.
70+
Suffix-coupling options that are suffix-specific are carried by the relevant closed suffix gonol. For example, a closed `ing` suffix gonol may carry `suffix-coupling.vowel-initial = true`. Character-specific behavior is not placed on suffix gonols: final-y rendering belongs to the `y` character gonol's definition-space (`orthographic-behavior:final-y-after-consonant`). `suffixiate()` resolves the interaction between the closed base's final character definitions and the closed suffix's suffix-specific behavior without reopening either gonol.
7171

7272
The complete English root, stem, affix, irregular-transformation, and family law remains unresolved unless source-backed English Gonol evidence establishes it. English Gonol Construction must not invent decomposition to complete a pipeline.
7373

@@ -123,13 +123,21 @@ Copy-pasteable unified candidate:
123123

124124
```python
125125
from english_gonol.gonol import construct_gonol, replay_gonol
126+
from english_gonol.language.suffixiation import suffixiate
126127

127128
word = construct_gonol(scale="word", source="try", source_id="example:try")
129+
y_character = word.gonol.source_characters[-1]
130+
construct_gonol(
131+
scale="definition",
132+
participants=(y_character,),
133+
relation="orthographic-behavior:final-y-after-consonant",
134+
source_id="example:y-orthographic-behavior",
135+
)
128136
ing = construct_gonol(
129137
scale="suffix",
130138
source="ing",
131139
source_id="example:ing",
132-
carried_options=(("suffix-coupling.final-y-after-consonant", "preserve-y"),),
140+
carried_options=(("suffix-coupling.vowel-initial", "true"),),
133141
)
134142
definition = construct_gonol(
135143
scale="definition",
@@ -144,13 +152,11 @@ recursive = construct_gonol(
144152
participants=(word.gonol, definition.gonol),
145153
source_id="example:relation#1",
146154
)
147-
suffix_coupling = construct_gonol(
148-
scale="suffix-coupling",
149-
participants=(word.gonol, ing.gonol),
150-
source_id="example:trying#1",
151-
)
155+
suffix_coupling = suffixiate(word.gonol, ing.gonol, source_id="example:trying#1")
152156
assert recursive.receipt_digest == replay_gonol(receipt=recursive).receipt_digest
153-
assert suffix_coupling.receipt_digest == replay_gonol(receipt=suffix_coupling).receipt_digest
157+
assert suffix_coupling.coupling_receipt.receipt_digest == replay_gonol(
158+
receipt=suffix_coupling.coupling_receipt
159+
).receipt_digest
154160
```
155161

156162
If an explicit `geometry_authority` supplies `PUBLIC_GONOL_157` with a digest matching the pinned Public Gonol identity, `english_gonol.gonol` (constructor identity retained as `edcm.gonol`) observes source-unit positions. If no authority is supplied, construction records geometry as `hmmm` and still closes the candidate. It does not probe ambient imports and does not mutate `sys.path`.
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
# Primitive-layer correction and extension — v0
2+
3+
Status: `UNRESOLVED` experimental correction. Standing: implemented
4+
experimental candidate inside English Gonol Construction only. Nothing here is
5+
UCNS geometry canon, an English lexical truth claim, or a cultural/linguistic
6+
canon selection.
7+
8+
## What changed and why
9+
10+
The previous contract carried character-specific final-y behavior on closed
11+
suffix gonols (`suffix-coupling.final-y-after-consonant = preserve-y` on
12+
`ing`). That misplaced a character property on a suffix. This correction
13+
returns the behavior to the primitive layer and extends construction upward
14+
from characters without rebuilding the existing full-corpus machinery.
15+
16+
## Primitive layer
17+
18+
### Character gonols
19+
20+
Characters remain the most primitive admitted gonols. Each admissible character
21+
closes as a `scale="character"` gonol with an exact source identity
22+
(`char:<char>`); each occurrence inside a word remains individually addressable
23+
through the word gonol's recoverable `source_characters`, preserving identity,
24+
order, multiplicity, relation, and provenance.
25+
26+
Every character gonol may have multiple definition gonols sharing that
27+
character gonol as origin. Character definitions are not mutually exclusive:
28+
29+
- `-` carries both `char-class:operator` and `char-class:punctuation`.
30+
- `y` carries both `char-class:vowel` and `char-class:consonant`.
31+
- Letters carry `letter-pronunciation:<name>` definitions.
32+
- `y` carries `orthographic-behavior:final-y-after-consonant` in its own
33+
definition-space.
34+
35+
### Digits
36+
37+
Each digit is its own primitive character gonol. Each digit receives:
38+
39+
- a `digit-number-name` definition composed from the number name's own word
40+
gonol, constructed normally from characters
41+
(`3 -> three -> (t,h,r,e,e)`);
42+
- additional `numerology:<meaning>` definition gonols (candidate evidence,
43+
not canon).
44+
45+
### Letters
46+
47+
Letters carry their letter identity, pronunciation definition(s), and any
48+
source-backed character-specific orthographic behavior. `y` carries its
49+
final-y behavior in the `y` character gonol's definition-space; it is not
50+
recreated as a global morphology rule during suffixiation.
51+
52+
## Suffixiation
53+
54+
Suffixes close first (`scale="suffix"`) with their own identity, definitions,
55+
behavior, and provenance. Suffixiation is then affixiation between
56+
already-closed gonols:
57+
58+
```text
59+
G(base); affix; G(suffix)
60+
```
61+
62+
- The base contributes its complete closed construction, including its
63+
constituent characters' definitions and behavior.
64+
- The suffix contributes its own closed construction and suffix-specific
65+
behavior (for example `suffix-coupling.vowel-initial = true`).
66+
- Neither gonol is reopened. `suffixiate()` reads only recoverable internal
67+
construction, resolves the interaction, and closes a normal
68+
`scale="suffix-coupling"` gonol over the two atomic participants.
69+
70+
Final-y resolution is therefore produced by the `y` character gonol's own
71+
definition-space together with the suffix's suffix-specific behavior:
72+
73+
- `try + ing` (vowel-initial, `ing`) -> `preserve-y`
74+
- `try + ed` (vowel-initial, non-`ing`) -> `y-to-i`
75+
- `play + ing` (final `y` after a vowel) -> no final-y rule applies
76+
77+
## Words and definitions
78+
79+
Character gonols affixiate into word gonols; each word gonol is the common
80+
origin of its distinct definition gonols. Definitions are ordinary
81+
`scale="definition"` closures over the word's already-closed constituent
82+
gonols — not pairwise Euclidean orthogonals. Every word occurrence inside
83+
every definition remains attached as its complete word gonol, with its own
84+
definitions available recursively.
85+
86+
## Frozen run
87+
88+
- Module: `english_gonol.primitive_layer_run`
89+
- Receipt: `experiments/primitive-layer-v0.json`
90+
- character layer: 55 entries, 179 definition receipts,
91+
`receipt_digest = 8f0931a15865600fba6a11a995f6331d1081317c2bb8c86593fae83d57d93933`
92+
- `primitive:trying` -> `y_realization = preserve-y`
93+
- `primitive:tried` -> `y_realization = y-to-i`
94+
- Replay:
95+
`python -m english_gonol.primitive_layer_run --out experiments/primitive-layer-v0.json`
96+
97+
## Preserved, not rebuilt
98+
99+
- The full-corpus orthogonal definition affixiation run
100+
(`experiments/oewn-affixiation-v0`) replays byte-for-byte unchanged.
101+
- The 1-7 hash-carrier sweep control is unchanged (same report digest).
102+
- Constructor closure logic is unchanged; only the corrected contract text and
103+
examples moved character-specific behavior off suffix gonols.
104+
- Surface-rendering evidence (`rendering.py`) is unchanged; it remains
105+
evidence, not construction authority, and is not consulted by suffixiation.
106+
107+
## hmmm
108+
109+
- "y would like its belongings returned by ing" — returned: final-y behavior
110+
now lives in the `y` character gonol definition-space.
111+
- Exact UCNS affixiation geometry remains unresolved; `suffixiate()` closes
112+
the coupling gonol and records resolution without inventing geometry.
113+
- Pronunciation is currently a letter-name definition only; full
114+
source-backed pronunciation evidence remains unresolved.
115+
- Numerology definitions are declared candidate evidence; their source
116+
standing is not canon.

research/english-gonol/english_gonol/gonol.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,26 @@
1010
``character -> word -> definition -> recursive`` ladder.
1111
1212
from english_gonol.gonol import construct_gonol, replay_gonol
13+
from english_gonol.language.suffixiation import suffixiate
1314
1415
word = construct_gonol(scale="word", source="try", source_id="example:try")
16+
y_character = word.gonol.source_characters[-1] # already-closed "y" gonol
17+
construct_gonol(
18+
scale="definition",
19+
participants=(y_character,),
20+
relation="orthographic-behavior:final-y-after-consonant",
21+
source_id="example:y-orthographic-behavior",
22+
)
1523
ing = construct_gonol(
1624
scale="suffix",
1725
source="ing",
1826
source_id="example:ing",
19-
carried_options=(("suffix-coupling.final-y-after-consonant", "preserve-y"),),
27+
carried_options=(("suffix-coupling.vowel-initial", "true"),),
2028
)
21-
rel = construct_gonol(
22-
scale="suffix-coupling",
23-
participants=(word.gonol, ing.gonol),
24-
source_id="example:trying#1",
25-
)
26-
assert rel.receipt_digest == replay_gonol(receipt=rel).receipt_digest
29+
rel = suffixiate(word.gonol, ing.gonol, source_id="example:trying#1")
30+
assert rel.coupling_receipt.receipt_digest == replay_gonol(
31+
receipt=rel.coupling_receipt
32+
).receipt_digest
2733
2834
Frozen choices for ``edcm.gonol/v1``:
2935
@@ -35,8 +41,10 @@
3541
folding, trimming, deduplication, or token substitution;
3642
- relation identity is exact caller-supplied text where the option set requires
3743
it;
38-
- suffix-coupling exceptions are carried by the closed suffix gonol, not by a
39-
global morphology law or by reopening the suffix during coupling;
44+
- suffix-coupling options that are suffix-specific (for example vowel-initial)
45+
are carried by the closed suffix gonol; character-specific behavior such as
46+
final-y rendering belongs to the ``y`` character gonol's definition-space and
47+
is resolved during suffixiation without reopening either gonol;
4048
- UCNS Public Gonol geometry is consumed only from an explicit supplied
4149
authority, and absence remains ``hmmm`` rather than a base-package failure;
4250
- no UCNS function operation or Mobius coupling law is invented.
@@ -76,11 +84,11 @@
7684
# class: construction
7785
# since: 2026-08-22
7886
#
79-
# id: suffix_exception_carried_by_suffix_gonol
80-
# given: suffix coupling has a final-y exception such as ing preserving y after a consonant
81-
# then: the exception is stored on the closed suffix gonol participant and replayed through participant provenance rather than global morphology law
87+
# id: character_behavior_resolved_during_suffixiation
88+
# given: a suffix coupling touches a final y after a consonant
89+
# then: the y character gonol's own orthographic-behavior definitions supply the y rendering, the closed suffix supplies only suffix-specific behavior, and suffixiation resolves their interaction without reopening either gonol
8290
# class: construction
83-
# since: 2026-08-22
91+
# since: 2026-09-12
8492
#
8593
# id: construction_survives_absent_ucns_geometry
8694
# given: UCNS Public Gonol geometry authority is not explicitly supplied

0 commit comments

Comments
 (0)