Hacker DirectoryHacker Directory

WEB / WEB-10.S01

Forms, JavaScript and DOM data flow

When does a control value become a request, JavaScript value and DOM text?

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mechanism

Read every scenario without motion

Native navigation

  1. Controls ready

    The q value Tea & Bread, repeated tags and browse submitter are ready. This branch supplies constraintValid=true and listenerCancel=false; the browser has not encoded its entry list or sent the native-navigation request.

    Browser document
    Controls ready; no result DOM
    Owned book API
    No request; no read
  2. Constraint/event

    Declared native validation passes and the submit event is not cancelled; default navigation continues.

    Browser document
    Native gate passed; entries pending
    Owned book API
    No request; no read
  3. Entry encoding

    The selected entry list is encoded with repeated tags preserved; the ordinary GET navigation request is ready.

    Browser document
    GET navigation request ready
    Owned book API
    No request; no read
  4. Request arrived

    The ordinary read request reached the API; server q-contract and resource-policy decisions remain pending.

    Browser document
    GET navigation request ready
    Owned book API
    Read request arrived; validation pending
  5. Local server gate

    Declared owned-read policy passes; the Tea & Bread title is prepared in an encoded normal HTML response.

    Browser document
    GET navigation request ready
    Owned book API
    HTML response ready; title encoded
  6. Response arrived

    The native-navigation response reached the browser; new-document parsing and DOM construction remain pending.

    Browser document
    HTML response arrived; parse pending
    Owned book API
    HTML response ready; title encoded
  7. Local HTML parser

    The selected benign HTML declaration expects Tea & Bread text; no actual parser is executed.

    Browser document
    New document text expected: Tea & Bread
    Owned book API
    HTML response ready; title encoded
  8. Local DOM outcome

    The benign h2 text outcome for the new document is shown; rendering is local rather than a network arrival.

    Browser document
    New document title: Tea & Bread
    Owned book API
    HTML response ready; title encoded

Fetch handler

  1. Controls ready

    Form data is ready; this branch will cancel default navigation and select manualFetch=true. The current document will remain, but the separate Fetch request has not run and the server title has not been read.

    Browser document
    Controls ready; no result DOM
    Owned book API
    No request; no read
  2. Local listener

    The submit listener applies declared preventDefault, reads q as a string and prepares an ordinary fetch read request.

    Browser document
    Default cancelled; fetch request ready
    Owned book API
    No request; no read
  3. Fetch request arrived

    The separate fetch request reached the API; native navigation did not start and the server gate remains pending.

    Browser document
    Default cancelled; fetch request ready
    Owned book API
    Fetch read arrived; validation pending
  4. Local server read

    The server accepts the same q/resource contract and prepares the ordinary JSON title response.

    Browser document
    Default cancelled; fetch request ready
    Owned book API
    JSON title response ready
  5. Response arrived

    The response reached the browser; handler body reading, JSON parsing and DOM update remain incomplete.

    Browser document
    Response arrived; body pending
    Owned book API
    JSON title response ready
  6. Local body reading

    The handler reads the selected JSON body; it obtains a title string without yet changing DOM text.

    Browser document
    Body parsed; title string ready
    Owned book API
    JSON title response ready
  7. Local function scope

    The callback accesses its lexical q binding; a closure adds no trust and output text remains plain data.

    Browser document
    Handler title ready; textContent pending
    Owned book API
    JSON title response ready
  8. Local textContent

    Assigning the original title to ordinary h2.textContent expects literal Tea & Bread within the current document.

    Browser document
    Current DOM literal: Tea & Bread
    Owned book API
    JSON title response ready

Constraint denied

  1. Controls ready

    Form data is ready, but this branch supplies constraintValid=false. Browser-local feedback is not server denial; no submission, request or new book response exists.

    Browser document
    Controls ready; no result DOM
    Owned book API
    No request; no read
  2. Local browser gate

    The selected constraint fails or the submit listener cancels the default; no message reaches the server.

    Browser document
    Constraint denied; no network
    Owned book API
    No request; no read
  3. Local feedback

    The browser shows ordinary feedback; server validation and resource lookup are not executed in this branch.

    Browser document
    Local feedback; server unchanged
    Owned book API
    No request; no read
  4. Terminal state

    This local outcome preserves the current document; no new book response or result DOM is produced.

    Browser document
    No new result; local done
    Owned book API
    No request; no read

Listener cancel

  1. Controls ready

    The form constraint passes; listenerCancel=true and manualFetch=false are selected. Default navigation will stop locally with no replacement request. The server has not received these form values.

    Browser document
    Controls ready; no result DOM
    Owned book API
    No request; no read
  2. Local browser gate

    The selected constraint fails or the submit listener cancels the default; no message reaches the server.

    Browser document
    Default cancelled; no network
    Owned book API
    No request; no read
  3. Local feedback

    The browser shows ordinary feedback; server validation and resource lookup are not executed in this branch.

    Browser document
    Local feedback; server unchanged
    Owned book API
    No request; no read
  4. Terminal state

    This local outcome preserves the current document; no new book response or result DOM is produced.

    Browser document
    No new result; local done
    Owned book API
    No request; no read

ACTORS · STATE · DATA FLOW

From controls to the entry list

Atlas search carries the harmless title Tea & Bread under q. An input id supports labels and DOM lookup, while name supplies the submission key. The entry list is not a copy of every visible control: disabled controls, unchecked checkboxes, unnamed controls and unselected submit buttons are excluded. A named readonly text control can still be submitted. Two tag controls produce ordered web/http entries; prematurely turning this list into a plain object can lose a repeated value. Hidden or readonly values are UI/submission properties, not trusted server identity.

Submission contains several decisions

After selecting a submitter, the browser evaluates constraint validation and the cancelable submit event. A listener can stop default navigation with preventDefault. The selected native GET branch prepares a navigation request with UTF-8 URL-encoded entries. In the fetch branch, the listener stops the default and separately prepares its own ordinary read request; fetch is not native form navigation. requestSubmit follows the normal submitter/validation/event path; submit() must not be assumed to have identical event or validation behavior. Browser checks provide user experience, while the server separately evaluates the q contract and resource policy.

JavaScript values, functions and lexical scope

A text control produces the string "2"; adding a number can concatenate, whereas explicit Number conversion produces a number that still needs domain validation. Null, undefined and an absent field need not have the same application meaning. let/const use block scope, unlike function-scoped var. A const object binding does not make its title immutable. Explicit function inputs and returns separate DOM reading from normalization, policy and rendering. A callback can access a surrounding q binding through a lexical closure; capture does not make input trusted. JavaScript execution, body parsing and DOM updates are local scene stages, not network packets.

2. Red · Trust & Impact

Read every scenario without motion

Entry loss

  1. Read the controls

    q Tea & Bread, tags web/http and readonly view cards enter the form data. Disabled draft, an unnamed control and unchecked archived do not; submitter browse selects mode.

    Control and entry list
    Ordered entries / repeated tag / mode browse
    Conversion and policy
    Not yet evaluated
    Operation result
    Not yet evaluated
  2. See single-key loss

    Reducing tag entries to a single-key object can lose a value. The receiver contract must define representation, and readonly view is not trusted identity.

    Control and entry list
    Ordered entries / repeated tag / mode browse
    Conversion and policy
    Repeated tag must remain ordered
    Operation result
    Not yet evaluated
  3. Title is not a separator

    The ampersand in Tea & Bread belongs to the title. The URL serializer uses %26 and + for spaces; manual splitting can change the meaning of an ordinary title.

    Control and entry list
    Ordered entries / repeated tag / mode browse
    Conversion and policy
    Repeated tag must remain ordered
    Operation result
    q=Tea+%26+Bread / decoded Tea & Bread
  4. String versus number

    With rawPage string 2, adding 1 produces string 21. Explicit Number conversion yields 3. The local difference does not justify deriving server limits or authority from browser appearance.

    Control and entry list
    String 21 / explicit number 3
    Conversion and policy
    Repeated tag must remain ordered
    Operation result
    q=Tea+%26+Bread / decoded Tea & Bread
  5. Retain server rules

    The server applies the string query and queryMax 40 contract; it must obtain user or tenant binding from trusted context. Client readonly state or a closure does not create that context.

    Control and entry list
    String 21 / explicit number 3
    Conversion and policy
    Type/size/meaning / independent server authority
    Operation result
    q=Tea+%26+Bread / decoded Tea & Bread
  6. Retain data meaning

    Retaining entry order, repeated fields, submitter and conversion preserves search meaning. Data correctness is not server permission; the two results are verified separately.

    Control and entry list
    String 21 / explicit number 3
    Conversion and policy
    Type/size/meaning / independent server authority
    Operation result
    Data preserved / server permission separate

Local cancellation

  1. Constraint block

    The constraint-denied row has constraintValid false and network false. Local feedback in normal submission does not mean the server received or rejected a request.

    Control and entry list
    Constraint false / network false
    Conversion and policy
    Not yet evaluated
    Operation result
    Not yet evaluated
  2. Listener cancellation

    Listener-cancel passes constraints but has listenerCancel true and manualFetch false. Cancelling default navigation keeps network false; validation and event decisions are separate.

    Control and entry list
    Constraint false / network false
    Conversion and policy
    Listener cancelled / no manual fetch
    Operation result
    Not yet evaluated
  3. Absent server result

    Neither local branch can claim a server response or successful query validation. An unchanged UI is not rejected server mutation; no request was created.

    Control and entry list
    Constraint false / network false
    Conversion and policy
    Listener cancelled / no manual fetch
    Operation result
    No request / no server validation evidence
  4. Fetch handler difference

    Fetch-handler cancels default navigation but creates network activity through manualFetch true. A cancelled event is not always network-free; the handler continuation matters.

    Control and entry list
    Cancelled default / explicit fetch true
    Conversion and policy
    Listener cancelled / no manual fetch
    Operation result
    No request / no server validation evidence
  5. Bind the response correctly

    Navigation HTML enters a new-document path; fetch JSON goes through the handler body and textContent path. Headers do not prove a completed DOM update; Tea & Bread remains text.

    Control and entry list
    Cancelled default / explicit fetch true
    Conversion and policy
    Navigation HTML ≠ fetch handler DOM
    Operation result
    No request / no server validation evidence
  6. Separate local and remote results

    Cancellation, request, body and UI binding are separate stages. A closure producing Book: Tea & Bread is a local function result, not async response correlation or a server grant.

    Control and entry list
    Cancelled default / explicit fetch true
    Conversion and policy
    Navigation HTML ≠ fetch handler DOM
    Operation result
    Local computation ≠ response authority

ASSUMPTION · BOUNDARY · CONTROL

Mistaking client state for server authority

A required q field gives feedback for empty input on the selected browser’s normal submission path. A readonly or hidden presentation does not justify treating that value as a server-trusted subject or tenant. The trust boundary belongs at the request receiver, which decodes entries and checks shape, size, business meaning and server-owned identity context. This Red perspective does not manipulate a real form; it reasons about the assumption separating UI values from trusted context. Native and fetch branches must use the same server rule.

A local transformation can silently lose data

Reducing repeated tag entries to a single-key object, forgetting the submitter mode, or decoding plus incorrectly changes an ordinary request’s meaning. The ampersand in Tea & Bread is part of a title and must not remain a field separator in serialized data. Unintentionally equating the string "2" with number 2 can also distort limits or UI calculations. A closure does not automatically correlate an asynchronous response with the right search; reply order and correlation require design. In constraint-denied and listener-cancel branches, the model retains no request and an unchanged server card, rather than recording successful server validation. An unchanged card alone in a real trace would also require capture coverage.

3. Blue · Secure development & defense

Read every scenario without motion

Entry roundtrip

  1. Select ordered entries

    The form ledger supplies authored controls, entries and branch predicates; URLSearchParams produces local encoding. In an actual browser observation, the browser produces submitter/constraint/submit events, the server produces q checks/read results, and the client handler produces response parsing/textContent outcomes. Local-stop branches do not reach the server producer. Entries carry q, two tags, view and mode in order. This text-only profile has no file/multipart behavior; inventory and submitter define the bounded normal search data.

    Form ledger
    q / tag web / tag http / view / mode
    Contract review
    Not yet evaluated
    Regression result
    Not yet evaluated
  2. Encoding control

    The encoded representation is compared with URLSearchParams. Decoding must recover Tea & Bread and ordered web/http tags without confusing separators with data.

    Form ledger
    q / tag web / tag http / view / mode
    Contract review
    Roundtrip q + both tags + mode
    Regression result
    Not yet evaluated
  3. Local type control

    String 21 and number 3 are separate expected results. A const object title can become Bread & Tea; a const binding does not make object data immutable or trusted.

    Form ledger
    q / tag web / tag http / view / mode
    Contract review
    Roundtrip q + both tags + mode
    Regression result
    Coercion/mutation expectations separate
  4. Two response paths

    Native HTML carries Tea & Bread, while fetch JSON title is Tea & Bread. HTML parsing and textContent are different interpreters; output context is selected separately from representation.

    Form ledger
    HTML escaped / JSON string / text binding
    Contract review
    Roundtrip q + both tags + mode
    Regression result
    Coercion/mutation expectations separate
  5. Compare four branches

    Normal navigation and fetch-handler have network true; constraint-denied and listener-cancel false. The server card stays unchanged in the latter pair without claiming server rejection.

    Form ledger
    HTML escaped / JSON string / text binding
    Contract review
    Two network branches / two local stops
    Regression result
    Coercion/mutation expectations separate
  6. Report bounded evidence

    Local data, encoding and function results can be calculated. Browser control inclusion, submit events, navigation and DOM updates need separate observation; Node results do not inherit those proofs.

    Form ledger
    HTML escaped / JSON string / text binding
    Contract review
    Two network branches / two local stops
    Regression result
    Native data known / browser stages separate

Handler gap

  1. Title-only observation

    The form ledger supplies authored controls, entries and branch predicates; URLSearchParams produces local encoding. In an actual browser observation, the browser produces submitter/constraint/submit events, the server produces q checks/read results, and the client handler produces response parsing/textContent outcomes. Local-stop branches do not reach the server producer. The review sees only the title Tea & Bread, without knowing whether navigation or a fetch handler ran. The same text can come from two different response and UI paths.

    Form ledger
    Title known / response path missing
    Contract review
    Not yet evaluated
    Regression result
    Not yet evaluated
  2. Do not treat display as authority

    A readonly control or correct heading does not identify server subject/tenant binding. Without response and handler-body evidence, UI text is not successful remote validation.

    Form ledger
    Title known / response path missing
    Contract review
    Visible title ≠ server context evidence
    Regression result
    Not yet evaluated
  3. Retain the unknown stage

    Submission mode, request receipt and body completion remain UNKNOWN for this observation. Normal entries are expectations, not substitutes for missing handler records.

    Form ledger
    Title known / response path missing
    Contract review
    Visible title ≠ server context evidence
    Regression result
    Mode/receipt/body completion UNKNOWN
  4. Required correlation

    Selected submitter, entries, cancellation and manualFetch must be associated with the same work. Response status/body and UI update records answer the later stage separately.

    Form ledger
    Needed: submitter/entries/branch/response
    Contract review
    Visible title ≠ server context evidence
    Regression result
    Mode/receipt/body completion UNKNOWN
  5. Bound the closure result

    Book: Tea & Bread and inner/outer scope examples explain local JavaScript behavior. They do not automatically prove event order or association with the correct request.

    Form ledger
    Needed: submitter/entries/branch/response
    Contract review
    Local function result / correlation separate
    Regression result
    Mode/receipt/body completion UNKNOWN
  6. Boundary for new review

    New records must verify normal navigation, fetch and local cancellation separately. This incomplete event adds no remote-success claim beyond observing the correct title.

    Form ledger
    Needed: submitter/entries/branch/response
    Contract review
    Local function result / correlation separate
    Regression result
    Retain title / collect scoped branch evidence

IMPLEMENTATION · SECURITY CONTROL · VERIFICATION

Explicit contracts for entries, conversion and policy

The form ledger supplies authored controls, entries and branch predicates; URLSearchParams produces local encoding. In an actual browser observation, the browser produces submitter/constraint/submit events, the server produces q checks/read results, and the client handler produces response parsing/textContent outcomes. Local-stop branches do not reach the server producer. Inventory control name/type/checked/disabled/readonly state and the submitter effect, preserving repeated fields as an entry list. The selected GET profile encodes q/tag/mode with URLSearchParams; decoding must recover the same title and ordered tags. Files and multipart need separate contracts and are not modeled by this text-only fixture. Normalization returns a separate value from the raw string; Number conversion, finite/domain checks and string output are distinct steps. The server obtains subject/tenant from its trusted context rather than from a form member.

Separate local DOM outcomes from response receipt

A native navigation response follows a new-document parser path, while a fetch response follows handler body reading and UI update. Receiving headers/status does not complete body parsing or DOM rendering. The fetch handler assigns the ordinary book title through h2.textContent, which does not need pre-escaped HTML. Function/scope examples can run on plain data in Node, but a passing closure test does not execute submit events, constraint validation or a DOM parser. Regression branches separately record wire/local decisions for native and fetch success, an invalid constraint and listener cancellation.

NOW APPLY IT TO THE CASE

Does a readonly field or closure make input trusted?

The Atlas search form carries Tea & Bread, two tag values and the selected browse submitter. Browser navigation and a fetch handler share the server rule but use responses through different UI paths. Client validation or listener cancellation can stop the flow before a request exists.

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

Atlas form entry and handler ledger

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

Read the raw artifact and field explanations
{
  "profile": {
    "action": "https://atlas.example.org/books",
    "method": "GET",
    "encoding": "application/x-www-form-urlencoded",
    "selectedSubmitter": "browse",
    "textOnly": true,
    "serverReadPermissionDeclared": true,
    "actualDOM": false,
    "actualSubmission": false
  },
  "controls": [
    {
      "name": "q",
      "type": "text",
      "value": "Tea & Bread",
      "disabled": false,
      "readonly": false
    },
    {
      "name": "tag",
      "type": "text",
      "value": "web",
      "disabled": false
    },
    {
      "name": "tag",
      "type": "text",
      "value": "http",
      "disabled": false
    },
    {
      "name": "view",
      "type": "text",
      "value": "cards",
      "readonly": true,
      "disabled": false
    },
    {
      "name": "draft",
      "type": "text",
      "value": "ignored",
      "disabled": true
    },
    {
      "name": "",
      "type": "text",
      "value": "unnamed",
      "disabled": false
    },
    {
      "name": "archived",
      "type": "checkbox",
      "value": "yes",
      "checked": false,
      "disabled": false
    },
    {
      "name": "mode",
      "type": "submit",
      "value": "browse",
      "id": "browse",
      "disabled": false
    },
    {
      "name": "mode",
      "type": "submit",
      "value": "print",
      "id": "print",
      "disabled": false
    }
  ],
  "entries": [
    [
      "q",
      "Tea & Bread"
    ],
    [
      "tag",
      "web"
    ],
    [
      "tag",
      "http"
    ],
    [
      "view",
      "cards"
    ],
    [
      "mode",
      "browse"
    ]
  ],
  "encoded": "q=Tea+%26+Bread&tag=web&tag=http&view=cards&mode=browse",
  "server": {
    "queryType": "string",
    "queryMax": 40,
    "responseTitle": "Tea & Bread",
    "nativeHTML": "<h2>Tea &amp; Bread</h2>",
    "fetchJSON": {
      "title": "Tea & Bread"
    }
  },
  "branches": [
    {
      "case": "normal",
      "constraintValid": true,
      "listenerCancel": false,
      "manualFetch": false,
      "network": true,
      "mode": "navigation"
    },
    {
      "case": "fetch-handler",
      "constraintValid": true,
      "listenerCancel": true,
      "manualFetch": true,
      "network": true,
      "mode": "fetch"
    },
    {
      "case": "constraint-denied",
      "constraintValid": false,
      "listenerCancel": false,
      "manualFetch": false,
      "network": false,
      "mode": "none"
    },
    {
      "case": "listener-cancel",
      "constraintValid": true,
      "listenerCancel": true,
      "manualFetch": false,
      "network": false,
      "mode": "none"
    }
  ],
  "jsFixtures": {
    "rawPage": "2",
    "stringPlusOne": "21",
    "explicitNumberPlusOne": 3,
    "objectTitle": "Tea & Bread",
    "constObjectAfterUpdate": "Bread & Tea",
    "closurePrefix": "Book: ",
    "closureResult": "Book: Tea & Bread",
    "blockOuter": "outer",
    "blockInner": "inner"
  },
  "boundaries": {
    "clientValidationGrantsServerPermission": false,
    "readonlyIsTrustedIdentity": false,
    "closureMakesInputTrusted": false,
    "fetchEqualsNavigation": false
  }
}
controls
Fixed text-only control inventory with explicit checkbox and submitter inclusion.
entries
Ordered repeated tag entries are preserved.
encoded
UTF-8 form URL-encoding representation of an ordinary title.
branches
Constraint/event/default navigation differs from explicit fetch.
jsFixtures
Finite native type/coercion/function/closure/scope results.

Original inert text-only form ledger; native Node data and URL encoding can be checked, without executing browser controls, events, FormData, navigation or DOM.

Two reality checks

Readonly and hidden fields are server-trusted values.

Those UI features prove neither permission nor identity; server-owned context is separate.

fetch is the same navigation as form submission.

Default submission can be cancelled; fetch follows a separate request/body/handler/UI path.

YOUR TURN

Work through this story.

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

The submit listener cancels navigation, but manualFetch=true. Does that imply network=false in this branch?

  1. No. Navigation is cancelled, but network=true and mode=fetch.
  2. Yes. preventDefault forbids every possible request.
Read the explained answer

No. Navigation is cancelled, but network=true and mode=fetch. — Cancelling the default action stops navigation. A separate manual fetch can still make a request; fetch is not the navigation flow.

Why is readonly view included in entries while disabled draft and unchecked archived are omitted?

Selected lesson artifact fields; teaching example

controls[3]
{"name":"view","type":"text","value":"cards","readonly":true,"disabled":false}
controls[4]
{"name":"draft","type":"text","value":"ignored","disabled":true}
controls[6]
{"name":"archived","type":"checkbox","value":"yes","checked":false,"disabled":false}
entries
[["q","Tea & Bread"],["tag","web"],["tag","http"],["view","cards"],["mode","browse"]]
  1. Readonly is never submitted; every checkbox is always submitted.
  2. Readonly restricts editing; disabled and unchecked controls do not enter this entry list.
Read the explained answer

Readonly restricts editing; disabled and unchecked controls do not enter this entry list. — view=cards can be submitted. draft is omitted because it is disabled; archived is omitted because it is unchecked. These conditions do not establish trusted server identity.

For rawPage="2", stringPlusOne="21" but explicitNumberPlusOne=3. Explain that difference and why client validation does not grant server permission.

Read the explained answer

The form value "2" is a string; + with a string can concatenate. Explicit conversion permits the numeric calculation 2+1=3. Client validation can constrain submission, but the server still checks type/range and permission. Readonly or being carried in a closure does not make input trusted. This example explains fixed public-book search fields without performing a real submission.

□ I separated string concatenation from numeric addition.

□ I did not infer server permission from client validation or readonly.

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

Sources and scope