Implement capability generics, checked package specializations and CRUD scaffolding

Add kinded parameters, capability bounds, Self, aliases and closed application identities. Check generic implementations universally and build candidate-specific codecs and descriptors from immutable schemas. Preserve lexical aliases and exact dispatch identities in package and host bindings.

Add an imperative CRUD+index domain scaffold with explicit soft-deletion semantics, source/codegen regression coverage, installed CLI tests and an authoring guide. Existing Web Studio opaque props and class-level create-menu migration are separate from the implemented language core.
This commit is contained in:
Timothy J. Aveni
2026-09-16 00:12:39 -07:00
parent 9358b5ed0e
commit 52803dda05
26 changed files with 6009 additions and 2193 deletions
+52 -10
View File
@@ -27,6 +27,7 @@ workspaceItem
| sharedAttachmentDecl
| conformanceDecl
| constructorBindingDecl
| typeAliasDecl
;
resourceImportDecl
@@ -46,6 +47,7 @@ resourcePreamble
: resourceImportDecl
| externalAtomDecl
| externalInterfaceDecl
| typeAliasDecl
;
atomDecl
@@ -53,10 +55,39 @@ atomDecl
;
interfaceResourceDecl
: resourcePreamble* INTERFACE identifier ID stringLiteral REVISION stringLiteral
: resourcePreamble* INTERFACE identifier typeParameters? ID stringLiteral REVISION stringLiteral
(REQUIRES interfaceType (COMMA interfaceType)*)?
LBRACE interfaceMember* RBRACE
;
typeParameters
: LT typeParameter (COMMA typeParameter)* GT
;
typeParameter
: VALUE identifier (COLON STORABLE)?
| OBJECT identifier (IMPLEMENTS interfaceType (AMP interfaceType)*)?
;
interfaceType
: identifier typeArguments?
;
typeArguments
: LT typeArgument (COMMA typeArgument)* GT
;
typeArgument
: ATOM identifier
| INTERFACE interfaceType
| OBJECT identifier
| valueType
;
typeAliasDecl
: TYPE identifier typeParameters? EQUAL valueType SEMI
;
interfaceMember
: valueMember
| relationshipMember
@@ -93,7 +124,8 @@ relationshipOperation
targetConstraint
: ATOM identifier
| INTERFACE identifier
| INTERFACE identifier typeArguments?
| OBJECT identifier
;
packageResourceDecl
@@ -109,12 +141,12 @@ packageExport
;
packageOperationExport
: OPERATION identifier ID stringLiteral COLON valueType ARROW valueType
: OPERATION identifier typeParameters? ID stringLiteral COLON valueType ARROW valueType
MODE operationMode eventClause? RECEIVER receiverRequirement dependencyBlock? SEMI
;
packageFunctionExport
: FUNCTION identifier ID stringLiteral COLON valueType ARROW valueType
: FUNCTION identifier typeParameters? ID stringLiteral COLON valueType ARROW valueType
dependencyBlock? SEMI
;
@@ -138,7 +170,8 @@ operationMode
receiverRequirement
: ANY
| ATOM identifier
| INTERFACES LBRACK identifierList? RBRACK
| OBJECT identifier
| INTERFACES LBRACK (interfaceType (COMMA interfaceType)*)? RBRACK
;
identifierList
@@ -152,7 +185,7 @@ dependencyBlock
dependencyPort
: STATE identifier ID stringLiteral COLON valueType primitiveList SEMI
| EDGE identifier ID stringLiteral COLON cardinality targetConstraint primitiveList SEMI
| INTERFACE identifier ID stringLiteral COLON identifier SEMI
| INTERFACE identifier ID stringLiteral COLON identifier typeArguments? SEMI
| CONSTRUCTOR identifier ID stringLiteral COLON identifier (INPUT valueType)? SEMI
;
@@ -199,7 +232,7 @@ edgeEndpoint
;
conformanceDecl
: CONFORM identifier AS identifier (ID stringLiteral)? (SEMANTIC_MAJOR INTEGER)?
: CONFORM identifier AS identifier typeArguments? (ID stringLiteral)? (SEMANTIC_MAJOR INTEGER)?
LBRACE conformanceItem* RBRACE
;
@@ -238,7 +271,7 @@ operationName
operationProvider
: STATE identifier DOT statePrimitive
| EDGE identifier DOT identifier DOT edgePrimitive
| PACKAGE identifier DOT identifier dependencyBindingBlock?
| PACKAGE identifier DOT identifier typeArguments? dependencyBindingBlock?
;
statePrimitive
@@ -263,7 +296,7 @@ dependencyBindingBlock
dependencyBinding
: identifier TO STATE identifier (VIA EDGE identifier DOT identifier)? SEMI
| identifier TO EDGE identifier DOT identifier (VIA EDGE identifier DOT identifier)? SEMI
| identifier TO INTERFACE identifier (VIA EDGE identifier DOT identifier)? SEMI
| identifier TO INTERFACE identifier typeArguments? (VIA EDGE identifier DOT identifier)? SEMI
| identifier TO CONSTRUCTOR identifier SEMI
;
@@ -277,10 +310,12 @@ valueType
| WATCH_HANDLE
| MESSAGE stringLiteral
| ATOM_REF LT identifier GT
| INTERFACE_REF LT identifier GT
| INTERFACE_REF LT identifier typeArguments? GT
| REF LT identifier GT
| OPTIONAL LT valueType GT
| LIST LT valueType GT
| RECORD LBRACE recordField* RBRACE
| identifier typeArguments?
;
recordField
@@ -338,6 +373,11 @@ stringLiteral
;
WORKSPACE: 'workspace';
TYPE: 'type';
OBJECT: 'object';
STORABLE: 'storable';
IMPLEMENTS: 'implements';
REF: 'ref';
FRAGMENT: 'fragment';
IMPORT: 'import';
EXTERNAL: 'external';
@@ -441,6 +481,8 @@ LPAREN: '(';
RPAREN: ')';
LT: '<';
GT: '>';
AMP: '&';
EQUAL: '=';
INTEGER: '-'? [0-9]+;
JSON_NUMBER: '-'? ('0' | [1-9] [0-9]*) ('.' [0-9]+)? ([eE] [+-]? [0-9]+)?;