Hacker DirectoryHacker Directory

WEB / WEB-10.06

Observing with Developer Tools

Network, DOM, Console, and Storage expose different evidence. Bound observations by request, context, and capture time.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mechanism

Read every scenario without motion

Observe HTTP 404

  1. Capture started

    Observation recording starts before the action with top context and the public-note filter.

    Page / Duru
    DOM Loading; request ready
    Origin
    No request
    Observation view
    Recording; no row yet
    Client state
    theme dark; no result
  2. GET arrival

    The origin receives harmless GET /notes/missing while the browser result remains pending.

    Page / Duru
    DOM Loading; pending
    Origin
    GET received
    Observation view
    Recording; request visible
    Client state
    theme dark; result pending
  3. 404 prepared

    The origin prepares a normal 404 response with Not found content rather than a network error.

    Page / Duru
    DOM Loading; pending
    Origin
    404 Not found ready
    Observation view
    Recording; status pending
    Client state
    theme dark; result pending
  4. Response arrival

    The 404 and complete harmless content arrive at the page with status404 and okfalse.

    Page / Duru
    Response404; Not found received
    Origin
    404 delivered
    Observation view
    Recording; response available
    Client state
    theme dark; body read pending
  5. Local DOM/log

    The page consumes content, sets DOM to Not found, and emits its application request completed message.

    Page / Duru
    DOM Not found
    Origin
    Exchange complete
    Observation view
    404 row available
    Client state
    theme dark; application log completed
  6. Cross-surface check

    Observation records original Loading HTML, live Not found DOM, and 404 fields together.

    Page / Duru
    DOM Not found
    Origin
    No new mutation
    Observation view
    HTML≠DOM; status404; initiator script
    Client state
    Log completed ≠ HTTP200
  7. Bounded conclusion

    TTFB is not a server DB duration; request completion proves neither business success nor permission.

    Page / Duru
    Missing note shown
    Origin
    Internal durations unobserved
    Observation view
    Evidence bounded; no fake ms
    Client state
    theme dark; no backend authority

Local DOM edit

  1. Observed state

    Supplied previous response HTML is Loading, live DOM is Not found, and originTitle is Atlas note.

    Page / Duru
    DOM Not found
    Origin
    Title Atlas note
    Observation view
    HTML Loading; current DOM Not found
    Client state
    theme dark
  2. Local text edit

    A harmless local edit sets active document result text to Preview without sending a request.

    Page / Duru
    DOM Preview
    Origin
    Title Atlas note
    Observation view
    Previous observation retained
    Client state
    theme dark
  3. Elements view

    The Elements-equivalent observation reads active DOM Preview while response HTML remains unchanged.

    Page / Duru
    DOM Preview
    Origin
    Title Atlas note
    Observation view
    DOM Preview; original HTML Loading
    Client state
    theme dark
  4. Storage view

    Selected-origin storage contains theme dark and does not become a server session store.

    Page / Duru
    DOM Preview
    Origin
    Title Atlas note
    Observation view
    Client storage observed
    Client state
    theme dark; server session unobserved
  5. Compare ownership

    There is no exchange supporting a server mutation claim from local DOM evidence; the authoritative title stays unchanged.

    Page / Duru
    DOM Preview
    Origin
    Title Atlas note
    Observation view
    No server mutation evidence
    Client state
    Client-only state
  6. Bounded conclusion

    Observation concludes a local presentation change, without proving backend permission or mutation.

    Page / Duru
    DOM Preview
    Origin
    Title Atlas note
    Observation view
    Local edit only; server claim false
    Client state
    Client-only state

Late recording

  1. Recording off

    Selected Network capture is off before the action; its later table cannot reconstruct history.

    Page / Duru
    GET public note ready
    Origin
    No request
    Observation view
    Recording off; empty
    Client state
    Result pending
  2. GET arrival

    The origin receives the harmless public-note GET while the selected observation table does not collect it.

    Page / Duru
    Waiting response
    Origin
    GET received
    Observation view
    Recording off; empty
    Client state
    Result pending
  3. Response arrival

    The normal public response200 reaches the page while selected capture remains off.

    Page / Duru
    Response200 public note
    Origin
    Response delivered
    Observation view
    Recording off; empty
    Client state
    Result available
  4. Late capture starts

    Observation starts recording now; no captured request row is produced for the previous exchange.

    Page / Duru
    Public note shown
    Origin
    Exchange complete
    Observation view
    Recording on; prior row absent
    Client state
    Result available
  5. Missing evidence

    An empty table does not prove no earlier request occurred; this branch has an explicit capture gap.

    Page / Duru
    Public note shown
    Origin
    Historical GET occurred
    Observation view
    Historical request unobserved
    Client state
    No no-request proof
  6. Scope recorded

    The report marks this action network evidence missing; a new measurement cannot alter the old capture retroactively.

    Page / Duru
    Public note shown
    Origin
    Historical GET occurred
    Observation view
    Capture gap documented
    Client state
    No compromise claim

ACTORS · STATE · DATA FLOW

Start with the capture contract

Developer Tools is an observation instrument rather than an automatic judgment of application correctness or vulnerabilities. Network displays requests made while the panel is open and recording. Open it before the action and record capture/filter choices; make Preserve log explicit when retaining a navigation chain. Opening it afterward and seeing an empty table does not prove no request occurred. Cached or Service Worker responses can appear too; not every row represents a new origin round trip.

Read method, target, status, headers, and content separately. HTTP404 can coexist with fulfilled Fetch. The artifact GET /notes/missing yields HTTP404/body Not found while the client can log request completed. An Initiator can explain parser, script, or request relationships, not a business identity or permission decision. Its stack trace concerns request initiation, not the internal server call chain.

Do not reduce Timing phases to one undifferentiated duration. Queueing/Stalled can involve browser scheduling, DNS/connect the initial connection, and Waiting (TTFB) round-trip plus server response preparation. TTFB is not merely database duration; Content Download can involve network and browser-consumption conditions. Reuse or caching can leave phases absent. This example invents no millisecond values and separates observed phases from unmeasured server duration.

Response HTML and live DOM are different artifacts

Elements shows the active DOM tree. Response HTML is initial content; parsing constructs the tree and scripts can later change nodes or text. In the artifact, p#result begins as Loading and becomes Not found after the client reads 404 content. This does not prove the server later rewrote its HTML. Correlate document response content or View Source separately with live Elements, capture time, and the same navigation.

Console has a selected JavaScript context; the top document and iframe can differ. Filtered messages are not a complete trace. An application request completed log is an application statement, not a substitute for status or server audit evidence. Locally changing DOM text to Preview changes this document presentation; a server-mutation claim needs a real exchange and server behavior.

Application/Storage lets you inspect the selected origin localStorage key/value pairs and Cache Storage entries. These are not a server session store. Local theme=dark proves neither identity/tenant permission nor response authorization. Cache Storage inspection is not the browser HTTP-cache management table; refresh state and displayed resource content depend on observation time. Do not label old onscreen state as current backend state.

Evidence scope and sensitive fields

HAR exports captured exchanges through a defined JSON format. Chrome default sanitized export excludes headers such as Cookie, Set-Cookie, and Authorization. This does not guarantee every URL query, request/response body, or application identifier is anonymized. Review shared content separately and retain only necessary bounded observations.

This bundle is not a real HAR; it is an inert projection of benign request, selected DOM, and storage observations. It retains only a public path and harmless text; excludedHeaderNames lists omitted field types. Capture gaps remain explicit. Reading an export cannot restore exchanges that were unobserved during capture. When comparing browser-instrumentation fields with a filtered panel view, preserve which observations were actually collected.

2. Red · Trust & Impact

Read every scenario without motion

Local DOM

  1. Original response was separated from current DOM

    Original HTML has result text Loading; after script it is Not found; local editing changes it to Preview. These snapshots belong to different stages. Current serialization is not original response bytes.

    Browser observation bundle
    Source Loading / script Not found / local Preview
    Provenance/privacy gate
    Review pending
    Server/evidence boundary
    No verdict
  2. A local edit was not server-mutation evidence

    serverTitleBefore and serverTitleAfterLocalEdit remain Atlas note with serverMutationObserved false. Elements shows client presentation. Treating a local UI edit as an authoritative object update creates the wrong boundary.

    Browser observation bundle
    Source Loading / script Not found / local Preview
    Provenance/privacy gate
    Server Atlas note unchanged / mutation false
    Server/evidence boundary
    No verdict
  3. A client preference was not backend authority

    localStorage has theme dark while serverSessionStoreObserved is false. A preference field is not a role, session or resource grant. Cache Storage observations likewise are not evidence of the HTTP-cache engine.

    Browser observation bundle
    Source Loading / script Not found / local Preview
    Provenance/privacy gate
    Server Atlas note unchanged / mutation false
    Server/evidence boundary
    Theme dark / server session unobserved
  4. The completed log was compared with HTTP status

    The application writes request completed to Console, but GET /notes/missing has status 404 and ok false. The fulfilled Response shows why the label is not HTTP-200 evidence. Selected context is top.

    Browser observation bundle
    Application log completed / HTTP404 ok=false
    Provenance/privacy gate
    Server Atlas note unchanged / mutation false
    Server/evidence boundary
    Theme dark / server session unobserved
  5. The provenance oracle used normal and positive controls

    Normal XML has serverMutationClaim false for local-dom evidence and count zero; positive XML has true and count one. The rule selects incorrect server inference from local edits; it is not a real log schema.

    Browser observation bundle
    Application log completed / HTTP404 ok=false
    Provenance/privacy gate
    Normal inference count0 / positive count1
    Server/evidence boundary
    Theme dark / server session unobserved
  6. Control tied original sources to observed effects

    Response, active DOM, application outcomes and authoritative server state remain separate. The inert bundle is neither actual DevTools UI nor a full HAR capture. Server changes require scoped server evidence; local Preview is insufficient.

    Browser observation bundle
    Application log completed / HTTP404 ok=false
    Provenance/privacy gate
    Normal inference count0 / positive count1
    Server/evidence boundary
    Local effect known / authority requires server evidence

Export scope

  1. Minimal sharing was separated from full HAR

    Sharing uses a minimal observation projection, excluding Cookie, Set-Cookie and Authorization. retainedQuery is none and the body only public Not found. This selected bundle is not an export of a real user journey.

    Browser observation bundle
    Minimal public projection / credential headers excluded
    Provenance/privacy gate
    Review pending
    Server/evidence boundary
    No verdict
  2. Header filtering was not full anonymization

    fullAnonymizationProven is false. Removing headers does not generally prove absence of sensitive data in queries or bodies. Export scope and field inspection are separate controls; a filtered table may not cover the whole journey.

    Browser observation bundle
    Minimal public projection / credential headers excluded
    Provenance/privacy gate
    Header filtering only / anonymization not proven
    Server/evidence boundary
    No verdict
  3. Sharing needs were separated from authority decisions

    An observation bundle transfers data to another reader, so only needed fields are selected. Accounts and private responses are outside this public fixture. Excluded fields here do not establish safety of all future captures.

    Browser observation bundle
    Minimal public projection / credential headers excluded
    Provenance/privacy gate
    Header filtering only / anonymization not proven
    Server/evidence boundary
    Share only scoped fields / future captures need review
  4. Timing-phase names did not carry a cause verdict

    Phase names are Waiting (TTFB) and Content Download, with inventedDurationMs null and serverDatabaseDurationKnown false. TTFB is not slow-database proof. Initiator script supplies no trusted actor identity.

    Browser observation bundle
    Timing names only / DB duration unknown
    Provenance/privacy gate
    Header filtering only / anonymization not proven
    Server/evidence boundary
    Share only scoped fields / future captures need review
  5. Observations and hypotheses remained separate

    Script initiation is browser provenance; a database cause is another hypothesis. Unobserved durations or server processes are not added. Causal review needs separate authorized application/server evidence.

    Browser observation bundle
    Timing names only / DB duration unknown
    Provenance/privacy gate
    Browser initiation known / server cause separate
    Server/evidence boundary
    Share only scoped fields / future captures need review
  6. Privacy verdicts stayed within the bounded projection

    The bundle uses public placeholders and selected exclusions without measuring actual HAR format/export or complete anonymization. Sharing review keeps capture scope and required fields explicit instead of claiming a full journey.

    Browser observation bundle
    Timing names only / DB duration unknown
    Provenance/privacy gate
    Browser initiation known / server cause separate
    Server/evidence boundary
    Minimal projection scoped / full HAR unmeasured

ASSUMPTION · BOUNDARY · CONTROL

Do not treat visible state as authority

Treating local DOM text or a storage value as backend permission exceeds observation boundaries. A node labeled Preview can change presentation, but an ordinary client edit does not prove a server object changed. The condition is confusing local presentation with authoritative state; impact depends on the application decision that uses it. This lesson creates no server-policy bypass experiment.

A quiet or green-looking Console does not establish request success. Logger behavior, filters, selected context, and capture time can exclude events. Reading 404, fulfilled Fetch, and result text together reveals what a completed log actually says. Correlate original response, active DOM, and application outcome with the request/navigation identity while leaving missing evidence explicit.

Export creates a new data-sharing boundary

Interpreting sanitized HAR header filtering as complete content privacy can accidentally share sensitive application data remaining in queries or bodies. Export from a filtered table may also omit part of the journey. The condition is skipping scope and field inspection. Here only a public-note path and harmless text are shared, with no credentials, cookies, or account data captured.

Inferring unseen server behavior from Timing or Initiator can create an incorrect incident narrative. TTFB alone does not prove a slow database; a script initiator does not prove a trusted business actor. Separate measured phases from hypotheses, obtaining authorized application/server evidence separately if needed. Rather than declaring observation failure a compromise, record which fields actually exist.

3. Blue · Secure development & defense

Read every scenario without motion

Correlated review

  1. Capture scope was selected before the action

    This bundle is an authored observation projection, not a new DevTools capture. Its Network row represents browser request/response observation, Elements current DOM, Console an application logger, and theme origin-scoped localStorage. In capture-gap, a displayed result does not establish a late panel recorded the earlier request; the server session store remains unobserved. openedBeforeAction and recording are true with context top and filter public-note. Preserve log is supplied as false. Visible rows do not represent all historical exchanges unless scope is known.

    Capture observations
    Before action / recording / top / public-note
    Correlation review
    Review pending
    Evidence conclusion
    No verdict
  2. The Network row retained one exchange’s fields

    GET /notes/missing has status 404, body Not found and bodyComplete true. Initiator script and fulfilled Response are separate fields. Complete body consumption can coexist with HTTP acceptance ok false.

    Capture observations
    Before action / recording / top / public-note
    Correlation review
    GET missing / 404 / complete Not found
    Evidence conclusion
    No verdict
  3. Elements and Console were not one success event

    Live DOM shows Not found while Console shows request completed, authored by the application. Local Preview is another edit. Context top does not represent frame logs. UI text and log labels do not replace network status.

    Capture observations
    DOM Not found / application completed log / local Preview
    Correlation review
    GET missing / 404 / complete Not found
    Evidence conclusion
    No verdict
  4. Storage records were separated from authoritative server records

    Theme dark is a client preference; serverTitle Atlas note is retained with server mutation false. Storage originAlias is local-fixture-origin. Deleting another context’s storage is not automatically a server fix.

    Capture observations
    DOM Not found / application completed log / local Preview
    Correlation review
    Client theme dark / authoritative title unchanged
    Evidence conclusion
    No verdict
  5. The result retained the smallest evidence scope

    Public GET 404, local DOM updates and a client preference are known. Backend sessions and DB duration are unknown. The synthetic projection teaches surface differences without being a complete DevTools-panel or HAR-export test.

    Capture observations
    DOM Not found / application completed log / local Preview
    Correlation review
    Client theme dark / authoritative title unchanged
    Evidence conclusion
    Exchange/client effects known / backend scope unknown
  6. Reproducibility fields retained minimal scope

    Review records method/path/status, capture start, filter/context and bodyComplete without full queries, cookies or private bodies. A new observation in another selected context requires renewed correlation.

    Capture observations
    DOM Not found / application completed log / local Preview
    Correlation review
    Client theme dark / authoritative title unchanged
    Evidence conclusion
    Retain scoped capture/context/status/body state

Late capture

  1. Recording start was separated from historical action

    This bundle is an authored observation projection, not a new DevTools capture. Its Network row represents browser request/response observation, Elements current DOM, Console an application logger, and theme origin-scoped localStorage. In capture-gap, a displayed result does not establish a late panel recorded the earlier request; the server session store remains unobserved. captureGap has openedBeforeAction false and visibleRequestRows 0. An empty table may omit exchanges before capture began. Zero rows are not equivalent to an observed absence of requests.

    Capture observations
    Late capture / visible rows0
    Correlation review
    Review pending
    Evidence conclusion
    No verdict
  2. Filters and context retained their coverage role

    Recording time, selected context and filters affect historical-request coverage. An absent event yields neither a guessed network failure nor successful no-op. Before-action records do not fill a new trace’s gap.

    Capture observations
    Late capture / visible rows0
    Correlation review
    Historical coverage incomplete
    Evidence conclusion
    No verdict
  3. A DOM result did not create a missing network event

    Not found or Preview may appear in local DOM. Their source exchange cannot be conclusively identified without the missing network observation. Current DOM does not supply complete original-response provenance.

    Capture observations
    DOM text exists / historical exchange source unknown
    Correlation review
    Historical coverage incomplete
    Evidence conclusion
    No verdict
  4. A new capture was not historical evidence

    Observing the benign action again creates a new exchange rather than reconstructing an old missing event. Source/version and action identity remain distinct. New results are not written as exact measurements of the previous unknown outcome.

    Capture observations
    DOM text exists / historical exchange source unknown
    Correlation review
    New capture ≠ reconstructed historical event
    Evidence conclusion
    No verdict
  5. Historical-request verdicts remained unknown

    Historical exchanges remain unobserved in this late capture. No-request, successful-response and compromise conclusions are withheld. Missing rows may reflect capture policy, but no cause is selected without evidence.

    Capture observations
    DOM text exists / historical exchange source unknown
    Correlation review
    New capture ≠ reconstructed historical event
    Evidence conclusion
    UNKNOWN: historical exchange
  6. New evidence was tied to the capture contract

    Further review needs scoped capture timing, filters, context and, when needed, server-request association without full user journeys or private logs. Projection limits help another reader interpret unknown outcomes correctly.

    Capture observations
    DOM text exists / historical exchange source unknown
    Correlation review
    New capture ≠ reconstructed historical event
    Evidence conclusion
    Needed: capture timing/filter/context/request association

IMPLEMENTATION · SECURITY CONTROL · VERIFICATION

A comparison ledger for one request

This bundle is an authored observation projection, not a new DevTools capture. Its Network row represents browser request/response observation, Elements current DOM, Console an application logger, and theme origin-scoped localStorage. In capture-gap, a displayed result does not establish a late panel recorded the earlier request; the server session store remains unobserved. Enable Network recording before the harmless local-note action and record filter/context choices. Check that GET, /notes/missing, status404, and Not found belong to one exchange. Observe that fulfilled Fetch does not automatically perform status checking and Console messages are application-generated. If response content is incomplete, do not report missing content as an empty successful result.

Compare the result node transition from Loading to Not found with the original document response. Record Console top/frame context and the Application Storage origin. Local Preview edits, localStorage theme=dark, and serverTitle Atlas note belong to different owners. Do not mark server mutation or permission change proven without observation. Deleting another context value is not an automatic repair either.

Preserve observation boundaries in delivery

Retain observed Network Timing phases by name and leave server database duration absent. If Initiator is script, identify this as browser-initiation evidence. An empty table after late recording only establishes a capture gap. A repeated observation must remain harmless and local; a new capture cannot retroactively produce old missing evidence.

Keep excludedHeaderNames and inspected URL/body fields explicit in the observation bundle you share. A minimal public local projection is different from checking the format and content of a full HAR. Select required fields within authorized scope rather than adding another person journey, avoiding account details or private responses. Record selected context, capture start, filters, and body-completion state. These details help another reader interpret an empty table or different DOM result correctly.

NOW APPLY IT TO THE CASE

How do Network, live DOM, Console and Storage answer different authority and coverage questions?

The public missing-note request returns 404 and Not found while the application logs request completed. A local Elements edit shows Preview while serverTitle remains Atlas note. Late capture may show zero rows; a minimal sharing projection is not a full HAR.

Order response receipt, parsing, callbacks and visible DOM outcome in the case. Try explaining the retained old title through this lesson’s browser-state distinctions.

Open the related case file ↗

READ THE EXAMPLE TOGETHER

One request, four evidence surfaces

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

Read the raw artifact and field explanations
{
  "capture": {
    "openedBeforeAction": true,
    "recording": true,
    "preserveLogSupplied": false,
    "selectedContext": "top",
    "filterScope": "public-note"
  },
  "network": {
    "method": "GET",
    "path": "/notes/missing",
    "status": 404,
    "body": "Not found",
    "bodyComplete": true,
    "initiator": "script",
    "fetchPromiseOutcome": "fulfilled-response",
    "ok": false,
    "timing": {
      "phaseNamesOnly": [
        "Waiting (TTFB)",
        "Content Download"
      ],
      "inventedDurationMs": null,
      "serverDatabaseDurationKnown": false
    }
  },
  "document": {
    "responseHTML": "<p id=\"result\">Loading</p>",
    "liveDOMAfterScript": "<p id=\"result\">Not found</p>",
    "liveDOMAfterLocalEdit": "<p id=\"result\">Preview</p>",
    "serverTitleBefore": "Atlas note",
    "serverTitleAfterLocalEdit": "Atlas note",
    "serverMutationObserved": false
  },
  "console": {
    "selectedContext": "top",
    "message": "request completed",
    "messageAuthor": "application",
    "provesHTTP200": false
  },
  "storage": {
    "originAlias": "local-fixture-origin",
    "localStorage": {
      "theme": "dark"
    },
    "serverSessionStoreObserved": false,
    "cacheStorageIsHTTPCache": false
  },
  "sharing": {
    "format": "minimal observation projection; not full HAR",
    "excludedHeaderNames": [
      "Cookie",
      "Set-Cookie",
      "Authorization"
    ],
    "retainedQuery": "none",
    "retainedBody": "public Not found text only",
    "fullAnonymizationProven": false
  },
  "captureGap": {
    "openedBeforeAction": false,
    "visibleRequestRows": 0,
    "conclusion": "historical exchange unobserved; not proof of no request"
  },
  "selector": {
    "language": "XPath",
    "xml": "<observations><decision evidence=\"local-dom\" serverMutationClaim=\"false\"/></observations>",
    "xpath": "count(/observations/decision[@evidence=\"local-dom\" and @serverMutationClaim=\"true\"])",
    "expected": 0,
    "positiveFixtureXml": "<observations><decision evidence=\"local-dom\" serverMutationClaim=\"true\"/></observations>",
    "positiveExpected": 1,
    "scope": "Only authored protocol-decision observations, not product log field names or a live HTTP capture.",
    "missingFieldBehavior": "Missing observation is insufficient evidence; zero matches is not proof of correct runtime behavior."
  }
}
network / capture
Exchange fields are bounded by capture scope; timing is not invented.
document / console
Original HTML, live DOM, and application logs differ.
storage
Client preference is not backend-session/permission evidence.
sharing / captureGap
Minimal projection and missing-evidence boundaries are explicit.

Inert synthetic projection without real HAR/logs or secrets. Native CDP observation is not a DevTools-panel UI/HAR-export test.

Two reality checks

Changing text in Elements changes server data.

Elements shows live DOM; a local edit proves neither an original-response change nor backend mutation.

Sanitized HAR anonymizes all application data.

Sensitive headers can be omitted while retained query/body content and export scope still need review.

YOUR TURN

Work through this story.

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

DevTools opened after the action and visibleRequestRows is 0. Can you say no request occurred?

  1. No; the historical exchange may be unobserved.
  2. Yes; an empty Network tab rules out all prior requests.
Read the explained answer

No; the historical exchange may be unobserved. — openedBeforeAction=false is an observation gap; zero rows do not prove absence of the event.

Did the local DOM Preview edit change the server title?

Selected lesson artifact fields; teaching example

document.liveDOMAfterLocalEdit
<p id="result">Preview</p>
document.serverTitleBefore
Atlas note
document.serverTitleAfterLocalEdit
Atlas note
document.serverMutationObserved
false
  1. Yes; displayed text automatically updates all persistent state.
  2. No; the server title remains Atlas note and no mutation is observed.
Read the explained answer

No; the server title remains Atlas note and no mutation is observed. — An Elements-panel/local edit changes this browser tree only; it supplies no server-write evidence.

What do Console request completed and Network 404 teach together? Why is removing Cookies alone not full anonymization when sharing observations?

Read the explained answer

The Console message is an application-completion notification, not HTTP 200 proof; a 404 Response can be fulfilled with ok=false. The observation projection retains only a public body and narrow metadata. Removing Cookie/Authorization is useful minimization but does not automatically anonymize information remaining in queries/bodies/other identifiers.

□ I did not substitute a Console message for HTTP status.

□ I distinguished minimization from full anonymization.

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

Sources and scope