5.9 KiB
Whetstone-AST-First Integration
Purpose
This document defines how whetstone_RSA should relate to whetstone_DSL.
The key rule is:
whetstone_RSA should be Whetstone-AST-first, not merely AST-first.
That means the semantic source of truth for RSA contracts should live in the Whetstone AST and annotation system, not in ad hoc C++ structs or generic parser ASTs.
Why Generic AST Is Not Enough
A generic AST is mostly syntax structure.
It can tell you things like:
- function
- class
- parameter
- if-statement
- call expression
That is useful, but it is not enough for RSA.
RSA needs first-class semantic contracts for things like:
- input structure
- input modality
- output topology
- output constraint
- policy stability
- suitability assessment
- gate shape
- confidence behavior
- abstain policy
- escalation policy
- diagnosis metadata
Those are not reliable consequences of syntax alone. They are authored semantic data.
Why Whetstone AST Is The Right Source
The Whetstone AST already exists to carry language-neutral semantic intent beyond what ordinary source code or parser ASTs can express cleanly.
That makes it the right authoring substrate for RSA because:
- annotations are first-class
- concepts are language-neutral
- contracts can be preserved across projections
- comments do not need to carry architectural meaning
- generated C++ can remain a projection target instead of becoming the semantic home
In short:
- generic AST gives structure
- Whetstone AST gives structure plus semantic contract capacity
RSA needs the second one.
Architectural Rule
The semantic source of truth for RSA should live in whetstone_DSL.
The C++ runtime in whetstone_RSA should be treated as a projection target for:
- runtime data types
- execution logic
- probe registry interfaces
- policy and diagnosis runtime behavior
This keeps the architecture aligned with the rest of the Whetstone program:
- AST is source of truth
- target languages are projections
Proposed Split Of Responsibilities
whetstone_DSL
Owns:
- RSA semantic ontology
- gate definitions as semantic contracts
- suitability metadata
- diagnosis metadata
- probe declarations
- projection rules into target runtimes
whetstone_RSA
Owns:
- C++ runtime implementation
- probe execution engine
- diagnosis engine
- policy runtime
- compiled/runtime-facing representations of projected contracts
What Should Exist In The Whetstone AST
RSA needs explicit semantic objects, not just ordinary code nodes.
Examples of first-class RSA concepts that should eventually exist in Whetstone form:
GateDefinitionGateEvidenceGateDiagnosisGateSuitabilityPolicyRecommendationProbeDefinitionDecisionContract
These should be represented as semantic entities with structured fields, not as freeform comments embedded in generated C++.
Why This Is Better Than Authoring In C++
If RSA contracts are authored directly in C++, the semantics become fragile:
- comments carry architectural meaning
- relationships are implicit
- code review sees implementation before contract
- projection to other targets becomes harder
If RSA contracts are authored in the Whetstone AST:
- the semantics are explicit
- annotations stay attached to the real concept
- multiple targets can be generated later
- runtime code becomes easier to keep honest
This is especially important because RSA is intended to remain model-agnostic.
The contract is primary. The current transformer-based runtime is secondary.
Model-Agnostic Benefit
Because RSA is contractual rather than model-defined, the AST layer should describe:
- what the gate promises
- what the gate consumes
- how confidence and abstention behave
- how diagnosis works
without hard-coding one backend.
That preserves future replacement paths such as:
- transformer specialist
- classical ML classifier
- RL policy
- retrieval-backed scorer
- deterministic-plus-learned hybrid
The Whetstone AST should capture the contract. The C++ runtime should implement one or more backends against it.
Near-Term Practical Rule
Right now, some C++ scaffolding already exists in whetstone_RSA.
That is fine as a bootstrap.
But it should be treated as:
- provisional runtime code
- useful for exercising the contract shape
- not the long-term semantic source of truth
As soon as the Whetstone-side semantic representation exists, the C++ layer should be aligned to it rather than continuing as an independently evolving hand-authored model.
How To Use WhetstoneDSL Here
The right use of whetstone_DSL is not "parse some C++ and hope the meaning falls
out."
The right use is:
- define RSA concepts explicitly in Whetstone semantic form
- attach first-class metadata and annotations there
- project those contracts into C++ runtime types and adapters
If existing Whetstone MCP tools can help bootstrap some of the current C++ structs into AST-native representations, that is useful.
But the goal is not mechanical conversion for its own sake. The goal is semantic alignment.
If direct manual authoring in Whetstone form lands closer to the intended contract, that is better than a weak automatic conversion.
Practical Guidance For The Current Stage
At this stage of the project:
- keep the current C++ runtime scaffold because it is useful for validating runtime shape
- do not expand C++ into the permanent semantic home of the system
- prioritize defining the RSA domain model in Whetstone semantic terms
- use MCP-assisted conversion only when it lands close to the intended semantic contract
This is still early enough that correctness of semantic shape matters more than automation of the conversion path.
Implication
whetstone_RSA is not just "a C++ library with some docs."
It should become:
- a Whetstone-authored semantic subsystem
- with a C++ runtime projection
That is the architecture most consistent with both Whetstone and the long-term goals of RSA.