-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathindex.html
More file actions
159 lines (149 loc) · 12.6 KB
/
Copy pathindex.html
File metadata and controls
159 lines (149 loc) · 12.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<!doctype html>
<html lang="zh-Hant" data-locale="zh-Hant" data-system="deck-coach">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="符文戰場 Riftbound 雙語牌組診斷與操作指南原型" />
<title>牌組教練 Deck Coach · Riftbound Chronicle</title>
<link rel="stylesheet" href="styles.css" />
<link rel="stylesheet" href="../shared/theme.css" />
<link rel="stylesheet" href="../shared/engine-check-view.css" />
<style>
.pipeline-card{margin-top:18px;padding:13px;border:1px solid rgba(196,231,123,.22);background:var(--soft)}
.pipeline-card>strong{color:var(--lime);font-size:8px;letter-spacing:.08em;text-transform:uppercase}
.pipeline-card>p{margin:5px 0 11px;color:var(--muted);font-size:8px;line-height:1.5}
.file-label{display:block;padding:8px;border:1px dashed #536047;color:#cbd7b4;text-align:center;cursor:pointer}
.file-label input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.pipeline-summary{display:grid;gap:5px;margin-top:10px}
.pipeline-summary span,.pipeline-summary div{padding:6px 7px;border-left:2px solid var(--lime);color:var(--muted);background:#10130e;font-size:8px;line-height:1.4}
.pipeline-summary b{color:var(--ink)}
</style>
</head>
<body>
<header class="topbar">
<a class="brand" href="#top"><span class="mark">RC</span><span><strong>符文戰場編年史</strong><small>Riftbound Chronicle · Assistant Lab</small></span></a>
<nav aria-label="Three assistant systems">
<a class="active" href="#top">Deck Coach</a>
<a href="../rule-consult/index.html">Rule Consult</a>
<a href="../p2a/index.html">Player 2 Agent</a>
</nav>
<div class="topbar-actions"><span class="system-status">Evidence-aware</span><button class="language-toggle" id="language-toggle" type="button">EN</button></div>
</header>
<main id="top">
<section class="hero">
<div><p class="eyebrow">BUILD · DIAGNOSE · TEACH</p><h1>Give the list a plan.<br /><em>Give the player a map.</em></h1><p>Turn a supplied deck into a qualitative diagnosis and an eight-part pilot primer. Role coverage is a lens, not a score; recommendations remain evidence-tagged coaching hypotheses.</p></div>
<aside><span>Fixed output</span><ol><li>Deck identity</li><li>Core loop</li><li>Mulligan targets</li><li>Turn priorities</li><li>Fight or hold</li><li>Common lines</li><li>Common mistakes</li><li>Evidence ledger</li></ol></aside>
</section>
<nav class="mode-tabs" aria-label="Three system architecture">
<a class="active" href="#top"><b>01</b> Deck Coach</a>
<a href="../rule-consult/index.html"><b>02</b> Rule Consult</a>
<a href="../p2a/index.html"><b>03</b> Player 2 Agent</a>
</nav>
<section class="workspace">
<aside class="roles-panel">
<p class="eyebrow">QUALITATIVE LENS</p><h2>Role coverage</h2>
<p class="quiet">A role marked “not observed” is a question to investigate—not an automatic cut, quota, or defect.</p>
<div id="role-coverage" class="role-coverage"></div>
<div class="pipeline-card">
<strong>Closed-loop results</strong>
<p>Run the profiler CLI, then import its profile, mask, evaluation, and behavior-coverage JSON files here. This manual review page does not recompute card data.</p>
<label class="file-label">Import pipeline artifacts<input id="pipeline-import" type="file" accept="application/json,.json" multiple /></label>
<div id="pipeline-summary" class="pipeline-summary"><span>No computed profile imported</span></div>
</div>
<div class="coverage-card">
<div class="coverage-head">
<div><strong>Card behavior coverage</strong><p>How much of this Main Deck has an executable, tested claim about its current card text. It is a coverage number, not a judgement about the deck.</p></div>
<span class="coverage-status" id="coverage-status">unavailable</span>
</div>
<p class="coverage-explanation" id="coverage-explanation">No R3 card behavior pack is bundled, so nothing in this list has an executable behavior claim today.</p>
<div class="coverage-counts" id="coverage-counts"></div>
<div class="coverage-cards" id="coverage-cards"></div>
<ul class="coverage-warnings" id="coverage-warnings"></ul>
<div class="coverage-boundary">
<strong>strategy_evidence: not_established_by_engine_coverage</strong>
<p>Executable clause coverage says nothing about deck identity, mulligans, sequencing, lines, or mistakes. A fully covered card does not make any of those claims more correct, and an uncovered one does not make them wrong.</p>
</div>
<label class="coverage-preview">Preview a projection<select id="coverage-fixture"></select></label>
<p class="coverage-note">Previews come from demonstration manifests, not an R3 pack. Import a real behavior-coverage file above to display a projection of your own.</p>
</div>
<div class="boundary"><strong>No rate analysis</strong><p>No win rate, play rate, matchup percentage, tier ranking, or composite score.</p></div>
</aside>
<div class="flow">
<div id="status" class="status"><b>1</b><div><strong>Enter the deck context</strong><p>Anchor the review to a format and environment.</p></div></div>
<details id="context-panel" class="panel" open>
<summary><b>01</b><span><strong>Deck context</strong><small>What list are we reviewing?</small></span><i id="context-status">Required</i></summary>
<form id="context-form" class="form-grid">
<label>Environment<input name="environment" required placeholder="Set / event / local pool context" /></label>
<label>Format<input name="format" required value="1v1 Constructed" /></label>
<label>Legend<input name="legend" required placeholder="Legend name" /></label>
<label>Chosen champion<input name="champion" placeholder="Optional" /></label>
<label>Coach / test ID<input name="createdBy" required placeholder="Name or evaluation ID" /></label>
<div class="actions"><button class="primary" type="submit">Create review</button></div>
</form>
</details>
<details id="deck-panel" class="panel">
<summary><b>02</b><span><strong>Decklist & roles</strong><small>One card per line; tag only supportable roles</small></span><i id="deck-status">Locked</i></summary>
<form id="deck-form" class="form-grid locked">
<label class="wide">Decklist<textarea name="decklist" required rows="10" placeholder="3 Card Name | core_engine,closer 2 Another Card | protection"></textarea><small class="hint">Syntax: count + card name, optionally followed by | and comma-separated role IDs.</small></label>
<div class="wide role-key" id="role-key"></div>
<div class="actions"><button class="secondary" type="submit">Parse decklist</button></div>
</form>
</details>
<details id="diagnosis-panel" class="panel">
<summary><b>03</b><span><strong>Diagnosis</strong><small>Separate observation from proposed tests</small></span><i id="diagnosis-status">Locked</i></summary>
<div class="agent-bridge"><div><strong>Coach Agent bridge</strong><p>Copy the deck brief into a Skill-enabled Deck Coach Agent. Verify current card text and legality before treating either as facts.</p></div><button id="copy-brief" class="secondary" type="button" disabled>Copy deck brief</button></div>
<form id="diagnosis-form" class="form-grid locked">
<label class="wide">Identity<textarea name="identity" rows="3" required placeholder="What the deck is trying to be"></textarea></label>
<label class="wide">Core loop<textarea name="coreLoop" rows="3" required placeholder="How setup becomes pressure and then a close"></textarea></label>
<label>Strengths<textarea name="strengths" rows="4" placeholder="One per line"></textarea></label>
<label>Gaps / questions<textarea name="gaps" rows="4" placeholder="One per line"></textarea></label>
<label class="wide">Proposed changes<textarea name="changes" rows="3" placeholder="One testable change per line"></textarea></label>
<label>Evidence tier<select name="tier"><option>Tier 1</option><option>Tier 2</option><option selected>Tier 3</option></select></label>
<label>Evidence basis<input name="basis" required placeholder="Card text, verified list, or hypothesis" /></label>
<div class="actions"><button class="secondary" type="submit">Save diagnosis</button></div>
</form>
</details>
<details id="primer-panel" class="panel">
<summary><b>04</b><span><strong>Pilot primer</strong><small>Complete all eight teaching sections</small></span><i id="primer-status">Locked</i></summary>
<form id="primer-form" class="primer-form locked">
<label>1. Identity<textarea name="identity" rows="3" required></textarea></label>
<label>2. Core loop<textarea name="core_loop" rows="3" required></textarea></label>
<label>3. Mulligan targets<textarea name="mulligan_targets" rows="3" required></textarea></label>
<label>4. Turn-by-turn priorities<textarea name="turn_priorities" rows="3" required></textarea></label>
<label>5. When to fight, when to hold<textarea name="fight_or_hold" rows="3" required></textarea></label>
<label>6. Common lines<textarea name="common_lines" rows="3" required></textarea></label>
<label>7. Common mistakes<textarea name="common_mistakes" rows="3" required></textarea></label>
<label>8. Evidence ledger<textarea name="evidence_ledger" rows="3" required placeholder="Tag major claims Tier 1 / Tier 2 / Tier 3"></textarea></label>
<div class="actions"><button class="primary" type="submit">Finalize primer</button></div>
</form>
</details>
</div>
<aside class="record-panel">
<header><div><p class="eyebrow">REVIEW RECORD</p><h2 id="record-title">No deck yet</h2></div><span id="card-count">0 entries</span></header>
<div class="engine-attach" id="engine-panel">
<div class="engine-attach-head">
<div><strong>Engine evidence</strong><p>Optional. A bounded engine check attached here is rules-consistency evidence only. It does not change the diagnosis or the primer, and a supported check does not make a line stronger.</p></div>
<span id="engine-count">0 attached</span>
</div>
<form id="engine-form" class="form-grid">
<label class="wide">Bounded engine check<select name="checkId" id="engine-select"></select></label>
<div class="actions"><button class="secondary" type="submit">Attach check</button></div>
</form>
<div id="engine-check-view" class="engine-check-view"></div>
<p class="engine-attach-note">engine_evidence_scope: rules_consistency_only. These demonstration checks were produced by running the bundled rules core and effect IR. This page runs no engine, builds no game state from the primer, and never supplies a decision the engine asked for.</p>
</div>
<div id="record-empty" class="empty"><span>◇</span><p>The parsed list, diagnosis, and final primer will stay visible here.</p></div>
<div id="record" class="record"></div>
<div class="record-actions"><button id="export-json" class="secondary" disabled>Export JSON</button><button id="export-md" class="secondary" disabled>Export primer</button><button id="reset" class="text" disabled>Reset</button></div>
</aside>
</section>
<footer><p>Riftbound Chronicle was created under Riot Games' “Legal Jibber Jabber” policy using assets owned by Riot Games. Riot Games does not endorse or sponsor this project.</p><p>Unofficial coaching prototype · No game-state operations · No metagame rates</p></footer>
</main>
<div id="toast" class="toast" role="status" aria-live="polite"></div>
<script src="../shared/i18n.js"></script>
<script src="../shared/behavior-coverage-fixtures.js"></script>
<script src="../shared/engine-check-fixtures.js"></script>
<script src="../shared/engine-check-view.js"></script>
<script src="app.js"></script>
</body>
</html>