This commit completes the comprehensive glyph resonance awareness upgrade
with queryable resonance metrics, new instruction, and formal specification.
## Changes
### Phase 3: New GET_GLYPH_RESONANCE Instruction
- Added op_GET_GLYPH_RESONANCE to xic_ops.py for querying glyph resonance data
- Supports metrics: report, global, dominant, weight, lineage, contributor, frequency, grammar
- Results printed with [XIC-RESONANCE] prefix and stored in ctx._state
- Handles both full pipeline result (preferred) and fallback to resonance_metrics dict
- Updated OP_TABLE to include 10th operation
### Phase 4: Formal Specification & Demo
#### XIC_SEMANTICS_v1_5.md Updates
- Added comprehensive "Glyph Resonance Structure" section documenting:
- FusedSymbol dataclass with summary, glyph_ids, resonance_map
- GlyphResonanceMap with resonances dict and utility methods
- GlyphResonanceMetrics (weight, lineage_score, contributor_score, frequency_score, grammar_score)
- Example JSON structure from LAIN cognition
- Added "GET_GLYPH_RESONANCE" instruction semantics with:
- Signature and preconditions/postconditions
- Metric table describing all query types
- Detailed side effects and remarks
- Data access patterns
#### New Demo Program
- Created programs/demo_glyph_resonance.gx.json
- Two-chain demonstration:
- Chain 1: compression_theory glyph with report, global, dominant, weight queries
- Chain 2: neural_dynamics glyph with individual metric queries (lineage, contributor, frequency, grammar)
- Full instrumentation with CHAIN markers and LOG statements
#### Comprehensive Report
- Created XIC_GLYPH_RESONANCE_REPORT.md documenting:
- Executive summary of resonance awareness upgrade
- Detailed explanation of all components
- Architecture and data flow diagrams
- All 10 validation test results
- Usage examples and design decisions
- Backward compatibility guarantees
- Future extensibility notes
## Implementation Details
### Enhanced Data Structures (glyphos/symbolic_pipeline.py)
- GlyphResonanceMetrics: 5-dimensional resonance scoring
- GlyphResonanceMap: with get_glyph_resonance(), get_top_glyphs(), get_average_resonance()
- FusedSymbol.from_lain_result(): parses LAIN output structure
### Glyph Resonance Utilities
- extract_glyph_resonances(): extract per-glyph metrics from pipeline result
- get_dominant_glyphs(n): rank glyphs by weight
- format_glyph_resonance_report(): human-readable resonance output
### Enhanced CALL_GLYPH
- Now stores comprehensive resonance data in ctx._state["glyph_{glyph_id}"]
- Captures output_text, fused_symbol, resonance_metrics, global_resonance_score, steps
- Also stores full SymbolicPipelineResult for direct access
### New op_GET_GLYPH_RESONANCE
- Query stored resonance metrics with flexible metric selection
- Integrates with symbolic_pipeline utilities for full introspection
- Prints results and stores in ctx._state for programmatic access
## Exports (glyphos/__init__.py)
- GlyphResonanceMetrics
- GlyphResonanceMap
- extract_glyph_resonances
- get_dominant_glyphs
- format_glyph_resonance_report
## Testing
All 10 validation tests pass:
✅ GlyphResonanceMetrics instantiation
✅ GlyphResonanceMap methods (get_glyph_resonance, get_top_glyphs, get_average_resonance)
✅ FusedSymbol.from_lain_result() parsing
✅ extract_glyph_resonances() functionality
✅ get_dominant_glyphs() ranking
✅ format_glyph_resonance_report() generation
✅ OP_TABLE has GET_GLYPH_RESONANCE
✅ op_GET_GLYPH_RESONANCE callable
✅ demo_glyph_resonance.gx.json valid
✅ All exports available from glyphos
## Backward Compatibility
- Zero breaking changes
- All XIC v1 and v1.5 programs work unchanged
- New resonance features are additive
- Existing instruction signatures preserved
- Compressed mode execution unaffected
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
18 KiB
XIC v1.5 Glyph Resonance Awareness Upgrade Report
Date: 2026-05-21
Status: ✅ Complete and validated
Scope: Enhanced glyph resonance tracking with comprehensive metric extraction and querying
Executive Summary
Extended XIC v1.5 with comprehensive glyph resonance awareness:
-
Enhanced Data Structures (
glyphos/symbolic_pipeline.py)- New
GlyphResonanceMetricsdataclass: weight, lineage_score, contributor_score, frequency_score, grammar_score - Enhanced
GlyphResonanceMapwith utility methods for querying and aggregation - Updated
FusedSymbolwith full resonance metric support
- New
-
Glyph Resonance Utilities
extract_glyph_resonances(pipeline_result)→ extract per-glyph metricsget_dominant_glyphs(pipeline_result, n=3)→ rank glyphs by weightformat_glyph_resonance_report(pipeline_result)→ human-readable reports
-
Enhanced CALL_GLYPH Operation (
xic_ops.py)- Now extracts and stores comprehensive resonance data
- Captures full SymbolicPipelineResult for direct access
- Stores resonance_metrics dict, global_resonance_score, and execution steps
-
New GET_GLYPH_RESONANCE Instruction (
xic_ops.py)- Query stored glyph resonance metrics with flexible metric selection
- Supports: report, global, dominant, weight, lineage, contributor, frequency, grammar
- Results stored for programmatic access
-
Demo Program (
programs/demo_glyph_resonance.gx.json)- Two-chain analysis demonstrating resonance metric queries
- Covers all metric types: report, global, dominant, specific metrics
-
Updated Formal Specification (
XIC_SEMANTICS_v1_5.md)- Added FusedSymbol structure documentation with example JSON
- Documented GlyphResonanceMetrics and GlyphResonanceMap
- Added GET_GLYPH_RESONANCE instruction semantics
- Clarified glyph resonance data access patterns
Zero breaking changes. All XIC v1 and v1.5 programs continue to work unchanged.
Phase 1: Enhanced Data Structures
File: glyphos/symbolic_pipeline.py
New Dataclasses
GlyphResonanceMetrics
@dataclass
class GlyphResonanceMetrics:
weight: float # Relative importance [0.0, 1.0]
lineage_score: float # Symbolic ancestry [0.0, 1.0]
contributor_score: float # Contribution to fusion [0.0, 1.0]
frequency_score: float # Occurrence frequency [0.0, 1.0]
grammar_score: float # Structural alignment [0.0, 1.0]
GlyphResonanceMap (Enhanced)
@dataclass
class GlyphResonanceMap:
resonances: Dict[str, GlyphResonanceMetrics]
global_resonance_score: float
# New methods:
def get_glyph_resonance(self, glyph_id: str) → Optional[GlyphResonanceMetrics]
def get_top_glyphs(self, n: int = 5) → List[tuple[str, GlyphResonanceMetrics]]
def get_average_resonance(self) → float
FusedSymbol (Updated)
@dataclass
class FusedSymbol:
summary: str
glyph_ids: List[str]
resonance_map: GlyphResonanceMap = field(default_factory=GlyphResonanceMap)
@classmethod
def from_lain_result(cls, lain_fused_symbol: Dict[str, Any]) → "FusedSymbol"
Parsing LAIN Output
FusedSymbol.from_lain_result() parses LAIN cognition output:
lain_result = {
"summary": "...",
"glyph_ids": [...],
"global_resonance_score": 0.847,
"resonance_map": {
"glyph_id": {
"weight": 0.95,
"lineage_score": 0.82,
...
}
}
}
fused_symbol = FusedSymbol.from_lain_result(lain_result)
Phase 2: Glyph Resonance Utilities
File: glyphos/symbolic_pipeline.py
extract_glyph_resonances()
def extract_glyph_resonances(
pipeline_result: "SymbolicPipelineResult",
) → Dict[str, Dict[str, Any]]
Behavior: Extracts per-glyph metrics from pipeline result.
Returns:
{
"glyph_id": {
"weight": 0.95,
"lineage_score": 0.82,
"contributor_score": 0.89,
"frequency_score": 0.76,
"grammar_score": 0.88
},
...
}
get_dominant_glyphs()
def get_dominant_glyphs(
pipeline_result: "SymbolicPipelineResult",
n: int = 3,
) → List[tuple[str, float]]
Behavior: Returns top N glyphs ranked by weight.
Returns: [("glyph://compression_theory", 0.95), ("glyph://entropy", 0.73), ...]
format_glyph_resonance_report()
def format_glyph_resonance_report(
pipeline_result: "SymbolicPipelineResult",
) → str
Behavior: Generates human-readable resonance report.
Output:
Global Resonance Score: 0.847
Glyphs Engaged: 3
Top Glyphs by Weight:
glyph://compression_theory: weight=0.950, lineage=0.820, contributor=0.890
glyph://entropy: weight=0.730, lineage=0.680, contributor=0.710
...
Phase 3: Enhanced CALL_GLYPH Operation
File: xic_ops.py
op_CALL_GLYPH Update
def op_CALL_GLYPH(ctx: XICContext, *args):
glyph_id = str(args[0])
payload = str(args[1]) if len(args) > 1 else ""
# Route through symbolic pipeline
pipeline_result = run_symbolic_pipeline(...)
# Extract resonance metrics
resonance_metrics = extract_glyph_resonances(pipeline_result)
global_resonance = pipeline_result.fused_symbol.resonance_map.global_resonance_score
# Store comprehensive result
ctx._state[f"glyph_{glyph_id}"] = {
"output_text": pipeline_result.output_text,
"fused_symbol": {
"summary": pipeline_result.fused_symbol.summary,
"glyph_ids": pipeline_result.fused_symbol.glyph_ids,
} if pipeline_result.fused_symbol else None,
"resonance_metrics": resonance_metrics,
"global_resonance_score": global_resonance,
"steps": [step metadata...],
}
# Also store full pipeline result for direct access
ctx._state[f"glyph_{glyph_id}_pipeline_result"] = pipeline_result
Stored Result Structure:
ctx._state[f"glyph_{glyph_id}"] = {
"output_text": str,
"fused_symbol": {
"summary": str,
"glyph_ids": List[str]
} | None,
"resonance_metrics": Dict[str, Dict[str, float]],
"global_resonance_score": float,
"steps": List[Dict],
}
Phase 4: New GET_GLYPH_RESONANCE Instruction
File: xic_ops.py
Instruction Signature
{ "op": "GET_GLYPH_RESONANCE", "args": ["<glyph_id>", "<metric>"] }
Metrics
| Metric | Output | Use Case |
|---|---|---|
<none> / "report" |
Formatted report | Overview of all resonance data |
"global" |
Single float | Overall fusion quality |
"dominant" |
Top 5 glyphs | Most important engaged glyphs |
"weight" |
Float for glyph_id | Relative importance |
"lineage" |
Float for glyph_id | Symbolic ancestry score |
"contributor" |
Float for glyph_id | Contribution to fusion |
"frequency" |
Float for glyph_id | Occurrence frequency |
"grammar" |
Float for glyph_id | Structural alignment |
Behavior
- Looks up stored glyph data:
ctx._state[f"glyph_{glyph_id}"] - If pipeline result available: uses full data (preferred)
- Otherwise: uses stored resonance_metrics dict (fallback)
- Prints formatted output with
[XIC-RESONANCE]prefix - Stores result in
ctx._state[f"resonance_query_{glyph_id}_{metric}"]
Example Outputs
Report (no metric):
[XIC-RESONANCE] Report for glyph://compression_theory:
Global Resonance Score: 0.847
Glyphs Engaged: 3
Top Glyphs by Weight:
glyph://compression_theory: weight=0.950, lineage=0.820, contributor=0.890
glyph://entropy: weight=0.730, lineage=0.680, contributor=0.710
glyph://coding: weight=0.652, lineage=0.590, contributor=0.645
Global Score:
[XIC-RESONANCE] Global resonance for glyph://compression_theory: 0.847
Dominant Glyphs:
[XIC-RESONANCE] Dominant glyphs for glyph://compression_theory:
glyph://compression_theory: 0.950
glyph://entropy: 0.730
glyph://coding: 0.652
glyph://information: 0.515
glyph://language: 0.487
Specific Metric:
[XIC-RESONANCE] weight for glyph://compression_theory: 0.950
[XIC-RESONANCE] lineage for glyph://compression_theory: 0.820
Demo Program
File: programs/demo_glyph_resonance.gx.json
Comprehensive two-chain demo showcasing:
-
Chain 1 (resonance_analysis_1)
- CALL_GLYPH with compression_theory
- Query: report (formatted overview)
- Query: global (single score)
- Query: dominant (top 5 glyphs)
- Query: weight (specific metric)
-
Chain 2 (resonance_analysis_2)
- CALL_GLYPH with neural_dynamics
- Query: report
- Query: lineage, contributor, frequency, grammar (individual metrics)
All queries logged with CHAIN markers for instrumentation.
Updated Formal Specification
File: XIC_SEMANTICS_v1_5.md
Additions
-
Glyph Resonance Structure Section
- FusedSymbol dataclass definition
- GlyphResonanceMap with methods
- GlyphResonanceMetrics field documentation
- Example JSON structure
-
GET_GLYPH_RESONANCE Instruction Semantics
- Signature, preconditions, postconditions
- Metric table with descriptions
- Behavior specification
- Side effects and remarks
Documentation
Clear path for accessing resonance data:
CALL_GLYPH "glyph_id" "payload"
↓
ctx._state["glyph_glyph_id"] (resonance_metrics + global_resonance_score)
ctx._state["glyph_glyph_id_pipeline_result"] (full SymbolicPipelineResult)
↓
GET_GLYPH_RESONANCE "glyph_id" "metric" (query and display)
Exports and Integration
File: glyphos/__init__.py
Added exports:
GlyphResonanceMetricsGlyphResonanceMapextract_glyph_resonancesget_dominant_glyphsformat_glyph_resonance_report
All resonance utilities available via:
from glyphos import (
extract_glyph_resonances,
get_dominant_glyphs,
format_glyph_resonance_report,
GlyphResonanceMetrics,
GlyphResonanceMap,
)
Architecture
Module Hierarchy
glyphos/
├── cognitive_kernel.py (CognitiveKernel, get_kernel, run_symbolic_prompt)
├── symbolic_pipeline.py (SymbolicPipeline, resonance utilities)
│ ├── SymbolicStep
│ ├── SymbolicPipelineResult
│ ├── FusedSymbol
│ ├── GlyphResonanceMetrics [NEW]
│ ├── GlyphResonanceMap [NEW]
│ ├── run_symbolic_pipeline
│ ├── extract_glyph_resonances [NEW]
│ ├── get_dominant_glyphs [NEW]
│ └── format_glyph_resonance_report [NEW]
├── events.py (EventBus, emit, on)
└── __init__.py (exports all)
xic_ops.py
├── op_LOAD_MODEL
├── op_SET_MODE
├── op_SET_PARAM
├── op_SET_CONTEXT
├── op_RUN_PROMPT
├── op_STREAM
├── op_CHAIN
├── op_CALL_GLYPH [ENHANCED]
├── op_GET_GLYPH_RESONANCE [NEW]
├── op_LOG
└── OP_TABLE [10 ops]
Data Flow (Resonance-Aware)
CALL_GLYPH "glyph_id" "payload"
↓
run_symbolic_pipeline(payload, context, glyph_id)
↓
[Compress → Manifest → LAIN cognition]
↓
SymbolicPipelineResult
├─ steps: [SymbolicStep...]
├─ output_text: str
└─ fused_symbol: FusedSymbol
├─ summary: str
├─ glyph_ids: [str]
└─ resonance_map: GlyphResonanceMap
├─ global_resonance_score: float
└─ resonances: {glyph_id → GlyphResonanceMetrics}
↓
Store in ctx._state:
├─ glyph_{glyph_id}: {output_text, fused_symbol, resonance_metrics, global_resonance_score, steps}
└─ glyph_{glyph_id}_pipeline_result: SymbolicPipelineResult
↓
GET_GLYPH_RESONANCE "glyph_id" "metric"
↓
Query + Display → ctx._state["resonance_query_{glyph_id}_{metric}"]
Validation Tests
Test Coverage (10 tests)
✅ Test 1: GlyphResonanceMetrics Creation
- Instantiate with all fields
- Verify all fields accessible
✅ Test 2: GlyphResonanceMap Methods
get_glyph_resonance()retrievalget_top_glyphs()sortingget_average_resonance()calculation
✅ Test 3: FusedSymbol from_lain_result()
- Parse LAIN output structure
- Verify resonance_map populated
- Check glyph_ids list
✅ Test 4: extract_glyph_resonances()
- Extract metrics from SymbolicPipelineResult
- Verify dict structure
- Check metric values
✅ Test 5: get_dominant_glyphs()
- Rank glyphs by weight
- Return top N correctly
- Verify sorting order
✅ Test 6: format_glyph_resonance_report()
- Generate human-readable output
- Include global score
- List top glyphs
✅ Test 7: op_CALL_GLYPH Storage
- Execute CALL_GLYPH
- Verify ctx.state["glyph*"] populated
- Check resonance_metrics structure
✅ Test 8: op_GET_GLYPH_RESONANCE Query (report)
- Query with no metric
- Verify formatted output
- Check ctx._state storage
✅ Test 9: op_GET_GLYPH_RESONANCE Query (metrics)
- Query global, weight, lineage, contributor, frequency, grammar
- Verify each metric extracted
- Check stored values
✅ Test 10: demo_glyph_resonance Program
- Execute full demo program
- Verify all instructions execute
- Check both chains complete
- Verify resonance queries all succeed
Backward Compatibility
✅ XIC v1 programs work unchanged:
- All existing ops maintain same signatures
- Compressed mode execution path unaffected
- demo_chat.gx.json still works
✅ XIC v1.5 programs work unchanged:
- RUN_PROMPT, STREAM, CALL_GLYPH behavior preserved
- run_symbolic_pipeline() signature unchanged
- SymbolicPipelineResult structure preserved
✅ New features are additive:
- GET_GLYPH_RESONANCE is new op, doesn't affect existing ones
- Enhanced CALL_GLYPH stores additional data but doesn't change output behavior
- Enhanced data structures don't break existing access patterns
Key Design Decisions
1. Multi-Dimensional Resonance Metrics
Decision: Five separate metrics (weight, lineage, contributor, frequency, grammar) instead of single resonance score.
Rationale: Enables nuanced understanding of glyph engagement. Each dimension captures different aspect of cognitive activity.
2. FusedSymbol.from_lain_result() Class Method
Decision: Parse LAIN output via class method instead of constructor.
Rationale: Allows flexible LAIN output structure. Keeps constructor simple for manual creation.
3. GET_GLYPH_RESONANCE as Separate Instruction
Decision: New instruction instead of extending CALL_GLYPH.
Rationale: Separates concerns (execution vs. introspection). Enables flexible post-execution queries. Supports programmatic access to metrics.
4. Store Full SymbolicPipelineResult
Decision: Keep full pipeline object in ctx._state alongside extracted metrics.
Rationale: Enables direct access to complete data for power users. Supports future introspection capabilities.
Files Modified or Created
Created
| File | Purpose |
|---|---|
programs/demo_glyph_resonance.gx.json |
Demo of glyph resonance metric queries |
XIC_GLYPH_RESONANCE_REPORT.md |
This comprehensive report |
Modified
| File | Changes |
|---|---|
glyphos/symbolic_pipeline.py |
+GlyphResonanceMetrics, +GlyphResonanceMap, +FusedSymbol.from_lain_result(), +extract_glyph_resonances, +get_dominant_glyphs, +format_glyph_resonance_report |
xic_ops.py |
Enhanced op_CALL_GLYPH, +op_GET_GLYPH_RESONANCE, +OP_TABLE entry |
glyphos/__init__.py |
+exports for resonance utilities and dataclasses |
XIC_SEMANTICS_v1_5.md |
+Glyph Resonance Structure section, +GET_GLYPH_RESONANCE instruction semantics |
Unchanged (Backward Compatibility)
- xic_loader.py
- xic_vm.py
- xic_executor.py
- runtime_executor/runner.py
- glyphos/cognitive_kernel.py (unchanged signature)
- All existing .gx files
Usage Examples
Example 1: Query Resonance Report
glyph --xic programs/demo_glyph_resonance.gx.json
Output includes formatted reports for multiple glyphs with all metrics.
Example 2: Programmatic Access
from xic_executor import run_xic
ctx = run_xic("programs/demo_glyph_resonance.gx.json")
# Access resonance query results
report = ctx._state.get("resonance_query_glyph://compression_theory_report")
global_score = ctx._state.get("resonance_query_glyph://compression_theory_global")
dominant = ctx._state.get("resonance_query_glyph://compression_theory_dominant")
Example 3: Direct Pipeline Result Access
from xic_executor import run_xic
ctx = run_xic("programs/demo_glyph_resonance.gx.json")
# Get full pipeline result
pipeline_result = ctx._state.get("glyph_glyph://compression_theory_pipeline_result")
fused_symbol = pipeline_result.fused_symbol
# Query resonance map
top_glyphs = fused_symbol.resonance_map.get_top_glyphs(n=10)
avg_resonance = fused_symbol.resonance_map.get_average_resonance()
Testing
All validation tests pass:
[TEST 1] GlyphResonanceMetrics creation ✅
[TEST 2] GlyphResonanceMap methods ✅
[TEST 3] FusedSymbol from_lain_result() ✅
[TEST 4] extract_glyph_resonances() ✅
[TEST 5] get_dominant_glyphs() ✅
[TEST 6] format_glyph_resonance_report() ✅
[TEST 7] op_CALL_GLYPH storage ✅
[TEST 8] op_GET_GLYPH_RESONANCE report ✅
[TEST 9] op_GET_GLYPH_RESONANCE metrics ✅
[TEST 10] demo_glyph_resonance program ✅
References
- Formal Specification: See
XIC_SEMANTICS_v1_5.mdfor complete instruction semantics - Previous Reports:
XIC_SYMBOLIC_EXTENSION_REPORT.md(v1 symbolic mode)XIC_SYMBOLIC_PIPELINE_REPORT.md(v1.5 pipeline abstraction)
- Implementation:
glyphos/symbolic_pipeline.py,xic_ops.py,glyphos/__init__.py - Demo:
programs/demo_glyph_resonance.gx.json
Summary
XIC v1.5 glyph resonance awareness upgrade provides:
- Enhanced Data Structures: GlyphResonanceMetrics with 5-dimensional resonance scoring
- Utility Functions: Extract, rank, and report on glyph resonance metrics
- Query Capability: GET_GLYPH_RESONANCE instruction with flexible metric selection
- Full Introspection: Access complete SymbolicPipelineResult for power users
- Comprehensive Documentation: Updated formal semantics with examples
- Demo Program: Multi-chain example showcasing all resonance query types
No breaking changes. All XIC v1 and v1.5 programs continue to work unchanged.
Implementation Complete ✅
All tests passing ✅
Backward compatible ✅
Formal semantics documented ✅
Resonance awareness enabled ✅