Security inventory delivery evidence¶
Task: a73430a7-ce0f-4ab7-9950-5e0fb53a1ac0, frozen version 14.
Date: 2026-10-10. Repository: h8v6/heyaira.
Branch: heyaira/a73430a7; current dispatch base: 37f4561.
That base already contains the first inventory from the v2 attempt (original
code snapshot 7d9d2ca). This delivery revalidates and updates those documents;
it does not claim their first creation under v14. The RESULT receipt records
full base and result commit IDs; the containing commit identifies this evidence.
Method and coverage¶
server_identity matched the assigned resource, project and instance;
task_get read the exact historical version 14 before editing.
The work contract v4 was read from HeyAira memory: dispatched Bridge workers
use their frozen contract and task_result, without interactive claiming,
status changes or continuity_context. The initial working tree was clean.
The repeated source scan covered 138 files: compose.yaml,
src/heyaira/config.py, and text files under ops/, scripts/,
.github/workflows/ and docs/, excluding docs/security/, symlinks and
environment files. There are no docs/ops* files; the named runbooks and
docs/operations/ supply those sources. Targeted reads checked Compose
consumers, config defaults, vault policy/overlays, SSH/sudo restore commands,
CI authority, OAuth/iOS scopes and lifetimes, static-token role intersection,
Bridge keys, and R2 custody.
No production probes, provider dashboards, local credential stores, Keychain, environment files or secret files were opened. Paths in the register are source references, not verified production custody. The server identity check established MCP provenance only; it does not attest the deployed configuration.
Coverage and credential checks¶
A Python scan extracted uppercase symbols from the 138 files and selected
passwords, secrets, token files, private/APNs keys, database URLs/users, age
keys, access/application/consumer keys, link key IDs, SES config and GitHub
job-token names. It found 48 matching symbols. Two were not credentials:
the deployment script's directory-mode variable and an explicitly synthetic
claim placeholder. The other 46 names all occur in register.md:
source_files=138; matched_symbols=48; noncredential_symbols=2
credential_symbols=46; missing_symbols=0
Manual checks cover classes that env-name extraction cannot establish: OAuth clients/grants, the iOS public client and scopes, static tokens, Bridge identity/enrollment/pairing/recovery/claim/lease credentials, passkeys, SSH/sudo, DB roles, CI runners, provider custody and Bridge allowlists. The register now explicitly maps credential settings to its sections and distinguishes directory modes and synthetic examples from live credentials.
The bounded source scan found zero provider-prefix or private-key-header candidates after requiring token boundaries (ordinary task-related words otherwise match a short provider prefix). It found 23 long quoted literals: configuration symbols, paths, status messages, public analytics resource paths, commit references and an explicit synthetic placeholder. Five additional mixed-case/digit entropy matches were documented environment assignments. Candidate output suppressed literals and showed only paths, lines and context. None was identified as a real-looking secret. These heuristics cannot certify Git history or live installations as secret-free.
Current verification results¶
Checks ran locally with Python 3.12 and bytecode writes disabled. Git used the installed command-line-tools binary, avoiding the system launcher that tried to create a cache outside the sandbox. Temporary build output stayed inside the worktree and was removed before commit.
| Check | Actual result |
|---|---|
python scripts/check_docs_contract.py |
Exit 0: documentation contract passed: 46 MCP tools covered |
python scripts/export_mcp_contract.py --check |
Exit 0: MCP contract is up to date |
python scripts/check_product_name.py |
Exit 0: Product name check passed: use HeyAira in tracked text files |
| Credential-name coverage | 46 credential symbols; zero missing from register |
python -m mkdocs build --strict --site-dir <worktree scratch>/site |
Exit 0: Documentation built in 5.02 seconds |
| Finding fields and local links | findings=11; required_fields=pass; local_links=6; broken_links=0 |
| Scope and added-line credential scan against dispatch base | changed_files=4; outside_scope=0; diff_credential_candidates=0 |
git diff --check |
Exit 0; no whitespace errors |
The first MkDocs attempt rejected a site directory underneath docs/, before
building anything. Moving disposable output to the worktree root resolved the
configuration error. The successful strict build includes all four security
pages; its informational messages about pages outside navigation and an existing
excluded specification link are not new security-document link failures.
The diff scan checked provider prefixes, private-key headers, credential-bearing
DSNs and long mixed-case/digit blobs; candidate output would contain line numbers
only. Finding validation required source, narrowing, implementation owner,
agreement and closure evidence for each of R01–R11. Six relative Markdown links
resolve to files. Scope validation requires exactly four changed files and the
docs/security/ prefix for each, relative to 37f4561.
The previous attempt's build/test claims were replaced by this run's results. No production or PostgreSQL behavioral tests were run: this is documentation only, and runtime tests would not establish deployed access or custody.
Acceptance mapping and limits¶
- register:
register.mdrecords names/paths, consumers, holder roles and proposed rotation/review intervals. Actual holders, last rotation and expiry remain unknown until an authorized value-free attestation. - review:
review-2026-10.mdmaps access paths and retains five P2 and six P3 findings, each with source, narrowing, implementation owner, agreement and closure evidence. R06 now explicitly addresses the single-share unseal example. No confirmed P1 incident is asserted.README.mddescribes the monthly review and incident record; next review is 2026-11-10. - scope: only the four existing Markdown files under
docs/security/change relative to this dispatch base; no code/configuration/migration change.
The worker appends RESULT and receipt using task_result; Bridge performs
independent verification and decides acceptance. No push, PR, merge, deploy,
repair-task creation, access change or credential rotation was performed.