Challenges & Community Hooks May 22, 2026

7-Day Construct 3 Event-Sheet Order Freeze Challenge Before Steam NW.js Ship - 2026

2026 Construct 3 challenge—seven weekday gates to freeze event sheet order, complete RNG audit, pass browser and NW.js replay tests, and ship a freeze receipt before Steam demo export.

By GamineAI Team

7-Day Construct 3 Event-Sheet Order Freeze Challenge Before Steam NW.js Ship - 2026

Pixel-art hero for seven-day Construct 3 event-sheet order freeze challenge 2026

You finished the RNG seed ledger evening pipeline. Test C passed once. Then a teammate added a UI shake group above RunRNG, exported NW.js for Steam, and playtesters reported different boss drops on desktop than in the itch tab you approved yesterday.

That is not bad luck. It is unfrozen event-sheet order meeting a new runtime surface.

Q3–Q4 2026 Construct teams wrapping browser roguelites in NW.js discover replay bugs after desktop export—when fest branches are already promoted. This Challenges & Community Hooks sprint installs a seven-weekday freeze: one gate per day, one pass log per gate, no NW.js manifest preflight until Sunday’s read-aloud shows seven consecutive passes on the same project_version lineage.

Non-repetition note: Yesterday’s post was a beginner tutorial (one evening, seed ledger). This is a seven-day challenge with daily gates and NW.js manifest coupling—not a second checklist on Steam FAQ lines or metadata parity.

Why this matters now (May 2026)

  1. NW.js ≠ browser preview — Resume paths, focus events, and file-based saves differ; sheet order bugs surface on relaunch, not in five-minute editor tests.
  2. H2 2026 roguelite density — Players compare your demo to Godot floor coordinators and Phaser streaming discipline—Construct must show the same evidence culture.
  3. Fest branch promotionBUILD_RECEIPT culture without sheet freeze produces receipts that lie about replayability.
  4. Team parallel work — Event sheets invite “quick fixes” that reorder groups; freeze week stops silent drift.
  5. October 2026 traffic — Fix determinism in May–August, not during refund threads tied to “lost run” language on itch demos.

Direct answer: Run one gate per weekday; log gateN_pass under release-evidence/rng/freeze-week/; do not export NW.js for Steam until Gate 7 passes and sheet_freeze_receipt_v1.json shows freeze_pass: true.

Who this is for

  • 1–3 person teams shipping Construct HTML5 → NW.js → Steam in 2026
  • Devs who completed (or will complete Day 1–2 alongside) the seed ledger tutorial
  • Producers tired of “cannot reproduce” playtest rows missing seed_id
  • Anyone promoting a fest demo branch without a written group order law

Time: ~50–70 minutes per weekday (~7 hours total). Weekends: evidence review and read-aloud only—no new feature work.

Before you start — readiness checklist

  • [ ] release-evidence/rng/ exists with rng_seed_ledger.json or empty template ready
  • [ ] Frozen project_version string for challenge week (e.g. 0.5.0-freeze-week)
  • [ ] Main gameplay event sheet named in team docs (not “Sheet1”)
  • [ ] NW.js export template tested once (even if failing—know the button)
  • [ ] Second tester available Wednesday+ (solo dev can be “future you” with written steps)
  • [ ] No new gameplay features during freeze week—balance tweaks only if logged in gate notes
  • [ ] Playtest form includes seed_id per 18 playtest tools

Rules of the challenge

  1. One owner signs each weekday log (solo dev signs writer + re-runner on Gate 5).
  2. Fail stops the day—fix before gateN_pass; no “we will verify tomorrow.”
  3. Artifacts live in release-evidence/rng/freeze-week/YYYY-MM-DD_gateN.log—not Discord pins.
  4. Sheet order changes after Day 3 require project_version bump and restart from Day 1.
  5. Pair with 7-day cold-hash challenge only after freeze week if upload month collides—replay truth before hash theater.
  6. Add one line to Friday Block 5 until NW.js ship: sheet_freeze_pass Y/N.

How this differs from the seed ledger tutorial

The evening pipeline builds rng_seed_ledger.json and passes Tests A–C once. This challenge freezes sheet order for seven weekdays so teammates cannot silently reorder groups while you prepare NW.js. Think muscle memory, not a single heroic night.

Challenge calendar at a glance

Day Gate Primary artifact Pass signal
Mon 1 sheet_inventory_v1.json Every sheet + group listed
Tue 2 tick_group_order frozen in ledger RunRNG top; screenshot
Wed 3 active_on_start_audit.csv Zero surprise auto groups
Thu 4 random_surfaces complete Zero UNAUDITED gameplay rows
Fri 5 Browser Tests A–C replay_pass: true in receipt
Sat Evidence review No new gates
Sun Read-aloud Seven logs present
Mon+1 6 NW.js Test C Desktop resume matches browser
Tue+1 7 sheet_freeze_receipt_v1.json Manifest export allowed

Teams shipping within one calendar week may run Gate 6 Monday afternoon and Gate 7 Tuesday morning after Gate 5 passes—do not skip Gate 6 on editor preview alone.

Beginner path (read this first)

If event sheets feel overwhelming, treat each day as one checkbox:

  1. Monday — List every sheet name in a JSON file.
  2. Tuesday — Move RunRNG to the top; take a screenshot.
  3. Wednesday — Turn off “Active on start” on experimental groups.
  4. Thursday — Find every random( in the project; write it in the ledger.
  5. Friday — Refresh browser mid-run; loot should match.
  6. Next Monday — Repeat refresh in exported .exe.
  7. Next Tuesday — Write a receipt JSON that says you are allowed to export.

Success check: A friend can read your ledger and reproduce Gate 5 without asking you which sheet is “the real one.”

Developer path (evidence stack)

  1. Join sheet_freeze_receipt_v1.json to BUILD_RECEIPT build_id.
  2. Store gate logs under release evidence taxonomy rng/freeze-week/.
  3. Block fest branch promotion when freeze_pass is false—same severity as open blocker refunds in refund dashboards.
  4. Cross-link playtest CSV seed_id to ledger run_id every Friday.
  5. File NW.js failures in 5-day crash log challenge folders by weekday.

Day 1 (Monday) — Sheet and group inventory freeze

Goal: sheet_inventory_v1.json lists every event sheet, layout, and group with stable IDs.

Create release-evidence/rng/freeze-week/sheet_inventory_v1.json:

{
  "schema": "sheet_inventory_v1",
  "project_version": "0.5.0-freeze-week",
  "sheets": [
    {
      "name": "Game",
      "layout": "Dungeon",
      "groups": ["RunRNG", "WorldSim", "Combat", "UI"],
      "owner": "gameplay"
    },
    {
      "name": "Menu",
      "layout": "Title",
      "groups": ["MenuRNG", "MenuUI"],
      "owner": "menu"
    }
  ]
}
Step Action
1 Export project; open each event sheet in Construct
2 Copy group names top-to-bottom per sheet
3 Note which layout each sheet belongs to
4 Second person regenerates list from editor—must match

Pass criteria: Two independent inventories identical; no unnamed “Group” left as default.

Log line: gate1_inventory_frozen project_version=0.5.0-freeze-week sheet_count=N group_count=M

Common fail: Forgot includes sheet or includes from addon—list those under includes[] with version numbers.

Day 1 troubleshooting

Symptom Fix
Group lists differ Check collapsed groups hidden in editor
Two “Game” sheets Rename in inventory; fix editor names Day 2
Addon injects events Document addon sheet separately

Day 2 (Tuesday) — Pin RunRNG and document tick order

Goal: tick_group_order in rng_seed_ledger.json matches screenshot; RunRNG is first on gameplay sheet.

Step Action
1 Move RunRNG above all gameplay groups
2 Set RunSeed once on layout start inside RunRNG only
3 Update ledger tick_group_order array
4 Screenshot debugger + sheet with date in filename

Pass criteria: Screenshot shows RunRNG at top; ledger row audited: true for layout start seed.

Log line: gate2_runrng_pinned screenshot=screenshots/gate2-YYYY-MM-DD.png

Pair with tutorial: Re-read Block 2 — Pin the RunRNG group if Tuesday fails twice.

Common fail: Duplicate On start of layout on Menu sheet resets seed when returning from pause—add RunInitialized boolean guard documented in ledger notes.


Day 3 (Wednesday) — Active-on-start audit

Goal: active_on_start_audit.csv documents every group’s “Active on start” flag.

sheet,group,active_on_start,risk,action
Game,RunRNG,true,low,expected
Game,Combat,true,medium,verify no random() on tick
Game,FX_Legacy,false,high,disabled until audited
Step Action
1 Walk every group in inventory
2 Record Active on start Y/N
3 Disable experimental groups not needed at layout start
4 Re-run 30-second smoke—game still boots

Pass criteria: No high risk row remains active_on_start=true unless documented with salt strategy.

Log line: gate3_active_audit rows=N high_risk_open=0

Common fail: UI particles group active on start consuming RNG before combat—move to triggered subgroup.


Day 4 (Thursday) — random() surface completion

Goal: random_surfaces[] in ledger has zero gameplay rows with audited: false.

Worked example — fixing a late-week regression

Suppose Wednesday’s audit finds UI_Shake still calls random(100) every tick. Combat rolls shift; Gate 5 Test C fails with “loot wrong after refresh” even though RunSeed looks stable.

Fix sequence (same day, before log pass):

  1. Disable Active on start for UI_Shake or move shake to triggered one-shot.
  2. Replace tick random(100) with random(900000 + uid) documented as cosmetic stream.
  3. Re-run Gate 4 count—search random( must equal ledger row count.
  4. Re-run Gate 5 Test C—do not defer to weekend.

Document the regression in YYYY-MM-DD_gate4.log:

regression_found UI_Shake tick random
fix_applied cosmetic salt 900000+uid
retest_gate5 pending same day

This pattern matches the Case Study pitch still on the blog backlog (pinned groups + seed manifest vs “lost run” fest reports)—your gate log is the honest version without invented revenue metrics.

Gate log template (copy for every weekday)

Create release-evidence/rng/freeze-week/YYYY-MM-DD_gateN.log:

gate_number=4
project_version=0.5.0-freeze-week
owner=GamineAI Team
started_utc=2026-05-22T14:00:00Z
finished_utc=2026-05-22T15:10:00Z
result=pass
surfaces_total=23
unaudited=0
notes=MenuSeed separated; FX_Legacy disabled

Consistent log shape lets you paste excerpts into partner upload ZIP README maps later without rewriting prose.

Step Action
1 Project-wide search random( in Construct
2 Add missing rows to ledger
3 Apply salt pattern from tutorial salt table
4 Mark menu/cosmetic streams separately (MenuSeed)

Pass criteria: Lead dev signs CSV export of surfaces; count matches search results.

Log line: gate4_random_audit surfaces=N unaudited=0

Tooling tomorrow: Backlog pitch #4 listicle will name debugger plugins—tonight use built-in finder only.

Common fail: JavaScript function block calls Math.random()—either ban for gameplay or ledger as separate stream with explicit seeding.


Day 5 (Friday) — Browser replay Tests A–C

Goal: rng_replay_receipt_v1.json with replay_pass: true on itch or local preview build tagged project_version.

Test Pass
A — Fresh run Loot + spawns noted
B — Save/load run_seed + run_nonce restored
C — F5 refresh Same loot sequence after resume

Store updated receipt in release-evidence/rng/rng_replay_receipt_v1.json.

Log line: gate5_browser_replay replay_pass=true build_tag=0.5.0-freeze-week

Common fail: Autosave key not versioned—bump roguelite_autosave_v1v2 when adding run_nonce.

Promotion gate: Do not tag #fest-demo branch on Friday if Gate 5 fails—fix Saturday review, re-run Monday if needed.


Weekend — Evidence review (Saturday–Sunday)

Saturday: Zip freeze-week/ logs; verify seven files exist or explain missing with version bump plan.

Sunday read-aloud (15 minutes):

  1. Read tick_group_order aloud—team agrees order is law until ship.
  2. Confirm unaudited=0 from Gate 4 log.
  3. Confirm replay_pass=true from Gate 5.
  4. Schedule Gate 6 NW.js test owner and machine name.

No coding Saturday unless fixing a documented fail from Friday—scope creep voids freeze week.


Day 6 (Monday week 2) — NW.js replay Test C

Goal: Desktop NW.js export passes Test C equivalent—close mid-run, relaunch, resume, same loot.

Step Action
1 Export NW.js with project_version string visible in title or log
2 Run Test C on clean machine if possible
3 Compare ledger run_id row to desktop log
4 Note platform delta in gate log notes

Pass criteria: Matching loot table or documented acceptable delta (e.g. menu-only particle variance) with wont-fix tag—not silent drift.

Log line: gate6_nwjs_replay replay_pass=true exe_hash=optional

Honest limit: NW.js may differ on frame timing; loot and spawn tables must match, not necessarily particle frame phase.

Cross-link: Construct 3 guide for export settings; no-code path for teams new to desktop wrap.


Day 7 (Tuesday week 2) — Sheet freeze receipt and manifest preflight

Goal: sheet_freeze_receipt_v1.json authorizes NW.js Steam manifest work.

{
  "receipt_type": "sheet_freeze_receipt_v1",
  "project_version": "0.5.0-freeze-week",
  "gates": {
    "gate1_inventory": "pass",
    "gate2_runrng": "pass",
    "gate3_active_audit": "pass",
    "gate4_random_audit": "pass",
    "gate5_browser_replay": "pass",
    "gate6_nwjs_replay": "pass"
  },
  "freeze_pass": true,
  "tick_group_order": ["RunRNG", "WorldSim", "Combat", "UI"],
  "unaudited_random_surfaces": 0,
  "reviewer": "GamineAI Team",
  "observed_date_utc": "2026-05-29"
}
Step Action
1 Aggregate seven gate logs
2 Write receipt JSON
3 Attach receipt path to BUILD_RECEIPT upload notes
4 Run Wednesday demo smoke ritual next week before branch promotion

Pass criteria: freeze_pass: true; all gate keys pass; project_version matches NW.js binary under test.

Log line: gate7_freeze_receipt freeze_pass=true

After Gate 7: You may proceed to Steam depot / manifest preflight blogs—not before.


Proof table (developer)

Claim Evidence Pass
Sheet order law sheet_inventory_v1.json Gate 1
RunRNG pinned Screenshot + ledger Gate 2
No surprise auto groups active_on_start_audit.csv Gate 3
RNG audited unaudited=0 Gate 4
Browser replay replay_pass: true Gate 5
Desktop replay Gate 6 log NW.js Test C
Ship authorized freeze_pass: true Gate 7

Common mistakes across the week

  1. Skipping Gate 6 because “browser passed”—desktop resume bugs are the trend hook.
  2. Renaming groups mid-week without version bump—voids freeze.
  3. Adding Tuesday feature “just one enemy”—reorders tick consumption.
  4. Testing only in editor—F5 in preview ≠ itch iframe.
  5. Merging Menu and Run seeds—menu particles shift combat rolls.
  6. No second human on Gate 1—inventory typos propagate six days.
  7. Exporting Steam build before Gate 7—partners receive nondeterministic demos.
  8. Ignoring async callback random()—Gate 4 false pass.
  9. Freeze week during major addon upgrade—reschedule week.
  10. Treating challenge as metadata—this is gameplay truth, not store copy.

Community hook (optional, no fake personas)

Post a build note or devlog section:

Freeze week completeproject_version 0.5.0-freeze-week, sheet order locked, NW.js replay verified. Playtesters: include seed_id from pause menu.

Do not invent Discord servers or @mentions to studios that do not exist. Share the receipt filename and gate calendar—readers copy the discipline, not your follower count.

Cross-engine floor (without rehashing WASM-only posts)

Engine Freeze analogue Construct this week
Godot Threaded loader epoch Group order + save keys
Phaser Chunk pool contract random() audit
Construct This challenge NW.js Gate 6

Future backlog #7 compares Godot loaders to tick groups—read after you pass Gate 7.

Pairing with other seven-day sprints

Sprint Order
Wishlist truth audit After gameplay truth
Store metadata parity After freeze + replay
Cold-hash challenge After NW.js binary frozen

Gameplay freeze before store copy—otherwise you document lies efficiently.

Salt and save reminders (from tutorial)

Carry forward from the seed ledger:

  • Loot salt 1000 + index
  • Room pick 2000 + floor_index
  • Autosave includes run_seed, run_nonce, floor_index
  • Backlog #2 save-format semver when daily modifiers ship mid-fest

Freeze week does not replace semver—it prevents reorder bugs while you design semver.

Key takeaways

  • NW.js Steam exports in Q3–Q4 2026 expose replay bugs browser tests hide.
  • Seven weekday gates freeze inventory, RunRNG, active flags, random audit, browser replay, NW.js replay, receipt.
  • Fail stops the day—no yellow passes.
  • Sheet order changes after Day 3 require version bump + restart.
  • Builds on RNG seed ledger tutorial—different format, not duplicate URL.
  • sheet_freeze_receipt_v1.json gates manifest preflight.
  • Beginners get one checkbox per day; developers get proof tables and BUILD_RECEIPT joins.
  • Challenges category rotates after Tutorial Construct post.
  • 10 backlog pitches remain after this pass.
  • Pair with playtest seed_id and Friday Block 5 maintenance.
  • Gameplay truth before metadata sprints.

FAQ

Can I run freeze week without the evening tutorial?
Yes, but Days 2–5 are harder—complete tutorial first when possible.

What if Gate 5 passes but Gate 6 fails?
Do not ship NW.js; fix save resume or group order; bump project_version and restart from Day 2 minimum.

How long per day really?
50–70 minutes if inventory exists; Day 1 may take 90 minutes on messy projects.

Does this fix Steam store refunds alone?
No—pair with refund dashboards for store-copy vs gameplay tags.

Multiplayer?
Out of scope—server authoritative RNG needs a different challenge.

Advanced Random plugin?
Ledger it on Gate 4; do not mix silently with System random().

Can two teammates own different days?
Yes—one owner still signs each log; handoff notes in notes field.

What about Construct 4 rumors?
Receipt uses engine: construct-3—bump schema when you migrate.

Is seven days negotiable to three?
Compress Gates 1–2 into day 1 and 5–6 into day 5 only if you accept higher miss risk—full week recommended before first Steam demo.

Where next in backlog?
Save-format migration trend playbook—after freeze receipt passes.

Conclusion

Browser-green is not Steam-green. Seven weekdays turn event-sheet order from tribal knowledge into sheet_inventory_v1.json, gate logs, and a freeze receipt your future self trusts when promoting a fest branch.

Start Monday with inventory. Pin RunRNG Tuesday. Zero unaudited random Thursday. NW.js Test C next Monday. Export manifest Tuesday only when freeze_pass is true.

Next reads: RNG seed ledger tutorial, Construct 3 guide, and BUILD_RECEIPT evening pipeline.

Ninety-minute emergency compress (not recommended)

Block Gate
0–20 Gate 1 mini-inventory (gameplay sheet only)
20–35 Gate 2 screenshot
35–50 Gate 4 top ten random() only
50–70 Gate 5 Test C once
70–90 Handwritten receipt—schedule full week before Steam

Compress pass does not replace Gate 6–7 before commercial NW.js ship.

SEO and discovery note

This challenge targets construct 3 event sheet order and construct 3 nw.js steam replay queries—complements the seed ledger tutorial without cannibalizing construct 3 rng seed beginner intent.

Stretch goals after Gate 7

  • Add pause-menu copy seed_id button wired to ledger run_id.
  • Wire freeze_pass into a pre-export Construct event—block NW.js export when false.
  • Schedule backlog #4 tooling listicle to replace manual random( search with debugger addons.
  • Read Godot WASM memory playbook if long runs OOM after determinism is fixed—freeze week solves order, not heap size.

Found this useful? Bookmark this page and run the challenge the week before your first NW.js upload—not the night partners expect a repro.

Manifest preflight pointer (post-challenge)

After sheet_freeze_receipt_v1.json passes, your team may still need Steam depot and branch discipline from October depot trend playbook and demo branch naming checklist. Those are distribution gates; this challenge is simulation truth gates. Run truth first or metadata work documents a lying binary.

Playtester handout (copy to PDF)

One page for fest playtesters:

  • What changed this week: event sheet order locked; RNG audited.
  • What we need: seed_id from pause menu on every bug report.
  • What we do not need: balance opinions without seed_id.
  • How to break us: refresh browser mid-run; report if loot changes.

Attach handout link to how to run a playtest and act on feedback if your team runs structured sessions.

Weekly scoreboard (team visibility)

Day Gate Owner initial Pass Y/N
Mon 1
Tue 2
Wed 3
Thu 4
Fri 5
Mon+1 6
Tue+1 7

Pin the table in release-evidence/rng/freeze-week/README.md—visibility beats private guilt.