Arcs
arcsarcs is a keyed section that Voyage describes in one line: "Authored narrative arc definitions keyed by stable arc id." It has no authoring reference and no editor surface. This page records the fields the schema defines and the two things the engine is observed to do with them, and marks everything else as undocumented.
- API endpoint
/sections/arcs.json/sections/arcs.md- Size limits
No character-length caps for this section.
Schema
{
"arcs": {
"<key>": {
"id": "string",
"theme": "string",
"surfacePremise": "string",
"expectedConclusion": "string",
"status": "active | resolved | dormant",
"minQuestsForConclusion": "number",
"title": "string",
"secrets": [
"string"
]
}
}
}Example
{
"arcs": {
"the_drowned_bell": {
"id": "the_drowned_bell",
"title": "The Drowned Bell",
"theme": "A sunken shrine is waking, and the tide answers it",
"surfacePremise": "the bell beneath the harbour still rings on some nights",
"expectedConclusion": "The shrine is either sealed for good or allowed to finish waking.",
"minQuestsForConclusion": 3,
"status": "active",
"secrets": [
"The harbourmaster has been muffling the bell for years."
]
}
}
}Warning (undocumented and not exposed): Voyage documents this section with one line,
Authored narrative arc definitions keyed by stable arc id.There is no template, no record schema, and no authoring reference for the fields, and the section is not reachable through the editor's menus. Everything else on this page is read from the extracted schema and from the shipped engine, and describes only what can be observed there.This page exists so the section is not a blank space that gets filled in with guesses. What arcs are intended for is not stated anywhere, so this page does not say, and the fields nothing is seen to read are marked as such rather than given a plausible purpose.
Fields
id
The arc's identifier.
Two places use it. The generated trigger described below is named arcSurfacing_ followed by this value. And a quest's runtime arc id is used as a key into arcs, so the value a quest carries is matched against this one.
theme
A string. When surfacePremise is absent, the engine substitutes theme in its place before building the trigger, so theme becomes the text read into the condition described below.
What theme does when surfacePremise is present is not documented.
surfacePremise
A string, read verbatim into the generated condition described below as It is mentioned or revealed that <surfacePremise>. The value is placed into that sentence unchanged, so the bell beneath the harbour still rings on some nights produces a readable condition and The Drowned Bell arc does not.
The value is trimmed first. If nothing remains, no trigger is produced.
expectedConclusion
A string. Nothing that reads it appears in the schema or the engine, and no authoring reference describes it. It is part of the section and accepted, but what it changes is undocumented.
minQuestsForConclusion
A number. Nothing that reads it appears in the schema or the engine, and no authoring reference describes it. It is part of the section and accepted, but what it changes is undocumented.
title
A string. It appears in the quest label described below. When the label is produced and title is absent, the text used is Storyline.
secrets
Array<string>. Nothing that reads it appears in the schema or the engine, and no authoring reference describes it. It is part of the section and accepted, but what it changes is undocumented.
status
One of active, resolved, or dormant. Nothing that reads it appears in the schema or the engine, and no authoring reference describes it. It is part of the section and accepted, but what it changes is undocumented.
The generated trigger
An arc produces a trigger, built from its id and its premise:
- its name is
arcSurfacing_followed by the arc'sid recurringisfalse- it holds one condition, of type
story, whose query isIt is mentioned or revealed thatfollowed by the premise - its effects list is empty
The premise is trimmed before the trigger is built, and if nothing remains the trigger is not produced at all. surfacePremise supplies the text, or theme when surfacePremise is absent.
A story condition is one of the two semantic condition types. Whether this generated trigger is counted alongside authored triggers is not documented.
The quest label
A quest carries an arc id, a position within the arc, and the arc's escalation as it stood when the quest was created. None of the three is an authored field: they are absent from the quest fields an author writes, and are set during play.
When a quest has an arc id, and the arc that id resolves to has recorded a surfacing time, a label is produced from the arc's title and the quest's position. Where title is absent, Storyline is used instead.
What the engine records
An arc gains six fields during play that are not authored: a creation time, a surfacing start time, a surfacing time, a resolved time, an escalation level, and a last-update time.
The surfacing time is the one with an observable use, in the quest label above. What sets any of the six, and what the escalation level counts, is not documented.
Authoring notes
These follow from the behaviour above and nothing further.
- Write
surfacePremiseto complete the sentence it is placed in. The text is inserted unchanged afterIt is mentioned or revealed that. - A blank premise produces no trigger. If
surfacePremiseandthemeare both empty, nothing is generated for the arc. titleis player-facing wherever the quest label is shown, andStorylinestands in when it is missing.
The remaining fields are accepted and stored. Because nothing describes what reads them, this page cannot say what writing them achieves.