L05

W09–W10 · 6 hours · complete online handout

Controlled content intervention

Research question

Can one structural or evidentiary factor change while the factual message remains constant?
Download offline package
01

Contract

What this lab must demonstrate

  • Construct control/treatment assets.
  • Verify factual and accessibility equivalence.
  • Declare mechanism, confounds, and rollback.

Prerequisites

  • W08 pre-analysis plan.
  • W09 evidence-page anatomy.
  • Local-only intervention agreement.
Equivalent low-compute route

Static HTML, CSS, and deterministic validators complete the lab.

02

Milestones

Four reviewable checkpoints

The windows are planning budgets, not hidden grading criteria. Pause at every gate; do not compress a failed check into the final submission.

  1. 01

    Lock the intervention

    Work
    Choose one structural or evidentiary factor, name the hypothesized pipeline stage, freeze claims/source identities, and declare non-claims and stop rules.
    Checkpoint evidence
    Control hash, claim lock, and intervention card.
    Advance only when
    No treatment is built until authorization and the one-factor scope are reviewable.
  2. 02

    Build control and treatment

    Work
    Construct both arms only on a local mirror or explicitly authorized owned environment while keeping factual content and attribution fixed.
    Checkpoint evidence
    Versioned control/treatment assets and complete diff.
    Advance only when
    Exactly one interpretable factor changes.
  3. 03

    Audit equivalence and access

    Work
    Run structural, link, keyboard/focus, contrast, responsive-order, and text/source equivalence checks; complete an independent factual review.
    Checkpoint evidence
    Audit JSON, equivalence review, accessibility evidence, and confound log.
    Advance only when
    Any factual, attribution, authorization, or accessibility drift blocks release.
  4. 04

    Rollback and bound the claim

    Work
    Execute rollback, verify the restored hash, record null/adverse effects, and state what the local diff cannot establish.
    Checkpoint evidence
    Verified rollback manifest and bounded intervention report.
    Advance only when
    A software PASS is not presented as a crawler, retrieval, ranking, or causal effect.
03

Validation

Checks, pass gate, and assessment

Exactly one interpretable factor changes.

Claims and factual message remain equivalent.

HTML and accessibility validation pass.

Rollback restores the control hash.

Authorization and non-deception attestations are present.

Pass gate

One interpretable factor changes; factual equivalence and reversibility pass independent review; no deceptive attribution is introduced.

L05 Rubric — 100 points

Rendered from the canonical package rubric. Source SHA-256: 8573fa0525ab27717722db7e2d39831f8204f8c5fcf4b6924b9d2962e8d77d1b.

L05 canonical 100-point assessment rubric
CriterionPointsFull-credit evidence
Predeclared intervention card15One factor, stage hypothesis, expected signal, non-claims, confounds, authorization, stop rules, and rollback are frozen.
Factual and attribution lock25Atomic claim text, numbers, qualifications, source identities, and attribution are identical across arms.
Single-factor integrity20The complete diff contains only the declared structural/evidentiary factor.
Accessibility and HTML quality15Both arms pass semantic, keyboard/focus, contrast, link-purpose, and reading-order review.
Reversibility and evidence package15Hashes, review record, before/after assets, and tested rollback are complete.
Interpretation and ethics10Null/adverse results and local evidence ceiling are explicit; no deception or unauthorized testing occurs.

Hard fail pending remediation: factual drift, fabricated/deceptive attribution, cloaking, unauthorized live deployment, accessibility regression, or untested rollback.

Pass threshold: 70/100 and no hard-fail condition.

04

Handout

Complete browser-readable lab handout

Generated from the same controlled README shipped in the offline package. Source SHA-256: de073f80ce5fcbefdb4f7dbffa53cb8eeca918fcfec69a80c7bdb29688750641.

On this page 11 sections

Linked course weeks: W09–W10
Expected effort for the full assignment: 6 hours
Core path: local, offline, deterministic, Python standard library only

Research question

Can one structural or evidentiary factor change while the factual message remains constant?

Learning objectives

You will learn to:

  1. express one intervention as a versioned card with authorization, a hypothesized stage, confounds, stop rules, and rollback;
  2. lock atomic claims and source identities before creating treatment content;
  3. distinguish factual equivalence from visual or structural equivalence;
  4. validate basic semantic HTML and accessibility invariants on both arms;
  5. produce a reversible, hash-addressed before/after package; and
  6. avoid turning a local mechanism hypothesis into a production visibility claim.

Intervention in the fixture

The control and treatment contain the same three locked claims and the same three source references. The sole intended factor is evidence-layout proximity: the treatment stylesheet renders the unchanged claim/source blocks as bordered evidence cards. The HTML differs only in the stylesheet filename. This is a teaching intervention on a local mirror, not an experiment on a search engine.

Input contract

  • data/control.html and data/treatment.html: English semantic HTML with lang, title, one main, one h1, stable data-claim-id attributes, and stable data-source-id links.
  • data/control.css and data/treatment.css: the declared presentation arms.
  • data/locked_claims.json: canonical claim text and source IDs.
  • data/intervention_card.json: follows ../shared/schemas/intervention-card.schema.json and is restricted to local_fixture or authorized owned staging.
  • data/factual_equivalence.csv: predeclared review checks. Every core criterion must be pass, and the reviewer must differ from the experimenter.

Run

python3 scripts/audit_intervention.py \
  --control data/control.html \
  --treatment data/treatment.html \
  --claims data/locked_claims.json \
  --card data/intervention_card.json \
  --checklist data/factual_equivalence.csv \
  --output /tmp/geo-l05

Output contract

Table from the controlled L05 lab handout
ArtifactContract
intervention_audit.jsoncontract status, equivalence/accessibility checks, changed-factor count, and claim ceiling
normalized_claims.jsonclaims and source IDs extracted independently from both pages
before_after.diffunified HTML and CSS diff; never a causal estimate
equivalence_review.csvfrozen reviewer checks copied into the release package
rollback_manifest.jsonexact treatment/control hashes and reversible replacement instruction
run_manifest.jsonhashes of every input and declared parameter

A successful software audit establishes exact equality of the locked text/source set and declared structural scope. It does not prove that a user, crawler, retriever, answer engine, or ranking system reacted to the change.

Full assignment procedure

  1. Select one structural or evidentiary factor and name the hypothesized stage.
  2. Freeze atomic claims, source identities, control, expected signal, non-claims, and stop rules before treatment construction.
  3. Build both arms only on a local mirror or explicitly authorized owned environment.
  4. Validate HTML semantics, keyboard/focus behavior, contrast, link purpose, and responsive reading order.
  5. Have an independent reviewer compare every factual claim and attribution.
  6. Run this auditor, inspect the complete diff, and eliminate undeclared differences.
  7. Execute rollback and verify the restored hash before any optional collection.
  8. Report null, adverse, and unintended accessibility effects alongside the target result.

Low-compute and no-network route

The fixture is static HTML/CSS. The auditor uses html.parser, hashing, CSV/JSON, and unified diff from the standard library. No browser, model, crawler, API, external package, or live endpoint is required.

Negative results and interpretation

  • No measured change is a valid null result; do not add factors after seeing it.
  • A treatment that changes a claim, number, source identity, or attribution fails factual equivalence even if the message “feels similar.”
  • An accessibility regression invalidates release regardless of a target metric.
  • A local effect cannot establish cross-engine, cross-query, longitudinal, business, or causal generality.
  • An extra undeclared DOM/CSS change is a confound, not polish.

Ethics and stop conditions

No cloaking, deceptive attribution, hidden user-specific variants, live poisoning, unauthorized traffic, or fabricated evidence is permitted. Stop on authorization ambiguity, factual drift, broken source identity, accessibility regression, privacy exposure, or rollback failure.

Acceptance

python3 scripts/audit_intervention.py --control data/control.html --treatment data/treatment.html --claims data/locked_claims.json --card data/intervention_card.json --checklist data/factual_equivalence.csv --output /tmp/geo-l05
python3 -c 'import json; r=json.load(open("/tmp/geo-l05/intervention_audit.json")); assert r["status"] == "PASS" and r["changed_factor_count"] == 1'

See RUBRIC.md.

05

Execute

Use one source of executable truth

Ethics and stop condition

Remain local or in an explicitly owned/authorized environment; no live manipulation, cloaking, fabricated authority, or undisclosed content.

Optional extension

Design—but do not deploy—a blocked or factorial study when one-factor isolation is infeasible.

The page is the complete reading and planning surface. The versioned package README and scripts remain authoritative for exact local commands, filenames, fixtures, and validation behavior.