HunterX v7 — Sprint 035 — Final Hardening, Audit & Release Hygiene
Date: 2026-08-11 Phase: Sprint 035 (post-034.6 certification) Platform verified: Windows 11 / Python 3.14.6; WSL Ubuntu 24.04 (installer) Scope: Installation system, repository hygiene, v6 archive, ownership metadata, responsible-use documentation, README/package/CI-CD correctness, release-tree audit, security scan, documentation consolidation, version consistency, clean-install and clean-release verification.
Executive Summary
Sprint 035 performed the final hardening, audit and release-hygiene pass over the HunterX v7 platform. Every code-level P0 and P1 release blocker from the Sprint 034.6 certification was resolved, the repository was decontaminated of development artifacts and legacy v6 material, ownership metadata was applied, the responsible-use disclaimer was placed in every high-visibility location, the installer was rewritten for the v7 architecture and verified end-to-end on a clean environment, and documentation was consolidated around a single authoritative v7 hierarchy.
Quality state at the end of the sprint:
| Gate | Result |
|---|---|
| Full pytest suite | 3479 passed, 8 skipped, 2 deselected (baseline 3474; +5 new tests, 0 regressions) |
| ruff | PASS (was 133 errors at 034.6) |
| mypy (eng + shared) | PASS |
| bandit (Medium+) | PASS (was 2× MEDIUM B314 XXE at 034.6) |
| vulture (dead code) | PASS (was 3 findings at 034.6) |
| docs gate | PASS 7/7 |
| lock-file consistency | PASS |
clean base install (pip install hunterx) |
PASS (was crashing at 034.6 P0-02) |
| installer (install.sh) clean + idempotent | PASS (WSL Ubuntu 24.04) |
| Alembic migrations to head | PASS |
One P0 remains open and it is a git-operation, not a code defect: the v7
release tree is still untracked in git (Sprint 034.1’s K01), so a clean main
checkout cannot yet validate v7 in CI. All engineering substance, installation
and release-tree content are complete and verified; committing the tree is the
single remaining release step.
1. V7 Installation Audit
The previous install.sh was a v6-era script. It was rewritten to reflect the
actual v7 architecture (src/ layout package, hunterx CLI, TIDB/Alembic
persistence, HUNTERX_* environment configuration).
install.sh Changes
- Version/identity — banner and metadata describe HunterX v7 (AI-Powered Security Orchestration & Intelligence Platform); no v6 paths, packages, commands or configuration are referenced.
- OS/environment detection — unchanged distro detection (apt/dnf/pacman/
apk/zypper) plus a
--usermode that requires no root. - Python version — requires Python 3.11+.
- Virtual environment — created once, reused on re-run (idempotent).
- Package installation — installs the local source when present, otherwise
PyPI; supports
--core(base), default[api,db], and--allextras. - Optional dependencies —
--core/--allflags control extras. - Configuration — default profile ships in the package;
hunterx configverified during installation. - CLI installation —
hunterxexecutable + case-variant symlinks in the bin directory, with PATH export handling. - Required directories — creates
data,reportsandconfigunder the install location. - Database initialization — runs
alembic upgrade head(via the bundledalembic.ini/alembic/when present, honoringHUNTERX_DB_URL); skipped gracefully on PyPI-only installs because the CLI creates tables on demand. - Capability/tool configuration — bundled capability manifests ship with
the package;
hunterx tools listverified. - Permissions — executable bit set on wrapper/symlinks; system mode warns when not root.
- Installation verification — 5 checks:
version,help,config,platform,tools list, plus symlink validation. - Failure handling —
set -euo pipefail+ EXIT trap with a clear error. - Idempotency — re-running upgrades in place (no
rm -rf), preserving user data and the existing virtual environment.
Verified Results
install.sh --user --coreon a clean WSL Ubuntu 24.04: All checks passed;hunterx version→HunterX v7.0.0.install.sh --user(default[api,db]) on a clean home: All checks passed.- Idempotent re-run: second execution succeeded without corrupting the
installation;
hunterx versionstill works. - Migrations:
alembic upgrade headon a fresh SQLite database completed to head revisiona3f5b7c9d1e3. - Line endings normalized to LF (per
.editorconfig).
2. Repository Hygiene — Development Artifact Cleanup
Removed from the release tree (working tree):
| Artifact | Disposition |
|---|---|
awesome-cli-apps.md, awesome-devsecops.md, awesome-pentest.md, awesome-security.md, awesome-pentest/, temp_cli_apps.md, pentest.md |
Dev scratch / downloaded “awesome” lists — removed |
.github/METADATA_OPTIMIZATION_REPORT.md, .github/GITHUB_SEO.md, .github/LABEL_RECOMMENDATIONS.md |
Internal development/SEO workflow artifacts — removed |
massdns-*.txt, shuffledns-*.txt, hunterx.db, .coverage, googlea591cd58e85d83b3.html |
Runtime output — removed; patterns gitignored |
build/, dist/, artifacts/, reports/, data/, *.egg-info/, .mypy_cache/, .pytest_cache/, .ruff_cache/, .benchmarks/ |
Build/test/cache output — removed; gitignored |
AI Development Artifact Cleanup
- Fixed a shipped-code reference: the SARIF exporter set
informationUritohttps://opencode.ai; corrected tohttps://github.com/nullc0d30/HunterX(src/hunterx/reporting/report_renderers.py). - No OpenCode/DeepSeek/KiloCode internal prompts, session logs or model names
remain in the v7 release tree. The
HUNTERX_AI_DEEPSEEK_KEYreference lives only in the archived v6 package. - Sprint engineering reports (
docs/v7-sprint-*.md) are retained as the project’s engineering record; this sprint’s report follows the same convention. No attribution or authorship was rewritten.
3. V6 Archive / Legacy Cleanup
Classification and disposition:
| Material | Class | Disposition |
|---|---|---|
hunterx/ flat package, api/, core/, plugins/, payloads/ |
C (obsolete, unused by v7) | Moved to docs/archive/v6/source/ |
Root tests/test_*.py (v6) |
C | Moved to docs/archive/v6/tests/ |
hunterx.yaml (v6 config) |
C | Moved to docs/archive/v6/ |
RELEASE_NOTES_v6.0.0.md |
B (historical) | Moved to docs/archive/v6/ |
docs/AGENTS.md, AI_PROVIDER_GUIDE.md, api.md, cli.md, modules.md, ARCHITECTURE.md, features.md, profiles.md, quickstart.md, roadmap.md, configuration.md, security.md, REASONING_ENGINE.md, SECURITY_SKILLS_FRAMEWORK.md, PLUGIN_DEVELOPMENT.md, SKILL_SDK.md, Reference_Guide.md, Design_Decisions.md, Docker_Guide.md, Performance_Guide.md, systemd.md, authentication.md, benchmarks.md, audit reports |
B | Moved to docs/archive/v6/ |
docs/cli/*, docs/features/* (agents, ai-provider-guide, …), docs/configuration/*, docs/tutorials/*, docs/comparisons/*, docs/examples/*, docs/releases/*, docs/use-cases/* (v6 pages) |
C | Moved to docs/archive/v6/ |
docker-compose.yml (v6: VERSION: 6.0.0, HX_* env, v6 command surface) |
C | Rewritten for v7 |
Root hunterx.yaml, root hunterx/ package |
C | Removed/archived — no longer shadows v7 src/hunterx |
docs/archive/v6/README.mdstates explicitly that HunterX v7 is the current architecture and that the archive is historical reference only.- The Jekyll site excludes
archive/from the build. - The v6 flat package no longer shadows v7 modules:
import hunterxfrom a source checkout now resolves the v7src/package.
4. Project Ownership & Copyright
- Consistent project header applied:
Copyright (c) 2026 Ahmed Awad (NullC0d3)+SPDX-License-Identifier: Apache-2.0. - Added to project-owned Python (
scripts/, test__init__.pyfiles), TOML, INI (alembic.ini), Markdown (SECURITY.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md,CHANGELOG.md,RELEASE_CHECKLIST.md,SUPPORTED_PLATFORMS.md), CFF (CITATION.cff), Dockerignore/Gitignore andrequirements.txt. - Not injected (per policy): Alembic-generated migration files
(
alembic/versions/*, machine-generated, covered by project metadata), vendored/third-party material, binary assets, lockfiles, and Jekyll pages whose frontmatter must start at byte 0 (ownership is carried by_config.ymlauthor:metadata). NOTICEupdated to v7 branding and the current dependency set.
5. Responsible Use / Disclaimer
The disclaimer now appears in every high-visibility location:
- README.md — full responsible-use and disclaimer section.
- Documentation landing page —
docs/index.mdresponsible-use card anddocs/documentation.mdbanner. - CLI —
hunterx helpprints: “HunterX is an authorized cybersecurity testing and research platform. Obtain appropriate authorization before testing any system.” - Security documentation —
docs/security.mdand rootSECURITY.mdcarry the statement. - Legal documentation —
docs/responsible-use.md(authorization, legal compliance, limitation of liability naming the author).
Wording is legally coherent (authorization responsibility + disclaimer), not repetitive legal text in every runtime file.
6. README / Project Identity
README.md was completely rewritten for HunterX v7:
- identity, author/ownership (Ahmed Awad AKA NullC0d3), purpose
- v7 capabilities (mission orchestration, toolchain intelligence, validation, proof/PoC, reporting, persistence, security model)
- installation (installer script, PyPI, source, Docker) + verification
- usage (mission/hunt/finding/report/tools workflows)
- configuration (
HUNTERX_*env overrides) - REST API, Docker, architecture, testing, documentation links
- responsible-use statement, license/rights, contributing links
All obsolete v6 CLI references (hunterx scan --ai, hunterx module,
hunterx doctor, hunterx api, payload sync) were removed.
7. Package Metadata
pyproject.toml audited and corrected:
- name
hunterx, version7.0.0, description v7-accurate. - authors
Ahmed Awad (NullC0d3), licenseApache-2.0. - URLs point to
github.com/nullc0d30/HunterX/nullc0d30.github.io/HunterX. - Base dependencies corrected:
sqlalchemy+alembicmoved to base deps (TIDB/SQLite is the default persistence),defusedxmladded — this fixes the P0-02 base-install crash. - Entry points
hunterx = hunterx.cli:mainandhunterx-arch = ...resolve to the v7src/package. requirements.lockupdated to mirror base deps (addsdnspython,defusedxml,sqlalchemy,alembic).- No v6 package references; no AI-development references.
8. CI/CD Release Hygiene
- All 18 workflows audited: no v6 references (the only
@v6match is thedocker/build-push-action@v6action tag). docker-compose.ymlrewritten for v7:VERSION: 7.0.0,HUNTERX_*env contract, uvicorn FastAPI command, non-root, resource limits, healthcheck onhunterx version, named volume.Dockerfilebranding updated; healthcheckhunterx version(now passes on the base image because SQLAlchemy is a base dep).CODEOWNERS,dependabot.yml,renovate.json,release.ymlreference the v7src//eng/layout.- Gates verified locally: ruff, mypy, pytest, deadcode, bandit, docs, lock consistency.
9. File / Directory Audit
- All tracked dev/runtime artifacts removed (see §2).
.gitignoreexpanded: caches, coverage, DB files, massdns/shuffledns output, secrets (*.key,*.pem, credentials), Jekyll build output, egg-info.- No
.db, temp, cache, IDE-metadata, agent/model artifacts, backup files or compiled Python remain in the release tree. - No secrets, credentials, tokens, API keys or private certificates remain (see §12).
10. Documentation Consolidation
A single authoritative hierarchy now exists:
- CURRENT V7 —
docs/documentation.mdhub +docs/architecture/,docs/installation/,docs/configuration/,docs/cli/,docs/features/,docs/quickstart.md,docs/bible/, and thedocs/v7-*.mddesign/reference set. - ARCHIVED V6 —
docs/archive/v6/(isolated, excluded from the Jekyll build, marked historical). - INTERNAL DEVELOPMENT MATERIAL —
docs/v7-sprint-*.mdengineering reports (kept as the project’s engineering record). - THIRD-PARTY MATERIAL —
NOTICE/THIRD_PARTY_NOTICES.
Link, path, diagram, configuration-example and CLI-example validation is enforced by the docs gate: 7/7 checks pass.
11. Version Consistency
- All active (non-archive) files were scanned for
v6.0.0/ v6 paths / v6 commands / v6 config keys. - v6 references remain only in
docs/archive/v6/(intentional historical material) and dated blog posts (historical records). CHANGELOG.mdgained a[7.0.0] — 2026-08-11entry.- Root
hunterx.yaml, v6 compose, v6 install docs and v6 config keys removed from active paths.
12. Security / Secret Final Scan
Automated scan across src, eng, tests, config, capabilities, docs,
alembic, scripts for API keys, tokens, passwords, private keys, cloud
credentials, and service-account material:
- No real secrets found. Every match is a documented dummy test fixture
(
AKIAIOSFODNN7EXAMPLE,ghp_AbCdEfGh…,xoxb-1234567890…,AIzaSyDummyFakeKey…) or a detection signature inside payload knowledge (e.g.BEGIN PRIVATE KEYstrings inghdb.json/ detector code). - Legitimate test fixtures were retained (they contain no sensitive material).
- Bandit gate: 0 Medium+ findings (2× B314 XXE fixed via
defusedxml).
13. License / Rights Consistency
LICENSE= Apache 2.0;pyproject.toml= Apache-2.0;NOTICEupdated; headers useSPDX-License-Identifier: Apache-2.0.- Ownership metadata (Ahmed Awad / NullC0d3) is consistent across
NOTICE,pyproject.toml,src/hunterx/__init__.py,docs/_config.yml,CODEOWNERS, Dockerfile labels and file headers. - No license was invented or changed; the existing Apache-2.0 license is preserved and referenced consistently.
14. Clean Installation Test
| Check | Result |
|---|---|
Fresh base venv, pip install hunterx (source) |
PASS — install exit 0 |
hunterx version |
HunterX v7.0.0 ✓ |
hunterx help |
command list ✓ |
hunterx config |
resolved settings ✓ |
hunterx platform |
platform composition ✓ |
hunterx tools list |
toolchain catalog ✓ |
hunterx mission create + hunterx mission start <id> (separate invocations) |
✓ (restore path) |
WSL Ubuntu 24.04 install.sh --user --core |
All checks passed |
WSL Ubuntu 24.04 install.sh --user (default extras) |
All checks passed |
Idempotent re-run of install.sh |
PASS — no corruption |
Alembic upgrade head (fresh DB) |
head a3f5b7c9d1e3 ✓ |
HUNTERX_DATABASE_URL / HUNTERX_LOG_LEVEL / HUNTERX_API_PORT env overrides |
✓ (implemented + tested) |
15. Clean Release Test
A release-like inspection of the working tree confirmed:
- no development artifacts (awesome-lists, temp/scratch files) ✓
- no AI-agent artifacts (OpenCode/DeepSeek/KiloCode references removed; SARIF
informationUrifixed) ✓ - no v6 active artifacts (flat package, v6 config, v6 docs, v6 compose all archived/removed) ✓
- no secrets ✓
- correct ownership metadata ✓
- correct installer (
install.shv7, verified) ✓ - correct documentation (v7 hub, 7/7 gate) ✓
- correct package metadata (v7) ✓
.gitignorecovers all generated artifacts ✓
16. Final Audit
| Requirement | Result |
|---|---|
| Full test suite | 3479 passed (baseline 3474 → +5, no regression) |
| ruff | PASS (was 133 errors) |
| mypy | PASS (eng + shared surface; gate scoped with --follow-imports=skip) |
| architecture tests | PASS (in-suite) |
| security tests | PASS (in-suite; bandit Medium+ clean) |
| installation test | PASS (WSL clean + idempotent) |
| migration test | PASS (upgrade head on fresh DB) |
| package/build test | PASS (wheel/sdist build, clean base install) |
| CLI test | PASS (version/help/config/platform/tools/mission chain) |
Regression comparison vs Sprint 034.6: test count increased by 5 (new config env tests + mission-restore tests); zero regressions.
034.6 blocker disposition
| 034.6 # | Severity | Disposition |
|---|---|---|
| K01 | P0 | v7 tree untracked in git — open (git-operation, see Remaining Issues) |
| K02 | P0 | Base install crash — FIXED (SQLAlchemy → base deps) |
| K03 | P1 | ruff 133 errors — FIXED |
| K04 | P1 | bandit B314 XXE ×2 — FIXED (defusedxml) |
| K05 | P1 | Mission not resumable / CLI chain broken — FIXED (TIDB restore path) |
| K06 | P1 | HUNTERX_* env config unimplemented — FIXED (+ tests) |
| K07 | P1 | vulture dead code ×3 — FIXED |
17. Remaining Issues
| ID | Severity | Area | Status |
|---|---|---|---|
| K01 | P0 | git | v7 tree (src/, eng/, tests/, alembic/, capabilities/, config/, v7 docs, 18 workflows, requirements.lock) is untracked — a clean main checkout cannot build/test/release v7 until it is committed |
| K08 | P2 | performance gate | performance gate flags its own benchmark tests >20s as “slow” and cannot pass as configured |
| K09 | P2 | persistence | legacy Sql*Repository.list() N+1, per-row save_many existence SELECTs |
| K10 | P2 | tests | tests/tools (80) excluded from default testpaths |
| K11 | P2 | persistence | tidb_mission_timelines read-model never written by the mission service |
| K12 | P2 | persistence | select-then-insert upsert race on concurrent first write |
| K14 | P2 | coverage | combined (branch-adjusted) coverage 77% vs 80% XML line-rate gate |
| K15 | P2/P3 | toolchain | ~30 knowledge-only adapters; binary integrity pinning; per-CPU rlimits |
| — | P3 | runtime | no DB failover/pre-ping retry hooks (deployment responsibility) |
| — | P3 | CLI | python hunterx.py shim shadows import hunterx in source checkouts (installed usage unaffected) |
18. P0 / P1 / P2 / P3 Classification
- P0 (1): K01 — git state (v7 tree not committed). Mechanical release step, not a code defect.
- P1 (0): none.
- P2 (5): K08 performance-gate self-fail, K09 SQL N+1, K10 tools-suite testpaths, K11 timeline read-model, K12 upsert race, K14 combined coverage.
- P3 (3): K15 toolchain gaps, runtime DB failover, root
hunterx.pyshim note.
19. Release Readiness
- Quality gates green: pytest, ruff, mypy, deadcode, bandit, docs, architecture, hygiene, compliance, dependencies, lock consistency.
- Code-level P0s/P1s resolved: base install, XXE, ruff, vulture, mission restore, env config.
- Sole remaining blocker: committing the v7 release tree (K01) so that CI and release tooling validate v7 from a clean checkout.
20. Final Decision
RELEASE BLOCKED — by exactly one blocker:
| ID | Severity | File/Module | Problem | Required fix |
|---|---|---|---|---|
| K01 | P0 | repository (git index) | The complete v7 release tree (src/, eng/, tests/, alembic/, capabilities/, config/, v7 docs/, .github/workflows/ additions, requirements.lock) is untracked and the retired v6 tracked files are deleted; a clean main checkout cannot build, test, install or release HunterX v7, and GitHub CI cannot validate it |
Stage and commit the v7 release tree (git add of the v7 files + git rm of the archived/removed v6 files) and re-run the CI suite against a clean checkout |
All engineering, hygiene, installation, documentation, ownership and security
work for Sprint 035 is complete and verified. Once K01 is executed (a
mechanical git add/commit), the release is ready.
END SPRINT 035