Hacker DirectoryHacker Directory

WEB / WEB-21.S02

Dependencies, CI/CD integrity and safe deployment

Evaluate artifact equality, provenance and configuration gates separately.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mechanism

Read every scenario without motion

Review allowed

  1. Source fixture ready

    The source fixture holds the public Atlas Notes and Tea & Bread text, expected manifest and source-revision alias. The builder has not produced a digest; the review gate has not decided hash, config or provenance conditions.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Local bytes pending; actual CI=false
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  2. Source reached builder

    The builder receives the completed input; this actor performs no actual CI runner operation or dependency package installation.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Fixed public input received; byte preparation pending
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  3. Digest candidate ready

    The builder locally prepares fixed bytes and SHA metadata; provenance verification is not this step’s cryptographic result.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  4. Candidate reached gate

    The gate sees completed artifact arrival; hash, provenance and configuration await separate local checks.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Candidate received; hash/provenance/config pending
    Local candidate list
    Local review list unchanged; deployment=false
  5. Review gate decision

    Each gate is evaluated for the same candidate; a matching digest alone proves neither a trusted builder nor safe configuration.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Hash/provenance/config/review allow
    Local candidate list
    Local review list unchanged; deployment=false
  6. Review dispatch ready

    The approved candidate is prepared only for the owned local review list; no release/deployment permission exists.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Approved local-review candidate ready; deploy=false
    Local candidate list
    Local review list unchanged; deployment=false
  7. Local review delivery

    The candidate reaches the local review list at completed arrival; no public publishing or infrastructure write occurs.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Approved local-review candidate ready; deploy=false
    Local candidate list
    Candidate received for review; no deployment/write
  8. Eligible review outcome

    The terminal state is only eligible-for-review; actual CI, runtime configuration enforcement and rollout are not established.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Approved local-review candidate ready; deploy=false
    Local candidate list
    Eligible-for-review; published=false; deployed=false

Hash mismatch

  1. Source fixture ready

    The source fixture holds the public Atlas Notes and Tea & Bread text, expected manifest and source-revision alias. The builder has not produced a digest; the review gate has not decided hash, config or provenance conditions.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Local bytes pending; actual CI=false
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  2. Source reached builder

    The builder receives the completed input; this actor performs no actual CI runner operation or dependency package installation.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Fixed public input received; byte preparation pending
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  3. Digest candidate ready

    The builder locally prepares fixed bytes and SHA metadata; provenance verification is not this step’s cryptographic result.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  4. Candidate reached gate

    The gate sees completed artifact arrival; hash, provenance and configuration await separate local checks.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Candidate received; hash/provenance/config pending
    Local candidate list
    Local review list unchanged; deployment=false
  5. Review gate decision

    Each gate is evaluated for the same candidate; a matching digest alone proves neither a trusted builder nor safe configuration.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Known public-byte mismatch; no approval
    Local candidate list
    Local review list unchanged; deployment=false
  6. Candidate withheld

    A required hash/config/provenance condition was not accepted; no candidate is dispatched to the local list.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Review delivery=0; approved body absent; write=false
    Local candidate list
    Local review list unchanged; deployment=false
  7. Diagnostic distinction

    The local reason separates a known mismatch from unknown provenance; a negative gate reaches neither production nor the review list.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Known config/hash denial
    Local candidate list
    Local review list unchanged; deployment=false

Debug enabled

  1. Source fixture ready

    The source fixture holds the public Atlas Notes and Tea & Bread text, expected manifest and source-revision alias. The builder has not produced a digest; the review gate has not decided hash, config or provenance conditions.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Local bytes pending; actual CI=false
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  2. Source reached builder

    The builder receives the completed input; this actor performs no actual CI runner operation or dependency package installation.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Fixed public input received; byte preparation pending
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  3. Digest candidate ready

    The builder locally prepares fixed bytes and SHA metadata; provenance verification is not this step’s cryptographic result.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  4. Candidate reached gate

    The gate sees completed artifact arrival; hash, provenance and configuration await separate local checks.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Candidate received; hash/provenance/config pending
    Local candidate list
    Local review list unchanged; deployment=false
  5. Review gate decision

    Each gate is evaluated for the same candidate; a matching digest alone proves neither a trusted builder nor safe configuration.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Hash matches; debug policy denied
    Local candidate list
    Local review list unchanged; deployment=false
  6. Candidate withheld

    A required hash/config/provenance condition was not accepted; no candidate is dispatched to the local list.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Review delivery=0; approved body absent; write=false
    Local candidate list
    Local review list unchanged; deployment=false
  7. Diagnostic distinction

    The local reason separates a known mismatch from unknown provenance; a negative gate reaches neither production nor the review list.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Known config/hash denial
    Local candidate list
    Local review list unchanged; deployment=false

Missing provenance

  1. Source fixture ready

    The source fixture holds the public Atlas Notes and Tea & Bread text, expected manifest and source-revision alias. The builder has not produced a digest; the review gate has not decided hash, config or provenance conditions.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Local bytes pending; actual CI=false
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  2. Source reached builder

    The builder receives the completed input; this actor performs no actual CI runner operation or dependency package installation.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Fixed public input received; byte preparation pending
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  3. Digest candidate ready

    The builder locally prepares fixed bytes and SHA metadata; provenance verification is not this step’s cryptographic result.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Gate waiting; candidate not accepted
    Local candidate list
    Local review list unchanged; deployment=false
  4. Candidate reached gate

    The gate sees completed artifact arrival; hash, provenance and configuration await separate local checks.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Candidate received; hash/provenance/config pending
    Local candidate list
    Local review list unchanged; deployment=false
  5. Review gate decision

    Each gate is evaluated for the same candidate; a matching digest alone proves neither a trusted builder nor safe configuration.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Hash matches; provenance evidence unknown
    Local candidate list
    Local review list unchanged; deployment=false
  6. Candidate withheld

    A required hash/config/provenance condition was not accepted; no candidate is dispatched to the local list.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Review delivery=0; approved body absent; write=false
    Local candidate list
    Local review list unchanged; deployment=false
  7. Diagnostic distinction

    The local reason separates a known mismatch from unknown provenance; a negative gate reaches neither production nor the review list.

    Source fixture
    Fixed public source/manifest ready
    Local builder
    Public artifact and declared manifest ready
    Review gate
    Unknown provenance; safely withheld
    Local candidate list
    Local review list unchanged; deployment=false

ACTORS · STATE · DATA FLOW

Environment configuration is also a release input

The same artifact can create different exposure under different runtime configuration. Document debug output, admin-access policy, accepted-host profile, secret injection and storage connections per environment. Atlas Notes selects a release-review profile requiring debug=false, owner-only admin policy and configured host rules. These are this fixture’s policy values. Django 5.2’s deployment checklist explains disabling production DEBUG, but this lesson runs no Django and does not claim that one flag secures a system. An obscure admin URL does not replace authentication/authorization; network isolation and application permission are different layers. Configuration review is separate from the build hash: correct bytes can still run with inappropriate exposure. No deployment happens here; the profile only selects candidates for an approved local review list.

Dependencies extend beyond direct packages

A dependency inventory includes direct and transitive packages, build tooling and pipeline integrations/actions. A lockfile stabilizes selected resolution and integrity metadata; it does not certify every package as trustworthy or free of vulnerabilities. Consider pinning alongside acquisition provenance and maintained-version review. Third-party JavaScript running in a browser document’s context can also change data-access boundaries; CDN hosting does not make it isolated. SRI compares particular resource bytes against expected hashes. It proves neither the trustworthiness of the HTML selecting those hashes nor the business safety of the code. Cross-origin SRI depends on the browser’s CORS requirements. The artifact’s dep-A is only a synthetic inventory alias, not a registry package or installed dependency. No new package, action or remote script is fetched.

Hashes and provenance answer complementary questions

Comparing an artifact’s SHA-256 is useful for byte equality; the trusted manifest supplying the expected digest is a separate question. Provenance connects an artifact to source revision, builder and build profile. SLSA v1.2 verification guidance distinguishes trusted builders/roots, provenance signatures and expected build types/parameters. This ledger is not a complete SLSA attestation: signature validation and builder trust are declared inputs only. The fixed public text’s digest is actually calculated locally. With missing provenance, even a correct digest leaves builder evidence unknown and closes review delivery. Build provenance does not replace code review or deployment authorization. If artifact and metadata come from the same untrusted source, their agreement creates no new trust. Record hash results and the approval gate’s reason separately.

Which evidence supports promotion and rollback?

A safe deployment design aims to promote a reviewed artifact with the same identity/digest rather than rebuilding it, validate environment configuration and release permission, and define health and rollback conditions in advance. A tag resolving to different bytes or a rollback incompatible with a data migration raises separate concerns; possession of an old artifact does not guarantee recovery. Here source-rev-A and builder-A are descriptive aliases, not actual Git commits or runners. The scene follows source → builder → review gate → local candidate list. Its terminal state is eligible-for-review, never published or deployed. Even with declared review permission, actualDeployment remains false. This boundary states what actually completed: a finite gate was evaluated; infrastructure, a public endpoint and rollout were not verified.

2. Red · Trust & Impact

Read every scenario without motion

Hash and config

  1. Exact public bytes

    Expected text contains Atlas Notes and Tea & Bread lines. SHA-256 binds byte equality, while source-rev-A and builder-A are separate declared identity aliases.

    Candidate input ledger
    Candidate-A / exact expected text
    Review conjunction
    Not yet evaluated
    Local-candidate outcome
    Not yet evaluated
  2. Hash-different decision

    The ordinary Bread & Tea change misses the expected digest and closes review. This denial is not an executable payload or detected supply-chain compromise.

    Candidate input ledger
    Candidate-A / exact expected text
    Review conjunction
    Different bytes / local review denied
    Local-candidate outcome
    Not yet evaluated
  3. No approved body

    hash-different has null approved body, no write and no deployment. Its normal candidate ID/digest is not delivered as approved.

    Candidate input ledger
    Candidate-A / exact expected text
    Review conjunction
    Different bytes / local review denied
    Local-candidate outcome
    No approved body / no write or deploy
  4. Debug-on keeps bytes

    debug-on has the same artifact text and can pass digest checking. debugEnabled true independently closes configuration gating; byte identity does not establish hardening.

    Candidate input ledger
    Same digest / debug true / review denied
    Review conjunction
    Different bytes / local review denied
    Local-candidate outcome
    No approved body / no write or deploy
  5. Admin and host configuration

    Owner-only admin and hostProfileConfigured are separate declarations, not results of actual server-access or public-exposure tests.

    Candidate input ledger
    Same digest / debug true / review denied
    Review conjunction
    Config declarations / live enforcement unmeasured
    Local-candidate outcome
    No approved body / no write or deploy
  6. Release authority is separate

    Even normal review delivery has deploymentPermission false. Test/digest success grants no deployment authority; local approval is not publication.

    Candidate input ledger
    Same digest / debug true / review denied
    Review conjunction
    Config declarations / live enforcement unmeasured
    Local-candidate outcome
    Local approval ≠ deployment permission

Provenance gate

  1. Right hash, missing binding

    provenance-missing retains normal bytes with null provenance, builder trust and signature evidence. Missing evidence is not labelled a false digest.

    Candidate input ledger
    Digest equal / provenance evidence null
    Review conjunction
    Not yet evaluated
    Local-candidate outcome
    Not yet evaluated
  2. Unknown versus approval

    The gate requires source, builder, dependency review and review permission beyond hashing. Unknown provenance is not completed into approval, so review delivery is false.

    Candidate input ledger
    Digest equal / provenance evidence null
    Review conjunction
    Required provenance unknown / gate closed
    Local-candidate outcome
    Not yet evaluated
  3. Not a signed attestation

    completeSLSAAttestation is false; sourceRevision is not an actual Git commit and builder is not a runner. Alias ledgers do not certify signed provenance or trusted pipelines.

    Candidate input ledger
    Digest equal / provenance evidence null
    Review conjunction
    Required provenance unknown / gate closed
    Local-candidate outcome
    Declared aliases / no complete attestation
  4. Dependency-pin scope

    Dep-A at fixture-rev-1 is supplied inventory with actualPackage false. Pinning narrows resolution, not code data-use or transitive approval.

    Candidate input ledger
    Declared locked revision ≠ code safety
    Review conjunction
    Required provenance unknown / gate closed
    Local-candidate outcome
    Declared aliases / no complete attestation
  5. SRI trust scope

    SRI needs trusted expected hashes and is not code safety. Cross-origin SRI requires CORS compatibility; code in the host Document needs separate admission review.

    Candidate input ledger
    Declared locked revision ≠ code safety
    Review conjunction
    Integrity/trust/code admission distinct
    Local-candidate outcome
    Declared aliases / no complete attestation
  6. Keep impact bounded

    This example runs no registry installation, package scan or browser SRI. The broken assumption is incomplete local-gate input binding, not proven vendor compromise.

    Candidate input ledger
    Declared locked revision ≠ code safety
    Review conjunction
    Integrity/trust/code admission distinct
    Local-candidate outcome
    Local gate reasoning / no supply-chain incident claim

ASSUMPTION · BOUNDARY · CONTROL

Mistaking a green build for a trusted release

The assumption is that a successful build or matching digest also settles provenance, configuration and release approval. Conflating those gates can give unreviewed source, a different builder or debug-on configuration the same promotion result. The hash-different row contains another harmless public title; it is no attack payload or package-substitution attempt. The gate only determines that expected bytes differ. In the provenance-missing row the bytes match but builder evidence is absent; labeling that a failed hash would also be wrong. Ask whether every gate is bound to its intended input. Passing a test grants neither deployment privileges to a builder nor permission to expose administration. No actual runner, registry or production configuration was examined, so these rows claim neither a supply-chain compromise nor successful safe deployment.

The scope of dependency and browser trust

The second assumption treats a pinned dependency or SRI hash as proof that third-party code is harmless. Those controls concern selected resolution or expected bytes; data use, transitive behavior and publisher provenance still need review. A runtime script executing in a document’s context does not become origin-isolated simply because its network host differs. Integrity success does not change secret classification either. This lesson scans no source map, bundle or package contents; inventory fields are supplied teaching data. Relate dependency, revision, permission and build input questions to the same candidate. Missing review evidence remains unknown and closes review delivery. Package installation, remote script invocation or exploitation workflows against a vendor or organization are outside the example.

3. Blue · Secure development & defense

Read every scenario without motion

Review controls

  1. Normal candidate binding

    Candidate-A binds source-rev-A, builder-A and expected digest. With normal declared review/config predicates, the approved body carries only candidate ID and digest.

    Bytes and declarations
    Normal local review / ID + digest
    Gate comparison
    Not yet evaluated
    Evidence outcome
    Not yet evaluated
  2. Three independent denies

    hash-different tests byte equality, debug-on configuration, and missing provenance the evidence binding. All retain null body with distinct coverage.

    Bytes and declarations
    Normal local review / ID + digest
    Gate comparison
    Hash/config/provenance denials separate
    Evidence outcome
    Not yet evaluated
  3. Actual digest control

    SHA can actually be computed for public artifactText. That calculation does not execute builder identity or declared signature checks; observed and supplied fields remain separate.

    Bytes and declarations
    Normal local review / ID + digest
    Gate comparison
    Hash/config/provenance denials separate
    Evidence outcome
    Computed SHA / supplied provenance predicates
  4. Immutable-candidate review

    Approval binds to a reviewed digest rather than a mutable branch name. Changed source/config/builder needs new binding; names cannot substitute for exact bytes.

    Bytes and declarations
    Exact reviewed candidate / no mutable-name substitute
    Gate comparison
    Hash/config/provenance denials separate
    Evidence outcome
    Computed SHA / supplied provenance predicates
  5. Boundary-check record

    Review permission, admin policy and host configuration enter the conjunction. Browser SRI and rollback health remain unverified rather than being marked executed.

    Bytes and declarations
    Exact reviewed candidate / no mutable-name substitute
    Gate comparison
    Permission/config required / browser/rollback unmeasured
    Evidence outcome
    Computed SHA / supplied provenance predicates
  6. Local-delivery receipt

    Passing yields local review delivery; failure yields null approved body. Every row retains no write/deployment; finite policy results are not actual CI or publication.

    Bytes and declarations
    Exact reviewed candidate / no mutable-name substitute
    Gate comparison
    Permission/config required / browser/rollback unmeasured
    Evidence outcome
    Bounded review result / no deployment

Approval gap

  1. Digest-message-only view

    Only expected hash equality is known while provenance/config/permission evidence is missing. The same hash can occur in debug-on or missing-provenance cases.

    Bytes and declarations
    Digest equal / other required gates missing
    Gate comparison
    Not yet evaluated
    Evidence outcome
    Not yet evaluated
  2. Do not copy normal booleans

    Normal builderTrustedDeclared true is an expectation, not missing-event builder evidence. Adding it would turn unknown provenance into approval.

    Bytes and declarations
    Digest equal / other required gates missing
    Gate comparison
    Expected trusted builder ≠ event proof
    Evidence outcome
    Not yet evaluated
  3. Delivery uncertainty

    Approval and configuration validity remain UNKNOWN. Deployment permission remains false; hash equality yields no publication or safe-production conclusion.

    Bytes and declarations
    Digest equal / other required gates missing
    Gate comparison
    Expected trusted builder ≠ event proof
    Evidence outcome
    Approval/config UNKNOWN / deployment closed
  4. Required review bindings

    Source revision, builder evidence, dependency review, target configuration and permission must bind to the same candidate. Actual digest is only one part of the relation.

    Bytes and declarations
    Needed: source/builder/deps/config/permission
    Gate comparison
    Expected trusted builder ≠ event proof
    Evidence outcome
    Approval/config UNKNOWN / deployment closed
  5. Attestation-scope question

    Signed provenance needs trusted roots and artifact-subject binding. This alias profile has no complete attestation; a signature field does not imply native verification.

    Bytes and declarations
    Needed: source/builder/deps/config/permission
    Gate comparison
    Named signature field ≠ verified attestation
    Evidence outcome
    Approval/config UNKNOWN / deployment closed
  6. Outcome for new evidence

    New evidence must show all required gates decided on the same digest. This event retains equality without closing missing provenance or configuration through guesswork.

    Bytes and declarations
    Needed: source/builder/deps/config/permission
    Gate comparison
    Named signature field ≠ verified attestation
    Evidence outcome
    Retain digest / collect scoped gate evidence

IMPLEMENTATION · SECURITY CONTROL · VERIFICATION

Keep candidate identity stable across gates

The defensive pipeline binds source revision, dependency-resolution profile, trusted builder evidence, artifact digest and target configuration to the same candidate ID. Approval applies to the reviewed artifact rather than only a branch name or mutable tag. Give the builder minimal identity privileges and require separate authority at the release gate. The candidate list here accepts only local review delivery; it has no publication permission. Debug and admin-policy checks remain independent from the hash check. Review dependency changes like contracts, documenting direct/transitive scope and runtime browser-script access. If using SRI, protect the expected hash’s provenance and cross-origin CORS compatibility separately. Applying these profiles to an actual platform requires integration evidence for signed provenance and trusted roots; those fields are declarative here.

A negative gate must send no candidate

The native check only calculates SHA-256 for fixed Atlas Notes texts and evaluates the supplied gate conjunction. Hash-different, debug-on and missing-provenance rows require expectedReviewDelivery=false, write=false and approvedBody=null. Absent provenance is not hidden as a known false assertion; unknown evidence has its own field. The last actor in the normal branch receives a candidate for approved local review. No deployment, DNS change, public distribution or CI workflow is triggered. Debug flags and admin policy are configuration declarations in this model, not settings actually applied to a server. A fixture rejecting inappropriate configuration even for a matching digest separates two distinct questions. Local evidence covers artifact equality and finite policy. Actual supply-chain acquisition, browser SRI enforcement, reproducible builds and rollback health need separate execution.

NOW APPLY IT TO THE CASE

Does artifact equality alone open local review?

Candidate-A expects Atlas Notes and Tea & Bread bytes. Bread & Tea changes the digest, while debug-on retains bytes but closes review. Missing provenance retains the digest while builder evidence is unknown. These outcomes are local review, not deployment.

Evaluate the case data journey together with environment, dependency and telemetry context. Does an operational-success label establish every application outcome?

Open the related case file ↗

READ THE EXAMPLE TOGETHER

Atlas Notes — boundary ledger

Select a field and examine what it supports and where the evidence ends.

Read the raw artifact and field explanations
{
  "profile": {
    "candidateId": "candidate-A",
    "sourceRevision": "source-rev-A",
    "builder": "builder-A",
    "artifactText": "Atlas Notes\nTea & Bread\n",
    "expectedSha256": "33712b8230bab40dfec44a3f5d732760810e62715641864fdd8c8b43e9563129",
    "target": "owned-local-review",
    "actualCI": false,
    "actualDeployment": false
  },
  "rows": [
    {
      "case": "normal",
      "artifactText": "Atlas Notes\nTea & Bread\n",
      "sourceRevision": "source-rev-A",
      "builder": "builder-A",
      "provenancePresent": true,
      "builderTrustedDeclared": true,
      "signatureVerifiedDeclared": true,
      "dependencyReviewDeclared": true,
      "reviewPermissionDeclared": true,
      "debugEnabled": false,
      "adminPolicy": "owner-only",
      "hostProfileConfigured": true,
      "expectedReviewDelivery": true,
      "expectedApprovedBody": {
        "candidateId": "candidate-A",
        "sha256": "33712b8230bab40dfec44a3f5d732760810e62715641864fdd8c8b43e9563129"
      },
      "expectedWrite": false,
      "actualDeployment": false
    },
    {
      "case": "hash-different",
      "artifactText": "Atlas Notes\nBread & Tea\n",
      "sourceRevision": "source-rev-A",
      "builder": "builder-A",
      "provenancePresent": true,
      "builderTrustedDeclared": true,
      "signatureVerifiedDeclared": true,
      "dependencyReviewDeclared": true,
      "reviewPermissionDeclared": true,
      "debugEnabled": false,
      "adminPolicy": "owner-only",
      "hostProfileConfigured": true,
      "expectedReviewDelivery": false,
      "expectedApprovedBody": null,
      "expectedWrite": false,
      "actualDeployment": false
    },
    {
      "case": "debug-on",
      "artifactText": "Atlas Notes\nTea & Bread\n",
      "sourceRevision": "source-rev-A",
      "builder": "builder-A",
      "provenancePresent": true,
      "builderTrustedDeclared": true,
      "signatureVerifiedDeclared": true,
      "dependencyReviewDeclared": true,
      "reviewPermissionDeclared": true,
      "debugEnabled": true,
      "adminPolicy": "owner-only",
      "hostProfileConfigured": true,
      "expectedReviewDelivery": false,
      "expectedApprovedBody": null,
      "expectedWrite": false,
      "actualDeployment": false
    },
    {
      "case": "provenance-missing",
      "artifactText": "Atlas Notes\nTea & Bread\n",
      "sourceRevision": "source-rev-A",
      "builder": "builder-A",
      "provenancePresent": null,
      "builderTrustedDeclared": null,
      "signatureVerifiedDeclared": null,
      "dependencyReviewDeclared": true,
      "reviewPermissionDeclared": true,
      "debugEnabled": false,
      "adminPolicy": "owner-only",
      "hostProfileConfigured": true,
      "expectedReviewDelivery": false,
      "expectedApprovedBody": null,
      "expectedWrite": false,
      "actualDeployment": false
    }
  ],
  "dependencyInventory": [
    {
      "alias": "dep-A",
      "scope": "runtime",
      "lockedRevision": "fixture-rev-1",
      "integrityEvidence": "declared",
      "review": "accepted-declared",
      "actualPackage": false
    }
  ],
  "browserBoundary": {
    "SRIIsCodeSafety": false,
    "expectedHashNeedsTrust": true,
    "crossOriginSRIRequiresCORS": true,
    "actualBrowserCheck": false
  },
  "provenanceProfile": {
    "completeSLSAAttestation": false,
    "sourceRevisionIsActualGitCommit": false,
    "builderIsActualRunner": false
  },
  "promotionBoundary": {
    "localReviewOnly": true,
    "deploymentPermission": false,
    "actualPublish": false,
    "rollbackHealthVerified": false
  }
}
rows
Local review gate: hash, declared provenance and configuration are distinct conditions.
dependencyInventory
Synthetic alias; not installed-package inventory or registry evidence.
browserBoundary
SRI integrity scope is neither code safety nor an actual browser result.
promotionBoundary
Review delivery is not publication or deployment.

SHA can actually be calculated for public text; provenance/config are supplied. No actual CI, dependency installation, browser SRI check or deployment.

Two reality checks

A matching hash makes a release trustworthy.

Expected-hash provenance, builder/config and release authority need separate checks.

Pinned code or SRI proves code safety.

Byte/resolution equality does not prove behavior or business safety.

YOUR TURN

Work through this story.

Predict the outcome, find the evidence boundary, and explain it in your own words.

The artifact bytes match the expected hash, but debugEnabled=true. Is local-review delivery approved?

  1. Yes. A matching hash proves every config and access policy.
  2. No. debug-on has expectedReviewDelivery=false.
Read the explained answer

No. debug-on has expectedReviewDelivery=false. — The hash condition passes, but this candidate fails config policy. No approved body is produced.

Provenance fields are null. Do source-revision and builder labels count as a verified attestation?

Selected lesson artifact fields; teaching example

rows[3].provenancePresent
null
rows[3].builderTrustedDeclared
null
rows[3].signatureVerifiedDeclared
null
rows[3].expectedReviewDelivery
false
provenanceProfile
{"completeSLSAAttestation":false,"sourceRevisionIsActualGitCommit":false,"builderIsActualRunner":false}
  1. No. Review delivery is withheld; no complete attestation is present.
  2. Yes. Any builder name guarantees its own authenticity.
Read the explained answer

No. Review delivery is withheld; no complete attestation is present. — Builder/source aliases are not verification of an actual Git commit or runner. provenancePresent=null is missing acceptance evidence.

Why are local approved-review data, SRI and a locked dependency neither a real deployment nor a code-safety guarantee?

Read the explained answer

SRI checks expected bytes, not code safety. The expected hash itself needs a trusted source, and cross-origin SRI also has CORS conditions. A locked dependency revision does not remove update/review policy. This output is local review only, with deploymentPermission=false and actualPublish=false. No actual CI, package, browser SRI or rollback-health test is performed.

□ I did not treat hash/SRI success as code safety.

□ I did not treat local review as deployment permission or publication.

Open the application console · request / response / browser
Also open request, URL, cookie and DOM examples

Sources and scope