Kotlin is a slightly nicer formatter
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>
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>
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>
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>