Read this first when starting a new session, human or AI. It explains how to
pick up the work, the current status, and the steps each change goes through.
What the product must do is specified in SPEC.md.
docs/SPEC.md, then this file, then the last round in
docs/GAME-DECISIONS.md. The next decision number is in
Status.git fetch and check open PRs (gh pr list) and issues
(gh issue list). Merge origin/main into your branch if it moved.mass-game-logic.js, export them through
module.exports, and test them in mass-game.test.cjs.<script> tag in the right order and a
node --check line in .github/workflows/checks.yml.SETUP_VERSION in mass-game.js and
decide how older saves migrate.
node mass-scenarios.test.cjs
node mass-features.test.cjs
node mass-assets.test.cjs
node mass-game.test.cjs
node mass-corpus.test.cjs
file://: no console errors, and
the new behaviour seen working. Automated checks used puppeteer-core
with Edge (headless) and screenshots; such harness scripts are not
committed.docs/GAME-DECISIONS.md (R<n>: question, choice,
alternatives, source). Cite GIRM paragraphs through magisterium.com
links.main; confirm CI is green on the PR.docs/SOURCES.md if sources changed.Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>,
then push and open the pull request..gitattributes
normalises them). On Windows, write files with
[IO.File]::WriteAllText(path, text, (New-Object Text.UTF8Encoding $false)).material() in mass-3d.js is cached and shared. Clone a material before
changing it per mesh.mass-materials.js applies finishes only to explicitly tagged meshes.
Pass the optional surface kind to box/cylinder, or use finishSurface.
Supply a new base material to finishSurface when changing a surface colour.
Do not mutate cached textures or infer a finish from a colour. Texture
providers are High-only and should return a cleanup function.world([x,y])
(SCALE .025; plan x 500 is world 0).mass-3d.css styles header span. Panels placed inside the header must
reset color and font-size.prepare-audio.cjs, then generate-audio.py, then
snapshot-audio.cjs, which writes audio/audio-manifest.js and
audio/index.csv. The README section “Pre-generated AI audio” has the
details, and mass-assets.test.cjs checks the references.The repository is jddcef/mass-sim-liturgy, renamed from
roman-mass-explorer. GitHub Pages serves main at
https://jddcef.github.io/mass-sim-liturgy/. Contributions use topic branches
and pull requests; do not commit directly to main. Consult the Magisterium MCP
server for liturgical or Catholic questions and clarifications.
Next decision number: R217.
| Round | PR | Content |
|---|---|---|
| 1 | #2 | Playable simulator: roles, four levels, options, lapses, M.C., sacristan, bells and thurible |
| 2–3 | #3 | Watch mode, symbols, varied heights, incensation detail, cross and crucifix placement, outfits, liturgical colours, redo, windows and floor |
| 4 | #4 | Recorded audio in the game, homily place, collection, EMHC, reserved hosts, readers, timeline jump, speed slider |
| 5 | #5 | Role card, side quests, camera pad, speaker view, highlight, first person, sacristan training, audio fixes |
| 6 | #6 | Cupboard models, vestment rail and stand, first-person views, figure eyes |
| 7 | #7 | Presets, role switching, screen operator, monstrance, detail levels, sound icon, cancel New game |
| 8 | #8 | Search and index card, hover tips, feedback, wall fade, nave seating, audio timing, rename |
| docs | #8 | Player-facing README opening, SPEC.md, this guide, Copilot instructions |
| 9 | (this PR) | More natural bell synthesis, compact phone layout with fold-away menus |
| 10 | local, not published | Offline stone/marble/wood textures and metal finishes on Standard/High, reversible detail switching, restrained lighting; existing defaults and saved choices retained |
| 11 | local, not published | Repository workflow guidance: changes go through PRs rather than direct commits to main; consult the Magisterium MCP for liturgical and Catholic questions |
| 12 | local, not published | The Path and seniority: Involvement rename, Sunday split into with and without incense, a liturgical-year map of celebrations with marks and ranks, roadmap of rites “in preparation” |
| 27 | #21 | Good Friday (Celebration of the Passion of the Lord): silent entrance and prostration before bare altar; Collect without Oremus; Passion of St John in parts; ten Solemn Intercessions; Showing and Adoration of the Holy Cross (Ecce lignum Crucis); Communion from reserved Sacrament; Prayer over the People; silent departure; no Gloria, Creed, bells, or Eucharistic Prayer (R195–R201) |
| 28 | local, not published | Speaker-perspective look-around via drag and camera pad; continuous collection route joining the offertory presentation while keeping collection away from altar (R202–R203) |
| 29 | #24 (merged) | Corpus Christi outside-Mass procession with outdoor route, optional local-custom canopy/lights/stations, Benediction and reposition (R204) |
| 30 | #25 (merged) | Completion-based milestones and 1-3 performance stars; owner confirms R77 aisle layout and R17 calendar (R205-R207) |
| 31 | #26 (merged) | Persistent mini-game ideas and status backlog, including thurible timing and candle-lighting games (R208) |
| 32 | #27 (merged) | Practice room MG01-MG03: scene finding, selected cupboard preparation and procession arrangement; separate completion/stars records; standalone explorer compatibility fix (R209-R212) |
| 33 | #28 (open, merge pending) | MG10 abstract thurible rhythm/direction; MG11 symbolic lighter balance/reach ending at Easter Candle; MG12 abstract charcoal glow/pulse puzzle. Standard, Slow and untimed Assisted controls, isolated practice records and completion without score gates. MG04-MG09 remain Idea (R213-R216). |
| 26 | #21 | Holy Thursday (Evening Mass of the Lord’s Supper): Gloria with bells followed by liturgical silence; Mandatum (washing of the feet); Creed strictly omitted; EP I Roman Canon with proper Communicantes, Hanc igitur, and Qui pridie; no consecration bells; transfer of the Blessed Sacrament to Altar of Repose with humeral veil and Pange Lingua; stripping of the altar (Denudatio altaris) in silence without final blessing or dismissal (R188–R194) |
| 25 | local, not published | Liturgical Season Ribbon & Mini-Breviary sheet (feast rank, Latin vestment colours with GIRM 346 rationales, Ordo Missae and rubrics), and Visual Chime & Thurible Ripples on HUD and 3D floor (R182–R187) |
| 24 | #21 | Palm Sunday: blessing of palms at the back of the church, procession with palm branches, no Penitential Act or Gloria; the Passion read in parts at the ambo without candles or incense; all genuflect at the death of the Lord; Creed is said (R175–R181) |
| 23 | #20 | Funerals: the Funeral Mass (reception of the body at the door with holy water and the white pall, violet, no Gloria or Creed, final commendation with incense and the Song of Farewell, “In paradisum”) and the funeral liturgy outside Mass with the Priest or the Deacon; coffin on a bier, paschal candle, holy-water stand; new Path branch “The rites for the dead” (R168–R174) |
| 22 | #18 | Baptism of children within Sunday Mass (reception at the door, rite at the font after the Homily, Solemn Blessing) and outside Mass with the Priest or the Deacon; font, paschal candle, oils, white garment and candle; new Path branch “Christian initiation” (R161–R167) |
| 21 | #17 | Ash Wednesday: no Penitential Act, Gloria, Creed or Alleluia; after the Homily the Priest blesses and sprinkles the ashes and gives them to the faithful, who come forward in a line; the Deacon or a server holds the vessel (R154–R160) |
| 20 | #16 | Candlemas: blessing of candles at the back of the church, procession with lighted candles and the Canticle of Simeon, no Penitential Act, candles out at the Gloria (R147–R153) |
| 19 | #15 | Christmas Mass during the Night: the Christmas Proclamation before Mass, all genuflect at the Incarnation, the crib in the nave blessed at the universal prayer, Christmas solemn blessing; the M.C. rank becomes reachable (R137–R146) |
| 18 | #14 | Confirmation within Mass: candidate and sponsor, presentation, renewal of promises, laying on of hands, anointing with chrism, no Creed, Confirmation blessing (R127–R136) |
| 17 | #13 | Mass with the Bishop: mitre- and crozier-bearers in vimps, mitre and pastoral staff in 3D, homily at the cathedra, pontifical blessing (R119–R126) |
| 16 | #12 | Exposition and Benediction by a Deacon; white cope and humeral veil in 3D (R115–R118) |
| 14 | #10 | Rite registry; lay-led Adoration and Exposition and Benediction with the Priest (R104–R110) |
| 13 | local, not published | Generic prepared-shell parish profiles and maintainer editor: local library/draft, plan and 3D route preview, full-profile JSON export/import, seating/target integration and simple exterior; future user patch workflow reserved |
| 15 | local, not published | Parish source intake: agent runbook, parishes/ manifest and spec formats, Street View screening, draft profiles, offline bulk reviewer (R111–R114) |
Round 33 was exercised in an isolated headless Edge instance through file://
at 1280x900 (keyboard) and 390x844 (emulated touch). All three hands-on games
were completed in Assisted mode on both viewports; Standard/Slow marker
animation, manual timing freeze, reset/replay with retained assistance, skips,
early completion, best-star retention, reload, the existing MG01 scene markers,
explicit storage-write failure, all existing save-key isolation and an unfinished
Priest game/camera resume were checked. The animation and standalone 3D pages
also loaded without console errors or external page requests. All five Node
suites and every CI-listed script syntax check pass locally (Node 26); PR CI
uses Node 22. No physical low-spec device, screen-reader software, or real flame
was used; symbolic games are not practical fire-handling instruction.
Round 10 was exercised in Edge through file:// on all three pages, including
all sanctuary floors, repeated quality switches, layouts, appearance changes,
wall fading, first-person material clones and a complete accelerated Sacristan
Watch run (opening, setup, Mass and pack-away). Browser checks reported no
console errors or external requests; texture/material counts stayed constant
after warming and repeating the quality/floor combinations. This is not a
performance claim for physical low-spec hardware. Simulated low-memory mobile
startup selected Auto/Low and created no surface textures, finish-material
variants or reflection environment. All script syntax checks and all four
Node suites pass on Node 22. No commit, push or PR was requested, so remote CI
has not been run for this change.
Round 12 was exercised in Edge headless through file://: the Path opens
from setup and from the summary, “Prepare this celebration” sets the preset,
a credited game updates the mark, the rank strip and the recommendation, Esc
closes the Path, and at 390 px the list replaces the map. No console errors.
All four Node suites pass. Not committed or pushed.
Round 13 keeps the Legacy layout as the initial default and does not change
existing setup, layout, score or Path storage keys. mass-parishes.js supplies
pure profile validation, reversible seating coordinates and nave aisle routing;
mass-parish-editor.js supplies maintainer authoring on both 3D pages. Profiles
are strict versioned data for the fixed rectangular-v1 shell, not arbitrary
surveyed churches. bundled in mass-parishes.js is the maintainer-reviewed
published profile list. New photographic/model assets require separate
preparation and rights review.
File-protocol browser checks in an isolated, self-exiting headless Edge instance
covered draft preview/cancel, furniture and seating mapping, the exterior and
animated route marker, working-copy persistence, full-profile export shape and
import, rejected unsupported/oversize files, explicit storage failures,
multiple-church selection, reload, Low/Standard/High switching, shifted-door
placement, expert picking for a moved ambo, editing guards, phone-width layout
and a complete accelerated Sacristan Watch run including opening and pack-away.
The browser harness advanced the Mass clock through its normal stop limits and
rendered walkers explicitly to avoid virtual-time frame throttling. Expected
validation/storage errors were checked separately; there were no unexpected
console errors or external page requests. All four Node suites and script
syntax checks pass. Direct file:// startup also passed without a file-access
override; a cold Low startup created no surface textures with the profile shell
enabled. There is no physical low-spec performance claim, and no
real parish has yet been surveyed or recreated. Changes are local and
uncommitted; no push, PR or remote CI run was requested.
Round 15 adds parish source intake (R111–R114). docs/PARISH-INTAKE.md is a
runbook for an agent that prepares per-parish folders under parishes/, made
up of a source manifest with statuses and reason codes, and a parish spec with
per-value source and confidence. The agent screens Street View images with a
bearing rule and a visual check, and builds a review queue. parish-intake.cjs
(using parish-intake.js) provides the template, check, aim, draft, index and
apply commands. parish-review.html is the offline bulk reviewer. The
mass-assets suite covers formats, the bearing rule, draft conversion and a
full CLI round trip in a temporary folder. The reviewer was checked in headless
Edge through file:// with sample data. It covered the contact sheet,
one-by-one mode, Ctrl+Enter accept with comment, R reject, auto-advance, skip
back to the sheet and saved decisions. All four Node suites pass. No real
parish material has been processed yet. The work is local and uncommitted.
Round 28 adds look-around controls to the temporary speaker-perspective camera
and connects the usher’s collection route continuously from the nave to the
offertory presentation. The collection remains off the altar (GIRM 73, 140).
All four Node test suites and edited-script syntax checks pass. A headless Edge
load through file:// initialized the scene, but interactive camera movement
was not automated. Changes are local and uncommitted.
Round 29 adds Corpus Christi as a playable celebration on the Path. It depicts
the procession after Mass (the Mass itself is not shown); the Priest carries
the Blessed Sacrament, and the celebration concludes with Benediction and
reposition. The route and optional canopy, lights, route incense and prayer
stations are explicitly treated as local custom. See R204 and the Magisterium
sources in SOURCES.md. All five Node suites, CI syntax checks and
git diff --check pass. The file:// browser check confirmed the Corpus
preset, after-Mass setup, and 3D procession through the first outdoor station;
the scene rendered without a visible initialization error. Route, incense and
small-team behavior are covered by the Corpus regression tests. Merged in #24.
Round 30 makes every completed named celebration count towards seniority and
recommendations, regardless of score or involvement. Performance is shown as
1-3 stars, with saved marks and best results preserved (R205). The owner
confirmed the current centre-aisle layout and simplified calendar (R206-R207).
All five Node suites, changed-script syntax checks and git diff --check pass.
A file:// browser check confirmed legacy completion credit, seniority,
1/2/3-star map badges, accessible labels and mobile-list completion labels;
the test restored the original saved progress afterwards.
Round 31 records eleven mini-game ideas in MINI-GAMES.md,
with stable IDs, status definitions and delivery-reference fields. All are
Idea, not implemented. Includes the user’s thurible rhythm/direction timing
game and virtual lighter/match balance-and-reach game ending with the Easter
Candle. Documentation only; no gameplay changes.
Round 32 implements the first three practice games behind a surgical setup
entry, leaving the setup redesign in #23 alone. Five Node suites, including
new practice rules/records regressions, pass. Repeated isolated headless Edge
checks through file:// exercised desktop and 390px touch layouts, all four
supported preparation/procession arrangements, five-target scene rounds,
replay, independent record persistence, explicit storage denial, and resuming
and restarting an existing celebration after practice. No unexpected console
errors or external page requests occurred in the completed acceptance runs.
MG01-MG03 remain In progress, not Done, until merged. MG12 is an entirely
virtual backlog idea; MG10-MG12 have no implemented gameplay in this batch.
An additional standalone-page smoke check found an existing mass-3d.html
startup failure when optional Corpus route data is absent. At the coordinating
session’s request, this batch also guards the route-dependent petal generation
when fewer than two points exist. Node regression cases cover absent, empty,
single-point and two-point routes; file-protocol smoke checks cover both the
standalone explorer without Corpus globals and the floor-plan page.
Mini-games: track ideas and implementation status in
MINI-GAMES.md (R208).
FEEDBACK_ENDPOINT in
feedback-config.js.GAME-DECISIONS.md.
R77 (centre aisle without side aisles) and R17 (calendar) are confirmed
in R206-R207 and need no further decision.preset to a celebration in
CELEBRATIONS makes it playable and creditable.
1. RITES in mass-scenarios.js).
2. mass-rite-exposition.js); the Deacon form, cope and humeral
veil in round 16.
3. flowchart TD
F[1 Weekday Mass] --> S[2 Sunday Mass] --> SI[3 Sunday with incense] --> SO[4 Solemnity]
SO --> B[5 Mass with the Bishop] --> N[6 Christmas]
S --> AL[Adoration, lay-led] --> EB[Exposition and Benediction] --> CC[Corpus Christi procession]
SI --> EB
SO --> CA[Candlemas] --> AW[Ash Wednesday] --> PS[Palm Sunday]
S --> BA[Baptism] --> CF
SI --> FU[Funeral]
B --> CF[Confirmation]
N --> HT[Holy Thursday]
PS --> HT
CC --> HT
CF --> HT
HT --> GF[Good Friday] --> EV[Easter Vigil]
docs/PARISH-INTAKE.md agent over
the owner’s material, review in parish-review.html, and apply the
decisions. Then extend the shell for spec fields that only reach the
report today: left/behind sacristy, cruciform or apsed plans, belfry
and roof pitch.