Skip to content

History / Interactivity

Revisions

  • Kotlin is a slightly nicer formatter

    @cswendrowski cswendrowski committed Jun 6, 2026
  • Document supported prompt input fields Prompts only accept one-shot input fields (string, number, boolean, the choice variants, parent/self references, die, dice, date/time/datetime). List them and note that persistent/display widgets, collections, and layouts are rejected with a validation error. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

    @cswendrowski cswendrowski committed May 31, 2026
  • docs: address fresh-audit findings + grammar-verified bug fixes Audit-driven cleanup pass plus two real grammar bugs the auditor surfaced indirectly. Verified each finding against the langium grammar before fixing. Grammar bugs fixed: - 'choice<attribute>' is not in the grammar (the only choice<X> forms are choice<string>, choice<damageType>, choice<DocumentType>). The Your-first-System tutorial's Roller example used 'choice<attribute> Attribute', which would fail to parse. Replaced with the real form 'self<attribute> Attribute', which is what the user actually wants (picker over attributes on the same document). - Ternary '?:' is not in the grammar - confirmed by grepping the langium for any conditional/ternary expression rule. Interactivity.md used ternary visibility throughout ('visibility: cond ? Visibility.X : Visibility.Y'), which would not parse. Rewrote all six examples to use the method-block form. The 'falling through with no return uses default' pattern produces shorter code than the ternary anyway. Wiki bugs fixed: - Pinned Field example had two redundant 'string name' lines that were also lowercase against PascalCase convention. Removed - documents already have a built-in Name field. - Document.md HP example referenced 'self.Endure', a field never defined in the example. Changed to 'self.Fight' which is. - Fields.md 'where:' filter examples used 'spell.X' for the iteration alias when the alias is always 'item'. Fixed to 'item.X'. - Home.md's 'Start with the Getting Started Guide' link was a hand-typed full URL; switched to wiki-relative '[Getting Started](Getting-Started)'. - Removed three suspicious-looking GitHub user-attachment URLs in the money section (one is verifiably fake, the others are placeholder- shaped) and the 'placeholder-inventory-image.png' 404'ing inventory example image. Documentation gaps closed: - Visibility.default definition was inconsistent: Fields.md said 'displayed for all, only editable in Edit Mode' (correct per the table); Interactivity.md said 'same as unlocked' (wrong - unlocked always allows write). Reconciled to the Fields.md definition and added a cross-link. - Math.floor and Math.ceil added to Basic-Logic's common-math list with a short note that floor is what you usually want for 'half damage' patterns. - Boolean field calculated values now show a method-block example (computed boolean from another field's state), parallel to how string and number already document calculated values. - Getting-Started.md heal action uses bare 'amount' (matching the bare-roll preference now established) and 'roll(d8)' for syntactic consistency with Your-first-System. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

    @cswendrowski cswendrowski committed Apr 27, 2026
  • docs: correct stale features after grammar / codegen verification After confirming behaviour against the codegen, several wiki claims were either half-implemented or never wired up. These changes bring the docs in line with what the generator actually does today. Interactivity / Logic-Reference: action modifiers - 'quick action' has no codegen support beyond grammar parsing - the modifier is parsed but the generated sheet treats it identically to a plain action. Removed the dedicated 'Quick and Macro Actions' example, kept 'macro action' (which is wired up to the Foundry macro hotbar), and added a note that 'quick' / 'secondary' modifiers are grammar-only until further notice. Interactivity / Logic-Reference: hooks - Replaced the misleading 'on buffApplied(...)' / 'on levelUpEvent' examples - ISDL has no way to *fire* custom hooks, only listen. Replaced with a working 'on createActor(...)' example. - Added a 'Listening to Foundry Hooks' section explaining that any identifier maps to Hooks.on(<name>, ...) for any Foundry- or module- emitted hook, alongside ISDL's own helper hooks (combat*, round*, turn*, preApply*, applied*, death). - Health-event hook parameters corrected to match the codegen: every applied/preApply hook receives (amount, damageType, damageMetadata). Interactivity / Logic-Reference: document updates - Replaced 'update self' / 'update parent' with the canonical 'self.update()' and 'self.delete()'. The 'update Self' grammar form is half-implemented in codegen (broken syntax in generated JS) and shouldn't be in the docs. - Reframed the Update section to explain that ISDL queues assignments inside an action and flushes at end-of-body; self.update() is only needed for in-action read-after-write. Fields: wounds resource - Tightened the wounds tag's documentation: it currently affects only the visual presentation of the resource bar (blue/teal gradient, reversed direction). The damage applicator does NOT auto-route to a wounds resource - users wanting damage to fill a wounds pool need to wire that up themselves (or use a preApplyDamage hook). Fields: pinned field - Clarified the pinning UX: items get pinned via a Pin toggle that appears on every item row in the table/inventory display. The 'pinned' field on the actor only controls *where* the pinned-items list renders. Users do not need to wire up the Pin toggle. Fields: measuredTemplate - Noted that a measuredTemplate field's value is a configuration object, not a number/string. It renders as a friendly summary in chat blocks but won't resolve usefully in numeric or string expressions outside that context. Logic-Reference: @js{...} - Added a warning callout that @js{...} is an escape hatch with no stable contract - what variables are in scope depends on where in the generated code the block lands, and may change as codegen evolves. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

    @cswendrowski cswendrowski committed Apr 27, 2026
  • docs: address non-dev audit findings Fixes raised by an audit conducted from a non-developer perspective. Fields.md - self<type> section - Replaced the stale 'roll: \"d20 + @primaryStat\" / chat: [ @primaryStat ]' example syntax (which appears nowhere else and looks like an older grammar) with modern action / fleeting / roll(...) / chat form. - Switched the section's identifiers from camelCase (strength, primaryAttribute) to PascalCase, matching the convention now stated in Document.md and used everywhere else in the wiki. - Cleaned up two inventory 'where:' filter examples that used raw Foundry syntax ('where: {item.system.equipped == false}') to the ISDL 'where: item.Equipped equals false' form. Plain-English glosses - Document.md intro reworded so 'Document' is introduced with a plain-English explanation; 'datamodel' replaced with 'underlying data fields Foundry needs to store its values'. - Resource auto-clamping passage in Fields.md reworded to drop 're-derives' / 'derive' jargon; now reads as 'right after your action runs and again every time the sheet refreshes'. Operator consistency sweep - Replaced '++' / '--' with '+= 1' / '-= 1' across active examples in Document, Fields, Recipes, Advanced-Logic, and Interactivity. The word forms ('equals', '!equals') and the readable assignment forms are now used consistently in instructional code throughout the wiki. - Reference tables on Basic-Logic, Logic-Reference, and Keywords-Quick- Reference legitimately show both forms and were left as-is. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

    @cswendrowski cswendrowski committed Apr 27, 2026
  • Wiki update

    @cswendrowski cswendrowski committed Aug 10, 2025