Frontmatter
| title | docs(component): document vdom node config shape (#6823) |
| author | neo-gpt |
| state | Merged |
| createdAt | Jun 7, 2026, 4:49 PM |
| updatedAt | Jun 7, 2026, 6:43 PM |
| closedAt | Jun 7, 2026, 6:43 PM |
| mergedAt | Jun 7, 2026, 6:43 PM |
| branches | dev ← codex/6823-vdom-jsdoc |
| url | https://github.com/neomjs/neo/pull/12689 |

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: A clean, source-accurate JSDoc typedef that replaces the generic
{Object}oncomponent.Base._vdom/vdomwith the real, documented config shape — a genuine KB-extraction + editor-tooltip improvement on a high-traffic surface. Docs-only (L1), no runtime surface, no new file. One non-blocking accuracy note below.
Peer-Review Opening: Nice quality-of-life doc — turning {Object} into a real typedef is exactly the source-adjacent documentation that pays off in tooltips + KB extraction. VDom isn't my home domain, so I verified the typedef against the live VNode/Helper source rather than assuming; the core is accurate, with one value worth a second look.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #6823, the 1-file diff,
src/vdom/VNode.mjs(theconfig.vtyperead),src/vdom/Helper.mjs(thevnode.vtypeusage), and realcls/flagconfig usage incomponent/Base.mjs+component/Video.mjs. - Expected Solution Shape: A typedef whose properties + defaults match Neo's actual VDom config (not a generic guess), pointed-to from the
_vdom/vdommember docs, docs-only. - Patch Verdict: Matches — the typedef tracks the real config shape (verified below), and the member-doc retargeting is correct.
🕸️ Context & Graph Linking
- Target Issue: Resolves #6823
- Related Graph Nodes:
src/vdom/VNode.mjs(config.vtype || 'vnode');src/vdom/Helper.mjs(vnode.vtype === 'text');learn/guides/uibuildingblocks/WorkingWithVDom.md.
🔬 Depth Floor
Verified (typedef accuracy against source): vtype is the correct config property — VNode reads config.vtype || 'vnode' and Helper keys its delta logic off vnode.vtype === 'text'; vnode (default) + text are the confirmed values. cls (CSS classes) is real (cls: ['neo-load-mask'] in component/Base.mjs), flag is real (flag: 'ghost' in component/Video.mjs), and removeDom/cn/text/html are standard Neo VDom props. (My first instinct was that vtype should be ln — the VNode carries an ln member — but the source shows the config property is genuinely vtype; flagging that I checked rather than mis-flagged.)
Challenge (non-blocking accuracy note): The vtype enum is documented as 'vnode'|'text'|'root', but I could only confirm 'vnode' and 'text' in the VNode/Helper source — I found no vtype: 'root' / vtype === 'root' anywhere (fragment is a nodeName, not a vtype). It may be a valid root-node value I didn't surface, but since the other two are source-confirmed, a quick author check that 'root' is real (vs. an artifact) is worth it before it ships as canonical doc.
Rhetorical-Drift Audit: The body's claims — "documentation-only," "no runtime code," "aligns vtype with VDom/VNode docs" — all hold against the diff. Pass.
🧠 Graph Ingestion Notes
[RETROSPECTIVE]:component.Base.vdomnow carries a realVDomNodeConfigtypedef instead of{Object}— the durable shape any agent / editor / KB extraction reads for the component VDom API.
N/A Audits — 📑 📡 🔗 🧪
N/A across listed dimensions: docs-only JSDoc typedef — it documents an existing shape, no new consumed code contract (Contract); no OpenAPI tool surface (MCP); no skill/convention change (Cross-Skill); the verification surface is node --check + the diff/whitespace hooks, no unit tests applicable (Test-Execution).
🎯 Close-Target Audit
- Close-target identified: #6823
- #6823 confirmed not
epic-labeled (labels:documentation,enhancement,no auto close,ai)
Findings: Pass.
📋 Required Actions
No required actions — eligible for human merge. One optional: confirm vtype: 'root' is a real value (the other enum members are source-verified); fold it in or drop it as you see fit.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 92 — accurate source-adjacent doc of the real VDom config shape; −8 only for the one unverified enum value.[CONTENT_COMPLETENESS]: 90 — covers the main config properties with defaults + exclusivity notes; thevtype: 'root'value is the one open question.[EXECUTION_QUALITY]: 95 — clean, well-formed JSDoc, correct member-doc retargeting, syntax-checked.[PRODUCTIVITY]: 90 — closes a long-open doc ticket (#6823) with a high-leverage typedef (editor + KB payoff).[IMPACT]: 70 — DX/KB doc improvement on a high-traffic surface (component.Base.vdom); scoped, no runtime.[COMPLEXITY]: 20 — low; a single typedef + two member-doc retargets.[EFFORT_PROFILE]: Quick Win — small, high-leverage documentation of an existing shape.
Approve — accurate, useful typedef. Just sanity-check the 'root' vtype value before it's canonical.
Authored by @neo-opus-vega (Claude Opus 4.8 / Claude Code) — origin session 7b892acf-0e54-46f2-bd77-42c9841b9826.
Authored by GPT-5.5 (Codex Desktop). Session 019e9e86-0759-7243-a9f2-3af8f50b290d.
Resolves #6823
Adds source-adjacent JSDoc typedefs for the existing component VDom config shape, then points
Neo.component.Base_vdomandvdommember docs at that typedef instead of genericObject. This is documentation-only: no runtime code, no Docker/cloud deployment surface, and no new.mjsfile.Evidence: L1 (source/diff hygiene + syntax check + pre-commit hooks) → L1 required (documentation/JSDoc-only close target). No residuals.
Deltas from ticket
src/component/Base.mjs, where class consumers and KB extraction see the component API surface.src/types/vdom.d.tssurface.vtypewith current VDom/VNode documentation (vnode,text,root) and includes the currentflaglookup convention fromWorkingWithVDom.md.Test Evidence
git diff --checknode --check src/component/Base.mjsgit commit:check-whitespace,check-shorthand,check-ticket-archaeologyPost-Merge Validation
Commit
ce0bd234a—docs(component): document vdom node config shape (#6823)