Getting started
This walkthrough runs the actual CLI against a tiny, repository-owned static
demonstration. It is credential-free and uses only numeric loopback
127.0.0.1. It demonstrates command behavior and report reading, not detection
accuracy or the security of an application.
One-command development demo
With Python 3.12.4 or newer, a reviewed current tools checkout, and an already acquired local development executable, run:
python3 scripts/local_demo.py --binary ./target/release/termivar --output local-demo-output
Windows PowerShell:
python scripts/local_demo.py --binary .\target\release\termivar.exe --output local-demo-output
if ($LASTEXITCODE -ne 0) { throw "Local demo did not pass; inspect its private evidence" }
Select the actual binary path on your machine. The output directory must be
fresh, and its parent must already be a trusted, private user-owned directory.
The helper does not acquire or build a binary. Keep local_demo.py,
first_use.py, and report_bundle_example.py together in the tools checkout.
The command starts the fixed harmless numeric-loopback fixture, runs one
scan --profile web-review --report-dir assessment, and checks that a repeated
write is refused before target activity. It then stops the fixture and runs
the executable's offline Report Verify and self-Compare commands. Success
requires a complete, unchanged three-file bundle, matching integrity checks,
and all source item identities in the four-array comparison. It does not
request optional review capabilities or accept a target URL.
Open local-demo-output/bundle/assessment.html yourself after success; the
helper never opens a browser. demo-evidence.json and bounded captures/
remain private inside the selected output directory. Captures contain local
command paths and are not automatically safe to publish. The executable's
version and SHA-256 are observed; optional --source-ref FULL_SHA_OR_VERSION_TAG
is only an operator declaration, not source authentication. Trusted-parent and
quiescent-file assumptions apply; hashes are not an atomic filesystem snapshot.
A host-blocked executable or a binary without the required report commands produces a failed result with available private evidence. Leave host protections enabled. This demo qualifies its fixed command/report flow, not detection accuracy, a feature-enabled package, or the complete S16 program qualification. The pinned prerelease walkthrough below retains its historical identities.
Choose one binary first:
- Published prerelease: v0.10.0-alpha.2: manually download, verify, inspect, and extract your platform archive. No Rust toolchain is required.
- Preserved pinned source example: 0.10.0-alpha.2:
build package
termivar-clifrom the reviewed full commita29ba40c8cfdc7d0385431ea4d9e374e213ca4e0in a separate source tree.
The historical alpha.1 archives do not include maintenance from PRs #109–#111. Alpha.2 includes those changes, but neither release is independently audited or production-ready. The distribution comparison records the exact release identity and build features.
Prerequisites
Use Python 3.12.4 or newer and a reviewed Git checkout containing this
guide and scripts/first_use.py. Run the examples from that tools checkout,
not from the separate pinned source tree. Git is needed to obtain the scripts;
they are not included in the binary archive. Record the tools checkout revision
with git rev-parse HEAD and inspect the script before running it.
The runner takes an already acquired local executable. It never downloads, installs, compiles, or updates tools. Its output directory must not exist, and its parent must already exist in a trusted, private user-owned location. No administrator privileges or global PATH change is needed.
Once the binary and tools are acquired, exercise traffic stays on loopback. If HTTP, HTTPS, or all-proxy environment configuration is present, the runner refuses to begin instead of changing proxy policy. Host security controls stay enabled; a blocked executable is an unexecuted step, not a reason to bypass App Control, antivirus, or Gatekeeper.
Run the local walkthrough
For the verified, locally extracted published prerelease:
Linux/macOS:
python3 scripts/first_use.py \
--binary ./termivar-alpha2/termivar \
--output first-use-release-output \
--source-ref v0.10.0-alpha.2 \
--build-features release-bundle \
--expect-version 0.10.0-alpha.2
Windows PowerShell:
python scripts/first_use.py --binary .\termivar-alpha2\termivar.exe --output first-use-release-output --source-ref v0.10.0-alpha.2 --build-features release-bundle --expect-version 0.10.0-alpha.2
if ($LASTEXITCODE -ne 0) { throw "First-use acceptance did not pass; inspect its diagnostics" }
The runner first captures --version, --help, and scan --help. It then
binds its own allocated loopback port before checking readiness. There is no
target-URL option. The fixture serves only fixed / and /example documents
with simple GET/HEAD behavior and a fixed response for unknown paths. It never
serves your checkout, home directory, or other files.
There are no forms, query-driven endpoints, credentials, callbacks, external links/assets, or external fetches. The runner starts and stops only its own fixture and CLI child. Success, error, and cancellation paths request cleanup; any recorded cleanup failure is a failure to investigate, not a passed run. It never kills an unrelated process or reclaims an occupied port.
Development source binary
After the separate pinned source build, run from the tools checkout with the default source binary:
Linux/macOS:
python3 scripts/first_use.py \
--binary ../termivar-source-a29ba40/target/release/termivar \
--output first-use-source-output \
--source-ref a29ba40c8cfdc7d0385431ea4d9e374e213ca4e0 \
--build-features default \
--expect-version 0.10.0-alpha.2
Windows PowerShell:
python scripts/first_use.py --binary ..\termivar-source-a29ba40\target\release\termivar.exe --output first-use-source-output --source-ref a29ba40c8cfdc7d0385431ea4d9e374e213ca4e0 --build-features default --expect-version 0.10.0-alpha.2
if ($LASTEXITCODE -ne 0) { throw "First-use acceptance did not pass; inspect its diagnostics" }
The default CLI feature list is empty; its scanner dependency enables
scanning and reporting. If you deliberately built the same source with
release-bundle, use that separate executable path, declare
--build-features release-bundle, and choose another fresh output directory.
Compiling optional capabilities does not enable their runtime actions.
No optional review flags are used here.
The runner measures the executable hash and checks the actual version. The
source ref and feature set are caller declarations, not inferred or attested
by --version. Record the real revision and build command; never relabel a
source build as release-archive acceptance.
Inspect compiled CLI capabilities
A development binary whose top-level help lists capabilities can describe
its own fixed CLI surface without a target, credentials, repository, Cargo,
Git, Python, or scanner startup:
termivar capabilities
termivar capabilities --format json
The synchronous command reports the exact termivar-cli feature gates compiled
into that executable. compiled does not mean selected, exercised,
runtime-ready, production-ready, or officially released: profiles and review
options still require their listed explicit inputs. The package version and
feature states are self-reported build metadata, not source authentication.
The CLI's default feature list is empty, while its unconditional scanner
dependency still provides scanning and reporting. The release-bundle
composition marker compiles artifact-adapter, normalization-resilience,
graphql-review, openapi-review, rest-review, and
authorization-review in the published alpha.2 composition. The current
untagged alpha.3 development composition also compiles the wordpress-review
Preview. It does not activate any of them: WordPress still requires explicit
--profile web-review --wordpress-review. Current alpha.3 excludes
control-reference-mapping, supplied-session-review,
secret-exposure-review, tls-negotiation-review, tls-observation,
jwt-policy-review, jwt-target-acceptance-review,
recon-ct-provider, recon-snapshot-import, ssrf-oast-review,
template-evaluation-review, websocket-review,
xml-external-entity-owned-https-test-profile,
xml-external-entity-review, legacy-scanner, api-adapter, and
proxy-adapter. The stock curated inventory is therefore exactly 25 known
identities: eight compiled (the release-bundle marker plus seven members) and
seventeen excluded. The owned-HTTPS test profile adds no CLI option and remains
outside default, release-bundle, and published packages.
Enabling the seven current member features individually can therefore produce
the same member surface states while release-bundle remains not_compiled.
These preserved excerpts are from real Windows x86_64 development binaries
built in separate directories from source implementation commit
5bd1260e1d9f57226046a6a955662c32fcad6464 on 2026-09-06. Both reported
0.10.0-alpha.2, 20 surface records, the historical six-member bundle
composition, and runtime_execution: not_performed:
# cargo build --locked -p termivar-cli
# executable SHA-256: 55d6eec93eb21869ae134e4572564f315430b9b3ee03ab559ec506474493a72d
[compiled] Compiled CLI capabilities (command, preview; implemented)
[compiled] Bounded deterministic scan (command, preview; implemented)
[not_compiled] REST read-only review (scan_option, preview; implemented)
[not_compiled] HTTP API adapter (command, unsupported; unsupported_stub)
# cargo build --locked -p termivar-cli --no-default-features --features release-bundle
# executable SHA-256: 35ebb7a766653c94263f589c12e0fda71f44d551a192244de7a10b739b782782
release-bundle=compiled
artifact-adapter=compiled
authorization-review=compiled
graphql-review=compiled
normalization-resilience=compiled
openapi-review=compiled
rest-review=compiled
ssrf-oast-review=not_compiled
The hashes identify the two files that were executed; they are not build
attestations. The historical v0.10.0-alpha.1 archives and earlier pinned
a29ba40c8cfdc7d0385431ea4d9e374e213ca4e0 source walkthrough predate this
command; the published alpha.2 archives include it. Those published archives
report ssrf-oast-review=not_compiled, as shown above. The published alpha.2
tag retains the historical source defect; current development source corrects
candidate/replay polling-phase completion. Compiling ssrf-oast-review still
does not activate it or raise its maximum result above NeedsReview /
KnowledgeOnly.
Review one supplied JWT against a local policy
The unreleased development source has a non-default jwt-policy-review feature.
It is not part of the seven-member release-bundle or published alpha.2
archives. Build a feature-specific executable:
cargo build --locked -p termivar-cli --no-default-features \
--features jwt-policy-review
Then select one strict local policy, one local ES256 public JWK, and exactly one token source:
termivar scan <AUTHORIZED_EXACT_ROOT> \
--profile web-review \
--jwt-policy jwt-policy.toml \
--jwt-public-jwk public-key.jwk \
--jwt-token-file compact-token.txt \
--report-dir jwt-assessment
Use --jwt-token-env ENV_VAR or --jwt-token-stdin instead of the file option
when appropriate; never put the token in argv. The local JWT evaluator is
transport-free: it does not retrieve a remote key or add a target request. Unless
the separate non-bundled jwt-target-acceptance-review feature and explicit
--jwt-target-acceptance-policy are selected, it does not send or replay the
token. The surrounding scan retains its ordinary authorized web
requests. It supports only bounded compact ES256 JWS input and one strict local
P-256 public JWK. The V1 policy requires an explicit non-secret
policy_revision plus intended typ, issuer, and
audience bindings; none of these three checks can be disabled. Preflight
validates its closed structure and canonical 32-byte coordinates, while curve
membership and signature validity are decided by local verification. A parsed
token is not thereby signature-verified, and local verification does not mean a
target accepted the token. The optional target child uses six bounded
valid/anonymous/invalid candidate/replay requests against one exact authorized
JSON resource, but it does not authenticate the issuer, prove authorization
bypass, validate impact, or emit a Confirmed finding. See the
local JWT and optional target-acceptance contract.
Map completed items to reviewed control references
The unreleased development source has a non-default
control-reference-mapping feature. It is outside the seven-member
release-bundle and published alpha.2 archives. Build a feature-specific
binary, then select the option with an explicit web-review profile:
cargo build --locked -p termivar-cli --no-default-features \
--features control-reference-mapping
termivar scan <AUTHORIZED_TARGET> \
--profile web-review \
--control-reference-mapping \
--report-dir assessment-with-control-references
The mapper runs only over completed typed assessment items. It adds zero target
or provider requests and never retrieves standards content at scan time. The V1
built-in catalogue includes attributed OWASP Top 10:2025 IDs/exact title
references and original Termivar rationale. PCI DSS 4.0.1 and ISO/IEC
27001:2022+Amd 1:2024 are bibliographic rights_deferred sources with no
embedded control mappings. KVKK Law No. 6698 Article 12 and Guide No. 72 (April
2025) are relevant technical context with applicability unestablished.
The output does not change item severity, disposition or claim authority. It is not a score, pass/fail result, certification, legal advice or compliance determination, and absence of an item is not control fulfilment. See the versioned mapping contract.
Import a bounded local reconnaissance snapshot
The development-only recon-snapshot-import feature adds one explicit,
transport-free reference input to web-review:
cargo run --locked -p termivar-cli --no-default-features \
--features recon-snapshot-import -- \
scan https://owned.example/ --profile web-review \
--recon-snapshot recon-snapshot.json \
--report-dir assessment-recon
The strict V1 document contains only source-qualified CT-name, DNS-history, service-banner-product and reputation-label hypotheses. Import does not contact those assets or providers, extend target scope, or create assessment items. Its byte digest identifies the supplied bytes without authenticating their source, rights, freshness, completeness or truth. See the local recon snapshot contract.
Review one explicitly authorized WebSocket endpoint
The development-only websocket-review feature is not part of default, the
seven-member release-bundle, or the published alpha.2 archives. Build a
feature-specific executable and supply one strict local policy:
cargo build --locked -p termivar-cli --no-default-features \
--features websocket-review
termivar scan https://owned.example/app/ \
--profile web-review \
--websocket-review-policy websocket-review.json \
--report-dir assessment-websocket
A minimal policy shape is:
{
"schema": "security.websocket-review-policy/v1",
"target_authorized": true,
"messages_read_only_acknowledged": true,
"message_content_is_non_secret": true,
"endpoint": "wss://owned.example/app/socket",
"origin_mode": "application_origin",
"subprotocol": null,
"compression": false,
"reconnect": false,
"messages": [
{
"id": "status",
"text": "{\"type\":\"status\"}",
"expected_response": {
"sha256": "a29ee2b15c494311c52521766e44af56a3ad2248e7a8ab465e5206463c13d288",
"length": 15
}
}
],
"limits": {
"max_inbound_message_bytes": 4096,
"max_outbound_message_bytes": 4096,
"max_messages": 1,
"max_control_frames": 4,
"max_wall_time_ms": 3000
}
}
The example is a template, not an executable fixture: replace the endpoint,
message, digest, length and limits with independently reviewed values for an
owned application. The three booleans record operator assertions; Termivar does
not verify that a message is side-effect-free or that its content is non-secret.
V1 does not support credentials or other secret material in message bodies.
Each message id is a non-secret revision handle and must change whenever that
message or its expected-response semantics change. Public report references do
not hash either private byte sequence. By default V1 opens one isolated
anonymous connection. When both websocket-review and
supplied-session-review are compiled, an operator may explicitly add
--websocket-supplied-session to one V1 Authorization-header session policy
with exactly one protected resource. That composition runs startup health,
resource staging, one credentialed WebSocket exchange and terminal health;
both checkpoints must be healthy before the declared context and resource are
qualified. Without the flag, the WebSocket remains anonymous. V2 cookie and V3
form-login policies are rejected before secret/output acquisition, and the
same session cannot feed both the WordPress and WebSocket consumers.
Both paths send at most eight sequential text messages, allow at most 64 KiB
of application payload in each direction, and stop at ten seconds or the
smaller parent deadline. Plain ws is accepted only for numeric-loopback test
fixtures; other targets require wss with normal certificate validation.
There is no endpoint discovery, retry, reconnect, redirect following,
compression, proxy inheritance, cookie forwarding, arbitrary credential
forwarding, or HTTP/2 extended CONNECT. The report distinguishes raw
socket transport accounting from complete application-message bytes. Binary
application messages fail closed. The
backend does not expose a reliable physical continuation-frame count, so it is
reported as unavailable; message/frame-size ceilings, observable control-frame
events and the absolute deadline still bound work. A client-selected Origin
does not prove a browser exploit path, and an Upgrade or expected-response
match does not establish authentication, authorization, availability, source
authenticity, a vulnerability, exploitability or impact. Session checkpoints
qualify only the declared bounded context window; they do not prove continuous
authentication.
See the WebSocket review contract.
Live assessment progress
The unreleased 0.10.0-alpha.3 development source adds opt-in live progress
for an explicit web-review assessment:
termivar scan <AUTHORIZED_TARGET> \
--profile web-review \
--progress \
--format json > assessment.json 2> progress.log
The published v0.10.0-alpha.2 archives do not contain --progress. The flag
is rejected for no-profile invocations (including a bare decision-scan) and
for baseline before secret loading, output reservation, or network
construction. The decision-scan alias accepts it when --profile web-review
is explicit. It does not enable a scanner capability or add requests.
Progress is a bounded, best-effort presentation channel on stderr. Report
Markdown/JSON on stdout and files selected with --report-output or
--report-dir keep their existing bytes and schemas. Each ASCII line begins
with [progress] and names a coarse lifecycle state such as
assessment_running, composing_report, rendering_report,
writing_stdout, publishing_report, or a terminal state. Periodic running
snapshots are sampled once per second; a slow sink may cause intermediate
snapshots to be coalesced or dropped rather than delaying the assessment.
The counters are explicitly last-observed accounting snapshots.
accounted_requests is cumulative parent-broker request accounting, including
already-accounted child activity; it is not a response count.
accounted_active_verifications is a cumulative charged-verification count,
not current concurrency. subjects_started counts child-runtime execution
boundaries; subjects_processed counts subject states committed for report
projection, not successful subjects or findings. Neither predicts future work.
Before the first runtime checkpoint, unavailable counts are shown as unknown
rather than being presented as measured zeroes.
Elapsed milliseconds use a separate monotonic presentation clock. It starts
after runtime construction, immediately before the one assessment analysis,
and ends when the terminal line is prepared after the selected stdout or file
publication succeeds or fails. It therefore includes report composition,
rendering, publication, and progress handoff time; it does not replace, extend,
or alter the runtime deadline clock.
There is no percentage, ETA, endpoint, finding title, severity, vulnerability
verdict, or raw evidence in this stream. A terminal completed state means the
selected report output also completed; render or publication failure remains a
distinct failed state. On bundle-publication failure, the terminal record can
state whether the manifest commit point was reached, without exposing the
directory. Progress-write failure disables further presentation and does not
change the scan result. If an operating-system stderr write blocks forever,
one detached presentation worker may remain until process exit. A later
diagnostic using the same process stderr lock can then also wait behind that OS
write, so the command cannot promise bounded exit in this host-level failure.
The writer is never used for scan control or backpressure.
Opt in to WordPress evidence review in current development builds
The unreleased development source has a non-default wordpress-review build
feature. The current untagged alpha.3 release-bundle compiles the Preview, but
the ordinary default build and published alpha.2 archives do not. Build the
current development bundle deliberately:
cargo build --locked -p termivar-cli --no-default-features --features release-bundle
For a smaller feature-specific development build, the existing direct feature selection remains available:
cargo build --locked -p termivar-cli --no-default-features --features wordpress-review
Neither build command activates WordPress review. Runtime selection remains explicit.
Against an already running, authorized fixture or exact origin, select the review explicitly:
termivar scan <AUTHORIZED_EXACT_ROOT> \
--profile web-review \
--wordpress-review \
--wordpress-context <CONTEXT.json> \
--wordpress-advisories <CATALOGUE.json> \
--report-dir <NEW_REPORT_DIRECTORY>
Instead of the native Termivar catalogue, an already saved Wordfence V3 Production-format export can be selected explicitly:
termivar scan <AUTHORIZED_EXACT_ROOT> \
--profile web-review \
--wordpress-review \
--wordpress-plugins-json <WP_CLI_PLUGINS.json> \
--wordpress-themes-json <WP_CLI_THEMES.json> \
--wordpress-core-version-file <CORE_VERSION.txt> \
--wordpress-advisories <WORDFENCE_PRODUCTION.json> \
--wordpress-advisories-format wordfence-v3-production \
--wordpress-external-version-profile php-release-subset/v1 \
--report-dir <NEW_REPORT_DIRECTORY>
All local files are optional, but each requires --wordpress-review; the saved
inventory files conflict with --wordpress-context. External format selection
never fetches the feed or searches for an API key, and omitting it keeps the
native Termivar catalogue contract.
The optional external version profile is accepted only for an explicitly
selected local wordfence-v3-production file. Choose numeric-dotted/v1 or
php-release-subset/v1 to request that named Termivar interpretation. Omitting
the selector preserves the unresolved v4 behavior; selecting it produces the
strict v5 audit and records explicit_operator selection with source semantics
still not_established. There is no profile inference or fallback.
WordPress interpretation reuses the complete root HTML already obtained by the
assessment and adds no request or active verification. Generator metadata and
asset paths are hints rather than authenticated installation facts; the context
is an operator declaration, the catalogue is a supplied snapshot, and advisory
applicability stays audit-only. See the
WordPress evidence review contract and its clearly
labelled input examples.
Export one assessment in two formats
The published v0.10.0-alpha.2 binary and later development builds whose
scan --help includes --report-dir can create HTML and JSON from one completed
assessment:
termivar scan <AUTHORIZED_TARGET> \
--profile web-review \
--report-dir ./assessment-001
Use only an exact origin you are authorized to assess. The parent of
assessment-001 must already exist as a trusted, private, user-owned directory,
and assessment-001 itself must not exist. The command neither overwrites nor
reuses an existing file, directory, or link and does not create missing parent
directories. On Windows, the new directory inherits the parent's ACL.
Termivar checks the immediate parent is an existing non-link directory; the
operator supplies the trust/ownership assertion for that parent and its
ancestors.
A successful directory contains exactly assessment.html, assessment.json,
and manifest.json. The runtime runs once, composes one completed typed
assessment, and renders both report formats from it. manifest.json is
published last and records exact lengths and hashes for the other two files.
Those hashes identify bytes; they are not a signature or proof of scope. The
payload files can be visible while publication is in progress, so readers must
require and verify the final manifest rather than assume whole-directory atomic
visibility.
--report-dir requires explicit web-review and cannot be combined with
--report-format or --report-output. --format still selects only the
existing diagnostic encoding for an incomplete/failed run; it does not change
the bundle's fixed HTML and JSON formats. An incomplete run creates no
completion manifest. A crash can leave an incomplete directory, which must not
be silently reused.
The bundled JSON retains the normal assessment schema. Two deliberately chosen bundles can be compared offline:
termivar report compare \
--before assessment-001/assessment.json \
--after assessment-002/assessment.json \
--same-scope
The published alpha.2 archives include this option. The preserved alpha.1 archives and checked-in first-use captures do not. See the full bundle and manifest contract.
Verify a saved bundle offline
The published v0.10.0-alpha.2 binary and later development builds whose
report --help includes verify can check the fixed three-file bundle without
scanning, launching, or rendering the HTML:
# Text result.
termivar report verify --dir ./assessment-001
# Structured result.
termivar report verify --dir ./assessment-001 --format json
Exit 0 and integrity_match mean that the supported directory layout,
manifest contract, exact payload lengths and SHA-256 digests, and the completed
assessment JSON summary matched for the bytes read during this invocation.
Exit 1 and not_verified identify an incomplete, unsupported, unreadable, or
mismatched bundle with typed reason codes; checks prevented by an earlier
failure remain not_checked. Invalid CLI syntax exits 2.
Run verification only on a quiescent directory beneath trusted parent
directories. Termivar rejects a linked/reparse-point final directory and
non-regular payloads, but it does not prove every ancestor is trustworthy or
create an atomic filesystem snapshot. The command makes no application writes,
repairs, removals, or permission changes. It reads only manifest.json,
assessment.html, and assessment.json, hashes and validates the same captured
payload bytes, and initializes no scanner, credentials, provider, or network
client.
An integrity match is not a signature or source-authenticity result. It does not establish original target scope, finding accuracy, remediation, HTML safety, or HTML-to-JSON semantic equivalence. A consistently edited payload and manifest can still be internally consistent. For a control-reference audit it does not establish catalogue truth, source authenticity, applicability, legal meaning or control fulfilment. The HTML is never executed.
Once checked, compare two deliberately selected assessment payloads with the existing offline command:
termivar report compare \
--before assessment-001/assessment.json \
--after assessment-002/assessment.json \
--same-scope
The verifier checks one bundle's supported internal consistency; comparison
groups observations and separately relies on the operator's same-scope
assertion. See the
full verification contract.
The published alpha.2 archives contain both --report-dir and report verify;
the preserved alpha.1 archives contain neither.
Open the outputs
A passed run prints first-use: passed and retains these files in the selected
output directory:
| File | What it contains |
|---|---|
default.json |
Actual no-profile decision-scan/v1 operational output, not a findings report |
assessment.json |
Completed root web-review assessment from the existing JSON renderer |
assessment.html |
Completed root web-review assessment from a separate CLI execution using the existing HTML renderer |
provenance.json |
Binary hash/version, declared ref/features, host, fixture digest, exact command arguments, exit codes, timings, and output hashes |
captures/ |
Bounded stdout and stderr for each command, including failure cases |
Open the local HTML file in a browser or inspect the JSON in an editor. The HTML is self-contained; it does not add scripts, tracking, or external assets. The JSON and HTML runs have separate invocation records. Do not assume that independent executions share IDs, timings, or evidence.
See the genuine, version-labelled example reports for the tested binary, native platform, exact fixture/report hashes, and a guide to the actual observations. Downloadable platform archives are not evidence that each architecture was executed. A local isolated-directory run or hosted CI run is not a clean-machine certification.
Read the result accurately
The checked-in Windows alpha.1 sample completed the root assessment and
contains four informational, observation-based items: four named response
headers were not observed. Those are observations from the demonstration, not
confirmed vulnerabilities.
Informational records an observation. NeedsReview asks a human to review
evidence without confirming a vulnerability; the sample does not manufacture
such an item. An action's Success outcome means that its objective was
achieved, not that a vulnerability was confirmed.
A default scan is an operational path. An ordinary stop can be complete or
halt with no_eligible_action; it is not an assessment findings report.
A begun-but-incomplete assessment is different from a completed report with no
items. The absence of reported observations does not mean “secure,” “clean,” or
“not vulnerable.”
No optional review flags were supplied. Capabilities that the report does not name were not demonstrated by this fixture; the guide does not invent per-capability “passed” or “not vulnerable” statuses. This fixture cannot establish detection accuracy, exploitability, or comprehensive coverage. See the report contract and operational JSON contract.
What acceptance checks
The same runner checks the existing interfaces without modifying CLI behavior:
- Actual version and documented help syntax.
- The no-profile operational path and completed root JSON/HTML assessments.
- Refusal to replace an existing report: its original bytes remain unchanged.
- A separate preflight failure: nonzero exit and no success report or fixture I/O.
- A begun local
/examplerun that returns the existing incomplete diagnostic after fixture I/O, with no partial success report. - Bounded captures, report privacy, and cleanup of the runner's own resources.
Expected failing CLI cases are recorded individually; they do not mean the
overall acceptance failed when their refusal/incomplete behavior matches the
checks. An unexpected failure makes the runner exit nonzero. Inspect
provenance.json and captures/ when they exist; early prerequisite failures
may occur before an output directory is created. Do not reuse a prior output
directory or treat an earlier successful report as the result of a failed run.
Raw provenance and diagnostics may contain local paths. Keep them local or
review them before sharing. Published sample provenance replaces only the
executable path fields listed in its normalization record with
<LOCAL_BINARY>; report bytes, observations, counts, completion state, and
errors are not rewritten. Raw captures are retained as local/CI evidence.
Further reading
- Distribution and build choices
- Feature lifecycle and runtime map
- Reporting and architecture
- Versioned control-reference mapping
- Local reconnaissance snapshot import
- Credential-input limits and maintenance ledger, including the current F3 phase-completion repair and historical archive boundary
- Scanner SDK, plugin contracts, and preserved scanner history
- Testing and contribution guide