HunterX v7 — Sprint 034.1
FINAL RELEASE GATE — Phase 1: Repository Integrity & V6/V7 Contamination Audit
Date: 2026-08-10 Phase: 034.1 (integrity audit only — no feature development) Author: Principal Release Engineer (Phase 034.1) Scope: Repository inventory, V6 contamination audit, runtime path, configuration, packaging, CI/CD, documentation, database artifacts, classification, safe repairs, validation.
1. Executive Summary
HunterX v7 (src/-layout, pyproject.toml version = "7.0.0") is implemented,
runs, and passes its full test suite, but the repository is still contaminated by
V6-era implementation, packaging, documentation, and runtime paths, and the
entire V7 delivery is currently untracked in git.
Key conclusions:
- V7 is the real runtime — verified end-to-end:
hunterx version→HunterX v7.0.0;hunterx platform→ full composition; API factoryhunterx.api.app:create_app(FastAPI,/health); mission creation viahunterx mission create/hunterx hunt. - V6 contamination vectors exist and were repaired where unambiguous:
the root
hunterx.pyshim dispatched to the V6 CLI; the Dockerfile baked inVERSION=6.0.0, ahunterx doctorhealth check (a command V7 does not have), and V6hunterx.yaml/payloads/copies;install.shdownloadedhunterx-6.0.0.tar.gzfrom PyPI and verified with V6-only commands; 12 SQLite database artifacts were tracked in git. - One P0 remains: the entire V7 tree (
src/,tests/{unit,…},eng/,alembic/,config/,capabilities/, V7 workflows,requirements.lock, V7 docs) is uncommitted. A clean clone ofmaintoday contains only the retired V6 flat package. The release gate cannot be closed until the V7 tree is staged/committed (034.2 decision — not performed here per instructions). - Known, classified, carry-over issues are listed in §10 (P0–P3) for 034.2.
Phase gate: PASS (with one P0 carry-over that blocks the release gate until the V7 tree is committed).
2. Repository Inventory
2.1 Active (V7) paths
| Path | Role | Status |
|---|---|---|
src/hunterx/ |
V7 clean-architecture package (domain, application, infrastructure, engines, tools, api, cli, platform) | Active — untracked |
tests/unit|component|architecture|integration|golden|security|acceptance|performance|engineering|framework |
V7 test suites | Active — untracked |
eng/ |
Engineering platform (gates, security, sbom, packaging, readiness, release) | Active — untracked |
alembic/ + alembic.ini |
V7 migrations (23 version scripts) | Active — untracked |
config/ (architecture.yaml, api_baseline.json, vulture_allowlist.py, config/capabilities/*.json) |
Architecture matrix, baseline, capability manifests | Active — untracked |
capabilities/ |
V7 capability manifests (11 JSON) | Active — untracked |
.github/workflows/* (14 new) |
V7 CI/CD | Active — untracked |
requirements.lock |
V7 locked dependency set | Active — untracked |
docs/v7-*.md, docs/{architecture,bible,cli,configuration,features,installation,use-cases} |
V7 design + reference docs | Active — untracked |
docs/_includes/seo.html, docs/_layouts/{post,tutorial}.html, docs/_redirects |
V7 doc-site infra | Active — untracked |
2.2 Obsolete / V6 paths
| Path | Role | Status |
|---|---|---|
hunterx/ (245 files) |
Retired V6 flat package (cli.py, core/, modules/, engines/, api/, reporting/, utils/) |
Tracked — preserved in-tree by design (pyproject documents “intentionally NOT packaged”) |
hunterx/assets/data/*.db, hunterx/data/ai_cache.db, hunterx/modules/data/*.db, data/*.db |
V6 SQLite runtime DBs (ai cache, payload index/provenance, adaptive memory) | Were tracked — untracked this phase (repair) |
api/, core/, plugins/ (top-level) |
V6-era duplicate/orphan modules (core/ is an empty stub; api/ duplicates hunterx/api) |
Tracked — dead |
payloads/ (42 files), data/ |
V6 payload corpus + DB data | Tracked — unused by V7 |
hunterx.yaml (root) |
V6 config schema | Tracked — merged inertly by V7 loader from cwd |
hunterx.py (root) |
V6 CLI shim | Tracked — repaired to delegate to V7 |
requirements.txt |
V6 dependency set (requests, bs4, lxml, websocket-client) | Tracked — conflicts with V7 pyproject/lock |
install.sh, Dockerfile, docker-compose.yml |
V6-era install/image/compose | Tracked — Dockerfile + install.sh repaired; compose flagged |
awesome-*.md, awesome-pentest, pentest.md, temp_cli_apps.md |
V6-era clutter | Tracked — P2 |
tests/test_*.py (~36) + tests/conftest.py (root) |
V6 flat tests | Tracked — excluded from suite by pyproject (documented) |
docs/*.md, docs/_posts, docs/_tutorials, docs/cli, docs/features, docs/configuration, docs/installation |
V6 documentation | Tracked/untracked — see §8 |
2.3 Orphans, duplicates, dead paths
- Orphan modules: top-level
core/(empty__init__),api/,plugins/(duplicates ofhunterx/*). Not packaged, not referenced by V7. - Duplicate config: capability manifests live in two locations —
capabilities/*.json(11) andconfig/capabilities/*.json(7). Neither is referenced by code. - Duplicate DB artifacts:
data/*.dbare byte-identical copies ofhunterx/assets/data/*.db. - Dead paths:
hunterx/core/reasoning_engine_old.py(explicitly “old”),scripts/__init__.py(empty package),alembic/versions/__pycache__/*.pycreferencing migration files no longer in source (tmp_vuln_migration,dryrun_check,schemacheck, three oldapi_intelligence_tablesvariants). - Duplicate entry points:
python hunterx.py,python -m hunterx,hunterxconsole script,hunterx.cli:mainvs V6hunterx/cli.py:main.
3. V6 Contamination Findings
3.1 In src/ (V7)
None. Grep for from hunterx.core|modules|utils|engines inside src/
returns zero matches. The V7 package is internally clean.
3.2 Runtime entry points (VERIFIED)
python -c "import hunterx"from the repo root resolves to the V6 flat package (hunterx/__init__.py,__version__ = "6.0.0") because the repo root (cwd) sits ahead of thesrceditable path onsys.path.python -m hunterxfrom the repo root runs the V6 CLI (“AI-Assisted Vulnerability Hunter | v6.0.0”, commands: scan/module/doctor/…).python hunterx.pypreviously ran the V6 CLI — repaired this phase to insertsrc/first (now printsHunterX v7.0.0).hunterxconsole script (editable install) runs V7 (hunterx version→v7.0.0,hunterx platform→ composition JSON). ✔ V7 is the installed runtime.- Stale root
hunterx.egg-info/(PKG-INFO6.0.0) confusedimportlib.metadata(reported v6.0.0) — deleted this phase; metadata now correctly reports 7.0.0.
3.3 Environment prefixes
- V7:
HUNTERX_*(declared insrc/hunterx/config/loader.py; secrets layer usesHUNTERX_SECRET_*; sandbox injectsHUNTERX_EXECUTION_IDetc.). - V6:
HX_*(HX_TIMEOUT,HX_THREADS,HX_MAX_RPS,HX_AI_*, …) — only in V6 code (hunterx/config/config.py) and the excluded roottests/test_config.py. - Docker/Compose still referenced
HX_*— Dockerfile repaired; compose flagged.
3.4 Configuration schema
Two distinct schemas exist: root hunterx.yaml (V6: profile/stealth/auth/ai/oob/
presets) and src/hunterx/config/hunterx.yaml (V7: app_name/environment/database/
cache/queue/security/api). The V7 loader reads a cwd hunterx.yaml as a profile;
the V6 file is merged and its unknown keys are ignored by pydantic (inert, but a
latent trap).
3.5 CLI command surface
V6 commands (scan, module, doctor, payload, agents, skills,
workflow, reasoning, api, update, ai) do not exist in V7. V7 exposes
version/help/config/platform, mission *, hunt *, finding *, report *,
target *, campaign *, tools *. Docker healthcheck hunterx doctor and
install.sh smoke/help text used V6 commands — repaired.
3.6 CI / Docker references
No workflow hardcodes 6.0.0. The Dockerfile’s ARG VERSION=6.0.0 default,
COPY hunterx.yaml/COPY payloads/ and hunterx doctor healthcheck were V6 —
repaired. docker-compose.yml remains fully V6 (see §10 P1-02).
4. Active Runtime Path (verified end-to-end)
- Install:
pip install .→pyproject.toml→[tool.setuptools.packages.find] where=["src"]→ onlysrc/hunterxis packaged → console scriptshunterxandhunterx-arch. - CLI startup:
hunterx→hunterx.cli:main(src/hunterx/cli/__init__.py) →CliApplication+register_default_commands→build_platform(). - API startup:
hunterx.api.app:create_app(FastAPI,version="7.0.0",/health+ mission/finding/report/target-memory/tools/orchestration routers). - Platform construction:
build_platform()assembles thePlatformcomposition root — 30+ application services, four facades (TIP, Tool Integration SDK, Tool Integration Factory, Mission Planning), CoreEngine, observability stack, in-memory default adapters, optional SQL repositories. - Mission creation/execution:
hunterx mission create→MissionOrchestrationService.create_mission→MissionOrchestrator(hunterx.domain.mission_orchestration.orchestrator);hunterx huntcreates- starts a full-spectrum mission via
MissionDashboardService.
- starts a full-spectrum mission via
V7 is the actual runtime. The only contamination paths to V6 were the repo-root
hunterx.py/python -m hunterx/import hunterx shadowing (root on sys.path) and
V6 packaging/Docker/install artifacts — all addressed in §9 except the documented
repo-root shadowing caveat (P1-01) and compose (P1-02).
5. Configuration Audit
| Source | Authoritative? |
|---|---|
src/hunterx/config/hunterx.yaml (bundled default profile) |
✔ Authoritative default |
src/hunterx/config/settings.py (Settings, pydantic) |
✔ Schema authority |
src/hunterx/config/loader.py load_default_settings() |
✔ Loader authority |
cwd hunterx.yaml (root, V6 schema) |
Legacy — merged inertly |
HUNTERX_CONFIG env var |
Supported (points to a profile file) |
HUNTERX_* env vars |
Declared but NOT implemented (see finding) |
Root hunterx.yaml (V6), hunterx/config/hunterx.yaml (V6) |
Legacy |
docker-compose.yml HX_* env |
Legacy — inert/broken |
Alembic HUNTERX_DB_URL |
V7 migration env override |
Precedence (as documented in loader.py): bundled defaults → user profile
(HUNTERX_CONFIG or cwd hunterx.yaml) → environment (HUNTERX_*).
Finding (P1-06): the environment step is not implemented.
Settings is a plain pydantic BaseModel with no model_config/SettingsConfigDict;
load_default_settings() merges YAML only. Verified: HUNTERX_ENVIRONMENT=dev,
HUNTERX_LOG_LEVEL=DEBUG have no effect. The docstrings in settings.py/loader.py
promise auto env mapping that does not exist. This also means the Dockerfile’s
HUNTERX_LOG_LEVEL (renamed this phase) is inert until 034.2 implements env support.
6. Packaging Audit
pyproject.toml— V7 correct:version=7.0.0,requires-python>=3.11,[project.scripts] hunterx = hunterx.cli:main,hunterx-arch = hunterx.architecture.cli:main,packages.find where=["src"],package-datashipspy.typed,config/*.yaml,reporting/templates/*. Comments explicitly document the V6 flat package is not packaged. ✔- Entry points (
src/hunterx.egg-info/entry_points.txt) match pyproject. ✔ requirements.lock— V7 locked set (mirrors pyproject deps); consumed by CI caching, pip-audit, SBOM, license checks. ✔requirements.txt— V6 dependency set (requests,beautifulsoup4,lxml,websocket-client— not in pyproject). STALE/conflicting (P2-05); still watched bydependency-review.ymland managed by Renovate (pip_requirements).Dockerfile— Repaired this phase to V7 (VERSION default 7.0.0, healthcheckhunterx version, no V6hunterx.yaml/payloads/copies,HUNTERX_LOG_LEVEL, EXPOSE 8080). Multi-stage src-layout build verified sound.install.sh— Repaired this phase (7.0.0 sdist URL, banner, V7 smokehunterx version, V7 help text). Remaining caveat: the wrapper fallbackpython -m hunterxneeds a V7__main__.py(P2-09); the PyPI path assumes hunterx 7.0.0 exists on PyPI..dockerignore— Repaired this phase to exclude the V6 tree, DBs, caches, artifacts and non-runtime trees from the build context.docker-compose.yml— fully V6 (see P1-02).
7. CI/CD Reference Audit
Reviewed 19 workflows (release, test, ci, build, unit-tests,
integration-tests, security-tests, performance-tests, architecture-tests,
compliance, cosign-sign, dependency-review, docs-validation,
packaging-validation, readiness, sbom, docker-publish, pypi-publish) +
.pre-commit-config.yaml, renovate.json, dependabot.yml, CODEOWNERS.
- No workflow hardcodes
6.0.0/v6.0.0. All workflows target the V7 paths:tests/{unit,component,architecture,integration,golden,security},src/hunterx,eng/*,requirements.lock,hunterx-arch/python -m hunterx.architecture. dependency-review.ymlstill watches rootrequirements.txt+**/requirements*.txt(V6 file) alongsiderequirements.lock(P2-05).- Docker workflows build via the (now V7) Dockerfile;
packaging-validation.ymlalso smoke-testshunterx --help/hunterx-arch --help(V7 entry points). ✔ .pre-commit-config.yamllocal hook useshunterx-archwithlanguage: system— silently no-ops if the package isn’t installed in the local env (P3-01).- Live gate results (run locally, ruff 0.15.22):
mypyPASS,docsPASS (7/7 after repair),hygienePASS,compliancePASS,architecture(hunterx-arch lint) PASS — butruffFAIL (77 pre-existing violations insrc/hunterx), so the mandatory ruff gate (test.yml/ci.yml) is currently red. Pre-existing tech debt, not V6-related (P2-08).
No CI changes were made this phase (per instructions).
8. Documentation Consistency Audit
Classified by category (full per-file audit was performed; highlights below).
- ACTIVE V7:
docs/architecture/*, alldocs/v7-*.md(design corpus + sprint 033 report),THIRD_PARTY_NOTICES,docs/_redirects. - HISTORICAL V6:
RELEASE_NOTES_v6.0.0.md,docs/archive/*audit reports,docs/features/*,docs/_posts/*(dated blog posts, unlabeled),docs/_tutorials/*. - STALE (V6 content on live pages):
README.md,docs/index.md,docs/features.md,docs/modules.md,docs/api.md,docs/configuration.md,docs/cli.md,docs/authentication.md,docs/Docker_Guide.md,docs/profiles.md,docs/faq.md,docs/systemd.md,docs/AI_PROVIDER_GUIDE.md,docs/Reference_Guide.md,docs/PLUGIN_DEVELOPMENT.md,docs/SKILL_SDK.md,docs/AGENTS.md,docs/ARCHITECTURE.md,docs/REASONING_ENGINE.md,docs/SECURITY_SKILLS_FRAMEWORK.md,docs/quickstart.md,docs/documentation.md,docs/installation/index.md,docs/releases/index.md,docs/tutorials/index.md,docs/use-cases/*,docs/examples/*,docs/comparisons/*, rootCHANGELOG.md,ROADMAP.md,SECURITY.md,CONTRIBUTING.md,RELEASE_CHECKLIST.md,SUPPORTED_PLATFORMS.md,CITATION.cff. - CONTRADICTORY: README config/layout sections vs V7;
docs/ARCHITECTURE.mdvsdocs/architecture/README.md(same permalink/architecture/);docs/cli.mdvsdocs/cli/index.md(same permalink/cli/);CHANGELOG.md/ROADMAP.md/CITATION.cff/SECURITY.mdversion claims (6.0.0 vs 7.0.0). - BROKEN:
docs/_config.ymlfails YAML parsing (mixeddefaults:indentation);docs/_layouts/default.htmlhas no `<h1 id="hunterx-v7--sprint-0346--final-engineering-certification">HunterX v7 — Sprint 034.6 — Final Engineering Certification</h1>
Phase: Final engineering certification before Sprint 035
Status: BLOCKED — 2× P0 and 5× P1 release blockers remain
Date: 2026-08-11
Platform verified: Windows 11 / Python 3.14.6 (installed hunterx 7.0.0, editable install of the v7 src/ layout)
Scope: The complete integrated v7 platform (src/hunterx), mission lifecycle, toolchain, intelligence pipeline, persistence, evidence, PoC engine, recovery, observability, API/CLI, packaging, CI/CD and documentation.
This is the final engineering certification that Sprint 034.5 explicitly deferred to. It audits the complete system as one integrated platform and re-checks the release gates declared PASS in earlier 034.x reports. Known defects are not hidden: this report surfaces unresolved blockers that earlier reports carried as open or declared resolved prematurely.
1. System Certification
The SYSTEM FLOW
TARGET → SCOPE → RECON → ENUMERATION → DISCOVERY → INTELLIGENCE → PLANNING
→ TOOL SELECTION → EXECUTION → PARSING → NORMALIZATION → CORRELATION
→ HYPOTHESIS → TESTING → VERIFICATION → PROOF → PoC → REPLAY → IMPACT
→ FINDING → PERSISTENCE → REPORT
is implemented across the v7 stack and was verified end-to-end:
| Stage | Implementation | Verified |
|---|---|---|
| TARGET / SCOPE | TargetIntelligenceEngine (ingest_target), MissionScopeGuard, scope_mission |
✔ (tests) |
| RECON → DISCOVERY | ReconService, DnsService, LiveHostService, CrawlService, JavaScriptService |
✔ (tests) |
| INTELLIGENCE | TargetIntelligenceEngine.run_cycle (gaps → hypotheses → rank → actions) |
✔ 381 AI/intel tests |
| PLANNING / TOOL SELECTION | DeterministicMissionPlanner, ToolSelector, ToolSequencePlanner, MissionToolSelector |
✔ |
| EXECUTION | ExecutionEngine / SDK pipeline (prepare→run→validate→normalize→cleanup), BinaryRunner guarded seam |
✔ |
| PARSING / NORMALIZATION | ParserEngine, ToolParser, ToolNormalizer, NormalizerEngine → CanonicalObservation |
✔ 80 tools tests |
| CORRELATION | TargetCorrelator |
✔ |
| HYPOTHESIS / TESTING / VERIFICATION | HypothesisLoopEngine, VulnerabilityValidationService (verdict ladder) |
✔ |
| PROOF / PoC / REPLAY | VulnerabilityProofService, PoCGenerator/PoCReplayVerifier, ProofValidator |
✔ |
| IMPACT / FINDING | ImpactAnalysisEngine, VulnerabilityFindingService, FindingLifecycleStateMachine |
✔ |
| PERSISTENCE | TIDB stores (SqlTidbRepositoryFactory) + Alembic migrations |
✔ (see §8) |
| REPORT | ProfessionalReportingService (analyze→generate→QA→export, 6 formats) |
✔ live E2E |
No major subsystem is an isolated island: mission orchestration consumes
observations, findings and evidence from the toolchain/intelligence/proof
subsystems, and the reporting subsystem consumes persisted finding records.
One integration seam was found at report time (mission-context findings are not
auto-registered into the reporting finding store) — the intended flow requires
creating the finding via VulnerabilityFindingService (verified working).
Verdict: the architecture is integrated and the pipeline works.
2. End-to-End Results
Representative missions verified (deterministic, no real tool binaries required —
the certified design treats tool output as data; adapters are fixture-validated
and tools-marked tests are excluded by default, consistent with 034.5 §1):
| Mission type | How verified | Result |
|---|---|---|
| Web target | hunterx hunt web_application_assessment https://example.com (CLI, clean venv) |
✔ created + started |
| Web (deep) | tests/acceptance/full_assessment full-spectrum scenarios |
✔ 69 tests in batch |
| API target | acceptance API chain (api-graphql → inql/graphqlmap → nuclei) | ✔ 034.5 chain certified, tests pass |
| Cloud / SaaS | prowler / cloud-analysis chain scenarios | ✔ 034.5 chain certified |
| Repository / code | gitleaks → trufflehog → semgrep chain | ✔ 034.5 chain certified |
| Multi-stage | tests/acceptance/test_autonomous_mission_acceptance.py (SyntheticTargetEnvironment: recon→enum→vuln→validate→prove→report, injected failures) |
✔ |
| Integrated live flow | Custom harness on build_platform(): create → start → ingest (httpx/nuclei) → hypothesis → verify → finding → impact → finalize → finding persist (TIDB) → PoC → report generate → export |
✔ all steps true |
Live integration run (this certification, SQLite temp DB):
create ✓ start ✓ ingest ✓ hypothesis ✓ verify ✓ finding ✓ impact ✓
finalize ✓ finding_persisted ✓ poc_generated ✓ report_generate ✓
report_export ✓ observation_records ✓ (2 persisted)
Mission state, persistence, events, evidence and reporting all function in the integrated flow.
3. Failure / Recovery
Failure-injection and recovery verification (all suites pass):
| Failure injected | Verification | Recovery verified |
|---|---|---|
| Tool missing binary / crash / timeout / non-zero exit / malformed / empty / rate-limit / network | tests/tools/test_failure_handling.py, tests/security/tools/ |
retry policy, capability-equivalent fallback (never blind), partial-result preservation |
| Chain step failure | tests/acceptance/toolchain/test_chain_failure_falls_back_to_equivalent_tool |
fallback once to equivalent tool, PARTIAL chain result |
| Database dead URL | tests/integration/tidb/test_persistence_failure_recovery.py |
OperationalError classified; healthy repo still works |
| DB constraint violation | same suite | IntegrityError rolled back, no duplicates |
| Mid-batch failure | tests/integration/tidb/test_transaction_integrity.py |
save_many atomic, zero partial rows |
| Mission crash / resume | MissionOrchestrator.checkpoint/resume_from_checkpoint, OffensiveOrchestrationEngine.run_mission(checkpoint_after_steps=N); integration + acceptance tests |
checkpoint snapshots + RESUMED run linked to resumed_from_run_id/checkpoint_id |
| Event delivery | InMemoryEventStore replay, InMemoryDeadLetterQueue |
store.replay + dead-lettering |
| Parser hostile input | test_failure_handling.py::TestMalformedAndEmptyOutput |
malformed lines skipped, never executed |
Known limitation (documented, not hidden): DB retry/pool-pre-ping/failover
does not exist at runtime (create_engine_from_settings has no retry hook) and
in-memory fallback is config-time only — a deployment responsibility
(carried P3 from 034.3 §18).
4. AI Certification
- No silent AI→evidence path exists.
NullAIClient.complete()raisesOperationError;embed()is deterministic SHA-256 (verified live). The only real-provider consumer is the executive summarizer (a string, not evidence). - All reasoning is deterministic rule-based in the certified path
(OBSERVE→HYPOTHESIZE→PROBE→VERIFY); AI proposals are advisory
(
ai_proposedflag) and pass the same policy gates. - Validation gates verified:
requires_validation=Trueon all scanner adapters; candidate confidence capped at 0.5;VerdictEngine(CONFIRMED/FALSE_POSITIVE/INCONCLUSIVE);ProofValidatorstrict gate order (contradiction never averaged, target-state change ⇒ INCONCLUSIVE);PoCReplayVerifier(an HTTP 200 alone is never a successful replay);ClaimVerifierblocks unverified high-impact report claims. - Provenance: hypotheses, decisions, observations, evidence and findings
carry source/tool/version/correlation/mission refs; AI-inferred sources are
ranked lowest (
AI_INFERENCEweight 0.1). - Novel behavior:
UnknownBehaviorClassifier(KNOWN_CLASS / KNOWN_VARIANT / NOVEL_BEHAVIOR / APPLICATION_SPECIFIC / UNRESOLVED) — never labels zero-day without reproducible, security-relevant, controlled proof. - Tests: 381 AI/validation/proof/reasoning tests pass (including golden + security matrices).
Verdict: AI certification PASSES.
5. Toolchain Certification
Carried forward from 034.5 (re-verified this sprint):
- 106 registered tools / 79 execution adapters, complete machine-readable
contracts (0 missing dimensions,
tests/tools/test_contracts.py). - All subprocess adapters run through the single guarded
BinaryRunnerseam (structural argv, noshell=True, 32 MiB cap, wall-clock timeout, injection guards). - Parsers/normalizers fixture-validated for every family; golden fixtures under
tests/golden/tools/<family>/. ChainExecutor(topological order, provenance, fallback, partial results) certified end-to-end for recon/API/secrets/web/cloud chains.tests/toolssuite: 80 passed when run explicitly.
6. Persistence Certification
- Migrations: 21 linear Alembic revisions, baseline
4302b30cb7c7; verifiedupgrade head→ 408 tables (file-backed SQLite),alembic checkdrift-free, downgrade clean (tests/integration/tidb/test_sql_migrations.py). - TIDB stores: 401
tidb_*tables across missions, targets, findings, evidence, proof, PoC, reports, events, audit. - Transactions: per-repository-call commits;
save_manyatomic (all-or-nothing). Verified bytest_transaction_integrity.py. - Events/audit:
InMemoryEventStorereplay + dead-letter;VersioningListenerwrites audit/timeline rows in SQL mode. - Findings/evidence/PoC/reports persist across the service layer (verified
live:
finding_persisted,observation_records).
Two persistence defects are NOT hidden:
- Operational mission state is not resumable across process restarts — the
MissionOrchestrator._missionsdict is in-memory only andstart()has no restore path; TIDB persistence records audit/read-model data but cannot resume the orchestrator. See P1-03. - Timeline read-model (
tidb_mission_timelines) is never written by the mission service (GET /missions/{id}/timelinereturns empty in persistent deployments). Verified live. See P2-08.
7. Security Certification
- Security test suites pass:
tests/security396,tests/security/tools,tests/security/api(401/403/readonly auth matrix),tests/security/test_proof_strategy_security. - pip-audit: no known vulnerabilities in
requirements.lock. - Auth: opt-in
X-API-Keymiddleware verified (disabled by default on loopback — documented deployment guidance). - Secret handling: masking regression pinned (
mask_valuereveal_tail=0bug fixed in 034.5); secret non-persistence tests pass. - BLOCKER — bandit gate fails: 2× MEDIUM B314 — untrusted XML parsed with
stdlib
xml.etree.ElementTree.fromstring:src/hunterx/domain/api/parsers/soap.py:73— attacker-controlled WSDLsrc/hunterx/tools/livehost/nmap.py:138— scanner XML output These are XXE / entity-expansion (billion-laughs) exposures for a tool that parses target-controlled XML. Fix:defusedxml(or hardened parser config). See P1-02. (46 LOW findings also present.)
8. Performance
Measured from the benchmark suite (tests/performance, 122 tests) and a
live N+1-query audit:
- Throughput: typical cores are µs-scale — e.g.
test_impact_benchmark~0.12 ms/op, correlation ~24 µs/op at 10k observations, selection throughput100k ops/s, DNS resolution >2.5M ops/s, confidence >8M ops/s. No CPU bottleneck detected in the pure-domain hot paths.
- Large sets:
test_100k_observations_bounded(~4.1s), 1M observation metadata diff (~1.7s), bulk insert 10k rows (21s setup) — bounded, no memory blow-up. - N+1 audit: TIDB
list/list_by/get/count/streamare single-query (cursor-counted,tests/performance/persistence/test_n_plus_one.py). - Known debt (P2, documented): legacy
Sql*Repository.list()is classic 1+N;save_manyissues a per-row existence SELECT; mission service loopssave()per record;MissionOrchestrationQueryService._recordslists up to 10 000 rows then filters in Python. - BLOCKER — performance gate fails by design: the gate runs the benchmark
suite then flags any test >20s as “slow”, so it flags its own benchmark
functions (
test_hypothesis_creation_benchmark60.6s,test_proof_creation_benchmark37.3s) plus the 21s bulk-insert setup. The gate can never pass as configured. See P1/P2-01.
Verdict: performance is acceptable in practice; the performance gate is broken.
9. Observability
- Structured logging:
infrastructure/loggingJsonFormatter+LoggingManager. - Correlation IDs / mission IDs / execution IDs: pervasive across TIDB
models (
correlation_id,mission_id,execution_idindexed columns), the event store, and log field binding. - Events: typed event catalog (
domain/events/catalog.py, ~100+ events), in-memory bus + append-only store + replay + dead-letter queue. - Metrics / telemetry:
InMemoryMetrics,PrometheusTelemetryProvider,MemoryTelemetryProvider,InMemoryTracer, health probes + health registry. - Audit trail:
VersioningListener(audit/change/version/timeline rows) in SQL mode. - Error tracing: mission reasoning trace, decision records, tool execution records with failure kind + retry count.
Verdict: observability is implemented and verified (tests in the default suite).
10. API / CLI
- API (FastAPI,
create_app): route groups/missions,/missions/adaptive,/missionsdashboard,/findings,/reports,/targets+/campaigns,/tools,/health. Live verified in a clean[api,db]venv:GET /health→ 200{"status":"ok"};POST /missions→ 200 withmission_id. - API tests pass: 43 integration/component/security API tests (incl. authorization matrix and mission lifecycle).
- CLI (
hunterx,hunterx-arch):version,--help,config,platform,mission,hunt,finding,report,target,campaign,tools,tools chain/chain-execute,hunterx-arch lint. Verified in a clean venv. - Auth: opt-in API-key middleware with admin/readonly roles; default off.
- BLOCKER — CLI mission workflow cannot chain invocations (
mission createthenmission start <id>fails withAdaptiveMissionNotFoundErrorbecause orchestrator state is in-memory). See P1-03. Also,HUNTERX_*env vars are never read. See P1-04.
11. Packaging / Clean Installation
python -m eng packaging: PASS — wheel + sdist built, twine check clean (dist/hunterx-7.0.0-py3-none-any.whl,hunterx-7.0.0.tar.gz).- Clean-environment install test (fresh venvs, wheel):
pip install hunterx(base, no extras): CLI CRASHES —ModuleNotFoundError: No module named 'sqlalchemy'athunterx.cliimport (throughinfrastructure.db.sql.repositories). P0-02.pip install "hunterx[api,db]": works —hunterx version→ “HunterX v7.0.0”,hunterx-arch1.0.0,tools list,mission create, API server up.
- Docker:
Dockerfileinstalls base"."(no extras) and healthcheckshunterx version→ the image is unhealthy at build due to P0-02.docker-compose.ymlis v6-era (build argVERSION: 6.0.0,HX_*env, v6 command surface) and inconsistent with the v7 Dockerfile (P2). - Entry points:
hunterx = hunterx.cli:main,hunterx-arch = hunterx.architecture.cli:mainboth resolve to the v7src/package in a clean venv.
Verdict: packaging gate passes, but the default install is broken (P0-02).
12. CI/CD
18 workflows exist. Merge-gating: ci.yml (eng gates), unit-tests,
integration-tests, performance-tests, security-tests,
packaging-validation, architecture-tests, docs-validation, compliance,
dependency-review, build, test. Release/other: release, sbom,
cosign-sign, docker-publish, pypi-publish, readiness.
CI cannot validate V7. The main branch does not contain the v7 tree:
git ls-files src → 0 files; eng/, tests/{unit,component,…}, alembic/,
capabilities/, config/ and the 14 new workflows are all untracked. A clean
checkout of main has only the v6 flat package (461 tracked files). Every CI
workflow that references src, eng, or the v7 test suites would fail or
error on a clean checkout. P0-01.
Mandatory gates as run against the working tree this sprint:
| Gate | Result | Detail |
|---|---|---|
| pytest | PASS | 3474 passed, 8 skipped, 2 deselected |
| mypy | PASS | clean |
| coverage | PASS | line-rate 81.7% (XML) ≥ 80%; combined 77% |
| architecture | PASS | exit 0 (warnings only) |
| docs | PASS | 7/7 |
| compliance | PASS | |
| hygiene | PASS | |
| dependencies | PASS | pip-audit clean |
| ruff | FAIL | 133 errors |
| deadcode | FAIL | vulture: 3 |
| security | FAIL | bandit B314 ×2 MEDIUM + 46 LOW |
| performance | FAIL | 3 tests > 20s (self-inflicted) |
| packaging | PASS |
13. Documentation
docsgate PASS (7/7: required files, required sections, engineering docs, internal links, fenced blocks, structure).- Present: Development Bible (15 chapters),
docs/architecture/,docs/cli/,docs/configuration/,docs/installation/,docs/features/,docs/use-cases/,docs/v7-*.mddesign/reference set (foundation, tidb, event-bus-observability, tool-integration-sdk, cicd-architecture, release-guide, security-pipeline, full-toolchain-intelligence, …),CHANGELOG.md,ROADMAP.md. - Incoherences (not hidden):
docs/api.md,docs/cli.md,docs/AGENTS.mddocument the v6 API/CLI surface (/agents,/scan, agents/workflows) which does not exist in v7; roothunterx.yamlis v6 config;RELEASE_CHECKLIST.mdandinstall.shreference v6-era commands; the env-var configuration contract (loader docstring,docs/configuration) is not implemented (P1-04). No dedicateddeployment.md/migration.mdexists (deployment guidance lives indocs/v7-release-guide.md+ docker posts). - Defect vs docs: docs claim
HUNTERX_*env overrides; the loader never reads them.
Verdict: documentation is extensive and link-valid, but several critical runtime behaviors depend on undocumented or unimplemented assumptions (env config, base-install no-dependency mode).
14. Test Matrix
| Suite | Collected | Result |
|---|---|---|
| unit | 2008 | PASS |
| component | 86 | PASS |
| integration | 283 | PASS (2 tools-deselected) |
| golden | 167 | PASS (7 skipped = intentional gate scenarios) |
| security | 396 | PASS |
| acceptance | 200 | PASS |
| performance | 122 | PASS (benchmarks run) |
| engineering | 91 | PASS |
| architecture | 129 | PASS |
| tools | 80 | PASS when run explicitly — NOT in default testpaths (P2-03) |
| Full default suite | 3484 | 3474 passed, 8 skipped, 2 deselected |
Empty or misleading suites:
tests/framework/contains helpers/fixtures only (correct, not a suite).tests/tools/(80 tests, the Sprint 034.5 toolchain certification suite) is missing from[tool.pytest.ini_options] testpaths—python -m pytestand the CI pytest gate do not run it. Sprint 034.5 reported these as part of the default run; that is inaccurate. Misleading.tests/performancebenchmark functions are themselves flagged as “slow” by the performance gate — the gate’s own output is misleading (P2-01).tests/test_reasoning.pyat the repo root targets removed v6/v5core.reasoning_engine_old— it cannot collect against v7; excluded from testpaths (stale, harmless).
15. Known Issues
| # | Severity | Description | Evidence |
|---|---|---|---|
| K01 | P0 | Entire V7 tree untracked in git (src/, eng/, v7 tests/, alembic/, capabilities/, config/, 14 workflows, requirements.lock, v7 docs) — CI/release cannot validate V7 from a clean checkout |
git ls-files src = 0; 103 untracked entries; carried from 034.1 P0-01, still open |
| K02 | P0 | Base install (no extras) crashes at import — sqlalchemy required by infrastructure/db/sql/* unconditionally; breaks pip install hunterx, the Docker image, and the documented zero-dependency mode |
clean venv install test; Dockerfile pip install "." + hunterx version healthcheck |
| K03 | P1 | ruff gate red: 133 errors (UP007×39, D102×25, I001×21, UP035×14, F401×12, B023×7, …) — mandatory CI gate fails | ruff check src eng tests alembic |
| K04 | P1 | bandit B314 ×2 MEDIUM: XXE/entity-expansion via stdlib ET.fromstring on attacker-controlled WSDL (soap.py:73) and nmap XML (nmap.py:138) — security gate red |
bandit -r src/hunterx |
| K05 | P1 | Mission orchestration state is in-memory only — no restore path; mission start/checkpoint/resume fail across process restarts even with SQL persistence; CLI create→start broken |
live CLI + orchestrator get() audit (orchestrator.py:208-215) |
| K06 | P1 | HUNTERX_* env config never applied — loader ignores environment (docstring/settings/docs promise it); breaks config-by-env for containers/CI |
loader.py has no env read; HUNTERX_DATABASE_URL ignored (verified) |
| K07 | P1 | deadcode gate red: vulture 3 (dead if False else 0 in telemetry.py:44, unused fp/msg params in httpclient.py:89) |
vulture run |
| K08 | P2 | Performance gate cannot pass as configured (flags its own benchmark tests >20s); throughput itself is fine | gate run + durations |
| K09 | P2 | Legacy SQL repo N+1, per-row existence SELECT in save_many, service-level table scans, per-entity commit loops |
034.3 §10/§18, verified |
| K10 | P2 | tests/tools (80) excluded from default testpaths — CI pytest gate misses the toolchain certification suite |
pyproject testpaths |
| K11 | P2 | Timeline read-model never written (tidb_mission_timelines) — /missions/{id}/timeline empty in persistent deployments |
live E2E (timeline_records=false) |
| K12 | P2 | Unguarded select-then-insert race on concurrent first-time upsert (IntegrityError) | 034.3 concurrency suite |
| K13 | P2 | docker-compose.yml v6-era; root hunterx.yaml v6 config; docs/api.md/docs/cli.md/docs/AGENTS.md document v6 API/CLI |
audit |
| K14 | P2 | Coverage combined (branch-adjusted) is 77% — only the XML line-rate (81.7%) passes the 80% gate | coverage run |
| K15 | P2/P3 | ~30 arsenal tools knowledge-only; interactsh/metasploit/mitmproxy/zap execution-dependent; chain fan-out single-target; report redactor limits; PATH-resolved binaries w/o integrity pinning; no per-CPU rlimit | 034.5 §18/§19 carried |
| K16 | P3 | RELEASE_CHECKLIST.md, install.sh, RELEASE_NOTES_v6.0.0.md reference v6-era commands/versions |
audit |
16. P0 / P1 / P2 / P3 Summary
P0 — release blockers (2)
| # | Issue | Status | |—|—|—| | K01 | V7 tree untracked in git — CI/release cannot validate V7 | Open (carried from 034.1, declared resolved in 034.2–034.5 — incorrect) | | K02 | Base install/Docker image crash (unconditional sqlalchemy import) | Open (new) |
P1 — must fix (5)
| # | Issue | Status |
|—|—|—|
| K03 | ruff gate red (133) | Open (was P2-08 in 034.1, now worse; 034.5 “no P1” claim wrong) |
| K04 | bandit B314 XXE ×2 — security gate red | Open (new) |
| K05 | Mission orchestrator not resumable across restarts | Open (new) |
| K06 | Env config (HUNTERX_*) unimplemented | Open (new) |
| K07 | deadcode gate red | Open (new) |
P2 — acceptable technical debt (8)
K08 performance-gate self-fail, K09 N+1/commit loops, K10 tools suite not in testpaths, K11 timeline read-model unwritten, K12 concurrency upsert race, K13 v6-era compose/config/docs, K14 combined coverage 77%, K15 carried toolchain gaps (knowledge-only adapters, fan-out, redactor, binary pinning, rlimits).
P3 — post-release (2)
K16 stale v6 checklists/installer references; plus carried items (no DB
runtime failover, CODEOWNERS gaps, __main__.py absence).
17. Release Readiness Score
Scoring model: 100 − 30×(#P0) − 15×(#P1) − 3×(#P2), floor 0.
- P0 = 2 → −60
- P1 = 5 → −75
- P2 = 8 → −24
- Release Readiness: 0/100 (blocked)
- Quality gates passing: 9/13 mandatory gates green on the working tree (pytest, mypy, coverage, architecture, docs, compliance, hygiene, dependencies, packaging) vs 4 red (ruff, deadcode, security, performance).
- Test suite health: 100% green (3474 passed; +80 tools suite green when run).
The product code and tests are healthy and green; the release engineering envelope is not (git state, default install, security/deadcode/ruff gates, mission resumability, env config).
18. Final Gate
| Gate | Requirement | Result |
|---|---|---|
| [ ] | end-to-end missions work | ✔ PASS (live + acceptance) |
| [ ] | persistence works | ⚠ PARTIAL (records persist; orchestrator not resumable — P1) |
| [ ] | toolchain works | ✔ PASS (contracts/chaining/parsing; 80 tests green when run) |
| [ ] | intelligence pipeline works | ✔ PASS (381 tests) |
| [ ] | evidence works | ✔ PASS (evidence-gated lifecycle) |
| [ ] | PoC lifecycle works | ✔ PASS (generate→validate→replay→verdict) |
| [ ] | recovery works | ✔ PASS (tool/DB/mission-step/event injection suites) |
| [ ] | security gates pass | ✖ FAIL (bandit B314 ×2; ruff/deadcode also red) |
| [ ] | performance is acceptable | ⚠ PARTIAL (throughput fine; gate broken) |
| [ ] | API works | ✔ PASS (live /health, /missions; auth verified) |
| [ ] | CLI works | ✖ FAIL (cross-invocation mission workflow broken — P1) |
| [ ] | clean installation works | ✖ FAIL (base install crashes — P0-02) |
| [ ] | CI validates V7 | ✖ FAIL (V7 untracked — P0-01) |
| [ ] | documentation is coherent | ⚠ PARTIAL (link-valid; v6 API/CLI docs + unimplemented env config) |
| [ ] | no P0 remains | ✖ FAIL (2 P0) |
| [ ] | no unresolved P1 release blocker remains | ✖ FAIL (5 P1) |
19. Final Recommendation
STOP. Do NOT begin Sprint 035.
Sprint 034.6 — FINAL ENGINEERING CERTIFICATION: BLOCKED.
The engineering substance of HunterX v7 is strong and healthy — the integrated platform works end-to-end, all 3474 default tests pass, the toolchain and intelligence/proof pipelines are certified, and no functional regression was found. But the release is not ready because the engineering gate envelope fails:
- P0 — the v7 delivery is not in git. A clean
maincheckout cannot build, test or release V7. This is Sprint 034.1’s own P0-01, never closed; later 034.x reports declared “no P0” inaccurately. - P0 — the default install is broken.
pip install hunterxcrashes at import without the optionaldbextra; the Docker image healthcheck fails. - P1 — three mandatory CI gates are red (ruff 133, bandit B314 XXE ×2, deadcode) and the performance gate can never pass as configured.
- P1 — two runtime contract breaks: mission orchestration state is not
resumable across process restarts, and
HUNTERX_*environment configuration is documented but never implemented.
Exact remaining blockers (minimum to unblock):
- Commit the complete v7 tree (P0-01) and re-run CI on a clean checkout.
- Make
db/sqlimports lazy (or adddbto core deps) so the base wheel and Docker image run (P0-02). - Fix bandit B314 XXE with
defusedxml(P1-04). - Add a mission-restore path (hydrate
OrchestratedMissionfrom TIDB onstart/resume) so CLI/API workflows survive restarts (P1-03). - Implement env-var application in the config loader (P1-06).
- Clean the 133 ruff violations and 3 vulture findings (P1-03/P1-05), and fix the performance-gate slow-test logic (P2-01).
Sprint 035 may begin only after the P0 items are closed and the P1 items are resolved or explicitly re-scoped with acceptance criteria.
/<body>; nav.html links
/Docker_Guide, /arch; robots.txt sitemap URL points to the deleted
sitemap.xml; seo.html/tutorial.html/post.html Liquid syntax errors;
every docs/cli/*.md has malformed single-line front matter; CITATION.cff
has malformed YAML; docs/quickstart.md references non-existent hunterx setup/
hunterx feeds update; docs/contributing.md references non-existent
tests/test_scanner.py`.
- Repaired this phase: the single link that failed the
docsgate —docs/v7-api-intelligence-implementation-plan.md→./v7-api-intelligence.md(file does not exist). Gate now 7/7. All other docs issues are classified for 034.2 (docs rewrites are content work, not integrity repairs).
9. Database / Artifact Audit
| Artifact | Location | Tracked? | Notes |
|---|---|---|---|
| V6 SQLite DBs (ai_cache, payload_index, payload_provenance, adaptive_memory) | data/*.db (4), hunterx/assets/data/*.db (4), hunterx/data/ai_cache.db (1), hunterx/modules/data/*.db (3) |
Were tracked → untracked (repair) | Binary cache/index DBs; data/* are byte-identical copies |
| V7 runtime DB | hunterx.db (root, ~10 MB, 22 V7 tables) |
Untracked | Now gitignored |
| Test/build artifacts | artifacts/ (coverage, SBOM, gates, benchmarks, security reports) |
Untracked | Now gitignored |
| Caches | .mypy_cache/, .ruff_cache/, .benchmarks/, .pytest_cache/ |
Untracked | Now gitignored |
| Build output | dist/, build/, hunterx.egg-info/, src/hunterx.egg-info/ |
Untracked | Root hunterx.egg-info/ (V6 metadata) deleted this phase |
| Google site verification | googlea591cd58e85d83b3.html |
Tracked | Public verification token — benign |
| Credentials/private keys/secrets | — | None found | No private keys, .env, or API keys in tracked files; sk-/AKIA matches in V6 payload JSON (ghdb.json, detector test vectors) are test payloads, not real secrets |
Conclusion: the repo previously shipped 12 binary SQLite DBs in git (now untracked, on disk only), and no credential material was found. DBs are not included in release artifacts (src-only packaging).
10. Issue Classification
P0 — RELEASE BLOCKER
| ID | Issue | State |
|—|—|—|
| P0-01 | Entire V7 delivery is untracked: src/, V7 tests/, eng/, alembic/, config/, capabilities/, V7 workflows, requirements.lock, V7 docs, THIRD_PARTY_NOTICES, CODEOWNERS, dependabot.yml. A clean main clone has only the V6 flat package. Release tagging/packaging cannot proceed from a committed state. | Open — needs staging/commit decision in 034.2 |
P1 — MUST FIX
| ID | Issue | State |
|—|—|—|
| P1-01 | Repo-root shadowing: import hunterx / python -m hunterx from the repo root resolve to the V6 flat package (root precedes src on sys.path). Only tests/conftest.py compensates. | Open — structural (needs V6 tree relocation or documented mitigation) |
| P1-02 | docker-compose.yml is entirely V6: VERSION: 6.0.0, HX_* env, mounts V6 hunterx.yaml, command: ["api", "--port", "8443"] (no such V7 command). Broken for V7. | Open — needs V7 API startup design (034.2) |
| P1-03 | Tracked SQLite DB artifacts (12 files) in git. | Repaired (git rm --cached + gitignore) |
| P1-04 | hunterx.py shim dispatched to the V6 CLI. | Repaired (now delegates to src/) |
| P1-05 | Dockerfile V6 markers (VERSION=6.0.0, hunterx doctor healthcheck, V6 hunterx.yaml/payloads/ copies, HX_LOG_LEVEL, EXPOSE 8443). | Repaired |
| P1-06 | V7 env-var precedence declared but not implemented (HUNTERX_* has no effect; verified). | Open — implement in 034.2 |
| P1-07 | install.sh V6 markers (sdist 6.0.0 URL, banner, V6-only smoke/help commands). | Repaired (version strings + V7 commands); wrapper python -m hunterx fallback still needs V7 __main__.py (see P2-09) |
P2 — TECHNICAL DEBT
| ID | Issue |
|—|—|
| P2-01 | Retired V6 flat package hunterx/ (245 files) retained at repo root; root-shadowing risk (see P1-01). Recommend relocation to a legacy/ tree. |
| P2-02 | Orphan top-level api/, core/ (empty stub), plugins/ — dead V6 duplicates; not packaged, unreferenced. |
| P2-03 | Root hunterx.yaml (V6 schema) tracked; V7 loader merges it inertly. Recommend removal or conversion. |
| P2-04 | capabilities/ vs config/capabilities/ duplicate manifest locations; neither referenced by code. |
| P2-05 | requirements.txt (V6 deps) conflicts with pyproject/lock; watched by dependency-review + Renovate. |
| P2-06 | V6 payload corpus payloads/ (42 tracked files) unused by V7. |
| P2-07 | V6 clutter at root: awesome-*.md, awesome-pentest, pentest.md, temp_cli_apps.md, summary.txt. |
| P2-08 | Ruff gate red: 77 pre-existing violations in src/hunterx (D102×25, F401×16, I001×8, B023×7, etc.) under ruff 0.15.x. Mandatory CI ruff gate fails. Pre-existing, non-V6. |
| P2-09 | No src/hunterx/__main__.py → python -m hunterx unsupported for installed V7 (console script is official entry). A __main__.py was drafted but reverted because hunterx-arch classified it as a legacy→cli boundary violation (ARCH-001); classify it as cli layer when added. |
| P2-10 | V6 flat tests at tests/ root (~36 files) — excluded from suite (documented in pyproject). |
| P2-11 | Doc-site broken: docs/_config.yml YAML parse failure; default.html missing `<h1 id="hunterx-v7--sprint-0346--final-engineering-certification">HunterX v7 — Sprint 034.6 — Final Engineering Certification</h1>
Phase: Final engineering certification before Sprint 035
Status: BLOCKED — 2× P0 and 5× P1 release blockers remain
Date: 2026-08-11
Platform verified: Windows 11 / Python 3.14.6 (installed hunterx 7.0.0, editable install of the v7 src/ layout)
Scope: The complete integrated v7 platform (src/hunterx), mission lifecycle, toolchain, intelligence pipeline, persistence, evidence, PoC engine, recovery, observability, API/CLI, packaging, CI/CD and documentation.
This is the final engineering certification that Sprint 034.5 explicitly deferred to. It audits the complete system as one integrated platform and re-checks the release gates declared PASS in earlier 034.x reports. Known defects are not hidden: this report surfaces unresolved blockers that earlier reports carried as open or declared resolved prematurely.
1. System Certification
The SYSTEM FLOW
TARGET → SCOPE → RECON → ENUMERATION → DISCOVERY → INTELLIGENCE → PLANNING
→ TOOL SELECTION → EXECUTION → PARSING → NORMALIZATION → CORRELATION
→ HYPOTHESIS → TESTING → VERIFICATION → PROOF → PoC → REPLAY → IMPACT
→ FINDING → PERSISTENCE → REPORT
is implemented across the v7 stack and was verified end-to-end:
| Stage | Implementation | Verified |
|---|---|---|
| TARGET / SCOPE | TargetIntelligenceEngine (ingest_target), MissionScopeGuard, scope_mission |
✔ (tests) |
| RECON → DISCOVERY | ReconService, DnsService, LiveHostService, CrawlService, JavaScriptService |
✔ (tests) |
| INTELLIGENCE | TargetIntelligenceEngine.run_cycle (gaps → hypotheses → rank → actions) |
✔ 381 AI/intel tests |
| PLANNING / TOOL SELECTION | DeterministicMissionPlanner, ToolSelector, ToolSequencePlanner, MissionToolSelector |
✔ |
| EXECUTION | ExecutionEngine / SDK pipeline (prepare→run→validate→normalize→cleanup), BinaryRunner guarded seam |
✔ |
| PARSING / NORMALIZATION | ParserEngine, ToolParser, ToolNormalizer, NormalizerEngine → CanonicalObservation |
✔ 80 tools tests |
| CORRELATION | TargetCorrelator |
✔ |
| HYPOTHESIS / TESTING / VERIFICATION | HypothesisLoopEngine, VulnerabilityValidationService (verdict ladder) |
✔ |
| PROOF / PoC / REPLAY | VulnerabilityProofService, PoCGenerator/PoCReplayVerifier, ProofValidator |
✔ |
| IMPACT / FINDING | ImpactAnalysisEngine, VulnerabilityFindingService, FindingLifecycleStateMachine |
✔ |
| PERSISTENCE | TIDB stores (SqlTidbRepositoryFactory) + Alembic migrations |
✔ (see §8) |
| REPORT | ProfessionalReportingService (analyze→generate→QA→export, 6 formats) |
✔ live E2E |
No major subsystem is an isolated island: mission orchestration consumes
observations, findings and evidence from the toolchain/intelligence/proof
subsystems, and the reporting subsystem consumes persisted finding records.
One integration seam was found at report time (mission-context findings are not
auto-registered into the reporting finding store) — the intended flow requires
creating the finding via VulnerabilityFindingService (verified working).
Verdict: the architecture is integrated and the pipeline works.
2. End-to-End Results
Representative missions verified (deterministic, no real tool binaries required —
the certified design treats tool output as data; adapters are fixture-validated
and tools-marked tests are excluded by default, consistent with 034.5 §1):
| Mission type | How verified | Result |
|---|---|---|
| Web target | hunterx hunt web_application_assessment https://example.com (CLI, clean venv) |
✔ created + started |
| Web (deep) | tests/acceptance/full_assessment full-spectrum scenarios |
✔ 69 tests in batch |
| API target | acceptance API chain (api-graphql → inql/graphqlmap → nuclei) | ✔ 034.5 chain certified, tests pass |
| Cloud / SaaS | prowler / cloud-analysis chain scenarios | ✔ 034.5 chain certified |
| Repository / code | gitleaks → trufflehog → semgrep chain | ✔ 034.5 chain certified |
| Multi-stage | tests/acceptance/test_autonomous_mission_acceptance.py (SyntheticTargetEnvironment: recon→enum→vuln→validate→prove→report, injected failures) |
✔ |
| Integrated live flow | Custom harness on build_platform(): create → start → ingest (httpx/nuclei) → hypothesis → verify → finding → impact → finalize → finding persist (TIDB) → PoC → report generate → export |
✔ all steps true |
Live integration run (this certification, SQLite temp DB):
create ✓ start ✓ ingest ✓ hypothesis ✓ verify ✓ finding ✓ impact ✓
finalize ✓ finding_persisted ✓ poc_generated ✓ report_generate ✓
report_export ✓ observation_records ✓ (2 persisted)
Mission state, persistence, events, evidence and reporting all function in the integrated flow.
3. Failure / Recovery
Failure-injection and recovery verification (all suites pass):
| Failure injected | Verification | Recovery verified |
|---|---|---|
| Tool missing binary / crash / timeout / non-zero exit / malformed / empty / rate-limit / network | tests/tools/test_failure_handling.py, tests/security/tools/ |
retry policy, capability-equivalent fallback (never blind), partial-result preservation |
| Chain step failure | tests/acceptance/toolchain/test_chain_failure_falls_back_to_equivalent_tool |
fallback once to equivalent tool, PARTIAL chain result |
| Database dead URL | tests/integration/tidb/test_persistence_failure_recovery.py |
OperationalError classified; healthy repo still works |
| DB constraint violation | same suite | IntegrityError rolled back, no duplicates |
| Mid-batch failure | tests/integration/tidb/test_transaction_integrity.py |
save_many atomic, zero partial rows |
| Mission crash / resume | MissionOrchestrator.checkpoint/resume_from_checkpoint, OffensiveOrchestrationEngine.run_mission(checkpoint_after_steps=N); integration + acceptance tests |
checkpoint snapshots + RESUMED run linked to resumed_from_run_id/checkpoint_id |
| Event delivery | InMemoryEventStore replay, InMemoryDeadLetterQueue |
store.replay + dead-lettering |
| Parser hostile input | test_failure_handling.py::TestMalformedAndEmptyOutput |
malformed lines skipped, never executed |
Known limitation (documented, not hidden): DB retry/pool-pre-ping/failover
does not exist at runtime (create_engine_from_settings has no retry hook) and
in-memory fallback is config-time only — a deployment responsibility
(carried P3 from 034.3 §18).
4. AI Certification
- No silent AI→evidence path exists.
NullAIClient.complete()raisesOperationError;embed()is deterministic SHA-256 (verified live). The only real-provider consumer is the executive summarizer (a string, not evidence). - All reasoning is deterministic rule-based in the certified path
(OBSERVE→HYPOTHESIZE→PROBE→VERIFY); AI proposals are advisory
(
ai_proposedflag) and pass the same policy gates. - Validation gates verified:
requires_validation=Trueon all scanner adapters; candidate confidence capped at 0.5;VerdictEngine(CONFIRMED/FALSE_POSITIVE/INCONCLUSIVE);ProofValidatorstrict gate order (contradiction never averaged, target-state change ⇒ INCONCLUSIVE);PoCReplayVerifier(an HTTP 200 alone is never a successful replay);ClaimVerifierblocks unverified high-impact report claims. - Provenance: hypotheses, decisions, observations, evidence and findings
carry source/tool/version/correlation/mission refs; AI-inferred sources are
ranked lowest (
AI_INFERENCEweight 0.1). - Novel behavior:
UnknownBehaviorClassifier(KNOWN_CLASS / KNOWN_VARIANT / NOVEL_BEHAVIOR / APPLICATION_SPECIFIC / UNRESOLVED) — never labels zero-day without reproducible, security-relevant, controlled proof. - Tests: 381 AI/validation/proof/reasoning tests pass (including golden + security matrices).
Verdict: AI certification PASSES.
5. Toolchain Certification
Carried forward from 034.5 (re-verified this sprint):
- 106 registered tools / 79 execution adapters, complete machine-readable
contracts (0 missing dimensions,
tests/tools/test_contracts.py). - All subprocess adapters run through the single guarded
BinaryRunnerseam (structural argv, noshell=True, 32 MiB cap, wall-clock timeout, injection guards). - Parsers/normalizers fixture-validated for every family; golden fixtures under
tests/golden/tools/<family>/. ChainExecutor(topological order, provenance, fallback, partial results) certified end-to-end for recon/API/secrets/web/cloud chains.tests/toolssuite: 80 passed when run explicitly.
6. Persistence Certification
- Migrations: 21 linear Alembic revisions, baseline
4302b30cb7c7; verifiedupgrade head→ 408 tables (file-backed SQLite),alembic checkdrift-free, downgrade clean (tests/integration/tidb/test_sql_migrations.py). - TIDB stores: 401
tidb_*tables across missions, targets, findings, evidence, proof, PoC, reports, events, audit. - Transactions: per-repository-call commits;
save_manyatomic (all-or-nothing). Verified bytest_transaction_integrity.py. - Events/audit:
InMemoryEventStorereplay + dead-letter;VersioningListenerwrites audit/timeline rows in SQL mode. - Findings/evidence/PoC/reports persist across the service layer (verified
live:
finding_persisted,observation_records).
Two persistence defects are NOT hidden:
- Operational mission state is not resumable across process restarts — the
MissionOrchestrator._missionsdict is in-memory only andstart()has no restore path; TIDB persistence records audit/read-model data but cannot resume the orchestrator. See P1-03. - Timeline read-model (
tidb_mission_timelines) is never written by the mission service (GET /missions/{id}/timelinereturns empty in persistent deployments). Verified live. See P2-08.
7. Security Certification
- Security test suites pass:
tests/security396,tests/security/tools,tests/security/api(401/403/readonly auth matrix),tests/security/test_proof_strategy_security. - pip-audit: no known vulnerabilities in
requirements.lock. - Auth: opt-in
X-API-Keymiddleware verified (disabled by default on loopback — documented deployment guidance). - Secret handling: masking regression pinned (
mask_valuereveal_tail=0bug fixed in 034.5); secret non-persistence tests pass. - BLOCKER — bandit gate fails: 2× MEDIUM B314 — untrusted XML parsed with
stdlib
xml.etree.ElementTree.fromstring:src/hunterx/domain/api/parsers/soap.py:73— attacker-controlled WSDLsrc/hunterx/tools/livehost/nmap.py:138— scanner XML output These are XXE / entity-expansion (billion-laughs) exposures for a tool that parses target-controlled XML. Fix:defusedxml(or hardened parser config). See P1-02. (46 LOW findings also present.)
8. Performance
Measured from the benchmark suite (tests/performance, 122 tests) and a
live N+1-query audit:
- Throughput: typical cores are µs-scale — e.g.
test_impact_benchmark~0.12 ms/op, correlation ~24 µs/op at 10k observations, selection throughput100k ops/s, DNS resolution >2.5M ops/s, confidence >8M ops/s. No CPU bottleneck detected in the pure-domain hot paths.
- Large sets:
test_100k_observations_bounded(~4.1s), 1M observation metadata diff (~1.7s), bulk insert 10k rows (21s setup) — bounded, no memory blow-up. - N+1 audit: TIDB
list/list_by/get/count/streamare single-query (cursor-counted,tests/performance/persistence/test_n_plus_one.py). - Known debt (P2, documented): legacy
Sql*Repository.list()is classic 1+N;save_manyissues a per-row existence SELECT; mission service loopssave()per record;MissionOrchestrationQueryService._recordslists up to 10 000 rows then filters in Python. - BLOCKER — performance gate fails by design: the gate runs the benchmark
suite then flags any test >20s as “slow”, so it flags its own benchmark
functions (
test_hypothesis_creation_benchmark60.6s,test_proof_creation_benchmark37.3s) plus the 21s bulk-insert setup. The gate can never pass as configured. See P1/P2-01.
Verdict: performance is acceptable in practice; the performance gate is broken.
9. Observability
- Structured logging:
infrastructure/loggingJsonFormatter+LoggingManager. - Correlation IDs / mission IDs / execution IDs: pervasive across TIDB
models (
correlation_id,mission_id,execution_idindexed columns), the event store, and log field binding. - Events: typed event catalog (
domain/events/catalog.py, ~100+ events), in-memory bus + append-only store + replay + dead-letter queue. - Metrics / telemetry:
InMemoryMetrics,PrometheusTelemetryProvider,MemoryTelemetryProvider,InMemoryTracer, health probes + health registry. - Audit trail:
VersioningListener(audit/change/version/timeline rows) in SQL mode. - Error tracing: mission reasoning trace, decision records, tool execution records with failure kind + retry count.
Verdict: observability is implemented and verified (tests in the default suite).
10. API / CLI
- API (FastAPI,
create_app): route groups/missions,/missions/adaptive,/missionsdashboard,/findings,/reports,/targets+/campaigns,/tools,/health. Live verified in a clean[api,db]venv:GET /health→ 200{"status":"ok"};POST /missions→ 200 withmission_id. - API tests pass: 43 integration/component/security API tests (incl. authorization matrix and mission lifecycle).
- CLI (
hunterx,hunterx-arch):version,--help,config,platform,mission,hunt,finding,report,target,campaign,tools,tools chain/chain-execute,hunterx-arch lint. Verified in a clean venv. - Auth: opt-in API-key middleware with admin/readonly roles; default off.
- BLOCKER — CLI mission workflow cannot chain invocations (
mission createthenmission start <id>fails withAdaptiveMissionNotFoundErrorbecause orchestrator state is in-memory). See P1-03. Also,HUNTERX_*env vars are never read. See P1-04.
11. Packaging / Clean Installation
python -m eng packaging: PASS — wheel + sdist built, twine check clean (dist/hunterx-7.0.0-py3-none-any.whl,hunterx-7.0.0.tar.gz).- Clean-environment install test (fresh venvs, wheel):
pip install hunterx(base, no extras): CLI CRASHES —ModuleNotFoundError: No module named 'sqlalchemy'athunterx.cliimport (throughinfrastructure.db.sql.repositories). P0-02.pip install "hunterx[api,db]": works —hunterx version→ “HunterX v7.0.0”,hunterx-arch1.0.0,tools list,mission create, API server up.
- Docker:
Dockerfileinstalls base"."(no extras) and healthcheckshunterx version→ the image is unhealthy at build due to P0-02.docker-compose.ymlis v6-era (build argVERSION: 6.0.0,HX_*env, v6 command surface) and inconsistent with the v7 Dockerfile (P2). - Entry points:
hunterx = hunterx.cli:main,hunterx-arch = hunterx.architecture.cli:mainboth resolve to the v7src/package in a clean venv.
Verdict: packaging gate passes, but the default install is broken (P0-02).
12. CI/CD
18 workflows exist. Merge-gating: ci.yml (eng gates), unit-tests,
integration-tests, performance-tests, security-tests,
packaging-validation, architecture-tests, docs-validation, compliance,
dependency-review, build, test. Release/other: release, sbom,
cosign-sign, docker-publish, pypi-publish, readiness.
CI cannot validate V7. The main branch does not contain the v7 tree:
git ls-files src → 0 files; eng/, tests/{unit,component,…}, alembic/,
capabilities/, config/ and the 14 new workflows are all untracked. A clean
checkout of main has only the v6 flat package (461 tracked files). Every CI
workflow that references src, eng, or the v7 test suites would fail or
error on a clean checkout. P0-01.
Mandatory gates as run against the working tree this sprint:
| Gate | Result | Detail |
|---|---|---|
| pytest | PASS | 3474 passed, 8 skipped, 2 deselected |
| mypy | PASS | clean |
| coverage | PASS | line-rate 81.7% (XML) ≥ 80%; combined 77% |
| architecture | PASS | exit 0 (warnings only) |
| docs | PASS | 7/7 |
| compliance | PASS | |
| hygiene | PASS | |
| dependencies | PASS | pip-audit clean |
| ruff | FAIL | 133 errors |
| deadcode | FAIL | vulture: 3 |
| security | FAIL | bandit B314 ×2 MEDIUM + 46 LOW |
| performance | FAIL | 3 tests > 20s (self-inflicted) |
| packaging | PASS |
13. Documentation
docsgate PASS (7/7: required files, required sections, engineering docs, internal links, fenced blocks, structure).- Present: Development Bible (15 chapters),
docs/architecture/,docs/cli/,docs/configuration/,docs/installation/,docs/features/,docs/use-cases/,docs/v7-*.mddesign/reference set (foundation, tidb, event-bus-observability, tool-integration-sdk, cicd-architecture, release-guide, security-pipeline, full-toolchain-intelligence, …),CHANGELOG.md,ROADMAP.md. - Incoherences (not hidden):
docs/api.md,docs/cli.md,docs/AGENTS.mddocument the v6 API/CLI surface (/agents,/scan, agents/workflows) which does not exist in v7; roothunterx.yamlis v6 config;RELEASE_CHECKLIST.mdandinstall.shreference v6-era commands; the env-var configuration contract (loader docstring,docs/configuration) is not implemented (P1-04). No dedicateddeployment.md/migration.mdexists (deployment guidance lives indocs/v7-release-guide.md+ docker posts). - Defect vs docs: docs claim
HUNTERX_*env overrides; the loader never reads them.
Verdict: documentation is extensive and link-valid, but several critical runtime behaviors depend on undocumented or unimplemented assumptions (env config, base-install no-dependency mode).
14. Test Matrix
| Suite | Collected | Result |
|---|---|---|
| unit | 2008 | PASS |
| component | 86 | PASS |
| integration | 283 | PASS (2 tools-deselected) |
| golden | 167 | PASS (7 skipped = intentional gate scenarios) |
| security | 396 | PASS |
| acceptance | 200 | PASS |
| performance | 122 | PASS (benchmarks run) |
| engineering | 91 | PASS |
| architecture | 129 | PASS |
| tools | 80 | PASS when run explicitly — NOT in default testpaths (P2-03) |
| Full default suite | 3484 | 3474 passed, 8 skipped, 2 deselected |
Empty or misleading suites:
tests/framework/contains helpers/fixtures only (correct, not a suite).tests/tools/(80 tests, the Sprint 034.5 toolchain certification suite) is missing from[tool.pytest.ini_options] testpaths—python -m pytestand the CI pytest gate do not run it. Sprint 034.5 reported these as part of the default run; that is inaccurate. Misleading.tests/performancebenchmark functions are themselves flagged as “slow” by the performance gate — the gate’s own output is misleading (P2-01).tests/test_reasoning.pyat the repo root targets removed v6/v5core.reasoning_engine_old— it cannot collect against v7; excluded from testpaths (stale, harmless).
15. Known Issues
| # | Severity | Description | Evidence |
|---|---|---|---|
| K01 | P0 | Entire V7 tree untracked in git (src/, eng/, v7 tests/, alembic/, capabilities/, config/, 14 workflows, requirements.lock, v7 docs) — CI/release cannot validate V7 from a clean checkout |
git ls-files src = 0; 103 untracked entries; carried from 034.1 P0-01, still open |
| K02 | P0 | Base install (no extras) crashes at import — sqlalchemy required by infrastructure/db/sql/* unconditionally; breaks pip install hunterx, the Docker image, and the documented zero-dependency mode |
clean venv install test; Dockerfile pip install "." + hunterx version healthcheck |
| K03 | P1 | ruff gate red: 133 errors (UP007×39, D102×25, I001×21, UP035×14, F401×12, B023×7, …) — mandatory CI gate fails | ruff check src eng tests alembic |
| K04 | P1 | bandit B314 ×2 MEDIUM: XXE/entity-expansion via stdlib ET.fromstring on attacker-controlled WSDL (soap.py:73) and nmap XML (nmap.py:138) — security gate red |
bandit -r src/hunterx |
| K05 | P1 | Mission orchestration state is in-memory only — no restore path; mission start/checkpoint/resume fail across process restarts even with SQL persistence; CLI create→start broken |
live CLI + orchestrator get() audit (orchestrator.py:208-215) |
| K06 | P1 | HUNTERX_* env config never applied — loader ignores environment (docstring/settings/docs promise it); breaks config-by-env for containers/CI |
loader.py has no env read; HUNTERX_DATABASE_URL ignored (verified) |
| K07 | P1 | deadcode gate red: vulture 3 (dead if False else 0 in telemetry.py:44, unused fp/msg params in httpclient.py:89) |
vulture run |
| K08 | P2 | Performance gate cannot pass as configured (flags its own benchmark tests >20s); throughput itself is fine | gate run + durations |
| K09 | P2 | Legacy SQL repo N+1, per-row existence SELECT in save_many, service-level table scans, per-entity commit loops |
034.3 §10/§18, verified |
| K10 | P2 | tests/tools (80) excluded from default testpaths — CI pytest gate misses the toolchain certification suite |
pyproject testpaths |
| K11 | P2 | Timeline read-model never written (tidb_mission_timelines) — /missions/{id}/timeline empty in persistent deployments |
live E2E (timeline_records=false) |
| K12 | P2 | Unguarded select-then-insert race on concurrent first-time upsert (IntegrityError) | 034.3 concurrency suite |
| K13 | P2 | docker-compose.yml v6-era; root hunterx.yaml v6 config; docs/api.md/docs/cli.md/docs/AGENTS.md document v6 API/CLI |
audit |
| K14 | P2 | Coverage combined (branch-adjusted) is 77% — only the XML line-rate (81.7%) passes the 80% gate | coverage run |
| K15 | P2/P3 | ~30 arsenal tools knowledge-only; interactsh/metasploit/mitmproxy/zap execution-dependent; chain fan-out single-target; report redactor limits; PATH-resolved binaries w/o integrity pinning; no per-CPU rlimit | 034.5 §18/§19 carried |
| K16 | P3 | RELEASE_CHECKLIST.md, install.sh, RELEASE_NOTES_v6.0.0.md reference v6-era commands/versions |
audit |
16. P0 / P1 / P2 / P3 Summary
P0 — release blockers (2)
| # | Issue | Status | |—|—|—| | K01 | V7 tree untracked in git — CI/release cannot validate V7 | Open (carried from 034.1, declared resolved in 034.2–034.5 — incorrect) | | K02 | Base install/Docker image crash (unconditional sqlalchemy import) | Open (new) |
P1 — must fix (5)
| # | Issue | Status |
|—|—|—|
| K03 | ruff gate red (133) | Open (was P2-08 in 034.1, now worse; 034.5 “no P1” claim wrong) |
| K04 | bandit B314 XXE ×2 — security gate red | Open (new) |
| K05 | Mission orchestrator not resumable across restarts | Open (new) |
| K06 | Env config (HUNTERX_*) unimplemented | Open (new) |
| K07 | deadcode gate red | Open (new) |
P2 — acceptable technical debt (8)
K08 performance-gate self-fail, K09 N+1/commit loops, K10 tools suite not in testpaths, K11 timeline read-model unwritten, K12 concurrency upsert race, K13 v6-era compose/config/docs, K14 combined coverage 77%, K15 carried toolchain gaps (knowledge-only adapters, fan-out, redactor, binary pinning, rlimits).
P3 — post-release (2)
K16 stale v6 checklists/installer references; plus carried items (no DB
runtime failover, CODEOWNERS gaps, __main__.py absence).
17. Release Readiness Score
Scoring model: 100 − 30×(#P0) − 15×(#P1) − 3×(#P2), floor 0.
- P0 = 2 → −60
- P1 = 5 → −75
- P2 = 8 → −24
- Release Readiness: 0/100 (blocked)
- Quality gates passing: 9/13 mandatory gates green on the working tree (pytest, mypy, coverage, architecture, docs, compliance, hygiene, dependencies, packaging) vs 4 red (ruff, deadcode, security, performance).
- Test suite health: 100% green (3474 passed; +80 tools suite green when run).
The product code and tests are healthy and green; the release engineering envelope is not (git state, default install, security/deadcode/ruff gates, mission resumability, env config).
18. Final Gate
| Gate | Requirement | Result |
|---|---|---|
| [ ] | end-to-end missions work | ✔ PASS (live + acceptance) |
| [ ] | persistence works | ⚠ PARTIAL (records persist; orchestrator not resumable — P1) |
| [ ] | toolchain works | ✔ PASS (contracts/chaining/parsing; 80 tests green when run) |
| [ ] | intelligence pipeline works | ✔ PASS (381 tests) |
| [ ] | evidence works | ✔ PASS (evidence-gated lifecycle) |
| [ ] | PoC lifecycle works | ✔ PASS (generate→validate→replay→verdict) |
| [ ] | recovery works | ✔ PASS (tool/DB/mission-step/event injection suites) |
| [ ] | security gates pass | ✖ FAIL (bandit B314 ×2; ruff/deadcode also red) |
| [ ] | performance is acceptable | ⚠ PARTIAL (throughput fine; gate broken) |
| [ ] | API works | ✔ PASS (live /health, /missions; auth verified) |
| [ ] | CLI works | ✖ FAIL (cross-invocation mission workflow broken — P1) |
| [ ] | clean installation works | ✖ FAIL (base install crashes — P0-02) |
| [ ] | CI validates V7 | ✖ FAIL (V7 untracked — P0-01) |
| [ ] | documentation is coherent | ⚠ PARTIAL (link-valid; v6 API/CLI docs + unimplemented env config) |
| [ ] | no P0 remains | ✖ FAIL (2 P0) |
| [ ] | no unresolved P1 release blocker remains | ✖ FAIL (5 P1) |
19. Final Recommendation
STOP. Do NOT begin Sprint 035.
Sprint 034.6 — FINAL ENGINEERING CERTIFICATION: BLOCKED.
The engineering substance of HunterX v7 is strong and healthy — the integrated platform works end-to-end, all 3474 default tests pass, the toolchain and intelligence/proof pipelines are certified, and no functional regression was found. But the release is not ready because the engineering gate envelope fails:
- P0 — the v7 delivery is not in git. A clean
maincheckout cannot build, test or release V7. This is Sprint 034.1’s own P0-01, never closed; later 034.x reports declared “no P0” inaccurately. - P0 — the default install is broken.
pip install hunterxcrashes at import without the optionaldbextra; the Docker image healthcheck fails. - P1 — three mandatory CI gates are red (ruff 133, bandit B314 XXE ×2, deadcode) and the performance gate can never pass as configured.
- P1 — two runtime contract breaks: mission orchestration state is not
resumable across process restarts, and
HUNTERX_*environment configuration is documented but never implemented.
Exact remaining blockers (minimum to unblock):
- Commit the complete v7 tree (P0-01) and re-run CI on a clean checkout.
- Make
db/sqlimports lazy (or adddbto core deps) so the base wheel and Docker image run (P0-02). - Fix bandit B314 XXE with
defusedxml(P1-04). - Add a mission-restore path (hydrate
OrchestratedMissionfrom TIDB onstart/resume) so CLI/API workflows survive restarts (P1-03). - Implement env-var application in the config loader (P1-06).
- Clean the 133 ruff violations and 3 vulture findings (P1-03/P1-05), and fix the performance-gate slow-test logic (P2-01).
Sprint 035 may begin only after the P0 items are closed and the P1 items are resolved or explicitly re-scoped with acceptance criteria.
; broken nav/sitemap; malformed docs/cli/ front matter. |
| P2-12 | Stale version claims across CHANGELOG.md, ROADMAP.md, CITATION.cff, SECURITY.md, SUPPORTED_PLATFORMS.md (6.0.0 vs 7.0.0). |
| P2-13 | V6-era docs still describing scan/module/doctor/payload/agents commands and HX_` env on live pages (README, docs index, features, cli, configuration, Docker_Guide, faq, systemd, tutorials, posts). |
P3 — POST-RELEASE
| ID | Issue |
|—|—|
| P3-01 | .pre-commit-config.yaml hunterx-arch local hook with language: system silently no-ops if uninstalled. |
| P3-02 | CODEOWNERS gaps for src/hunterx/{cli,platform,architecture,api,security,knowledge}. |
| P3-03 | Orphaned .pyc files in alembic/versions/__pycache__ for deleted migrations. |
| P3-04 | googlea591cd58e85d83b3.html tracked (public token, benign) — confirm intent. |
11. Repairs Performed (validated)
.gitignore— added*.db,*.sqlite,*.sqlite3,hunterx.db,/data/,/artifacts/,.mypy_cache/,.ruff_cache/,.benchmarks/.- Untracked 12 V6 SQLite DBs (
git rm --cached; files kept on disk) — verified no.dbfiles remain tracked. - Deleted stale root
hunterx.egg-info/(V6.0.0 metadata). Verifiedimportlib.metadata.distribution("hunterx")now reports 7.0.0. hunterx.py— now insertssrc/ahead of the repo root and delegates to V7 (python hunterx.py version→HunterX v7.0.0).Dockerfile—ARG VERSION=7.0.0; HEALTHCHECKhunterx version; removedCOPY hunterx.yaml/COPY payloads/;HX_LOG_LEVEL→HUNTERX_LOG_LEVEL;EXPOSE 8080. No6.0.0/HX_/doctormarkers remain.install.sh— sdist URLhunterx-7.0.0.tar.gz; bannerv7; smoke testhunterx version; help text uses V7 commands..dockerignore— exclude V6 tree (hunterx/,payloads/,core/,api/,plugins/,awesome-pentest/), DBs, caches,artifacts/,data/, and non-runtime trees (alembic/,eng/,capabilities/,config/).docs/v7-api-intelligence-implementation-plan.md— removed the broken link to the nonexistentv7-api-intelligence.md;docsgate now 7/7.
12. Validation Results
| Check | Result |
|---|---|
hunterx version (console script) |
HunterX v7.0.0, exit 0 ✔ |
hunterx platform |
Full composition JSON ✔ |
hunterx help |
V7 command surface only (no scan/doctor/module) ✔ |
python hunterx.py version |
HunterX v7.0.0, exit 0 ✔ |
python -c "import hunterx" (repo root) |
V6 (documented caveat, P1-01) |
pytest tests/unit |
2008 passed |
pytest tests/component |
86 passed |
pytest tests/architecture |
129 passed |
pytest tests/integration tests/golden tests/acceptance tests/security |
704 passed, 8 skipped |
hunterx-arch lint --root . |
Exit 0 (green) ✔ |
mypy eng src/hunterx/shared |
Clean ✔ |
python -m eng gates --gate docs |
7/7 PASS ✔ |
python -m eng gates --gate hygiene |
PASS ✔ |
python -m eng gates --gate compliance |
PASS ✔ |
ruff check src |
77 pre-existing violations (gate red — P2-08) |
| Docker build | Not executed (no Docker daemon); Dockerfile statically verified |
.gitignore / .dockerignore |
Applied; DB files remain on disk, untracked |
13. Final Phase Verdict
Phase 034.1 — PASS, with one P0 release blocker carried forward.
- ✔ V7 runtime path identified (console script →
hunterx.cli:main→build_platform(); API viahunterx.api.app:create_app; missions viahunterx mission/hunt). - ✔ No unknown V6 runtime contamination remains in the packaged path. All known V6 runtime vectors were either repaired (hunterx.py, Dockerfile, install.sh, egg-info, tracked DBs) or are explicitly tracked as remaining (repo-root shadowing P1-01, docker-compose P1-02).
- ✔ Configuration authority identified (
src/hunterx/config/hunterx.yaml+Settingsvialoader.load_default_settings); env precedence noted as unimplemented (P1-06). - ✔ Packaging path verified (src-layout, entry points, requirements.lock, repaired Dockerfile).
- ✔ CI problems identified (ruff gate red P2-08; dependency-review V6 watch
P2-05; no
6.0.0hardcodes). - ✔ Stale documentation classified (ACTIVE V7 / HISTORICAL V6 / STALE / CONTRADICTORY / BROKEN) and the failing docs link repaired.
- ✔ Database artifacts identified (12 tracked V6 DBs untracked; V7
hunterx.dbgitignored; no credentials found). - ✔ Release blockers classified (P0-01 untracked V7 tree — the sole P0).
- ✔ Repairs validated (full test suite green; gates green except pre-existing ruff).
- ✔ Report generated (
docs/v7-sprint-034.1-repository-integrity.md).
STOP — Phase 034.1 complete. Do not proceed to 034.2 automatically.