Files
aetherbound-guild/docs/design-authority/pages/RSK-002-risk-commitment/runtime/reconstruction-spec.json
T
wushenghua 27a17b7497 docs(rsk002): accept runtime and activate bat001 spec
Record Owner acceptance for the normal 100% Risk Commitment Runtime, close the RSK-002 page package, and open the bounded BAT-001 specification step.
2026-08-23 19:08:14 +08:00

203 lines
8.7 KiB
JSON

{
"schema_version": 1,
"page_id": "RSK-002",
"version": "v001",
"state": "COMPLETE",
"mode": "contained 16:9 coordinate master plus engine-owned party, facts and commitment actions",
"coordinate_master": {
"width": 2048,
"height": 1152,
"aspect": "16:9",
"policy": "contain the authored canvas; aspect-cover only the painted world outside the contained canvas"
},
"stopping_point": "Review one sourced risk against the frozen four-member Party snapshot, confirm once and hand one idempotent commitment receipt to BAT-001; do not simulate battle on this page.",
"layers": [
{
"id": "painted_world",
"asset": "res://assets/entry/rsk_002_risk_commitment/risk-commitment-static-master.png",
"source": "../reconstruction/v001/asset-manifest.json#assets.clean_static_master",
"owner": "static_art",
"z": 0,
"bounds": [0.0, 0.0, 1.0, 1.0],
"layout": "full contained 16:9 coordinate canvas"
},
{
"id": "flags_and_overlook_props",
"asset": "res://assets/entry/rsk_002_risk_commitment/risk-commitment-static-master.png",
"owner": "static_art",
"z": 10,
"bounds": [0.0, 0.0, 1.0, 0.68],
"layout": "painted world props remain behind all runtime entities"
},
{
"id": "selected_risk_relic",
"asset": "res://assets/entry/rsk_002_risk_commitment/risk-commitment-static-master.png",
"owner": "static_art_plus_engine_slots",
"z": 20,
"bounds": [0.055, 0.055, 0.36, 0.585],
"layout": "single selected-risk surface; Engine fills identity, region, icon and sourced values"
},
{
"id": "party_arc",
"asset": "res://assets/entry/rsk_002_risk_commitment/risk-commitment-static-master.png",
"owner": "static_art",
"z": 25,
"bounds": [0.46, 0.55, 0.49, 0.13],
"layout": "field-attached connector remains continuous under the four actors"
},
{
"id": "frozen_four_party",
"asset": "res://assets/entry/recruit_stickers/pf_b01-512.png through pf_b12-512.png",
"owner": "runtime_recruit_entities",
"source": "PTY-002 accepted Party snapshot",
"z": 30,
"bounds": [0.48, 0.25, 0.47, 0.43],
"count": 4,
"order": "rear_left_to_front_right",
"layout": "preserve complete silhouettes and position 0 front exposure"
},
{
"id": "party_fact_markers",
"asset": null,
"owner": "engine_state_overlay",
"z": 40,
"bounds": [0.47, 0.31, 0.49, 0.22],
"count": 4,
"layout": "semantic coverage markers attach to the frozen actor slots"
},
{
"id": "consequence_band_shell",
"asset": "res://assets/entry/rsk_002_risk_commitment/risk-commitment-static-master.png",
"owner": "static_art",
"z": 50,
"bounds": [0.075, 0.65, 0.85, 0.145],
"layout": "physical ledger shell; center-only stretch"
},
{
"id": "consequence_facts",
"asset": null,
"owner": "FormationRiskService_and_company_store",
"z": 55,
"bounds": [0.09, 0.675, 0.82, 0.105],
"count": 6,
"layout": "fixed read order: threat, uncertainty, entry Coin, reward, recovery, retreat"
},
{
"id": "commitment_rail_shell",
"asset": "res://assets/entry/rsk_002_risk_commitment/risk-commitment-static-master.png",
"owner": "static_art",
"z": 60,
"bounds": [0.0, 0.805, 1.0, 0.195],
"layout": "field-attached command rail; center-only stretch"
},
{
"id": "commitment_actions",
"asset": null,
"owner": "engine_state_and_receipt_service",
"z": 70,
"bounds": [0.03, 0.83, 0.94, 0.15],
"layout": "Cancel, confirmation acknowledgement and Begin Battle slots"
},
{
"id": "settings_slot",
"asset": null,
"owner": "engine_action_overlay",
"z": 75,
"bounds": [0.90, 0.0, 0.10, 0.14],
"layout": "utility command remains outside the commitment rail"
}
],
"dynamic_bindings": [
"selected risk ID, source version, threat and region from RSK-001",
"same four Recruit IDs, names, professions, order, position 0 exposure and snapshot version from PTY-002",
"party coverage facts and semantic markers from the accepted Party snapshot",
"known threat, uncertainty band, entry Coin cost, current Coin balance, reward class, recovery exposure and retreat implication from FormationRiskService",
"localized labels, values, reasons, confirmation summary, disabled state and receipt copy from Engine text slots",
"loading, stale dependency, insufficient Coin, invalid option and interrupted resume reasons from the owning service"
],
"state_bindings": {
"loading": {
"visible": ["selected_risk_skeleton", "frozen_party_skeleton", "consequence_skeleton", "begin_battle_skeleton"],
"input": "locked"
},
"commitment_summary": {
"primary": "review_consequences",
"secondary": ["cancel_to_risk_board", "settings"],
"guard": "selected risk and exact four-member Party snapshot validate before rendering facts"
},
"consequence_review": {
"primary": "continue_to_confirmation",
"secondary": ["cancel_to_risk_board", "back_to_summary", "settings"],
"guard": "all six sourced consequence facts and current Coin balance are readable"
},
"ready_to_commit": {
"primary": "confirm_begin_battle",
"secondary": ["cancel_to_risk_board", "back_to_consequences", "settings"],
"guard": "selected risk, Party snapshot, Coin balance and ruleset hashes are valid and acknowledgement is explicit"
},
"committing": {
"input": "locked",
"visible": ["commit_progress", "dependency_validation", "no_duplicate_submission"]
},
"commitment_receipt": {
"primary": "open_battle_opening",
"secondary": ["review_receipt"],
"guard": "return the original receipt for duplicate operation input"
},
"stale_dependency": {
"primary": "reload_risk_board",
"secondary": ["return_to_party_line", "safe_exit"]
},
"insufficient_coin": {
"primary": "return_to_risk_board",
"secondary": ["return_to_guild", "safe_exit"]
},
"invalid_option": {
"primary": "reload_risk_board",
"secondary": ["return_to_readiness", "safe_exit"]
},
"interrupted_resume": {
"primary": "resume_commitment_review",
"secondary": ["discard_review", "safe_exit"],
"guard": "revalidate the same risk ID, four IDs, order, snapshot version and no-partial-spend invariant"
},
"commit_receipt_exists": {
"primary": "open_battle_opening",
"secondary": ["review_receipt", "return_to_risk_board"],
"guard": "idempotent operation key returns the original receipt without another spend"
}
},
"responsive": {
"canvas": "contained_16_9",
"viewports": ["760x360", "844x390", "1280x720"],
"locales": ["zh_CN", "en"],
"blocking_text_scales": [100],
"narrow_behavior": "Keep the complete relic, four actor silhouettes and bottom rail in the first viewport; linearize the consequence band without hiding Coin cost or recovery consequence.",
"wide_behavior": "Center the contained canvas and preserve authored art proportions; side space is inert."
},
"input": {
"modes": ["touch", "keyboard_focus", "controller_focus"],
"minimum_target_logical_px": 48,
"hit_areas": "hit-areas.json",
"focus_order": ["settings", "selected_risk_details", "consequence_band", "confirmation_acknowledgement", "begin_battle", "cancel_to_risk_board"]
},
"ownership_rules": [
"The approved and cleaned images establish composition and painted materials only.",
"Engine owns every label, value, localized reason, selection, disabled state, confirmation state and receipt.",
"Recruit textures are runtime entities bound to the accepted PTY-002 snapshot and are never baked authority.",
"Transparent hit areas remain independent from visible art bounds and may be larger than icon art.",
"No second card, frame, rail or icon background may be drawn over a region already owned by the static master."
],
"references": {
"page_contract": "../page-contract.json",
"state_matrix": "../state-matrix.json",
"approved_layer_map": "../approved/v001/layer-map.json",
"approved_text_slots": "../approved/v001/text-slots.json",
"approved_hit_areas": "../approved/v001/hit-areas.json",
"asset_manifest": "asset-manifest.json",
"runtime_hit_areas": "hit-areas.json",
"functional_provenance": "runtime/entry/entry_shell.gd show_risk_commitment; visual authority remains this package"
},
"implementation_gate": "Godot implementation is active for this page. The page stops at one idempotent commitment receipt and BAT-001 handoff; battle simulation, result/recovery UI, packaging and release remain outside this step."
}