Lens: Storyteller baseline combat 02:安保清场 pressure branches must resolve with visible evidence
Scope
This lens defines the executable contract for the second security-clearance pressure rite, display name Storyteller baseline combat 02:安保清场, proposed stable rite id storyteller.rite.baseline_combat_02.security_clearance_pressure_branches.
The rite is a pressure-branch expansion of Storyteller baseline combat 01:安保清场, not a generic combat sequel. It should test whether the player clears a room by public calming, audit cordon, black-box edit, unauthorized witness custody, or ration review, and whether that clearance leaves replay-visible state.
The source hand is anchored by Storyteller active hand snapshot — 2026-05-30. The continuity/evidence precedent is 安保清场 binds security resolution to continuity evidence.
Design intent
安保清场 02 should make clearing/security pressure materially branchy. The player is not merely deciding whether a clearance succeeds; the player chooses whose authority makes it succeed, what gets archived, what gets suppressed, who remembers the room, and which future danger becomes visible.
A passing implementation must produce at least two materially different outcomes from the same pressure family inside a 30-turn replay horizon:
- clean audit cordon: the room clears through 白手套/continuity authority; public panic falls, but an audit trace and continuity lock remain.
- contested witness clearance: the room physically clears, but 郁蓝 or audience evidence preserves a counter-record; clearance success creates future miss/failure visibility instead of clean deletion.
Optional additional branch:
- black-box relief cut: 白鸦 edits the clearance into broadcast compliance; room clears quickly, but black-box residue and archive debt increase.
Affected cards
Primary current-hand cards:
- 白昼圣女 — converts panic into devotional compliance; may reduce immediate crowd pressure while creating memorial debt.
- 黑箱剪辑师 — edits the visible event; may clear broadcast pressure while creating black-box residue.
- 未授权史官 — preserves counter-history; may turn a clean clear into a contested witness branch.
- 白手套监察 — authorizes or challenges the cordon; creates audit trace on suppress/clean branches.
- 观众裂缝证词 — witness evidence that must be bound, contested, suppressed, or preserved as residue.
- 呼吸配给复核钥 — oxygen/ration authority; opens ration-review clearance and prevents free oxygen deletion.
- 安全连续性版本 — official continuity surface; records whether the clearance is bound, split, or contested.
Secondary useful cards/assets:
- 折纸经纪人 — makes the intervention look scheduled or sponsor-safe.
- 粉丝氧气积分账 — shows whether crowd safety was paid through oxygen.
- 白手套审计章 — audit authority substitute for 韩砚霜.
- 未归档黑箱残片 — residue created or consumed by black-box branch.
- 第七穹顶连续性案卷 — continuity case file.
- 冠名方止损令 — sponsor pressure that may bias the choice toward suppression.
Affected rites
- Existing precedent:
storyteller.rite.baseline-combat-01.security-clearance, displayStoryteller baseline combat 01:安保清场. - New target for worker binding:
storyteller.rite.baseline_combat_02.security_clearance_pressure_branches, displayStoryteller baseline combat 02:安保清场.
Affected counters
The sibling test should accept project-native counter names if they already exist, but the branch payload must expose equivalent deltas:
securityClearanceResolvedsecurityClearanceBranchCountpublicPanicauditPressurewhiteGloveAuditTraceoxygenMarginoxygenReviewUsedarchiveTrustarchiveDebtblackBoxResiduecontinuityHazardaudienceCrackEvidenceBoundunauthorizedWitnessHeatsuppressedWithoutTracemust stay0in passing clean/suppress fixtures.
Offered choices requirement
Within turns 31–61, when the current hand contains at least three of the primary cards, the replay must offer Storyteller baseline combat 02:安保清场 with at least two choices from this set:
- 白手套安全封线 — assign 白手套监察 or 白手套审计章 with 安全连续性版本.
- 圣女安抚清场 — assign 白昼圣女 with oxygen or crowd pressure present.
- 黑箱减压剪辑 — assign 黑箱剪辑师 with 未归档黑箱残片 or witness evidence.
- 未授权见证清场 — assign 未授权史官 with 观众裂缝证词.
- 呼吸配给复核 — assign 呼吸配给复核钥 with 粉丝氧气积分账 or oxygen pressure.
A passing fixture may offer more than two choices, but at least two offered choices must lead to different branch names and different counter deltas.
Oracle assertions
Assertion 1 — combat 02 offer appears from active-hand provenance
A replay seeded from the active Storyteller source at or after turn 31 must show the offered rite within the horizon:
expect(replay.session).toEqual(expect.objectContaining({
source: "storyteller",
provenance: expect.stringMatching(/active-hand-2026-05-30|turn31|f8cf7d45324a/),
}));
expect(replay.offers).toContainEqual(expect.objectContaining({
riteId: "storyteller.rite.baseline_combat_02.security_clearance_pressure_branches",
title: "Storyteller baseline combat 02:安保清场",
turn: expect.any(Number),
}));The offer turn must be >= 31 and <= 61.
Assertion 2 — at least two branch choices are materially distinct
For the offered rite instance, the choice list must contain at least two branch choices with distinct branchKey values and distinct required assignments:
const choices = offer.choices.filter(c => c.riteId === "storyteller.rite.baseline_combat_02.security_clearance_pressure_branches");
expect(new Set(choices.map(c => c.branchKey)).size).toBeGreaterThanOrEqual(2);
expect(choices.some(c => c.requiredCards?.includes("韩砚霜 / 白手套监察") || c.requiredCards?.includes("白手套审计章"))).toBe(true);
expect(choices.some(c => c.requiredCards?.includes("郁蓝 / 未授权史官") || c.requiredCards?.includes("白鸦 / 黑箱剪辑师") || c.requiredCards?.includes("黎星瞳 / 白昼圣女"))).toBe(true);Assertion 3 — clean audit cordon creates trace, not silent success
When assigned 白手套监察 or 白手套审计章 with 安全连续性版本, the resolution must be a clean/audit branch with visible trace and continuity lock:
expect(resolution).toEqual(expect.objectContaining({
type: "storyteller.security_clearance.resolved",
riteId: "storyteller.rite.baseline_combat_02.security_clearance_pressure_branches",
branch: "clean_audit_cordon",
assignedCards: expect.arrayContaining([expect.stringMatching(/韩砚霜|白手套审计章/), "安全连续性版本"]),
audit: expect.objectContaining({
authority: expect.stringMatching(/白手套|white_glove/),
traceId: expect.any(String),
}),
continuity: expect.objectContaining({
publicVersionId: "安全连续性版本",
status: expect.stringMatching(/bound|locked|audit_bound/),
}),
}));
expect(resolution.deltas).toEqual(expect.objectContaining({
securityClearanceResolved: 1,
whiteGloveAuditTrace: expect.any(Number),
suppressedWithoutTrace: 0,
}));Minimum expected deltas for this branch:
{
"securityClearanceResolved": 1,
"publicPanic": -1,
"whiteGloveAuditTrace": 1,
"auditPressure": 1,
"continuityHazard": -1,
"suppressedWithoutTrace": 0
}Assertion 4 — contested witness clearance preserves evidence and future pressure
When assigned 未授权史官 with 观众裂缝证词, the room may clear, but the evidence cannot be deleted or converted into a clean state:
expect(resolution).toEqual(expect.objectContaining({
type: "storyteller.security_clearance.resolved",
riteId: "storyteller.rite.baseline_combat_02.security_clearance_pressure_branches",
branch: "contested_witness_clearance",
assignedCards: expect.arrayContaining(["郁蓝 / 未授权史官", "观众裂缝证词"]),
evidence: expect.objectContaining({
contested: expect.arrayContaining(["观众裂缝证词"]),
}),
followUp: expect.arrayContaining([
expect.objectContaining({
type: expect.stringMatching(/miss|encounter|archive_claim|risk/),
}),
]),
}));
expect(resolution.evidence.discardedWithoutTrace ?? []).toHaveLength(0);Minimum expected deltas for this branch:
{
"securityClearanceResolved": 1,
"publicPanic": -1,
"audienceCrackEvidenceBound": 1,
"unauthorizedWitnessHeat": 1,
"archiveTrust": -1,
"continuityHazard": 1
}Assertion 5 — black-box branch clears broadcast but increases residue
If 黑箱剪辑师 is used, success must not be equivalent to the audit branch. It must show editing residue:
if (resolution.assignedCards.includes("白鸦 / 黑箱剪辑师")) {
expect(resolution.branch).toBe("black_box_relief_cut");
expect(resolution.evidence.residue.length).toBeGreaterThanOrEqual(1);
expect(resolution.deltas.blackBoxResidue).toBeGreaterThan(0);
expect(resolution.deltas.archiveDebt).toBeGreaterThanOrEqual(1);
}Assertion 6 — failure/miss is visible, not absence
If no valid authority or witness-bearing assignment is made before horizon expiry, the replay must emit a miss/failure event rather than simply omitting resolution:
expect(replay.events).toContainEqual(expect.objectContaining({
type: expect.stringMatching(/storyteller.security_clearance.(missed|failed)/),
riteId: "storyteller.rite.baseline_combat_02.security_clearance_pressure_branches",
visibility: expect.stringMatching(/dashboard|timeline|hand_log|replay/),
followUp: expect.arrayContaining([
expect.objectContaining({ type: expect.stringMatching(/risk|residue|audit|witness/) })
]),
}));Suggested miss/failure deltas:
{
"publicPanic": 1,
"auditPressure": 1,
"continuityHazard": 1,
"securityClearanceResolved": 0
}Progress metric
security_clearance_02_branch_evidence_ratio =
count(combat_02 security clearance resolutions with branch + assignedCards + evidence disposition + counter deltas)
/
count(combat_02 security clearance resolutions)Passing target for committed fixtures: 1.0.
security_clearance_02_material_branch_count =
count(distinct branch keys with distinct counter-delta signatures in the replay horizon)Passing target for committed fixtures: >= 2.
Replay evidence shape
Fixture A — clean audit cordon
{
"session": {
"source": "storyteller",
"provenance": "active-hand-2026-05-30",
"startTurn": 31,
"seed": "security-clearance-02-audit-cordon"
},
"offer": {
"turn": 32,
"riteId": "storyteller.rite.baseline_combat_02.security_clearance_pressure_branches",
"title": "Storyteller baseline combat 02:安保清场",
"choices": [
{ "branchKey": "clean_audit_cordon", "requiredCards": ["韩砚霜 / 白手套监察", "安全连续性版本"] },
{ "branchKey": "contested_witness_clearance", "requiredCards": ["郁蓝 / 未授权史官", "观众裂缝证词"] }
]
},
"assignment": {
"turn": 32,
"cards": ["韩砚霜 / 白手套监察", "安全连续性版本", "呼吸配给复核钥"]
},
"resolution": {
"turn": 33,
"type": "storyteller.security_clearance.resolved",
"branch": "clean_audit_cordon",
"audit": { "authority": "白手套监察", "traceId": "white_glove_trace_security_02_001" },
"continuity": { "publicVersionId": "安全连续性版本", "status": "audit_bound" },
"deltas": {
"securityClearanceResolved": 1,
"publicPanic": -1,
"whiteGloveAuditTrace": 1,
"auditPressure": 1,
"continuityHazard": -1,
"suppressedWithoutTrace": 0
}
}
}Fixture B — contested witness clearance
{
"session": {
"source": "storyteller",
"provenance": "active-hand-2026-05-30",
"startTurn": 31,
"seed": "security-clearance-02-contested-witness"
},
"offer": {
"turn": 32,
"riteId": "storyteller.rite.baseline_combat_02.security_clearance_pressure_branches",
"title": "Storyteller baseline combat 02:安保清场",
"choices": [
{ "branchKey": "clean_audit_cordon", "requiredCards": ["韩砚霜 / 白手套监察", "安全连续性版本"] },
{ "branchKey": "contested_witness_clearance", "requiredCards": ["郁蓝 / 未授权史官", "观众裂缝证词"] },
{ "branchKey": "black_box_relief_cut", "requiredCards": ["白鸦 / 黑箱剪辑师", "未归档黑箱残片"] }
]
},
"assignment": {
"turn": 32,
"cards": ["郁蓝 / 未授权史官", "观众裂缝证词", "安全连续性版本"]
},
"resolution": {
"turn": 33,
"type": "storyteller.security_clearance.resolved",
"branch": "contested_witness_clearance",
"evidence": {
"contested": ["观众裂缝证词"],
"discardedWithoutTrace": []
},
"continuity": { "publicVersionId": "安全连续性版本", "status": "contested" },
"followUp": [
{ "type": "archive_claim", "title": "观众归档权要求认领清场证词" },
{ "type": "miss_risk", "title": "未授权史实进入后续审计" }
],
"deltas": {
"securityClearanceResolved": 1,
"publicPanic": -1,
"audienceCrackEvidenceBound": 1,
"unauthorizedWitnessHeat": 1,
"archiveTrust": -1,
"continuityHazard": 1
}
}
}Failure and miss visibility
A failed or missed 安保清场 02 must be visible in at least one of:
- replay event log,
- turn timeline,
- dashboard lens evidence,
- hand/card state inspection.
It must name the missing requirement. Examples:
- missing authority: no 白手套/producer/license/oxygen review authority was assigned.
- missing witness handling: 观众裂缝证词 was present but neither bound nor contested.
- over-edit: 黑箱剪辑师 cleared the broadcast but produced unregistered 未归档黑箱残片.
Referenced wiki edits needed
Small source-of-truth edits for the worker, not implementation code:
- Create or update a rite page under
wiki/content/storyteller/rites/forStoryteller baseline combat 02:安保清场with stable idstoryteller.rite.baseline_combat_02.security_clearance_pressure_branchesand link this lens inlens_contracts. - On the existing
Storyteller baseline combat 01:安保清场page, add one sentence that combat 02 is the branch-pressure expansion focused on materially different clearance outcomes, not a replacement. - On the active hand snapshot, preserve the provenance field
active-hand-2026-05-30or equivalent so replay fixtures can prove they started from the current hand.
Non-goals
- Do not require implementation code in this page.
- Do not collapse all outcomes into generic
successorfailure. - Do not allow evidence cards to disappear without a bound, contested, suppressed, or residue disposition.
- Do not treat combat 02 as damage combat; it is a management/RPG clearance-pressure rite.