ogar-vocab: reserve 0x17XX as ConceptDomain::Blocks - #234
Merged
Conversation
Reserves the visual block-programming opcode domain at the operator-chosen slot 0x17XX. Zero concept rows -- the same reserved-empty posture as Osint (0x07XX) and Genetics (0x0EXX): the domain slot exists so canonical_concept_domain returns a stable tag before any opcode mints. The domain names the shared opcode CONCEPT, not a renderer. Per the canon-high flip, the hi u16 carries that shared concept and each consumer picks its own render skin in the custom lo u16, so blockly-rs (editor/ABI half) and scratch-rs (opcode + .sb3 + JIT half) are two app prefixes over one vocabulary. Behaviour stays a property of the Core node the classid resolves to, never of the address. A provenance fence is carried in the variant doc: concepts minted here must derive from permissively-licensed or specification sources -- the Apache-2.0 Blockly block definitions, the public project file-format spec -- never by transcribing a GPL/AGPL implementation. That keeps this public codebook unencumbered while a GPL consumer links it freely, which is what allows the GPL boundary to sit entirely inside the consumer repo. The 0x10-0x16 gap is deliberate rather than next-free, so a test pins those slots as Unassigned to stop a later pass tidying the domain downward. Also corrects two stale doc lines found while verifying the slot was free: the CODEBOOK table claimed "0x0FXX+ unassigned" while 0x0FXX Geo is fully populated (osm_node 0x0F01 .. osm_user 0x0F0A), and a domain test comment said "trailing unassigned tail (0x0F+)". Ledger: docs/DISCOVERY-MAP.md D-BLOCKS-DOMAIN. Gates: 141 unit + 7 doctests pass, fmt clean, clippy clean. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011DN5odWu4eisdevH9bPWyz
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_c6ef8149-807d-4a9a-977e-df270e55eea4) |
AdaWorldAPI
marked this pull request as ready for review
August 4, 2026 13:57
AdaWorldAPI
pushed a commit
that referenced
this pull request
Aug 4, 2026
Docs-only. Turns the session's rulings into a durable plan and records the a2ui-rs wiring as a ledger entry. docs/BLOCK-EDITOR-PLAN.md sequences W0-W5 with gates, five open decisions, and five falsifiers. It opens by naming what is LOCKED so a future session cannot re-derive it: the 0x17XX domain, the plug-and-play producer posture, the provenance fence, one content classid, (function:value) calls, arity-by-classid via LaneShape, nesting by reference, loud narrowing, literal-over-grammar, and the retired edge block. Every one is shipped code with tests (#234, #235, #236), not intention. The headline finding for the a2ui wiring is that most of it already exists. Charter C1.6 says a click IS a navigates_to/ActionInvocation edge, and a2ui-server already ships receive_action -> KlickwegEdge -> lower_action_fire -> ActionInvocation as pure compile-time value construction (#209, warden COMPILE-TIME-CLEAN, 34 tests). Placing a block, connecting two blocks and clicking a placed block are each a click by ordinal address, so each is already a Klickweg edge. Edit telemetry and harvested-app telemetry unify in one closed predicate set with NO new predicate -- the Predicate enum is count-locked at 79 and extending it is a gated ontology change, not a consequence of this arc. Nesting maps 1:1: the ObjectSlot "A3 Klickwege brick" recursion desktop -> window -> region -> widget becomes canvas -> script -> block -> input, which a2ui-wasm::resolve_nested walks unchanged. The gaps are recorded as measured, not assumed. Interaction-to-edge and nested addressing exist. A palette of pickables, 2-D placement (Skin::Form and Skin::Flow are both 1-D list renderers) and multi-facet body ingest (a2ui-wasm implements one 12-byte facet; a body is thirty) are absent -- none charter-forbidden, but the editor tier is a real build rather than wiring. Drag/connect is the one T2 pressure point: local drag state is fine, the result must travel as an address-carried write. Open decision D2 proposes that "place tile at slot N" rides ActionInvoke{ordinal: PLACE, args:[N, fn]} rather than a third FrameKind: args is explicitly ClassView/ActionDef-carved, so it is an address-carried write, and a third kind would widen a deliberately closed vocabulary. Roadmap order is operator-set: ABI-shaped Blockly/Scratch first, Klickwege wiring second, PowerAutomate-shaped skin third -- both skins Mario-editor ergonomics over ClassView : WideFieldMask, which is T1 applied at editor scale. The W1 falsifier is unchanged from the first turn of the arc: a drag produces zero SoA writes, an operand change exactly one. Ledger: docs/DISCOVERY-MAP.md D-BLOCKS-KLICKWEGE, graded [H] (PLAN) -- the W0 substrate it builds on is [G]/CODED, the wiring is unbuilt. Gates: docs-only; 16 ogar-blockly tests and workspace check re-verified unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011DN5odWu4eisdevH9bPWyz
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reserves the visual block-programming opcode domain at the operator-chosen slot
0x17XX, as the vocabulary foundation for the block-editor arc (blockly-rs+scratch-rs).What lands
Zero concept rows. This is a domain reservation, not a mint — the same reserved-empty posture as
Osint(0x07XX) andGenetics(0x0EXX): the slot exists socanonical_concept_domainreturns a stable tag before any opcode concept is promoted.ConceptDomain::Blocksvariantcanonical_concept_domain—0x17armTwo fences, carried in the variant doc
1 — Naming. The domain names the shared opcode concept, never a renderer. Per D-CLASSID-CANON-HIGH-FLIP the canon hi u16 carries the shared concept and each consumer selects its own render skin in the custom lo u16 — so
blockly-rs(editor/ABI half) andscratch-rs(opcode +.sb3+ JIT half) are two app prefixes over one vocabulary. A block's behaviour stays a property of the Core node the classid resolves to (ActionDef+KausalSpec), never of the address.2 — Provenance. Concepts minted here must derive from permissively-licensed or specification sources (the Apache-2.0 Blockly block definitions; the public project file-format spec) — never by transcribing a GPL/AGPL implementation. This keeps the public codebook unencumbered while a GPL consumer links it freely, and is what allows the GPL boundary to sit entirely inside the consumer repo rather than propagating here.
The 0x10–0x16 gap is deliberate
0x17is an operator-chosen slot, not the next free one. A pinned test asserts0x1000/0x1600/0x1800stayUnassigned, so a later pass cannot "tidy" the domain downward — ids are stable forever once shipped.Stale-doc corrections found while verifying the slot was free
Both are in the same commit because both were discovered by the check that
0x17XXwas actually available:0x0FXX+ unassigned, but0x0FXXGeo is fully populated — 10 OSM concepts,osm_node0x0F01…osm_user0x0F0A. TheConceptDomainenum doc was already correct; only the ASCII table had drifted.0xFFFF) was still correct; the comment was not.Ledger
docs/DISCOVERY-MAP.md→D-BLOCKS-DOMAIN(append-only,[G]CODED).Gates
The central risk in adding an enum variant is an exhaustive
matchon it elsewhere in the workspace, so this was checked explicitly rather than left to CI:matchonConceptDomainexists anywhere incrates/— the onlymatchin that neighbourhood is on&strand already carries a_arm. Other crates (ogar-cpic) use the type in equality comparisons only.cargo check --workspace --all-targets— exit 0. The two warnings emitted are pre-existing and in untouched files (ogar-from-ruff/examples/compile_corpus.rs,ogar-from-elixir/src/lib.rs).cargo test --workspace— 0 failures across all crates.cargo test -p ogar-vocab— 141 unit + 7 doctests, 0 failed.cargo fmt -p ogar-vocab -- --check— clean.cargo clippy -p ogar-vocab --all-targets— clean, no warnings.Note for anyone diffing test counts:
ogar-vocabreports 141 under-p … --liband 142 under--workspace. That gap is pre-existing workspace feature unification enabling one cfg-gated test — verified identical atHEAD~1. This PR adds no test functions, only assertions inside existing ones.Follow-up (not in this PR)
App-prefix allocation in
ports.rsforblockly-rsandscratch-rs, then the opcode concept mints themselves once the vocabulary is harvested from the Apache-2.0 Blockly block definitions.