Lens: 安保清场 binds security resolution to continuity evidence

Purpose

Ensure Storyteller baseline combat 01:安保清场 resolves as a bounded continuity event, not generic combat. A successful, missed, recruited, suppressed, or consequential clearance must leave replay-visible evidence of who was cleared, who authorized the clearance, which evidence was bound, and what continuity state changed.

Linked canon/source pages

Create or update:

  • wiki/content/storyteller/turns/turn-031.md
  • wiki/content/storyteller/rites/baseline-combat-01-anbao-qingchang.md
  • wiki/content/storyteller/cards/current-hand-turn-031.md
  • wiki/content/storyteller/factions/continuity-archive-white-glove.md
  • wiki/content/storyteller/public-manifest.md

Affected cards

Primary:

  • 临时制作人牌照
  • 白昼圣殿舞台许可
  • 韩砚霜 / 白手套监察
  • 白手套审计章
  • 呼吸配给复核钥
  • 第七穹顶连续性案卷
  • 安全连续性版本
  • 观众裂缝证词
  • 粉丝氧气积分账
  • 未剪辑真唱母带
  • 前任清算录像
  • 未归档黑箱残片
  • 余物风险登记表

Secondary:

  • 黎星瞳 / 白昼圣女
  • 沈洛 / 折纸经纪人
  • 白鸦 / 黑箱剪辑师
  • 冠名方止损令
  • 观众归档署名
  • 连续性租赁许可
  • 未归档法律身体豁免

Affected rites

  • storyteller.rite.baseline_combat_01.security_clearance
  • display name: Storyteller baseline combat 01:安保清场

Affected events

Expected event types for implementation:

  • storyteller.security_clearance.started
  • storyteller.security_clearance.resolved
  • storyteller.security_clearance.missed
  • storyteller.security_clearance.recruit_opened
  • storyteller.security_clearance.suppressed
  • storyteller.continuity.version_bound
  • storyteller.continuity.residue_registered
  • storyteller.audit.white_glove_trace_created

Affected counters

  • securityClearanceResolved
  • whiteGloveAuditTrace
  • continuityVersionBound
  • audienceCrackEvidenceBound
  • blackBoxResidue
  • remnantRisk
  • oxygenReviewUsed
  • suppressedWithoutTrace must remain 0 in passing fixtures.

Affected factions

  • 白手套监察
  • 白昼圣殿
  • 冠名方
  • 观众归档署
  • 黑箱剪辑室
  • 第七穹顶连续性机关, if represented separately

Oracle assertions

The sibling .lens.ts should be able to pass or fail these assertions.

Assertion 1 — rite identity

Within the replay horizon from turn 31 through turn 61, if 安保清场 resolves, the replay must contain exactly one resolution event for that rite instance:

expect(events).toContainEqual(expect.objectContaining({
  type: "storyteller.security_clearance.resolved",
  riteId: "storyteller.rite.baseline_combat_01.security_clearance",
  turn: expect.any(Number),
}));

The event turn must satisfy:

expect(event.turn).toBeGreaterThanOrEqual(31);
expect(event.turn).toBeLessThanOrEqual(61);

Assertion 2 — branch must be explicit

Every resolution event must include one canonical branch:

expect(["encounter", "miss", "recruit", "suppress", "consequence"])
  .toContain(event.branch);

A pass requires no branchless security_clearance.resolved events.

Assertion 3 — continuity target must be named

A resolved clearance must bind or mutate a continuity target:

expect(event.continuity).toEqual(expect.objectContaining({
  caseFileId: expect.stringMatching(/seventh_dome|第七穹顶/),
  publicVersionId: expect.any(String),
  status: expect.stringMatching(/bound|contested|suppressed|residue|split/),
}));

Assertion 4 — evidence cannot silently vanish

If any evidence card is slotted, at least one of these must appear in the resolution payload:

  • evidence.bound[]
  • evidence.suppressed[]
  • evidence.residue[]
  • evidence.contested[]

Cards covered:

  • 观众裂缝证词
  • 未剪辑真唱母带
  • 前任清算录像
  • 粉丝氧气积分账
  • 未归档黑箱残片

Failure condition:

expect(event.evidence.discardedWithoutTrace ?? []).toHaveLength(0);

Assertion 5 — White-Glove suppress requires audit trace

If 韩砚霜 / 白手套监察 or 白手套审计章 is used, suppress/clear outcomes must create an audit trace:

if (usesWhiteGlove && ["suppress", "consequence"].includes(event.branch)) {
  expect(event.audit).toEqual(expect.objectContaining({
    traceId: expect.any(String),
    authority: expect.stringMatching(/white_glove|白手套/),
  }));
}

Assertion 6 — miss branch remains playable

A miss branch must emit at least one follow-up hook:

if (event.branch === "miss") {
  expect(event.followUp).toEqual(expect.arrayContaining([
    expect.objectContaining({
      type: expect.stringMatching(/encounter|claim|residue|risk|recruit/),
    }),
  ]));
}

Suggested cards for miss residue:

  • 余物风险登记表
  • 未归档黑箱残片
  • 观众裂缝证词

Progress metric

security_clearance_bound_ratio =
  count(security_clearance.resolved events with branch + continuity.caseFileId + evidence disposition)
  /
  count(security_clearance.resolved events)

Passing fixture target for this lens: 1.0 for all committed replay fixtures that exercise 安保清场.

Dashboard evidence may show:

{
  "lensId": "storyteller.security_clearance_continuity_boundary.v1",
  "status": "unbound|failing|passing",
  "horizon": { "fromTurn": 31, "toTurn": 61 },
  "metrics": {
    "security_clearance_bound_ratio": 0,
    "suppressedWithoutTrace": 0,
    "whiteGloveAuditTrace": 0,
    "blackBoxResidue": 0
  },
  "sampleEvents": []
}

Expected replay evidence shape

{
  "turn": 34,
  "riteId": "storyteller.rite.baseline_combat_01.security_clearance",
  "slots": {
    "authority": ["临时制作人牌照", "白手套审计章"],
    "evidence": ["观众裂缝证词"],
    "continuity": ["第七穹顶连续性案卷", "安全连续性版本"],
    "force_or_editor": ["韩砚霜 / 白手套监察"]
  },
  "events": [
    {
      "type": "storyteller.security_clearance.resolved",
      "branch": "suppress",
      "continuity": {
        "caseFileId": "第七穹顶连续性案卷",
        "publicVersionId": "安全连续性版本",
        "status": "suppressed_with_trace"
      },
      "evidence": {
        "suppressed": ["观众裂缝证词"],
        "residue": ["余物风险登记表"]
      },
      "audit": {
        "traceId": "white_glove_trace_001",
        "authority": "白手套监察"
      },
      "deltas": {
        "whiteGloveAuditTrace": 1,
        "suppressedWithoutTrace": 0,
        "remnantRisk": 1
      }
    }
  ]
}

Branch notes

encounter

encounter should open a named actor or faction conflict: 韩砚霜 challenges the license, 郁蓝 contests the official version, 白鸦 offers an edit, or the audience archive claims the testimony.

miss

miss should not delete the rite. It should create 余物风险登记表, 未归档黑箱残片, or a similar residue hook.

recruit

recruit may convert 韩砚霜, 白鸦, 沈洛, or 郁蓝 into a contact, witness, editor, auditor, or historian. Recruitment must preserve what the recruited actor can now see or alter.

suppress

suppress is legal only with authority and cost. White-Glove suppression requires an audit trace. Sponsor suppression should emit stop-loss residue.

consequence

consequence should mutate 第七穹顶连续性案卷, 安全连续性版本, or a related continuity counter.