From 55c75e3bd00d968f993fb9cfbee6f72bfe9b313a Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 22 Oct 2026 20:13:36 +0200 Subject: [PATCH 01/31] Quarantine the Eve operator surface publisher; Eve is deprecated, rebuild on Thing 2 Removes buildOperatorSurface, the surface_state and interface_binding documents, eve-surfaces.cc and the surface advertisement entries. Typed state and the provider advertisement stay. Parked at parked/weksa-eve-surface per thing2:ruling:eve-dashboards-quarantined. Co-Authored-By: Claude Sonnet 5.5 --- README.md | 2 +- docs/architecture.md | 2 +- .../weksa-provider-advertisement.json | 111 +----------------- docs/roadmap.md | 6 +- docs/verse-service-contract.md | 19 +-- scripts/weksa-daemon.mjs | 107 +---------------- tools/export-provider-advertisement.mjs | 32 +---- 7 files changed, 14 insertions(+), 265 deletions(-) diff --git a/README.md b/README.md index 49de6a7..a2a51bf 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ meaning-packet contract Weksa clients should target. See [Verse Service Contract](./docs/verse-service-contract.md) for the daemon contract: Weksa owns typed conversational intent, pronunciation plans, utterance -handoffs, and the Eve/CultMesh surfaces that make those documents inspectable. +handoffs, and the typed CultMesh state that makes those documents inspectable. Eve is deprecated and Thing 2 is its successor; the operator Eve surface is quarantined (see the contract). See [Multilingual Utterance Lowering](./docs/multilingual-utterance-lowering.md) for the shared lowering target: interlingua projected through speaker state into diff --git a/docs/architecture.md b/docs/architecture.md index 06cb09f..db24c43 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -4,7 +4,7 @@ Weksa is the language-intent daemon surface: currently a state spine, pipeline map, fixtures, and service contract waiting for its runtime loop. See [Verse Service Contract](./verse-service-contract.md) for the -CultCache/CultMesh/Eve authority map. +CultCache/CultMesh authority map. ## Objective diff --git a/docs/fixtures/weksa-provider-advertisement.json b/docs/fixtures/weksa-provider-advertisement.json index f7ec25b..e2b03ba 100644 --- a/docs/fixtures/weksa-provider-advertisement.json +++ b/docs/fixtures/weksa-provider-advertisement.json @@ -2,7 +2,7 @@ "schema": "gamecult.eve.provider_advertisement.v1", "providerId": "weksa.intent.service", "title": "Weksa Intent Service", - "description": "Weksa converts writing, interlingua, and agent state into typed conversational intent, target-language realizations, pronunciation plans, speech-provider requests, and utterance handoff documents for AquaSynth and other consumers.", + "description": "Weksa converts writing, interlingua, and agent state into typed conversational intent, pronunciation plans, and utterance handoff documents for AquaSynth and other consumers.", "mode": "fixture-read-only", "serviceVerse": { "id": "verse.weksa.service.v1", @@ -12,7 +12,6 @@ "typed conversational intent", "pronunciation plans", "utterance handoff documents", - "speech-provider request projections", "lowering traces", "language-project and flavor-profile state" ], @@ -20,7 +19,6 @@ "AquaSynth learned embeddings", "Faust compilation", "rendered audio", - "MiMo provider audio", "Persona canonical state" ] }, @@ -53,23 +51,13 @@ "weksa.utterance_embedding_handoff.v0.1" ] }, - { - "id": "weksa.speech_provider", - "kind": "speech_provider", - "cultMeshKey": "weksa.speech-provider/requests", - "authority": "Weksa speech-provider request projection", - "schemas": [ - "weksa.mimo_tts_request.v0" - ] - }, { "id": "weksa.operator", "kind": "operator", "cultMeshKey": "weksa.operator/status", "authority": "Weksa daemon runtime", "schemas": [ - "weksa.operator_state.v0", - "gamecult.eve.surface.v1" + "weksa.operator_state.v0" ] }, { @@ -109,14 +97,6 @@ ], "durableShape": ".weksa/handoff/{utteranceId}.cc" }, - { - "family": "speech_provider", - "namespace": "weksa.speech_provider.*", - "witnesses": [ - "weksa.mimo_tts_request.v0" - ], - "durableShape": ".weksa/speech-provider/{requestId}.cc" - }, { "family": "trace", "namespace": "weksa.trace.*", @@ -133,47 +113,6 @@ "weksa.cultural_ontology_catalog.v0" ], "durableShape": ".weksa/cultural-ontology/{storeId}.cc" - }, - { - "family": "eve", - "namespace": "weksa.eve.*", - "witnesses": [ - "gamecult.eve.provider_advertisement.v1", - "gamecult.eve.surface.v1" - ], - "durableShape": ".weksa/eve-surfaces.cc" - } - ], - "cultMeshSurfaceKeys": [ - { - "id": "weksa.eve.intent_review.v0", - "documentSchema": "gamecult.eve.surface.v1", - "cultMeshKey": "weksa.eve.surface.intent-review", - "binds": [ - "weksa.intent.*", - "weksa.trace.*" - ], - "status": "expected-surface" - }, - { - "id": "weksa.eve.pronunciation_trace.v0", - "documentSchema": "gamecult.eve.surface.v1", - "cultMeshKey": "weksa.eve.surface.pronunciation-trace", - "binds": [ - "weksa.pronunciation.*", - "weksa.trace.*" - ], - "status": "expected-surface" - }, - { - "id": "weksa.eve.utterance_handoff.v0", - "documentSchema": "gamecult.eve.surface.v1", - "cultMeshKey": "weksa.eve.surface.utterance-handoff", - "binds": [ - "weksa.utterance.*", - "aquasynth.speech.*" - ], - "status": "expected-surface" } ], "commandBoundaries": [ @@ -217,57 +156,11 @@ "audio rendering", "AquaSynth synth driver truth" ] - }, - { - "id": "weksa.command.speech_provider.project", - "owner": "Weksa", - "acceptedByFixture": false, - "allowedInputs": [ - "accepted target-language realization", - "provider-neutral delivery intent", - "speech provider profile" - ], - "emits": [ - "weksa.mimo_tts_request.v0" - ], - "forbiddenTargets": [ - "source interlingua truth", - "Persona canonical state", - "rendered audio ownership" - ] - }, - { - "id": "weksa.command.speech_provider.mimo.voicedesign", - "owner": "Weksa", - "acceptedByFixture": true, - "commandIngress": "cultnet.transport.rudp.v0", - "inputSchema": "weksa.mimo_voicedesign_command.v0", - "allowedInputs": [ - "Persona/agent state file path", - "weksa.interlingua_packet.v0-compatible object", - "raw thought text for provisional interlingua decomposition", - "optional target-language and performance-register controls" - ], - "emits": [ - "weksa.interlingua_packet.v0-daemon-provisional", - "weksa.mimo_tts_request.v0", - "weksa.mimo_voicedesign_receipt.v0", - "rendered audio artifact reference" - ], - "forbiddenTargets": [ - "Persona canonical state mutation", - "source meaning rewrite after accepted interlingua", - "MiMo-owned text optimization", - "AquaSynth embedding truth" - ] } ], "loweringRules": [ "Weksa owns conversational intent and utterance lowering.", - "Speech-provider requests are target projections from accepted realizations, not source meaning.", "AquaSynth owns learned embeddings, synth controls, Faust compilation, and audio output.", - "MiMo owns provider rendering and audio output, not Weksa delivery truth.", - "Eve surfaces submit commands and inspect witnesses; they do not own intent truth.", "Fixture exports are discovery metadata until the daemon loop commits typed witnesses." ] } diff --git a/docs/roadmap.md b/docs/roadmap.md index c02fcd9..074d140 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -27,8 +27,8 @@ values with the AquaSynth-owned learned encoder. - Add a daemon loop that commits conversational intent, pronunciation plans, and utterance handoffs as typed CultCache witnesses. -- Publish the provider advertisement and first Eve operator/intent-review - surfaces through CultMesh for Odin discovery. +- Publish the provider advertisement through CultMesh for Odin discovery; the + operator view returns on Thing 2 (Eve is deprecated). - Preserve the first English-only lowering proof under `examples/english-lowering/`, and the shared multilingual proof under `examples/multilingual-lowering/`. @@ -39,7 +39,7 @@ - Render glossed output through grammar, morphology, phonology, and diachrony. - Emit a trace explaining which stage made each decision. - Keep runtime LLM-free; model use belongs in authoring and critique. -- Keep CLI tools, fixtures, daemon jobs, and Eve commands on the same commit and +- Keep CLI tools, fixtures, and daemon jobs on the same commit and derivation paths so Weksa does not grow split-brained intent truth. ## Later diff --git a/docs/verse-service-contract.md b/docs/verse-service-contract.md index e84bed3..e6f2869 100644 --- a/docs/verse-service-contract.md +++ b/docs/verse-service-contract.md @@ -25,8 +25,6 @@ Outputs: - `weksa.mimo_voicedesign_command.v0` - `weksa.mimo_tts_request.v0` - `weksa.mimo_voicedesign_receipt.v0` -- Eve/CultUI surfaces for intent review, pronunciation inspection, and handoff - traces Weksa owns conversational intent and utterance lowering. AquaSynth owns learned phonetic realization, packed utterance embeddings, synth-driver controls, Faust @@ -39,12 +37,10 @@ and trace. - `.weksa/provider-advertisement.cc`: read-only provider advertisement witness. - `.weksa/provider-advertisement-store.cc`: CultMesh/CultCache provider store containing `gamecult.eve.provider_advertisement.v1`, - `gamecult.eve.interface_binding.v1`, `gamecult.eve.surface_state.v1`, `weksa.operator_state.v0`, `weksa.command_boundary.v1`, and `weksa.transport_profile.v1` records for Odin discovery. - `.weksa/operator-state.cc`: daemon health, readiness, and runtime witness index used by Idunn health checks and operator inspection. -- `.weksa/eve-surfaces.cc`: current Weksa operator Eve surface witness. - `.weksa/command-boundary.cc`: provider-owned command and lifecycle boundary naming Weksa as owner, Idunn as lifecycle requester, and the MiMo VoiceDesign RUDP command ingress as daemon-owned transport authority. @@ -107,20 +103,13 @@ Odin ingests the Starfire Weksa provider through `.weksa/provider-advertisement-store.cc`. Idunn tracks the daemon as target `weksa` in the `starfire-local` swarm profile and owns restart authority through the Weksa restart script. Odin should read Weksa's provider advertisement, -operator state, command boundary, transport profile, and Eve surface from the +operator state, command boundary, and transport profile from the typed provider store and RUDP command boundary; no HTTP endpoint owns provider truth. -## Eve Surfaces +## Operator Dashboards -- `weksa.eve.intent_review.v0`: inspect typed conversational intent before it - becomes an utterance. -- `weksa.eve.pronunciation_trace.v0`: inspect pronunciation and IPA/prosody - lowering. -- `weksa.eve.utterance_handoff.v0`: inspect handoff packets, embedding request - status, and AquaSynth receipt links. -- `weksa.eve.operator.v0`: compact daemon state, queues, schema versions, and - witness freshness. +Eve is deprecated, and Thing 2 is its successor (`thing2:ruling:eve-dashboards-quarantined`, 2026-10-22). Weksa's operator Eve surface publisher is quarantined: removed from main and the build, parked at the `parked/weksa-eve-surface` tag, with follow-up `thing2:follow_up:weksa-operator-view-on-thing2` to rebuild it on Thing 2. Until Thing 2's surface contract is ready, Weksa publishes typed CultMesh state (operator state, command boundary, transport profile, provider advertisement) and no dashboard composition. ## Commands @@ -142,7 +131,7 @@ truth. - Text renderers do not own meaning. - AquaSynth does not own conversational intent. -- Eve lowerings do not own Weksa state. +- Dashboard renderers do not own Weksa state. - Fixture emitters cannot become an alternate runtime truth. - Agent transcript memory cannot silently override typed Persona or intent documents. diff --git a/scripts/weksa-daemon.mjs b/scripts/weksa-daemon.mjs index ef65385..fb63244 100644 --- a/scripts/weksa-daemon.mjs +++ b/scripts/weksa-daemon.mjs @@ -157,14 +157,12 @@ async function publishWitnesses() { const snapshot = await buildSnapshot(); await writeWitness("provider-advertisement.cc", snapshot.providerAdvertisement); await writeWitness("operator-state.cc", snapshot.operatorState); - await writeWitness("eve-surfaces.cc", snapshot.operatorSurface); await writeWitness("command-boundary.cc", snapshot.commandBoundary); await writeWitness("transport-profile.cc", snapshot.transportProfile); await writeWitness("cultmesh-publications.cc", snapshot.cultMeshPublications); await writeCultMeshStore(snapshot); await writeJson(resolve(stateRoot, "provider-advertisement.json"), snapshot.providerAdvertisement); await writeJson(resolve(stateRoot, "operator-state.json"), snapshot.operatorState); - await writeJson(resolve(stateRoot, "eve-operator-surface.json"), snapshot.operatorSurface); await writeJson(resolve(stateRoot, "command-boundary.json"), snapshot.commandBoundary); await writeJson(resolve(stateRoot, "transport-profile.json"), snapshot.transportProfile); await writeJson(resolve(stateRoot, "cultmesh-publications.json"), snapshot.cultMeshPublications); @@ -255,7 +253,6 @@ async function buildSnapshot() { provider_advertisement: ".weksa/provider-advertisement.cc", provider_advertisement_store: ".weksa/provider-advertisement-store.cc", operator_state: ".weksa/operator-state.cc", - eve_surface: ".weksa/eve-surfaces.cc", cultmesh_publications: ".weksa/cultmesh-publications.cc", }, readiness: { @@ -270,7 +267,6 @@ async function buildSnapshot() { }; const commandBoundary = buildCommandBoundary(updatedAt); const transportProfile = buildTransportProfile(updatedAt); - const operatorSurface = buildOperatorSurface({ providerAdvertisement, operatorState, commandBoundary, cultureCatalog, tuning }); const cultMeshPublications = { schema: "weksa.cultmesh_publications.v0", service_id: "weksa.intent.service", @@ -283,14 +279,13 @@ async function buildSnapshot() { publications: [ publication("weksa.service/provider-advertisement", "gamecult.eve.provider_advertisement.v1", ".weksa/provider-advertisement-store.cc", ".weksa/provider-advertisement-store.cc"), publication("weksa.operator/status", "weksa.operator_state.v0", ".weksa/operator-state.cc", ".weksa/operator-state.cc"), - publication("weksa.eve.surface.operator", "gamecult.eve.surface.v1", ".weksa/eve-surfaces.cc", ".weksa/eve-surfaces.cc"), publication("weksa.command-boundary", "weksa.command_boundary.v1", ".weksa/command-boundary.cc", null), publication("weksa.transport-profile", "weksa.transport_profile.v1", ".weksa/transport-profile.cc", null), publication("weksa.cultmesh/publications", "weksa.cultmesh_publications.v0", ".weksa/cultmesh-publications.cc", ".weksa/cultmesh-publications.cc"), publication("weksa.speech-provider/mimo/voicedesign", WEKSA_MIMO_VOICEDESIGN_COMMAND_SCHEMA_ID, ".weksa/speech-provider/mimo/{requestId}/command.cc", formatRudpEndpoint(host, port)), ], }; - return { providerAdvertisement, operatorState, operatorSurface, commandBoundary, transportProfile, cultMeshPublications }; + return { providerAdvertisement, operatorState, commandBoundary, transportProfile, cultMeshPublications }; } async function writeCultMeshStore(snapshot) { @@ -301,16 +296,12 @@ async function writeCultMeshStore(snapshot) { } const { providerAdvertisementDefinition, - interfaceBindingDefinition, - surfaceDefinition, operatorStateDefinition, commandBoundaryDefinition, transportProfileDefinition, } = defineCultMeshDocuments(runtime.defineDocumentType); const documents = [ providerAdvertisementDefinition, - interfaceBindingDefinition, - surfaceDefinition, operatorStateDefinition, commandBoundaryDefinition, transportProfileDefinition, @@ -318,35 +309,6 @@ async function writeCultMeshStore(snapshot) { await rm(cultMeshStorePath, { force: true }); const node = await createCultMeshNodeWithOwnedStoreReset(runtime.CultMesh, cultMeshStorePath, documents); await node.put(providerAdvertisementDefinition, snapshot.providerAdvertisement.providerId, snapshot.providerAdvertisement); - await node.put(interfaceBindingDefinition, "weksa.operator", { - bindingId: "weksa.operator", - providerId: snapshot.providerAdvertisement.providerId, - title: "Weksa Operator", - kind: "operator", - updatedAt: snapshot.operatorState.updated_at, - provider: { - providerId: snapshot.providerAdvertisement.providerId, - canonicalService: "asgard.weksa", - locatedService: "asgard.starfire.weksa", - cultMeshAddress: "asgard.starfire.weksa/eve/operator", - endpoints: [ - { transport: "cultmesh-store", address: ".weksa/provider-advertisement-store.cc" }, - { transport: CULTNET_RUDP_PROTOCOL_ID, address: formatRudpEndpoint(host, port) }, - ], - routes: [ - { transport: "cultmesh-store", address: ".weksa/provider-advertisement-store.cc" }, - { transport: CULTNET_RUDP_PROTOCOL_ID, address: formatRudpEndpoint(host, port) }, - ], - }, - surface: snapshot.operatorSurface, - }); - await node.put(surfaceDefinition, snapshot.providerAdvertisement.providerId, { - providerId: snapshot.providerAdvertisement.providerId, - title: "Weksa Operator", - version: tick + 1, - updatedAt: snapshot.operatorState.updated_at, - surface: snapshot.operatorSurface, - }); await node.put(operatorStateDefinition, "weksa", snapshot.operatorState); await node.put(commandBoundaryDefinition, "weksa", snapshot.commandBoundary); await node.put(transportProfileDefinition, "weksa", snapshot.transportProfile); @@ -392,31 +354,6 @@ function configureCultLibModulePath() { } function defineCultMeshDocuments(defineDocumentType) { - const surfaceDefinition = defineDocumentType({ - type: "gamecult.eve.surface_state", - schemaName: "gamecult.eve.surface_state", - schemaId: "gamecult.eve.surface_state.v1", - schemaVersion: "gamecult.eve.surface_state.v1", - global: false, - name: (value) => value?.providerId || "surface", - schema: { parse: (value) => value }, - members: [ - { slot: 0, memberName: "providerId", typeName: "string", isName: true }, - { slot: 1, memberName: "title", typeName: "string" }, - { slot: 2, memberName: "version", typeName: "long" }, - { slot: 3, memberName: "updatedAt", typeName: "string" }, - { slot: 4, memberName: "surface", typeName: "object" }, - ], - }); - const interfaceBindingDefinition = defineDocumentType({ - type: "gamecult.eve.interface_binding", - schemaName: "gamecult.eve.interface_binding", - schemaId: "gamecult.eve.interface_binding.v1", - schemaVersion: "gamecult.eve.interface_binding.v1", - global: false, - name: (value) => value?.bindingId || value?.providerId || "interface", - schema: { parse: (value) => value }, - }); const providerAdvertisementDefinition = defineDocumentType({ type: "gamecult.eve.provider_advertisement", schemaName: "gamecult.eve.provider_advertisement", @@ -455,8 +392,6 @@ function defineCultMeshDocuments(defineDocumentType) { }); return { providerAdvertisementDefinition, - interfaceBindingDefinition, - surfaceDefinition, operatorStateDefinition, commandBoundaryDefinition, transportProfileDefinition, @@ -474,7 +409,7 @@ function loadProviderAdvertisement(updatedAt) { updatedAt, canonicalService: "asgard.weksa", locatedService: "asgard.starfire.weksa", - cultMeshAddress: "asgard.starfire.weksa/eve/operator", + cultMeshAddress: "asgard.starfire.weksa/operator", serviceVerse: { ...fixture.serviceVerse, semanticAddress: "asgard.starfire.weksa", @@ -607,36 +542,6 @@ async function inspectCultureCatalog() { }; } -function buildOperatorSurface({ providerAdvertisement, operatorState, commandBoundary, cultureCatalog, tuning }) { - return { - schema: "gamecult.eve.surface.v1", - providerId: providerAdvertisement.providerId, - surfaceId: "weksa.eve.operator.v0", - title: "Weksa", - updatedAt: operatorState.updated_at, - root: { - id: "weksa.operator.root", - kind: "panel", - props: { - title: "Weksa Intent Service", - providerId: providerAdvertisement.providerId, - status: operatorState.state, - }, - children: [ - fact("health", operatorState.state), - fact("verse", operatorState.verse_id), - fact("affect", operatorState.readiness.affect_aware_lowering), - fact("affect passes", tuning ? `${tuning.affect_contrast_visible}/${tuning.pass_count} visible` : "none"), - fact("culture profiles", String(cultureCatalog.profile_count)), - fact("target profiles", String(cultureCatalog.target_language_profile_count)), - fact("commands", operatorState.readiness.command_ingress), - fact("command boundary", commandBoundary.boundary_id), - fact("mimo voicedesign", operatorState.readiness.mimo_voicedesign), - ], - }, - }; -} - async function handleMimoVoiceDesign(body) { const command = validateMimoCommand(body); const requestId = command.request_id || `mimo-${new Date().toISOString().replace(/[-:.TZ]/g, "")}-${Math.random().toString(36).slice(2, 8)}`; @@ -1008,14 +913,6 @@ async function callMimoVoiceDesign(mimoRequest) { }; } -function fact(label, value) { - return { - id: `weksa.operator.fact.${label.replace(/[^a-z0-9]+/gi, "-").toLowerCase()}`, - kind: "text", - props: { label, text: `${label}: ${value}` }, - }; -} - function publication(key, schema, witness, endpoint) { return { key, diff --git a/tools/export-provider-advertisement.mjs b/tools/export-provider-advertisement.mjs index 94c817a..be8b6fb 100644 --- a/tools/export-provider-advertisement.mjs +++ b/tools/export-provider-advertisement.mjs @@ -54,7 +54,7 @@ const document = { kind: "operator", cultMeshKey: "weksa.operator/status", authority: "Weksa daemon runtime", - schemas: ["weksa.operator_state.v0", "gamecult.eve.surface.v1"], + schemas: ["weksa.operator_state.v0"], }, { id: "weksa.cultural_ontology", @@ -95,35 +95,6 @@ const document = { witnesses: ["weksa.cultural_ontology_profile.v0", "weksa.cultural_ontology_catalog.v0"], durableShape: ".weksa/cultural-ontology/{storeId}.cc", }, - { - family: "eve", - namespace: "weksa.eve.*", - witnesses: ["gamecult.eve.provider_advertisement.v1", "gamecult.eve.surface.v1"], - durableShape: ".weksa/eve-surfaces.cc", - }, - ], - cultMeshSurfaceKeys: [ - { - id: "weksa.eve.intent_review.v0", - documentSchema: "gamecult.eve.surface.v1", - cultMeshKey: "weksa.eve.surface.intent-review", - binds: ["weksa.intent.*", "weksa.trace.*"], - status: "expected-surface", - }, - { - id: "weksa.eve.pronunciation_trace.v0", - documentSchema: "gamecult.eve.surface.v1", - cultMeshKey: "weksa.eve.surface.pronunciation-trace", - binds: ["weksa.pronunciation.*", "weksa.trace.*"], - status: "expected-surface", - }, - { - id: "weksa.eve.utterance_handoff.v0", - documentSchema: "gamecult.eve.surface.v1", - cultMeshKey: "weksa.eve.surface.utterance-handoff", - binds: ["weksa.utterance.*", "aquasynth.speech.*"], - status: "expected-surface", - }, ], commandBoundaries: [ { @@ -151,7 +122,6 @@ const document = { loweringRules: [ "Weksa owns conversational intent and utterance lowering.", "AquaSynth owns learned embeddings, synth controls, Faust compilation, and audio output.", - "Eve surfaces submit commands and inspect witnesses; they do not own intent truth.", "Fixture exports are discovery metadata until the daemon loop commits typed witnesses.", ], }; From adb3615298b83a9eecbff9b686a0b7000c50cd36 Mon Sep 17 00:00:00 2001 From: Eureka Date: Thu, 29 Oct 2026 09:28:56 +0100 Subject: [PATCH 02/31] Target and research for the interlingua-lowering campaign Co-Authored-By: Claude Opus 5.5 --- ...26-10-29-interlingua-lowering-prior-art.md | 90 +++++++++++++++++++ .../2026-10-29-weksa-substrate-facts.md | 69 ++++++++++++++ docs/targets/interlingua-lowering.md | 66 ++++++++++++++ 3 files changed, 225 insertions(+) create mode 100644 docs/research/2026-10-29-interlingua-lowering-prior-art.md create mode 100644 docs/research/2026-10-29-weksa-substrate-facts.md create mode 100644 docs/targets/interlingua-lowering.md diff --git a/docs/research/2026-10-29-interlingua-lowering-prior-art.md b/docs/research/2026-10-29-interlingua-lowering-prior-art.md new file mode 100644 index 0000000..24468a1 --- /dev/null +++ b/docs/research/2026-10-29-interlingua-lowering-prior-art.md @@ -0,0 +1,90 @@ +# Prior art for the Weksa interlingua-lowering campaign, 2026-10-29 + +Eyes pass. Facts and pointers only; no recommendation. Tags: [V] = read/returned by a source this pass; [B] = background knowledge, not re-verified this pass; [GAP] = looked for, not found. + +## 0. Weksa's current design (read from F:\Projects\weksa\docs) + +- interlingua-standard.md (0.1-draft): packet families interlingua_version, packet_id, kind, provenance, context, discourse, referents, predications (predicate, frame, aspect, tense, polarity, modality, evidentiality, roles agent/patient/experiencer/...), relations, constraints, extensions (namespaced), trace. Owns referents, events, roles, TAM/evidentiality, discourse function, provenance/confidence. Does NOT own target-language concept splits, grammar obligations, morphology, final wording. Cites AMR 1.0, UMR (LREC-COLING 2024), Global FrameNet, UD guidelines. Promotion rule: new fields start as namespaced extensions, promoted after use in 2 real packets. +- best-modern-approach.md: hybrid; models for decomposition/critique, explicit ontology/grammar/morphology/phonology/diachrony for authority. English -> interlingua packet first; "English stops being the hidden skeleton". Names "find places where output is just English in disguise" as a model critique job. +- runtime-authoring-split.md: runtime = packet + compiled language data, no LLM, no network, deterministic, traceable per stage; authoring may use models, output durable only after normalisation. +- multilingual-utterance-lowering.md (v0): targets en-US, pt-BR (+Umbanda overlay), ja-JP. Authority split: packet owns meaning; projected speaker context owns knowledge/voice pressure; lowerer owns surface text, register marking, backgloss/backtranslation, lowering trace; per-target "cultural ontology profile" (data/target-language-ontology/*.yaml) owns address/politeness/register/forbidden flattenings. Schema weksa.utterance_lowering.v0. Note: this is LLM-or-rule-agnostic as read; the "lowerer" realizer is not stated to be deterministic in the part I read (first 4.5 KB of ~7 KB). + +## 1. Interlingua MT / generation systems + +### 1.1 UNL (Universal Networking Language) +- What: hypergraph of binary labelled relations over Universal Words (headword + constraint list, e.g. sky(icl>natural world)), attributes (@def, @past), ~46 relations in the specs; "UNLization" (text->UNL, semi-automatic) and "NLization" (UNL->text, automatic). [V] https://en.wikipedia.org/wiki/Universal_Networking_Language (page carries maintenance banners; treat cautiously) +- History: began 1996 at UN University Institute of Advanced Studies, Tokyo; UNDL Foundation (Geneva) from Jan 2001; programme dated 1996-2015 by its own archive; WIPO PCT recognition 2002, US patents 6,704,700 and 7,107,206. [V] https://unlarchive.org/index.php?unlweb=unl ; Wikipedia above. +- Meaning vs surface: UNL graph owns meaning (concepts via UW ontology); each language's NLization rules own surface. Rendering = rule-based (language-pair-free generation grammars). +- Outcome: no open-domain/commercial MT product found; one critical paper says no interlingua systems have reached open domains or market and points to the interlingua's design as one candidate cause; another notes different groups interpret the specification differently; UNL "was not designed as an interlingua", MT being one use. [V] https://rcs.cic.ipn.mx/2004_12/ (Boguslavsky "Some Controversial Issues of UNL Linguistic Aspects", and "A Rationale for Using UNL as an Interlingua"); Brazilian ICMC-USP report https://web2.icmc.usp.br/SCATUSU/RT/Serie_Computacao/serie_comp_45.pdf . Counterpoint: Boitet argues UNL succeeds ATLAS-II/PIVOT (Fujitsu commercial interlingua systems). [V, via same search] +- [GAP] No retrieved quantitative evaluation of UW coverage or ambiguity; no primary statement of why activity ended (archive pages are promotional). + +### 1.2 KANT / KANTOO (CMU Center for Machine Translation) +- What: knowledge-based MT with a sentence-level interlingua, coupled to a controlled source language (Controlled English) with an authoring checker; KANTOO (2000-02) is a redesign with modules for source analysis, target generation, terminology management, knowledge-source development, plus a controlled-language checker and lexical maintenance tool. [V] Mitamura/Nyberg/Carbonell 1991 https://figshare.com/articles/An_Efficient_Interlingua_Translation_System_for_Multi-lingual_Document_Production/6621035/1 ; AMTA 2000 https://aclanthology.org/2000.amta-systems.2 ; AMTA 2002 https://aclanthology.org/2002.amta-systems.8 +- Deployment: Caterpillar service documentation (Caterpillar Technical English); Hayes/Maxwell/Schmandt, CLAW 1996 https://mt-archive.net/90/CLAW-1996-Hayes.pdf . Needed an interactive checker so authors write inside the controls. [V] +- Meaning vs surface: interlingua owns domain meaning from a constrained domain model; target generation grammars + terminology own surface; deterministic. +- Scaled because the input language and domain were closed (controlled language). [V from sources' framing; no later-deployment status found] [GAP: continuation post-1990s.] + +### 1.3 Grammatical Framework (GF) +- What: abstract syntax (language-neutral tree/meaning) + one concrete syntax per language (linearization); parsing and generation both from the same grammar pair. Resource Grammar Library (RGL) supplies morphology + syntax API per language. [V] https://www.grammaticalframework.org/ ; Ranta 2009 https://journals.colorado.edu/index.php/lilt/article/view/1205 ; "Abstract syntax as interlingua" https://research.chalmers.se/publication/517996 ; Ranta, Angelov, Gruzitis, Kolachina, Computational Linguistics 46(2), 2020. +- Status: GF 3.12 released 2025-08-08 [V grammaticalframework.org]. RGL status table lists 48 languages with per-area completeness marks (paradigms, lexicon, syntax, dictionary, WordNet, tested, publications) [V] https://www.grammaticalframework.org/lib/doc/status.html . The 2020 CL paper says "over 40 languages" [V via search summary]. Effort-per-language: an earlier search summary quoted "3 to 9 months" but the status page I fetched gave no such figure [GAP: unverified]. +- Meaning vs surface: application grammar owns abstract syntax (domain semantic categories/functions); RGL + concrete grammars own morphology/word order/agreement. Fully deterministic, compiled (PGF). Strict input: parsing requires grammatical conformity (misspellings fail) [V, 2024 Chalmers thesis https://odr.chalmers.se/items/859d68cb-c9ca-4802-92a1-36ae73e56208 which builds a transformer parser for GF trees]. +- Failure/limit modes noted in sources: coverage of open text needs a robust-pipeline layer (the "Scaling up from controlled languages to robust pipelines" paper title); Google.org Fellows' evaluation calls GF "supports about 45 languages to a certain degree" [V]. Concrete syntax per domain/language is authored by hand (renderer combinatorics = grammar authoring, bounded by RGL reuse). [B] +- [GAP] No 2024-25 paper found on LLM -> GF abstract-tree parsing or GF-grounded LLM generation. + +### 1.4 AMR / UMR +- What: AMR = rooted, directed, labelled graph over PropBank frames (not a surface parse), no alignment to words; English-centric, no tense/aspect/number/definiteness. UMR extends to document-level coreference, temporal/modal dependencies, aspect, multilingual lemmas. Weksa cites both. [V] AMR 1.0 spec https://www.isi.edu/results/publications/14628/ ; UMR https://aclanthology.org/2024.lrec-main.229.pdf ; survey https://arxiv.org/pdf/2505.03229 +- AMR is not an interlingua per its own cross-lingual studies: "Not an Interlingua, But Close" (Xue et al., LREC 2014) compared 100 sentence AMRs to Chinese and Czech; compatibility higher for Chinese than Czech. Cross-lingual AMR work (Damonte & Cohen) notes structural alignment is not always possible. [V] https://aclanthology.org/L14-1332/ ; https://arxiv.org/abs/1704.04539 ; Georgetown dissertation https://repository.digital.georgetown.edu/handle/10822/1088595 +- AMR-to-text: AMR omits tense, number, definiteness, politeness, so generation under-determined; one AMR maps to many valid surfaces, penalising BLEU-style metrics (Opitz & Frank MF-beta recovers AMR from generated text to score) [V] https://www.virtual2021.eacl.org/paper_main.610.html ; human eval of AMR-to-English finds hallucination, anonymization, repetition errors [V] https://deepai.org/publication/a-human-evaluation-of-amr-to-english-generation-systems ; GPT4AMR (LLM paraphrase after AMR-to-text: no automatic gain, better in human eval) https://preview.aclanthology.org/setup/2025.winlp-main.2 . Rendering is learned (seq2seq / LLM), not deterministic. [GAP: no head-to-head GPT-4 vs T5/BART AMR-to-text on AMR3.0 with hallucination scoring found.] + +### 1.5 Universal Dependencies-based generation +- UD = shared cross-linguistic categories with language-specific extensions (Weksa cites it as governance pattern) [V weksa docs; https://universaldependencies.org/guidelines]. UD is a syntactic annotation scheme; owner of syntax, not meaning. Used as the tree substrate in Ninai/Udiron (below). Ninai/Udiron paper: for constructs UD handles poorly "new roles and structural linkage strategies may be readily devised" [V via search summary]. [GAP: no standalone UD->text generator system surveyed beyond Udiron; UD shared tasks on surface realisation (SR'18/'19/'20) exist [B], not fetched.] + +### 1.6 SimpleNLG +- What: Java realisation engine (Gatt & Reiter, ENLG 2009): programmer supplies lexical items + syntactic frame; library does morphology, agreement, linearisation. Deterministic. Takes already-lexicalised, syntax-shaped input; owns surface only; meaning/content selection is the caller's. [B for 2009 paper; not retrieved] +- Ports are separate per-language forks, mostly derived from SimpleNLG-EnFr (Vaudry & Lapalme 2013): French, Italian, Spanish, Brazilian Portuguese, Dutch, German (German on v3). Italian authors note such a realiser presumes more detailed morpho-syntactic input; Dutch authors chose French as base as closer to Dutch morphology. [V] https://github.com/rfdj/SimpleNLG-NL ; https://iris.unito.it/retrieve/e27ce430-9bfc-2581-e053-d805fe0acbaa/INLG16-W16-6630%2bPREF.pdf ; https://preview.aclanthology.org/fix_video/W13-2125.pdf +- [GAP] Maintenance status of each port; v3.x not commercially licensed (per repo listing) [V]. + +### 1.7 Abstract Wikipedia / Wikifunctions (closest modern analogue) +- Design: Vrandecic 2020 "Architecture for a multilingual Wikipedia" https://arxiv.org/pdf/2004.04733 : Constructors (typed content templates with slots), Content (abstract calls to constructors), Renderers (functions, in Wikifunctions, from content to text per language). Ninai (constructors + high-level logic, resolution of Wikidata items to lexeme senses per language) builds syntax trees; Udiron (UD-style trees) linearises; both Python prototypes by Mahir Morshed, intended to move to Wikifunctions; draw on Wikidata lexemes. [V] https://meta.wikimedia.org/wiki/Abstract_Wikipedia/Architecture/en ; Semantic Web Journal https://semantic-web-journal.net/content/using-wikidata-lexemes-and-items-generate-text-abstract-representations (a reviewer questioned why this abstract representation was chosen vs alternatives). +- Meaning vs surface: abstract content (Wikidata items + constructors) owns meaning; per-language renderers + lexemes own surface; symbolic, deterministic, community-authored. Vrandecic/CEE 2025 submission argues explicitly for "symbolic (not LLM-based)" community NLG. [V] https://meta.wikimedia.org/wiki/Wikimedia_CEE_Meeting_2025/Submissions/What_Can_Wikifunctions_and_Abstract_Wikipedia_Do_for_You%3F +- Status in 2026 [V]: Wikifunctions status updates (https://www.wikifunctions.org/wiki/Wikifunctions:Status_updates/2026-04-16 , /2026-05-30, /2026-10-02). Simple Wikipedia lists an initial beta release 20 March 2026; ~1000 abstract articles by mid-April 2026; 2026-10-02 update: first Abstract Wikipedia articles about to appear on language Wikipedias, pilots Malayalam, then Dagbani and Igbo; each community must enable via Community Configuration, nothing added automatically; cities flagged as promising gap; 166 functions created that week, many language-named (Japanese, English, Russian, German, Malayalam, Italian, "mul" fallbacks). Not found: confirmation that any generated article is live on a language Wikipedia as of 2026-10-29; per-language renderer coverage list [GAP]. +- Critique on record: Google.org Fellows (Livneh, Gutman, Assaf, Yang) evaluation: Wikifunctions "is not a necessary building block"; recommend decoupling; specify abstract content first, constrained authoring, single NLG approach, adopt GF or build new; criticise runtime nondeterminism/security, Z-object readability; note render latency (ms) concern. Does not mention LLMs or give per-language effort numbers. [V] https://meta.wikimedia.org/wiki/Abstract_Wikipedia/Google.org_Fellows_evaluation (page last edited 2026-07-24; writing date ~2022). Signpost report quoted the project as "at substantial risk of failure" [V via search] https://signpost.news/2023-01-01/Technology_report +- Neural comparison: Kaffee/Vougiouklis/Simperl NLG-for-missing-Wikipedia-articles study (content quality, trust, transparency concerns) [V] https://semantic-web-journal.net/node/2586 ; 2022 Chalmers thesis used multilingual LMs to evaluate/select auto-generated Abstract Wikipedia articles [V via search]. + +## 2. LLMs emitting structured meaning representations + +- LLM AMR parsing: Ettinger et al. 2023 "You Are an Expert Linguistic Annotator": GPT-4 100% valid AMR syntax but often wrong content zero-shot; few-shot better. Li & Fowlie 2025 (JLCL, "GPT makes a poor AMR parser"): GPT-3.5/4o max Smatch ~60 with 5-shot; CoT no gain. Fine-tuned: FLAN-T5 Smatch 86.4 (AMR2.0) / 84.9 (AMR3.0); decoder-only LLM fine-tune ~80.4 (AMR3.0, 2025 study). Different test sets/Smatch variants; not strictly comparable. [V] https://arxiv.org/pdf/2310.17793 ; https://jlcl.org/article/view/285 ; https://arxiv.org/pdf/2304.12272 ; https://arxiv.org/abs/2508.05028v3 +- Constrained decoding to a grammar: Shin et al. EMNLP 2021 — LM paraphrases into a controlled English-like canonical sublanguage under grammar-constrained decoding, then deterministic map to the target MR; few-shot. [V] https://aclanthology.org/2021.emnlp-main.608 (arXiv 2104.08768) +- Cost of format restriction: Tam et al. EMNLP 2024 Industry "Let Me Speak Freely?": stricter format constraints (JSON-mode/constrained decoding) lowered reasoning-task performance; classification tasks sometimes improved; two-step "NL answer then convert to format" largely kept free-form performance; models tested limited. [V] https://arxiv.org/html/2408.02442v1 +- Round-trip fidelity: round-trip/back-translation is reference-free and cheap but measures consistency not accuracy; same-model both ways inflates; lexical-overlap metrics under-credit paraphrase; conflates forward/backward errors; drift accumulates; a 2026 study argues against RTT in meaning-sensitive workflows; another reports RTT lexical loss caught ~67% of major errors at a 20% review budget (Pali-to-English). [V via search summary] https://arxiv.org/pdf/2603.22642 ; https://arxiv.org/pdf/2609.14963 ; https://journals.vilniustech.lt/index.php/NTCS/article/view/26227 ; https://arxiv.org/html/2504.16286v1 . Graph-level analogue for AMR: parse both texts and compare graphs, limited by parser reliability [V] https://arxiv.org/pdf/2501.00269 . +- Cost of the extra step vs direct generation: no source found that measures token/latency/quality cost of "LLM -> meaning packet -> renderer" versus direct multilingual LLM generation [GAP]. Tam et al. is the nearest evidence on quality cost of forced structure. +- [GAP] No retrieved study of LLM-authored UMR, UNL, or GF-tree output reliability. + +## 3. Known failure modes (with what the sources say) + +- Coverage gaps / abstraction: main objection to interlinguas is claimed universality and excess abstractness (Hutchins & Somers 1992, cited in the UNL critique above); Dorr, Hovy & Levin (2006) note few interlinguas beyond demo prototypes, one used in a commercial MT system [V via search summary of Dorr work]; KANT survived inside a controlled language/domain [V framing]; GF scales per domain grammar, open text needs pipelines [V]. +- Divergences: Dorr 1994 classifies translation divergences (thematic, structural, lexical-semantic) that defeat structure transfer; Barnett et al. 1991 argue mismatch is a generation problem [V] https://umiacs.umd.edu/node/13821 ; https://aclanthology.org/1991.mtsummit-papers.4.pdf . Under-specification in the opposite direction: an interlingua must carry distinctions only some targets need ("Capturing Language-Specific Semantic Distinctions in Interlingua-based MT", same MT Summit 1991 volume) [title V; content not read]. +- Register/politeness loss: AMR omits tense/number/definiteness; no AMR slot for politeness/address [B; AMR spec read only via citation]. UNL attributes are a closed set (@def, @past, ...) [V]. Weksa's design addresses via discourse.register_hint and target ontology profiles (docs) — no external evidence collected on how Japanese-honorific or pt-BR treatment performs in any interlingua system [GAP]. +- Renderer combinatorics: n targets x m constructs of hand-authored renderers (GF: concrete syntaxes per language per domain, mitigated by RGL; Abstract Wikipedia: volunteer-written per-language renderers, Google.org critique cites duplicated effort across formalisms; SimpleNLG: per-language forks) [V as above]. Interlingua's engineering rationale: modules scale O(n) not O(n^2) language pairs (Zajic & Miller) [V] https://www.cs.cornell.edu/courses/cs674/2000SP/zajic_final.htm . +- "Interlingua is English in disguise": AMR is English-centric by design and compatibility with Czech < Chinese (Xue et al. 2014) [V]; Damonte & Cohen: not always structurally alignable [V]; UNL's Universal Words are English headwords with constraint lists (sky(icl>natural world)) [V]; GF abstract function names are conventionally English identifiers though the abstract syntax is language-neutral formally [B]; Abstract Wikipedia constructors resolve Wikidata items (Q-ids) to lexemes per language [V]. Weksa's own docs list this critique as an authoring-time check [V]. +- Interpretation drift between annotators/groups for UNL specs [V]; AMR inter-annotator and parser reliability issues (above). +- Project-level failure: Abstract Wikipedia described by its own Signpost coverage as at substantial risk of failure (2023) and decoupling recommended by Google.org Fellows; now in beta 2026 [V]. + +## 4. Summary table (owner of meaning / owner of surface / rendering mode / scale outcome) + +| System | Meaning owner | Surface owner | Rendering | Outcome | +|---|---|---|---|---| +| UNL | UW ontology + ~46 relations + attributes | per-language NLization rules | rule-based | programme 1996-2015; no open-domain product found | +| KANT/KANTOO | domain interlingua + controlled source | target generation grammars + terminology | rule-based | deployed in a controlled-language industrial setting (Caterpillar) | +| GF | abstract syntax per application | concrete syntaxes + RGL (48 langs listed) | compiled grammar, deterministic | live, GF 3.12 (2025-08) | +| AMR/UMR | graph annotation | none (annotation, not generation) | learned AMR-to-text | benchmark ecosystem; not an MT interlingua | +| UD-based | syntax trees | per-language linearisation | rule or learned | substrate, e.g. Udiron | +| SimpleNLG | caller | realiser + lexicon | rule-based | per-language ports | +| Abstract Wikipedia | Wikidata + constructors | Wikifunctions renderers + lexemes | symbolic functions | beta 2026-03; first language-Wikipedia pilots Oct 2026 | + +## 5. Gaps worth knowing exist +- No source on LLM-emitted GF/UNL/Ninai constructors, nor on LLM->packet->deterministic-renderer cost vs direct generation. +- Abstract Wikipedia per-language renderer coverage and live-on-wikipedia confirmation not obtained. +- UNL decline causes, KANT post-1990s status not obtained. +- GF RGL "3-9 months per language" figure unverified. +- Constrained-decoding engines (Outlines, XGrammar, provider structured outputs) not surveyed this pass. diff --git a/docs/research/2026-10-29-weksa-substrate-facts.md b/docs/research/2026-10-29-weksa-substrate-facts.md new file mode 100644 index 0000000..1d3f8c2 --- /dev/null +++ b/docs/research/2026-10-29-weksa-substrate-facts.md @@ -0,0 +1,69 @@ +# Eyes: weksa substrate (2026-10-29). Facts and pointers only. + +Repo: F:\Projects\weksa. Local main = d16cff5 (2026-09-13); origin/main = 55c75e3 (2026-10-22, "Quarantine the Eve operator surface publisher; Eve is deprecated, rebuild on Thing 2"), 1 commit ahead. 63 commits total, first d9ac23b 2026-05-16. Local checkout lags origin; everything below is the LOCAL tree unless marked [origin]. + +## 0. Hosting (item 7) +- `git remote -v`: origin = https://github.com/GameCult/Weksa.git (GitHub only). No Forgejo remote in the checkout. Not checked: whether a forge repo exists. +- Tag `parked/weksa-eve-surface` -> d16cff5 (also on origin). Branches: main only. + +## 1. Live code vs doc-only (item 1) +No package.json, lockfile, node_modules, Cargo, or `packages/` dir. AGENTS.md:43-50 names `packages/weksa-state-model` ("owns executable typed state"); it does not exist. schemas/*.md say "Executable schema code does not exist yet". +Code (all Node ESM/CJS scripts, plus 2 Python tools): +- scripts/weksa-daemon.mjs (48 KB): RUDP daemon. Node v24.15 here. `node --check` passes for all 7 .mjs/.cjs and both .py compile. +- scripts/weksa-rudp-command.cjs, scripts/idunn-rudp-health.cjs: RUDP command ingress / Idunn health (duplicated helper code, per gamecult-ops repo-census weksa.md "Duplicate authority"). +- scripts/run-metame-{persona-golf,swarm-explorer,affect-tuning-loop}.mjs, profile-metame-finetune-dataset.mjs: offline experiment harnesses; spawn Codex CLI (`WEKSA_CODEX_EXECUTABLE` default C:\Users\Meta\AppData\Roaming\npm\codex.cmd) and VoidBot (`E:/Projects/VoidBot`, run-metame-persona-golf.mjs:8). +- scripts/{start,restart}-weksa-daemon.ps1, health-weksa-daemon.cmd, restart-weksa-daemon.cmd: Starfire launchers; default state root `E:\Projects\weksa\.weksa` (start-weksa-daemon.ps1:4), MiMo key `E:\Projects\gamecult-ops\mimo-api-Weksa.txt`. +- tools/export-provider-advertisement.mjs (prints provider advertisement JSON; `--help` is ignored, it just prints), tools/emit_tiny_panphon_handoffs.py, tools/validate_tiny_panphon_handoffs.py. +Does it run today: NOT on this workstation. Daemon needs `..\CultLib\packages\{cultnet-ts,cultcache-ts,cultmesh-ts}` via NODE_PATH (weksa-daemon.mjs:386-392) and `..\CultLib\node_modules\@msgpack\msgpack` (weksa-rudp-command.cjs:14-20). `require("cultnet-ts")` fails: `F:\Projects\CultLib\packages\cultnet-ts\dist\index.js` missing (no dist built); `CultLib\node_modules\@msgpack` absent. Not built/run further (heavy work -> Yggdrasil). +Doc/data only: docs/ (14 md + .tex + 17 research PDFs ~96 MiB worktree), schemas/ (10 md receipts), data/ (cultural-ontology yaml, target-language-ontology yaml, `roots/` and `typology/` are README-only), settings/ (Aetheria/Nibu, Eusocial Interbeing, Rust to Dust), examples/, prompts/ (2 md), state/map.yaml + scratch.md. +Binary state in git: .weksa/cultural-ontology/starter-targets.cc, .voidbot/state/weksa.cc. `.weksa/*.cc|json|log|pid` are gitignored; `.weksa/` holds only the cultural-ontology dir (no runtime witnesses present). + +## 2. Interlingua (item 2) +- docs/interlingua-standard.md: Version `0.1-draft`. Packet top-level: `interlingua_version, packet_id, kind, provenance, context, discourse, referents, predications, relations, constraints, extensions, trace`. Required: version, packet_id, kind, + at least one of referents/predications/relations (schemas/interlingua-packet.md:17-24). `kind` values: utterance, name_request, commentary_intent, narration, dialogue_line, corpus_example, debug_probe. Extensions namespaced (`zyphos.*`, `rtd.*`, `game.*`, `authoring.*`). Prior art cited: AMR, UMR, FrameNet, Universal Dependencies. Promotion rule for extensions at end of doc. +- Schema id used in verse contract: `weksa.interlingua_packet.v0` (docs/verse-service-contract.md "Inputs"). The packets themselves carry `interlingua_version: 0.1-draft`. Daemon-minted packets carry `0.1-daemon-provisional`. +- No machine-readable schema (no JSON Schema / CultCache type) for the packet. schemas/interlingua-packet.md lists validation goals only. +- Examples: examples/english-lowering/nibu-proof-001/interlingua.yaml (kind dialogue_line, full shape); examples/persona-lowering/{brokkr-edda-voice,metame-casual-pre2025}/interlingua.yaml use a DIFFERENT shape: `schema_version: weksa.persona_lowering_fixture_batch.v0`, `items[].communicative_act, scene{prior_turns...}`; they are not interlingua-standard packets. +- Code that produces: weksa-daemon.mjs `decomposeThoughtIntoInterlingua` (:804-855, heuristic stub: one `express` predication, raw text in `extensions["weksa.raw_thought"]`, speech act by regex `inferSpeechAct` :856). Code that consumes: `normalizeInterlinguaPacket` (:781-803, passthrough/fill defaults, no validation). No validator anywhere. Metame harness has an LLM-prompted stage that emits packet-like YAML (persona-interlingua-prompt.md). + +## 3. Lowering (item 3) +Daemon `lowerInterlinguaToSpeechText` (weksa-daemon.mjs:863-902): NOT a lowering. It returns `command.spoken_text` if supplied, else `interlingua.outputs.spoken_text`, else raw thought text, else `discourse.intent`. Target language/cultural refs are copied from the command or defaulted to en-US; the cultural ontology store is not consulted (gamecult-ops repo-census weksa.md "Verdict"). +Then buildMimoVoiceDesignRequest (:903) -> callMimoVoiceDesign (:964; `fetch("https://api.xiaomimimo.com/v1/chat/completions")`, model mimo-v2.5-tts-voicedesign) -> writes WAV + receipt. Persona state is read as raw bytes + regex hints (`inspectPersonaState` :724, `extractPersonaStrings` :745, `derivePersonaDeliveryHints` :762). +Implemented lowerings by kind: +- Deterministic code: only the MiMo request projection/prompt builder (above). Grammar/morphology/phonology/diachrony/renderer stages: no code. runtime-authoring-split.md claim ("no required LLM call in hot path", pipeline ontology projection->grammar->morphology->phonology->diachrony->render) has no implementation; the daemon hot path has no LLM call, and also no linguistic lowering. +- LLM prompts (markdown) driven by hand or Codex CLI: prompts/nibu-cultcache-target-{lowering,critic}.md; examples/persona-lowering/metame-casual-pre2025/{persona-interlingua-prompt,weksa-lowering-prompt,lowering-prompt}.md; run-metame-persona-golf.mjs real runs. Metame evaluation.yaml: exact_matches 2, plausible_matches 4, "blind: false" (answer key was seen). Ground truth is held-out Discord messages by Metacrat (examples/persona-lowering/metame-casual-pre2025/ground-truth.yaml; not read; README says "held-out Discord messages authored by Metacrat before 2025"). +- Hand-authored fixtures (outputs, not code): examples/english-lowering/nibu-proof-001 (interlingua, projected-context, lowered-output, pronunciation-plan, utterance-embedding), examples/multilingual-lowering/nibu-proof-001/realizations.yaml (en/pt-BR/ja), examples/cultcache-lowering/nibu-proof-001/{en-transatlantic,ja-JP-kanto-contemporary,pt-BR-vanilla-brazilian}.yaml + critique/, examples/persona-lowering/brokkr-edda-voice/{interlingua,lowered-output,lowering-trace}.yaml (one item `command-without-receipt`; trace names activated axes translated_edda_plainness, artifact_testimony, bargain_and_consequence), examples/speech-provider/mimo/nibu-proof-001/en-US-request.yaml. +- Target-language ontology data (YAML, "profiles the lowerer must inspect"): data/target-language-ontology/{en-US,en-US-metacrat-casual-pre2025,ja-JP,pt-BR,pt-BR-overlays,pt-BR-umbanda}.yaml. Cultural ontology: data/cultural-ontology/{catalog.yaml, cultures/ x4, subcultures/ x2, referents/ x2, persona-stacks/brokkr.yaml}; typed copy in .weksa/cultural-ontology/starter-targets.cc (binary CultCache). Docs: docs/{multilingual-utterance-lowering,flavored-english-lowering,english-pronunciation-lowering,mimo-tts-lowering,utterance-embedding}.md; packet receipts schemas/{utterance-lowering-packet,english-lowering-packet,mimo-tts-request,target-language-cultural-ontology,cultural-ontology-profile}.md. Lowering packet id: `weksa.utterance_lowering.v0`. +- Alien-language side: settings/eusocial-interbeing/language-design.md, settings/rust-to-dust/language-design.md are design prose; docs/language-model.md (1 KB), no engine. +- AquaSynth path: tools/emit_tiny_panphon_handoffs.py (hand-maintained PanPhon table; fixtures under examples/speech-training/tiny-panphon-v0.1/ refer to lost EpiphanyAgent path). +- Prior art pointer in repo: docs/best-modern-approach.md; docs/persona-finetuning-dataset-exploration.md. + +## 4. Daemon and Verse surface (item 4) +- Contract: docs/verse-service-contract.md. Commands listed: intent.create, intent.review, utterance.lower, handoff.export, speech_provider.mimo.voicedesign, provider.advertise. Only `speech_provider.mimo.voicedesign` has a handler (weksa-daemon.mjs:60-87 startup; handler :640-704). Doc says other witnesses (`.weksa/intent/*.cc`, pronunciation/, handoff/, traces/, projects/) are "what the daemon must commit when the runtime lands": no code writes them. +- Transport: `cultnet.transport.rudp.v0`, command ingress rudp://127.0.0.1:8813, schema `weksa.mimo_voicedesign_command.v0` (commit e9a00e8, 2026-06-23). Health to Idunn over RUDP 127.0.0.1:17870 contract `weksa.cultnet-rudp-provider-health` (3c24457, 2026-06-16); optional Odin CultMesh RUDP 127.0.0.1:17871; command boundary + transport profile records into `.weksa/provider-advertisement-store.cc` (54272da). Witness `.cc` files other than the store are YAML text via `toCultCacheText` (:1035-1078) per census. +- Idunn target: gamecult-ops/scripts/idunn/idunn-deployment-targets.ps1:62-72: Id `weksa`, LocalPath `$projectsRoot\weksa`, Service "weksa daemon", Health `daemon-published-rudp:weksa.cultnet-rudp-provider-health`, Restart `$repoRoot\scripts\restart-weksa.cmd`. docs verse contract: target `weksa` in `starfire-local` swarm profile (Starfire, not Yggdrasil). inventory.md:27-31 records an observation dated 2026-06-11 (http /health, since deleted). +- Yggdrasil (ssh ygg, read-only, 2026-10-29): `systemctl list-units --all | grep -i weksa` = 0 lines. `idunn status | grep weksa` = no output. Only files named weksa there: /srv/build/Odin/scripts/{health,restart}-weksa.cmd and /srv/voidbot/source-repos/Weksa(+/.weksa) (voidbot source index copy). Not running on Yggdrasil. +- Starfire (this machine, 2026-10-29): no node process with "weksa" in its command line; no UDP listener on 8813; no .weksa/weksa-daemon.pid. gamecult-ops/docs/repo-census-2026-09/repos/weksa.md says the same for the census date ("no Weksa daemon process or PID file was present"). Starfire is the host for the `starfire-local` profile; I did not check Idunn's Starfire state. +- Eve dependencies [local tree / d16cff5]: weksa-daemon.mjs:160 (writes eve-surfaces.cc), :167 (eve-operator-surface.json), :258, :284-286 (publications), :331/:477 (cultMeshAddress asgard.starfire.weksa/eve/operator), :394-433 (defineDocumentType gamecult.eve.surface_state / interface_binding / provider_advertisement, `schema:{parse}` no-op), :610-639 buildOperatorSurface (`gamecult.eve.surface.v1`, surfaceId weksa.eve.operator.v0); tools/export-provider-advertisement.mjs (16 Eve hits); docs/fixtures/weksa-provider-advertisement.json (runtime-read at :473-505); docs/verse-service-contract.md "Eve Surfaces" (4 `weksa.eve.*.v0` ids). [origin 55c75e3] removes these: diff shows 7 files, -265/+14 (README, architecture, fixture, roadmap, verse contract, weksa-daemon.mjs, export tool). Mind: `thing2:follow_up:weksa-operator-view-on-thing2` (admitted 2026-10-22) says quarantined publisher is at tag parked/weksa-eve-surface (which points at d16cff5, the pre-quarantine head) and main publishes typed state only (true of origin/main, not of the local checkout). +- CultLib usage: via sibling-path NODE_PATH, no manifest. Imports: `cultnet-ts` {CultNetRudpSession, decodeRudpPacket, encodeCultNetMessageForWire, encodeRudpPacket, parseCultNetMessage}; `cultmesh-ts` {CultMesh.createNode, publishRudpDocumentOnce}; `cultcache-ts` {defineDocumentType}. CultLib today (HEAD last commit 2026-10-28): cultcache-ts 0.14.2, cultnet-ts 0.3.0, cultmesh-ts 0.2.0, each with an "Unreleased / Breaking" changelog section; those symbols all still exist in src (cultnet-ts/src/rudp.ts, contracts.ts; cultmesh-ts/src/index.ts:5371 createNode, :5903 publishRudpDocumentOnce; cultcache-ts/src/document.ts:12). cultmesh-ts Unreleased entries remove catalog `asSchemaAlias`/`parse` option; I did not diff against weksa's use. Last verified by weksa: unknown (no run since 2026-09). CultLib docs list weksa as a TS consumer (docs/typescript-quic-realtime-cut.md:1517-1519, 2079; docs/cultcache-union-parity-map.md:234). +- Daemon-state is regenerated: store `rm`'d at every refresh (weksa-daemon.mjs:325, 363) per census. + +## 5. Persona / Face (item 5) +- .voidbot/README.md + state/README.md: Weksa's repo Face; "nerdy anthropologist of language systems" (user-provided seed). State: `.voidbot/state/weksa.cc` (52 KB, CultCache binary, VoidBot self-state types: void.self_profile, void.thought_memory, void.agency_pressure, void.face_affect, void.candidate_interventions, void.moderation_cursor, void.scheduled_runtime, void.speech_receipts; found via `strings`). No `gamecult.persona_state.v0` document anywhere in the repo or `.weksa`. `.voidbot/state/weksa-birth-seed-operations.json` (25 KB, seed provenance). `.voidbot/voice/identity.json`: id weksa, grants discussion/rumination/repo_read/repo_propose/discord_text/aquarium_embodiment; authority "propose"; voice/weksa.png. +- Stale paths: READMEs and identity.json cite `E:\Projects\VoidBot\scripts\void-self-state.mjs`, `E:/Projects/weksa`, `E:/Projects/weksa/.voidbot/state/weksa.cc` (identity.json:repoPath/statePath/body). 41 files in repo contain `E:\Projects` or `C:\Users` paths (daemon, ps1/cmd launchers, harnesses, examples, settings/, prompts/ incl. `E:/Projects/AetheriaLore/.voidbot/state/nibu.cc`). Zyphos and Fensalir docs also point at `E:\Projects\weksa`. +- Standard: F:\Projects\gamecult-ops\docs\persona-state-standard.md still names VoidBot as read/projection/migration owner (persona-state-service.ts, persona-standard-state-projector.ts, `persona:export-friendly`, `persona:migrate-portable`) and Epiphany schema path (Epiphany now archived). +- Mind (eureka-state): `eureka-substrate:cut_spec:cut-doctrine-persona-in-huginn.r3` (rewrites that standard: Huginn holds canonical gamecult.persona_state.v0 per instance with a mind, VoidBot keeps projection and repo Personas without a mind); `eureka-substrate:cut_spec:cut-huginn-persona-state.r3` (PersonaGet/PersonaPut, tools persona_get/persona_put); `eureka-body:follow_up:weksa-mind` (2026-10-09, InForce: "Open a second Huginn instance for Weksa's Persona", waits on single-instance persona state, launch, waker); `eureka-body:ruling:persona-per-mind`; `eureka-substrate:ruling:operator-persona-in-mind`. Huginn doc F:\Projects\Huginn\docs\swarm-revival-target.md:170-179 "Slice 1: Weksa alive" (huginn@weksa, own port, EUREKA_INSTANCE=weksa, brake held, import Weksa's remnant as first Persona put; done when her Persona turn runs under its brake), :229 lists Weksa as first remnant row (`weksa-mind`). Whether those prerequisites have landed: not checked. + +## 6. Consumers (item 6) (rg per repo dir under F:\Projects, worktree dirs skipped; terms weksa / meaning packet / interlingua_version) +No other repo contains `interlingua_version` or the string `weksa.interlingua_packet`. Hits: +- VoidBot (live code; last commit 2026-09-13): packages/core/src/weksa-speech.ts (`WeksaSpeechClient`, `WeksaMimoReceipt`), apps/worker/src/index.ts:26-30,76, apps/bot/src/metame-owner-voice-bridge.ts. Sends mimo voicedesign commands to Weksa RUDP (`commandUri`). VoidBot is being retired. +- AquaSynth: README.md:121,136 (accepts Weksa utterance handoff; fixtures tests/AquaSynth.Dsl.Tests/Fixtures/Speech/WetVoice01/ Weksa-owned), docs/audio-doctrine.md:195, docs/daemonic-swarm-prior-work.md:81. Doc/fixture contract; no live runtime protocol (census). +- Vili: README.md:21, scripts/vili-daemon.mjs:214 (string "Weksa interlingua lowering" in capability list). +- Odin: docs/transport-shortcut-inventory.md:49,82 and scripts (Weksa health/restart cmd on Ygg build dir); Idunn: docs/route-continuity-cut.md:2439 (weksa deploy/restart actuators scripts); Heimdall/vendored CultLib: swarm-documents.ts:75,416 (weksaOperatorState/CommandBoundary/TransportProfile definitions, one `null`); gamecult-ops (inventory, idunn-deployment-targets.ps1, repo-census, eve census docs); Eve docs/thing-campaign.md (weksa listed as provider to migrate; commit d16cff5 recorded); Epiphany notes (Weksa lowering receipts, historic); Huginn docs/swarm-revival-target.md; CultLib docs (consumer counts above); Bifrost docs/agent-transport.md:45 ("Universal utterance schema with Weksa" issue title); StreamPixels/vendor/CultLib docs. +- Setting repos: Zyphos (state/map.yaml:7,32, docs say future inhabitant names come via weksa), Fensalir docs/zyphos-eusocial-sync.md:78, Ghostlight experiments mention Zyphos only. +- Weksa also consumes: AetheriaLore (Nibu state path in prompts), Brokkr persona stack, VoidBot projector (Metame golf). +Live status of consumers: VoidBot WeksaSpeechClient is live code against a daemon that is not running; others are docs/fixtures/references. + +## 8. Other +- gamecult-ops/docs/repo-census-2026-09/repos/weksa.md (2026-09 census, 68 weksa mentions) is the fullest third-party map: partial CultCache/CultNet/CultMesh conformance, Persona state "absent", load-bearing JSON (provider fixture), duplicate RUDP helpers, affect-tuning loop not consumed by lowering. +- gamecult-ops/docs/eve-crusade-coordination.md:105-114: weksa classed a daemon candidate (commit d06b9f5 "Promote Weksa intent daemon"). Eve census: docs/research/2026-10-22-eve-publisher-census.md:98-102. +- `.gitignore` excludes `.weksa-runs/`, `examples/persona-lowering/*/runs/`. diff --git a/docs/targets/interlingua-lowering.md b/docs/targets/interlingua-lowering.md new file mode 100644 index 0000000..a23d968 --- /dev/null +++ b/docs/targets/interlingua-lowering.md @@ -0,0 +1,66 @@ +# Target: agents speak interlingua, Weksa lowers it + +Campaign `weksa-lowering` (Eureka mind). Operator, 2026-10-29: "having agents +writing interlingua and using weksa to lower it to the display language would +be a fantastic feature. That would be a nice campaign to revive her with so she +doesn't come back to a dead body". + +## Why + +An agent's outward speech today is English text the model chose, so meaning, +register and voice are fused in one string nobody can inspect or re-target. +Weksa's design already separates them: the packet owns meaning, the target +profile owns address, politeness and forbidden flattenings, the lowerer owns +surface text and a trace. The campaign makes that design real for a live +reader, and gives Weksa's Persona a working body when her mind +(`eureka-body:follow_up:weksa-mind`) wakes. + +## Body today (facts: docs/research/2026-10-29-weksa-substrate-facts.md) + +- The interlingua is a prose standard (`interlingua-standard.md`, 0.1-draft) + with no machine schema and no validator. Its only producer is a stub that + wraps raw text; its only consumer passes packets through unvalidated. +- No lowering exists in code. `lowerInterlinguaToSpeechText` returns the + supplied text. The "LLM-free hot path" is a design statement. Real lowerings + so far are hand-run LLM prompts and hand-authored fixtures. +- The daemon is a Node shim for one MiMo TTS command, runs nowhere, and is an + Idunn target only in the Starfire-local profile. Eve surfaces are quarantined + (55c75e3). +- Her Face state is VoidBot-shaped (`.voidbot/state/weksa.cc`), not + `gamecult.persona_state.v0`; 41 files carry stale machine paths. + +## Prior art (docs/research/2026-10-29-interlingua-lowering-prior-art.md) + +- Deterministic open-domain renderers cost per-language grammar work for + years: GF's library covers 48 languages unevenly; Abstract Wikipedia's + symbolic renderers are only now reaching a first language Wikipedia. +- Interlinguas that shipped (KANT) had closed domains and controlled input. +- LLMs emit meaning structures poorly when asked directly (about 60 Smatch + few-shot vs 80-86 trained); free reasoning followed by conversion to the + structure keeps quality (Tam et al. 2024; Shin et al. 2021). +- Round-trip checks measure consistency, not accuracy, and are inflated when + one model does both directions. + +## Invariants + +- `packet-owns-meaning`: what is said lives in the packet; no lowering may add + a claim, referent or commitment the packet lacks. +- `typed-packet`: the packet is a typed CultCache document with a published + schema and a validator that refuses malformed packets at the door. +- `lowering-traced`: every surface text carries a trace naming the packet, the + target profile and the choices made. +- `profile-owns-register`: address, politeness and forbidden flattenings come + from the target profile, never from the lowerer's defaults. +- `no-eve`: no new Eve surface; operator view waits on Thing 2. + +## Open forks (questions in the mind) + +- First reader: whose display text is lowered first. +- Lowerer shape: deterministic, model, or both with one contract. +- How an agent produces the packet. + +## Not in scope + +- Weksa's conlang engine (grammar, phonology, diachrony for alien languages). +- MiMo TTS beyond keeping its command working or parking it. +- Her Persona's mind; that is `eureka-body:follow_up:weksa-mind`. From 2cea2b8a6d70ead1b6efb28e214bbebf5aedfaab Mon Sep 17 00:00:00 2001 From: Eureka Date: Thu, 29 Oct 2026 09:30:41 +0100 Subject: [PATCH 03/31] Target: persona-nuance goal, corpus golf loop, conlangs in scope Co-Authored-By: Claude Opus 5.5 --- docs/targets/interlingua-lowering.md | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/docs/targets/interlingua-lowering.md b/docs/targets/interlingua-lowering.md index a23d968..6517ffc 100644 --- a/docs/targets/interlingua-lowering.md +++ b/docs/targets/interlingua-lowering.md @@ -3,7 +3,23 @@ Campaign `weksa-lowering` (Eureka mind). Operator, 2026-10-29: "having agents writing interlingua and using weksa to lower it to the display language would be a fantastic feature. That would be a nice campaign to revive her with so she -doesn't come back to a dead body". +doesn't come back to a dead body". And: "The goal of weksa is for interlingua to +be able to express all the nuance and subtlety a persona might want, and to +project it into both existing languages and conlangs. We can use English as the +obvious first target, create a corpus of expressive English outputs, and golf +the metrics down on a loop where we try to express the target in interlingua +and lower it to see how close we can get, improving the spec and lowering". + +## Method + +A corpus of expressive English persona outputs is the target. Each loop +iteration expresses a corpus item as a packet, lowers it to English, scores the +distance to the item, and improves the packet spec or the lowering where the +loss is. English is the first target; other languages and conlangs follow on +the same packets. The existing Metame golf harness +(`scripts/run-metame-persona-golf.mjs`) is the precedent, not the design: its +ground truth is Discord text, which can never feed this loop +(`gamecult-chat:ruling:discord-taints-training`). ## Why @@ -52,15 +68,17 @@ reader, and gives Weksa's Persona a working body when her mind - `profile-owns-register`: address, politeness and forbidden flattenings come from the target profile, never from the lowerer's defaults. - `no-eve`: no new Eve surface; operator view waits on Thing 2. +- `no-surface-leak`: a packet carries no target-language surface wording, so a + lowering cannot score by copying text the encoder saw. +- `corpus-clean`: no corpus item comes from Discord or another source whose + terms forbid training use. ## Open forks (questions in the mind) -- First reader: whose display text is lowered first. - Lowerer shape: deterministic, model, or both with one contract. -- How an agent produces the packet. +- What the loop's metric is, and where the corpus comes from. ## Not in scope -- Weksa's conlang engine (grammar, phonology, diachrony for alien languages). - MiMo TTS beyond keeping its command working or parking it. - Her Persona's mind; that is `eureka-body:follow_up:weksa-mind`. From d76b96789d801e4b671057b0ca0ad2e3c7d894fb Mon Sep 17 00:00:00 2001 From: Eureka Date: Thu, 29 Oct 2026 09:37:35 +0100 Subject: [PATCH 04/31] Research: golf-loop metric, leakage and corpus prior art Co-Authored-By: Claude Opus 5.5 --- .../2026-10-29-golf-loop-prior-art.md | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 docs/research/2026-10-29-golf-loop-prior-art.md diff --git a/docs/research/2026-10-29-golf-loop-prior-art.md b/docs/research/2026-10-29-golf-loop-prior-art.md new file mode 100644 index 0000000..e2a24ae --- /dev/null +++ b/docs/research/2026-10-29-golf-loop-prior-art.md @@ -0,0 +1,88 @@ +# Prior art for the Weksa golf loop: metric, leakage, corpus, 2026-10-29 + +Eyes pass, campaign `weksa-lowering`. Facts and pointers only; no recommendation. Tags: [V] read this pass (page or search result returned it; "search-only" = seen only in a search summary, not the paper); [B] background, not re-verified; [GAP] looked for, not found. Several arXiv PDFs came back as unreadable binary; where so, the HTML/abs version was used or the claim is downgraded. Not re-covered: UNL, KANT, GF, AMR, Abstract Wikipedia, LLM AMR parsing (see docs/research/2026-10-29-interlingua-lowering-prior-art.md). + +## 1. Metrics for meaning AND nuance + +### 1.1 Metric vs human correlation, measured +- Briakou, Agrawal, Tetreault, Carpuat, EMNLP 2021, multilingual formality transfer (en, it, br-pt, fr). [V via ar5iv] https://ar5iv.labs.arxiv.org/html/2110.10668 ; https://aclanthology.org/2021.emnlp-main.100 + - Meaning preservation, Spearman rho vs human, en/it/pt/fr: chrF 0.59/0.67/0.70/0.75; BERTScore 0.59/0.62/0.65/0.68; METEOR 0.54/0.58/0.64/0.60; s-BLEU (vs input) 0.48/0.59/0.67/0.66; r-BLEU (vs reference) 0.31/0.00/0.05/0.12; zero-shot XLM-R STS ~0.65-0.68 (it/pt/fr). Authors recommend dropping reference-BLEU. + - Fluency: XLM-R pseudo-log-likelihood best (0.50/0.46/0.55/0.61), "moderate"; KenLM 0.27-0.45. + - Formality (style strength): XLM-R regression, zero-shot cross-lingual, rho 67/72/59/61 (en/pt/fr/it); mBERT lower; binary classifiers over-predict "formal" outside English, authors recommend regression, not classification. + - System-level: human and automatic metrics do not always agree on best system; r-BLEU got 30/40 pairwise system comparisons right vs chrF 25/40 (authors: suggestive only). + - Not evaluated there: BLEURT, COMET, MAUVE. Only one style axis (formality), a single sentence-level task; no hedging, humour, affect, stance. +- Mir, Felbo, Obradovich, Rahwan, NAACL 2019 "Evaluating Style Transfer for Text" (Yelp sentiment). Three axes: style-transfer intensity, content preservation, naturalness. Proposed: Word Mover's Distance on style-masked text for content; direction-corrected EMD for intensity; adversarial classifier for naturalness; models show trade-offs, so compare at points on a trade-off curve. [V search-only] https://aclanthology.org/N19-1049/ . Correlation numbers [GAP: PDF not read]. +- Briakou et al. GEM 2021 "A Review of Human Evaluation for Style Transfer": surveys 97 papers' human-evaluation practice. [V search-only] https://aclanthology.org/2021.gem-1.6 +- BERTScore (Zhang et al. 2020) claims better human correlation than n-gram metrics and robustness on PAWS adversarial paraphrase [V search-only] https://arxiv.org/abs/1904.09675 . BLEURT is a learned metric trained on human ratings; the paper notes learned metrics inherit training-data bias [V search-only] https://arxiv.org/pdf/2004.04696 . +- On Evaluation Metrics for Paraphrase Generation (2022): most common metrics align poorly with human annotation; embedding metrics give very high scores to a candidate identical to the input; reference-free variants align better than reference-based. [V search-only] https://arxiv.org/pdf/2202.08479 +- MAUVE (Pillutla et al. 2021): distribution-level divergence between model text and human text in quantised embedding space; authors claim human-judgment correlation on three open-ended tasks. It scores a set of texts, not a pair. [V abstract] https://arxiv.org/abs/2102.01454 . No figures read. +- COMET: no source read this pass. [GAP] +- Metric-vs-human numbers for hedging, humour, affect, stance, politeness-as-nuance, persona voice: [GAP] none found. Nearest: formality (Briakou above). Also "Human Judgement as a Compass to Navigate Automatic Metrics for Formality Transfer" (2022), title only [V] https://ar5iv.labs.arxiv.org/html/2204.07549 . + +### 1.2 Style / authorship embeddings +- STEL (Wegmann & Nguyen, EMNLP 2021): similarity-based style evaluation over four dimensions (formal/informal, simple/complex, contraction, number substitution) with content-controlled sentence pairs; BERT-based methods beat simple style measures. [V search-only] https://arxiv.org/abs/2109.04817 . Human-baseline and accuracy numbers [GAP: PDF unreadable]. +- Wegmann, Schraagen, Nguyen 2022 "Same Author or Just Same Topic?": authorship-verification-trained representations may encode content; controlling for conversation labels gives more content-independent style representations than domain control or none. [V abstract] https://arxiv.org/abs/2204.04907 . STEL-or-Content benchmark introduced there. +- StyleDistance (2024): says LUAR is sometimes used for automatic style-transfer evaluation, does not explicitly train for content independence; claims lead among content-independent style embeddings on STEL and STEL-or-Content. [V search-only] https://arxiv.org/pdf/2410.12757 . LUAR paper itself (Rivera-Soto et al., EMNLP 2021) [B], not fetched. Per-model numbers [GAP]. +- STEB: Style Text Embedding Benchmark (2026) notes LUAR is evaluated only on authorship retrieval. [V search-only] https://huggingface.co/papers/2606.31741.md +- Style embeddings tested against persona-voice/hedging/humour: [GAP]. + +### 1.3 LLM-as-judge and its biases +- Zheng et al. 2023 (MT-Bench/Chatbot Arena) [V via arxiv html] https://arxiv.org/abs/2306.05685 : position-bias consistency (default prompt) Claude-v1 23.8%, GPT-3.5 46.2%, GPT-4 65.0%; repetitive-list verbosity attack failure Claude-v1 91.3%, GPT-3.5 91.3%, GPT-4 8.7%; self-enhancement: GPT-4 about +10 points win rate for own answers, Claude-v1 about +25, authors say data too limited to confirm; GPT-4 vs human agreement 85% (ties excluded) vs human-human 81-82%; 66% counting ties. +- Wataoka et al. 2024 "Self-Preference Bias in LLM-as-a-Judge" [V] https://arxiv.org/html/2410.21819v1 : eight models, ~33,000 Chatbot Arena dialogues; GPT-4 largest bias (equal-opportunity metric 0.520; demographic-parity 0.749); judges favour lower-perplexity text regardless of authorship; authors hypothesise familiarity drives self-preference. +- Li et al. 2025 "Preference Leakage": contamination when the data-generating and judging LLM are the same, inherited, or same family; judges favour related students; harder to detect than earlier biases. [V abstract] https://arxiv.org/abs/2502.01534 +- TwinVoice (persona simulation benchmark): judge-vs-human Spearman 0.591 for scoring vs 0.605 human-human; Cohen kappa 0.646 vs 0.673 for ranking. [V search-only] https://arxiv.org/pdf/2510.25536 +- "Can LLM be a Personalized Judge?": low agreement with human ground truth on PRISM/OpinionQA/empathetic dialogue; ~80% on a high-confidence subset. [V search-only] https://arxiv.org/pdf/2406.11657 +- Secondary-source claims (blogs): 20-40% of verdicts flip on swap for closely matched pairs; up to 40% swing across prompt templates. [V search-only, practitioner blogs, uncontrolled] e.g. https://tianpan.co/blog/2026-04-27-llm-judge-bias-audit-length-position-format . Treat as unverified. +- Pairwise vs pointwise stability, per a glossary page: absolute scores fluctuate more across judge models than pairwise. [V search-only, low authority] https://howaiworks.ai/glossary/llm-as-a-judge +- Judge agreement specifically on register/hedging/humour/affect with numbers: [GAP]. + +## 2. Goodhart and leakage in round-trip / autoencoder setups + +- Round-trip fidelity caveats already catalogued in the prior-art note section 2 (consistency not accuracy; same model both ways inflates). Not repeated. +- Self-bias in model-built benchmarks: Xu et al. 2025 (MT as testbed): generated test data and the evaluating LLM each contribute self-bias, combining amplifies it; "each model ranks itself first"; stylistic homogeneity persists despite diversity controls; source-text diversity (their diversity metric) partly mitigates; also appears in open-ended generation (Chatbot Arena). [V abstract] https://arxiv.org/abs/2509.26600 (EMNLP 2026 version https://aclanthology.org/2026.emnlp-main.629.pdf). Silencer (Yuan et al. 2025) weights generated benchmarks using heterogeneity across multiple generators. [V search-only] https://www.arxiv.org/pdf/2505.20738 +- LLM bottleneck/autoencoder leakage of surface form: no paper found on an encoder smuggling target surface form through a natural-language/structured bottleneck, nor on paraphrase-invariance tests for it. [GAP]. Adjacent: a paper proposing separate "Exact Reconstructive Effectiveness" and "Semantic Reconstruction Effectiveness" for LLM compression (separates verbatim recovery from preserved intent) [V search-only, paper not identified; see https://cdnjs.deepai.org/publication/semantic-compression-with-large-language-models]; ICAE/gist-token compression papers [V search-only] https://arxiv.org/abs/2505.17117 . +- Emergent communication [mostly V search-only]: + - Keresztury & Bruni 2020: deep-learning solutions often lack abstract reasoning; compositionality linked to out-of-distribution generalisation. https://arxiv.org/abs/2001.08618 [V abstract] + - Li & Bowling NeurIPS 2019: resetting listeners (ease-of-teaching) pushes emergent languages toward more structure; reviewers doubted transfer to complex settings. https://arxiv.org/abs/1906.02403 [V] + - ACL 2026 long paper proposes a bijectivity-based metric claimed to track whether agents can speak/hear an emergent language better than topographic similarity (Brighton & Kirby 2006) or bag-of-symbols disentanglement (Chaabouni et al. 2020). https://aclanthology.org/2026.acl-long.1389.pdf [V search-only] + - CELEBI (NeurIPS 2025): discrete bottleneck + iterated learning, reports gains in reconstruction and topographic similarity on Shapes3D/MPI3D. https://neurips.cc/virtual/2025/poster/115077 [V search-only] + - Chaabouni et al. 2020 "Compositionality and generalization in emergent languages" (ACL) [B]; not fetched. No source found tying emergent-communication leakage directly to LLM agents using natural-language packets. [GAP] +- Defences named in sources found: judge and generator from different model families, check item overlap with generator training data (search summary of the self-bias literature); multi-generator weighting (Silencer). Vocabulary restriction and paraphrase-invariance as leakage defences: [GAP: no source]. + +## 3. Iterating a schema / spec against a metric + +- OPRO (Yang et al., Large Language Models as Optimizers): the base setup uses no validation set; training accuracy often 5-20 points above test; suggests more training data and early stopping. [V via search summary] https://arxiv.org/pdf/2309.03409 . A follow-up (Learning from Contrastive Prompts) reports it holds out a validation set and shows less overfitting than OPRO. https://arxiv.org/pdf/2409.15199 [V search-only] +- TextGrad (Yuksekgonul et al., arXiv 2406.07496): per a 2026 evaluation paper, each step is followed by a validation step and the proposed instruction is kept only if it scores higher on validation; MIPRO (DSPy) run with capped 200 train / 300 validation samples. https://arxiv.org/pdf/2604.27637 "Optimization before Evaluation" [V search-only]. TextGrad's own text on this: [GAP: paper not read]. +- DSPy docs: separates train / validation / held-out test; says for prompt optimisers to start with 20% train and 80% validation (opposite of neural-net practice). [V search-only; my direct fetch of dspy.ai returned only a redirect link] https://dspy.ai/learn/optimization/overview +- LLM-AutoDiff compares against MIPROv2 with best-validation checkpoint chosen before test. https://arxiv.org/pdf/2501.16673 [V search-only] +- Growing a meaning-representation inventory from failures: [GAP] nothing on UMR/AMR guideline revision driven by generation failures. Found only: FrameNet lexical-unit induction (Pennacchiotti et al. EMNLP 2008, distributional + WordNet; release then 795 frames, ~10,000 LUs) https://aclanthology.org/D08-1048 ; NutFrame LREC-COLING 2024, LLM frame/FE/relation induction from FrameNet, "remains difficult" https://aclanthology.org/2024.lrec-main.1079 ; Annotating FrameNet via structure-conditioned LM generation (2024) https://arxiv.org/html/2406.04834v2 ; 2025 ACL-SRW frame induction on C4 web text. All [V search-only]. +- Weksa's own promotion rule (new fields as namespaced extensions, promoted after use in 2 real packets) is in interlingua-standard.md [V, prior note]. Overfitting defences specific to spec-growth loops: [GAP]. + +## 4. Corpora and licences + +Verified licence facts are few. Discord data excluded by policy; not read. +- DailyDialog: CC BY-NC-SA 4.0; 13,118 dialogues (11,118/1,000/1,000). [V HF page] https://huggingface.co/datasets/li2017dailydialog/daily_dialog . Non-commercial plus share-alike; whether that bars model training in this campaign is a reading not made here. +- PersonaChat (Zhang et al. 2018): ParlAI project page, archived 2020-08-01, states no licence, only "You may continue to use the data without issue". [V] https://parl.ai/projects/personachat/ ; paper https://arxiv.org/abs/1801.07243 says data released open source via ParlAI; licence text [GAP]. Crowdworker-written, persona-statement-conditioned chit-chat [B]. +- LIGHT: ParlAI page states no licence; contents: 663 locations, 3,462 objects, 1,755 character types, 11,000 episodes; WILD 41,131 training episodes from game deployment (human players, so a different provenance than crowdwork). [V] https://parl.ai/projects/light/ . Licence [GAP: check ParlAI repo]. +- Cornell Movie-Dialogs Corpus: licence/terms page fetch failed (certificate rejected) https://www.cs.cornell.edu/~cristian/Cornell_Movie-Dialogs_Corpus.html . [GAP] Underlying scripts are copyrighted film text [B]; dataset licence unverified. +- Project Gutenberg: "vast majority" of eBooks public domain in the US, so no one can grant or withhold permission for uses; PG cannot sublicense copyrighted items; subject to its Terms of Use, which the permission page links and does not summarise; no statement on ML/bulk use on that page. [V] https://www.gutenberg.org/policy/permission.html . Terms-of-Use text on bulk/automated access and the trademark licence: [GAP, not read]. Items public domain in the US may not be elsewhere (same page). +- Google Synthetic-Persona-Chat (model-generated, persona-chat-style): CC BY-NC? listed as cc-by-4.0 on HF. [V search-only] https://huggingface.co/datasets/google/Synthetic-Persona-Chat +- Operator-authored or model-generated corpus: no licence question beyond provider terms [B, unread this pass]. Problems with evaluating on model-generated text: see 2 (self-bias, preference leakage, stylistic homogeneity: Xu et al. 2025; Li et al. 2025). The same Xu et al. finding says it extends to open-ended generation. +- Expressive-register-annotated English corpora (hedging, humour, affect, politeness labelled), with permissive terms: [GAP] not searched beyond the list above (e.g. Stanford Politeness Corpus, GYAFC formality, Enron etc. are [B] candidates, unverified, GYAFC is known to carry Yahoo Answers terms [B]). + +## 5. Conlang projection and evaluation without a corpus + +- GF/Abstract Wikipedia: see prior note. Related: "Multilingual Text Generation for Abstract Wikipedia in Grammatical Framework: Prospects and Challenges" (Chalmers) [V title/abstract page] https://research.chalmers.se/en/publication/549205 . GF conlang grammars (Esperanto, Lojban, Toki Pona): [GAP] none found in search. (GF RGL status table lists natural languages only per prior note.) +- Toki Pona: arXiv 1712.09359 describes the language (14 letters, ~124 lemmas, ~10 syntax rules), vocabulary analysis, a text-synthesis tool, WordNet synsets; tooling, not a meaning-representation realiser. [V search-only] https://arxiv.org/pdf/1712.09359 +- Lojban: a student semantic analyser mapping a Lojban subset to logical form / Prolog (parsing direction) and a 2005 WPI thesis using Lojban as an interface to a first-order-logic reasoner with speech-synthesised answers [V search-only] https://lojban.org/files/papers/lojban_parser_paper ; https://digital.wpi.edu/downloads/g732db469 . A community English-to-Lojban fine-tune of an OPUS-MT model on Tatoeba pairs, 1,000 dev, 39 gold held-out pairs. [V search-only] https://huggingface.co/linguardia/opus-mt-en-jbo . A realiser from logical/semantic form into Lojban or Esperanto in the literature: [GAP]. +- Esperanto: first systematic MT benchmark (de Gibert & de Gibert, SIGUL 2026) over rule-based, encoder-decoder and LLM systems, 600M-9B parameters; NLLB family best in all pairs, followed by compact trained models and a fine-tuned LLM. [V search-only] https://aclanthology.org/2026.sigul-1.31/ ; https://arxiv.org/abs/2603.29345 . Esperanto has >20M English pair sentences per ConlangBench's framing. +- ConlangBench (arXiv 2608.03505): 21 existing conlangs, 21M+ conlang-English pairs (430K+ from the 20 non-Esperanto ones, including Toki Pona classified as engelang); translation performance associated with natural-language similarity and conlang characteristics; smaller conlangs to be read cautiously. [V search-only] https://arxiv.org/pdf/2608.03505 +- Evaluating a lowering into a language with no corpus: no source addressing constructed-language generation evaluation directly. [GAP]. Adjacent: reference-free MT evaluation for low-resource languages: Sindhujan et al. LoResLM 2025 found prompt-based LLM evaluation outperformed by fine-tuned encoder QE models, errors from tokenisation, transliteration, named entities https://aclanthology.org/2025.loreslm-1.33 ; Rahman et al. 2025 Sylheti-English reference-less framework, top Spearman gain +0.1083 https://arxiv.org/abs/2505.12273 . Both [V search-only]; both for natural low-resource languages, not conlangs. Back-translation/backgloss as the check is Weksa's own design (multilingual-utterance-lowering.md, prior note) and the round-trip caveats in the earlier note apply. + +## Gaps worth knowing exist +- No per-metric human-correlation numbers for hedging, humour, affect, stance, persona voice; nearest is formality (Briakou 2021). COMET, BLEURT, MAUVE correlations not obtained. +- No source on surface-form smuggling through an LLM bottleneck or its defences (vocab restriction, paraphrase invariance). +- No source on schema/inventory growth from generation failures, or its overfitting controls. +- Cornell, LIGHT, PersonaChat licence texts not obtained; Gutenberg ToU on bulk use not read. +- No realiser or evaluation protocol for constructed languages from a meaning representation. +- Several arXiv PDFs (Briakou, Zheng, STEL, LUAR/StyleDistance) fetched as binary; numbers above come from the ar5iv/arXiv-HTML versions where marked, otherwise search summaries. From 735708d33eb6db499f6b5546d2166001f8dfc1cd Mon Sep 17 00:00:00 2001 From: Eureka Date: Thu, 29 Oct 2026 09:45:11 +0100 Subject: [PATCH 05/31] Research: fine-tuned lowerers and embedding-mapped lexicons Co-Authored-By: Claude Opus 5.5 --- .../2026-10-29-lowering-strategy-prior-art.md | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 docs/research/2026-10-29-lowering-strategy-prior-art.md diff --git a/docs/research/2026-10-29-lowering-strategy-prior-art.md b/docs/research/2026-10-29-lowering-strategy-prior-art.md new file mode 100644 index 0000000..c5f8a57 --- /dev/null +++ b/docs/research/2026-10-29-lowering-strategy-prior-art.md @@ -0,0 +1,71 @@ +# Prior art for Weksa lowering strategy: fine-tuning and embedding mapping, 2026-10-29 + +Eyes pass, campaign `weksa-lowering`. Facts and pointers only; no recommendation. Tags: [V] read this pass (fetched page/PDF, or a search-result summary, marked "(ss)" when only a search summary was seen); [B] background, not re-verified; [GAP] looked for, not found. Covered already and not redone: docs/research/2026-10-29-interlingua-lowering-prior-art.md, 2026-10-29-golf-loop-prior-art.md. + +## 0. Project's own prior thinking (F:\Projects\weksa\docs) + +- targets/interlingua-lowering.md: lowerer shape is an open fork (deterministic, model, or both with one contract). Invariants include packet-owns-meaning, lowering-traced, profile-owns-register, no-surface-leak, corpus-clean (no Discord). [V] +- persona-finetuning-dataset-exploration.md: already plans fine-tuning two separate adapters, "Persona intent extraction" and "Weksa lowering"; says do not fine-tune for direct context->utterance impersonation; row schemas `weksa.finetune.lowering_row.v0` and `weksa.finetune.persona_interlingua_row.v0`; interlingua labels would be derived from target utterances by a model pass ("marked as derived from answer-key surface evidence"); source corpus is the Discord archive (18,049 pre-2025 authored messages; 16,499 casual candidates), which the target doc now forbids as training data (`gamecult-chat:ruling:discord-taints-training`). Splits by year and channel holdouts proposed. [V] +- utterance-embedding.md: embeddings in Weksa today serve the AquaSynth speech handoff only (bge-m3, 1024 floats, `speech_text_embedding`); text embedding explicitly "not a pronunciation or alien-phonetics embedding". No doc uses embeddings for concept lexicon or translation. [V] language-model.md lists "concept clustering" as an allowed model use; best-modern-approach.md line 33: "Embeddings and LLMs can cluster English concepts, but the ontology decides what..." [V] +- No existing fine-tune run, adapter, or training-job record found in docs. [GAP: checked docs only, not scripts/.weksa-runs] + +## 1. Fine-tuned lowerers (structure/data to text) + +- AMR-to-text with pretrained seq2seq: T5-large about 45.8 BLEU plain, about 49.7 after task-adaptive training on silver data (Ribeiro et al., "Investigating Pretrained Language Models for Graph-to-Text Generation", arXiv 2007.08426); same paper varied training data 1%-100%: BART and T5 already good at 40% of data, T5 about 5.6 BLEU ahead of BART at 1% on WebNLG. [V (ss)] +- 2025 WiNLP (GPT4AMR) says top AMR-to-text models (AMRBART, BiBL) reach roughly 50 BLEU with a remaining quality gap; LLM paraphrase after AMR-to-text gave no automatic-metric gain but was preferred in human evaluation. [V (ss)] https://preview.aclanthology.org/setup/2025.winlp-main.2 +- Few-shot/low-resource D2T: T5-base fine-tuned on 100 triple sets used as low-resource baseline (Cycle training, ACL 2023, arXiv 2305.14793); another summary reports neural D2T "high fidelity with about 300 annotated examples". [V (ss), second claim weakly sourced] +- AMR-to-text fine-tuned LLM vs prompted frontier LLM head-to-head on AMR 3.0 with BLEU or faithfulness: [GAP] (also noted as gap in the earlier prior-art file). +- Open LLMs zero-shot on D2T: Kasner and Dusek, ACL 2024 (arXiv 2401.10186): Llama 2, Mistral, Zephyr on QuintD (fresh API-derived records); human annotators and GPT-4 metric both flag over 80% of outputs as containing a semantic error (v1 said 80% human, 91% GPT-4). [V (ss)] No frontier-API or fine-tuned comparison in that paper as seen. [GAP] +- Faithfulness with model size: Mahapatra and Garain 2024 (arXiv 2407.14088), 12 models in T5/BART/OPT/BLOOM/Llama 2 families fine-tuned on five D2T sets incl. E2E, DART, WebNLG: larger fine-tuned models improve readability/informativeness, faithfulness (BARTScore) often decreases with size. [V (ss)] +- Error type: SPOR (arXiv 2405.10650) reports stronger fine-tuned models (Mistral-7B, Llama-2-13B) err mostly by omission on E2E; a Cambridge MLMI dissertation reports T5 outputs showed rare hallucination, many omissions. Cycle training reduced human-counted hallucination errors from 14.84 to 2.57 and factual errors from 8.05 to 0.49 (units as in paper; low-resource fine-tune baseline). [V (ss)] +- SCOPE (arXiv 2502.13674): faithfulness hallucination described as common in standard fine-tuned LLMs; self-supervised fix; notes WebNLG and E2E are of limited complexity. [V (ss)] +- Persona/style fine-tunes: no study found comparing LoRA/QLoRA persona-style tunes with strong prompting on voice fidelity. Nearest: (a) 2026 arXiv 2609.21857: two small open models fine-tuned on personality-labelled data were no better at role-playing personalities than baselines (authors note low inter-rater agreement); (b) PersonaEval (2508.10014): role-knowledge fine-tuning did not help role identification and may degrade it; (c) NeurIPS 2025 multi-turn RL with consistency rewards cut persona inconsistency by over 55% (simulated users). [V (ss)] [GAP: LoRA-specific voice-holding evidence] +- Style imitation: "Catch Me If You Can? Not Yet" (arXiv 2509.14543): few-shot beats zero-shot, 2 to 10 shots adds little, informal/everyday-author style imitation remains weak; no fine-tuning baseline run. "How Well Do LLMs Imitate Human Writing Style?": exemplar-based prompting and text completion are key; imitation remains lower-perplexity than human text. [V (ss)] [GAP: fine-tuned vs prompted on same authors] +- LoRA vs full fine-tuning: Biderman et al. 2024 (TMLR, arXiv 2405.09673): LoRA trails full FT in code/math in standard settings, forgets less outside target domain, sensitive to learning rate/target modules/scale more than rank. Follow-up 2410.21228: LoRA forgets less but "intruder dimensions" matter. [V (ss)] + +## 2. Training data from the loop itself + +- Back-translation, Sennrich/Haddow/Birch ACL 2016 (arXiv 1511.06709): synthetic source from target-side monolingual text mixed with real parallel data; +2.8-3.7 BLEU WMT15 en->de, +2.1-3.4 BLEU IWSLT14 tr->en. [V (ss)] +- Edunov et al. EMNLP 2018 (arXiv 1808.09381): sampled or noised-beam synthetic sources beat beam outputs by 1.7 BLEU average; beam still fine in very low-resource settings. Iterative back-translation (Hoang et al. 2018; Cotterell and Kreutzer 2018) cited second-hand only. [V (ss); Hoang itself GAP] +- D2T cycle training (ACL 2023, arXiv 2305.14793): trains text->data and data->text models in a cycle on unpaired data; fewer hallucination/factual errors than a 100-pair fine-tune (see §1). [V (ss)] +- Collapse: Shumailov et al., Nature 631:755 (2024): models trained recursively on generated data lose tails of the distribution and produce repetitive output, in LLMs, VAEs, GMMs. Whether mixing/accumulating real data prevents it: not confirmed from the sources seen. [V (ss)] [GAP: accumulate-vs-replace results] +- Round-trip leakage/inflation (same model both directions, consistency not accuracy): from prior pass, §2 of interlingua-lowering-prior-art.md. [V earlier pass] +- Specific to this loop: encoder output (packet) of an item and its English lowering form a synthetic pair where the English is the original; the weksa dataset note already marks such interlingua labels as derived from answer-key surface evidence. [V, weksa docs] [GAP: published work on training a generator on packets produced by an LLM encoder from the same targets; closest is back-translation/cycle training above] + +## 3. Feasibility, hosts, and Anthropic fine-tuning + +- Hosts (gamecult-ops/inventory.md): Yggdrasil = Netcup KVM, 16 vCPUs, 62 GiB RAM, ~2 TB, Debian 13; no GPU listed; carries live public services; CPU model/AVX flags and memory bandwidth not recorded. [V] [GAP: CPU model] +- GPUs found in inventory: Raven RTX 4060 Ti 16380 MiB (household gaming machine and Vili's Kimodo jobs; Bonsai 27B takes about 10.4 GiB on demand and is "never resident" by ruling 2026-09-19; WSL ceiling 7.7 GiB RAM; operator workstation, no reboot without approval); Nightwing GTX 860M running qwen3-embedding:0.6b via Ollama, laptop, "not a build host"; Starfire GPU not recorded in inventory. [V] [GAP: Starfire GPU] +- Starfire (memory workstation-load-budget.md): heavy builds/tests go to Yggdrasil; Starfire does only Windows-only work, one heavy job at a time, froze 2026-09-22, hard-reset 2026-10-18 (cause unproven), 2026-10-28 reboot was a tripped cable; Yggdrasil verify queue has 5 slots. [V] +- QLoRA cost: tutorial/vendor sources say 8B QLoRA needs about 16-24 GB VRAM; one estimate 50k examples x 3 epochs on Llama 3 8B about 6 h on an RTX 4090 (2.5 h with Unsloth), about $2-5 rented; another 10k samples x 3 epochs 2 h on RTX 5090. Unverified vendor numbers. [V (ss), low confidence] +- CPU LoRA training: blogs claim 0.5-3B models in 15-60 min on 16-32 GB CPUs, unbenchmarked; llama.cpp's own training README calls finetune "very much WIP" and mentions LLaMA 3.2 1B working with 24 GB. HF PEFT on CPU PyTorch is the documented path. [V (ss), low confidence] [GAP: measured CPU LoRA run on a 16-vCPU server] +- CPU inference: Llama 3.1 8B Q4_K_M 14.2 tok/s at 12 threads, 12.5 at 8, 7.1 at 4 on an EPYC 9354 (markaicode blog); Qwen3 8B Q4_K_M 26.4 tok/s generation, 210 tok/s prompt on Ryzen 9 7950X with 16 threads; 3.2 tok/s on a 4-core Xeon. Generation is memory-bandwidth-bound. [V (ss), blogs] [GAP: numbers for Yggdrasil's CPU; a KVM guest's bandwidth unknown] +- Anthropic fine-tuning, current: platform.claude.com model overview (fetched 2026-10-29) lists Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku 5.5 on the Claude API, Bedrock, Google Cloud, Foundry, Claude Platform on AWS, with no mention of fine-tuning. [V] The old docs path /build-with-claude/fine-tuning returns 404. [V] AWS Bedrock supported-for-fine-tuning table (docs.aws.amazon.com/bedrock/latest/userguide/custom-model-fine-tuning.html, fetched): Anthropic row is only Claude 3 Haiku, us-west-2; others Nova, Titan, Llama 3.1/3.2/3.3. [V] AWS blog on Claude 3 Haiku fine-tuning carries notice "Claude 3 Haiku reached end of life on September 10th, 2026. Use Claude 3.5 Haiku instead." and says nothing on whether fine-tuning survives. [V] Bedrock also offers reinforcement fine-tuning and distillation (teacher-student) as methods; which models support them was not read. [V] [GAP: Claude fine-tuning on Claude API directly; any Claude model newer than 3 Haiku fine-tunable] +- Bedrock customization is billed per training tokens x epochs plus monthly model storage. [V] + +## 4. Word-embedding mapping idea + +- Mikolov, Le, Sutskever 2013 (arXiv 1309.4168) [V, PDF read]: linear translation matrix learned from a small dictionary (5K most frequent words) on monolingual word2vec spaces. Table 2 (WMT11): En->Sp P@1 33%, P@5 51%; Sp->En 35%/52%; En->Cz 27%/47%; Cz->En 23%/42% (readings from table layout; row/direction attribution partly ambiguous in the extracted text). The abstract's "almost 90% precision@5" applies to a confidence-filtered subset (about half of words in frequency ranks 5K-6K, distance threshold), not all words. Small monolingual training sets cut P@5 to about 25%. The paper says the method "was less useful for more [distant pairs]" (English/Czech, Vietnamese tested). +- MUSE, Conneau et al. ICLR 2018 (arXiv 1710.04087) [V, PDF read]: Table 1 P@1, unsupervised Adv-Refine-CSLS: en-es 81.7, es-en 83.3, en-fr 82.3, fr-en 82.1, en-de 74.0, de-en 72.2, en-ru 44.0, ru-en 59.1, en-zh 32.5, zh-en 31.4, en-eo 28.2, eo-en 25.6 (fastText on Wikipedia, 1,500 queries vs 200k targets). Word-by-word translation en<->eo BLEU 11.1 and 14.3; authors say meaning mostly conveyed with "simple errors" and fixable by an LM. +- Søgaard, Ruder, Vulic ACL 2018 (P18-1072): word-embedding spaces "far from isomorphic" even for close languages; unsupervised BDI degrades on morphologically rich non-dependent-marking languages, different domains/embedding algorithms; graph-similarity metric correlates near-perfectly with induction success; identical-word weak supervision helps. [V (ss)] +- VecMap (Artetxe et al.) as named; not read this pass. [B] +- Conlang with no corpus: [GAP] found no paper that places invented words at concept vectors or assigns an invented lexicon by clustering an embedding space. Nearest: Toki Pona word2vec study (Huang and Wu, arXiv 2606.17299, about 130 words: ANIMALS/COLORS form exclusive clusters, SHAPES/BODY/DIRECTION overlap) [V (ss)]; Cree lexicon classified semi-automatically with English word2vec vectors (AmericasNLP 2021) [V (ss)]; Spanish embedding-cluster "semantic domains" paper [V (ss)]. +- Conlang LLM work: ConlangCrafter (arXiv 2508.06094) multi-stage LLM pipeline generating phonology, morphology, syntax, lexicon, translation, with self-refinement; evaluated on consistency and typological diversity. ConlangBench (arXiv 2608.03505): 21 conlangs, over 21M parallel pairs (Esperanto-dominated; 430K across the other 20), 321K vocab entries; models translate better into a posteriori conlangs (vocabulary from natural languages); models could learn all eight conlangs with sufficient parallel data. [V] +- MTOB (Tanzer et al., ICLR 2024, arXiv 2309.16575): Kalamang from one grammar book (~217K tokens) plus word list and sentences; best model about 44.7/45.8 chrF (kgv->en / en->kgv) vs human learner 51.6/57.0; follow-up 2508.06665 (GPT-4.1) finds parallel sentences alone beat full-grammar prompting and grammar alone fails on complex sentences. [V (ss)] Relevant as work on LLM + grammar documents for a language with no web corpus. +- Embedding inversion: vec2text (Morris et al., EMNLP 2023, arXiv 2310.06816): recovers 92% of 32-token inputs exactly from a GTR-base style embedding; on MSMARCO with ada-002: 83.4 BLEU/60.9% exact at 32 tokens, 55.0 BLEU/8.0% exact at 128 tokens; a 2025 reproduction notes length sensitivity. Inversion targets the same encoder's own English text; no conlang use found. [V (ss)] [GAP: inversion into non-English or invented surface] +- Sentence-embedding interlingua: SONAR (Meta, 200 languages text) used as concept space with a decoder in Large Concept Models (arXiv 2412.08821); SONAR reported better than LASER3 and LaBSE on xsim/xsim++. [V (ss)] LaBSE/LASER coverage details [B]. Weksa's current embedding: bge-m3 [V]. +- "Nearest English cluster" as gloss vs fluent text: only indirect evidence: MUSE word-by-word en<->eo (above), Toki Pona wiki note that word-level glossing is the simplest approach and neural translators often err [V (ss)]. [GAP: measurement of nearest-cluster gloss vs fluent generation]. + +## 5. Hybrids + +- Overgenerate-and-rank: Velldal (LOGON/Oslo) discriminative realization ranker trained on a few thousand treebank items beat a surface LM; Varges instance-based ranker over rule candidates; critique that overgeneration is expensive. [V (ss)] +- Neural ranking for word ordering in surface realization (pointwise/pairwise/listwise), five languages (2021). [V (ss)] +- Grammar-constrained decoding: Geng et al. EMNLP 2023 (arXiv 2305.13971): any CFG plugged into constrained beam search; constrained LMs beat unconstrained and sometimes finetuned models on IE/entity disambiguation with LLaMA. Outlines (Willard and Louf 2023, arXiv 2307.09702) regex/grammar guided generation; SynCode (2403.01632); Grammar-Aligned Decoding (2405.21047) argues grammar constraints distort the LM distribution. [V (ss)] Prior pass: Shin et al. 2021 (constrained decoding into a canonical sublanguage then deterministic map), Tam et al. 2024 (format constraints cost reasoning; two-step NL-then-convert keeps quality). [V earlier pass] +- GF + neural: Chalmers 2024 thesis builds a transformer parser to GF trees (prior pass). [GAP] no paper found on neural lexeme/register choice feeding a GF or SimpleNLG-style realiser, nor on LLM output constrained to a GF concrete syntax. +- Abstract Wikipedia/Ninai/Udiron (prior pass): symbolic realisers with lexeme lookup; no learned component. [V earlier pass] + +## Evidence pointers (URLs) +https://docs.aws.amazon.com/bedrock/latest/userguide/custom-model-fine-tuning.html ; https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html ; https://platform.claude.com/docs/en/about-claude/models/overview ; https://aws.amazon.com/blogs/machine-learning/fine-tune-anthropics-claude-3-haiku-in-amazon-bedrock-to-boost-model-accuracy-and-quality/ ; arXiv 1309.4168, 1710.04087 (PDFs read, text at scratchpad mik.txt, muse.txt), aclanthology P18-1072, 1511.06709, 1808.09381, 2305.14793, 2007.08426, 2401.10186, 2407.14088, 2405.10650, 2502.13674, 2405.09673, 2410.21228, 2509.14543, 2310.06816, 2412.08821, 2305.13971, 2309.16575, 2508.06665, 2508.06094, 2608.03505, 2606.17299, 2609.21857, 2508.10014, 2511.00222; Nature 631:755 (2024). Local: F:\Projects\gamecult-ops\inventory.md (lines ~51-110 Raven, ~350 Nightwing, ~571-615 Yggdrasil); C:\Users\Meta\.claude\projects\F--Projects-CultLib\memory\workstation-load-budget.md; F:\Projects\weksa\docs\persona-finetuning-dataset-exploration.md. + +## Caveats +Most web claims were seen as search-result summaries, not full papers; the two PDF reads (Mikolov, MUSE) are first-hand. Training-cost and CPU-speed numbers come from blogs/vendors and are low confidence. Mikolov table-row attribution is partly ambiguous in text extraction. From 2583fb91c3f01aedf62621c9026847b125ca9607 Mon Sep 17 00:00:00 2001 From: Eureka Date: Thu, 29 Oct 2026 10:10:21 +0100 Subject: [PATCH 06/31] Map: interlingua lowering model page, scoring, convergence and cut sequence Prose map for campaign weksa-lowering, written by Imagination for the Eureka-area Self (session self-2026-10-29-eureka). Co-Authored-By: Claude Opus 5.5 --- docs/targets/interlingua-lowering-map.md | 121 +++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 docs/targets/interlingua-lowering-map.md diff --git a/docs/targets/interlingua-lowering-map.md b/docs/targets/interlingua-lowering-map.md new file mode 100644 index 0000000..e8907d9 --- /dev/null +++ b/docs/targets/interlingua-lowering-map.md @@ -0,0 +1,121 @@ +# Map: interlingua lowering (campaign `weksa-lowering`) + +Prose map for the campaign whose target is +[interlingua-lowering.md](interlingua-lowering.md). Rulings, questions, +follow-ups and cut specs live in the Eureka mind under `weksa-lowering:`; this +page is the model page and the cut sequence, and cites them by label. Written +by Imagination for the Eureka-area Self, 2026-10-29. + +## The design in one paragraph + +The interlingua spec has two layers. The **schema** is Rust types: packet +families, node ids, role slots, value kinds. It changes rarely and by commit. +The **inventory** is data in CultCache: the concepts, frames, roles, relation +types, speech acts and nuance features (hedge, certainty, warmth, irony and +whatever the loop finds missing) that the schema's slots name by id. Every +open slot in a packet is an inventory id, never free text, so a packet carries +no target-language wording (`no-surface-leak`). The golf loop improves the spec +mostly by growing and refining the inventory, which is fast; schema changes are +the slow path. Concepts are open-class and grow forever; the other families are +closed-class, and convergence is measured on them +(`weksa-lowering:ruling:convergence-test`). This split is +`weksa-lowering:ruling:spec-is-schema-plus-inventory`. + +## Model page + +Every persistent kind, what names it, its life, and who decides. "Derived" +means no store holds it and nothing writes it. + +| Kind | What names it | Lifecycle | Who decides | +|---|---|---|---| +| Packet | Key `packet::r:`; CultCache type `weksa.interlingua_packet`, carrying `schema_version` and `inventory_rev` | Minted by an encoder for one corpus item under one spec version; immutable; a new spec version means a new packet, never an edit. Admitted only through the validator | The encoder writes; the validator refuses malformed packets at the door (`typed-packet`); nothing else writes packets | +| Schema version | `weksa.interlingua_packet.v` constant in `crates/weksa`; published JSON Schema at `schemas/cultnet/` | Bumped by a commit that changes the Rust types; the published schema is regenerated in the same commit and a test fails on drift | A cut (Hands, under a spec); never the loop | +| Inventory entry | Key `:` (families: concept, frame, role, relation, speech_act, feature); type `weksa.inventory_entry`, with gloss, value kind, `introduced_rev`, optional `retired_rev` | Added or retired by an inventory revision; never edited in place (a changed meaning is a retire plus an add); a retired id still resolves for packets of earlier revisions | The loop's accepted rounds; Self on merge to main | +| Inventory revision | Key `rev:`, type `weksa.inventory_revision`, with parent, change list and `frozen` | Appended per accepted round; exactly one revision is ever marked frozen, by the convergence test | The loop's accept rule appends; the convergence test freezes; Self records the freeze as a ruling | +| Target profile | Locale or language-project id (`en-US`, `ja-JP`, a conlang's slug) plus a revision | Authored, revised by commit or by an accepted round that changed the lowering; each lowering names the revision it used | Profile authors and accepted rounds (`profile-owns-register`); never the lowerer's defaults | +| Corpus item | Key `item::`; type `weksa.corpus_item` with text, language, speaker, split group, prior turns, source | Admitted once; the text is immutable (a correction is a new item that `supersedes` the old); withdrawn, never deleted, so old scores stay explainable | Importers and `weksa corpus add`, under `corpus-cast-plus-public-domain`; the source enum has no variant for Discord or any training-forbidden source (`corpus-clean`) | +| Split assignment | Derived: `split(scheme, item.group)` | Fixed for a scheme; a new scheme is a new constant, never a reassignment. Model-written items never land in test | The hash function. Nobody assigns by hand, so there is no writer to forbid | +| Loop round | Key `run: