Skip to content

[spark-compete wave 1] install & build right — 30 PRs → 6 consolidated commits#1455

Draft
vibeforge1111 wants to merge 6 commits into
masterfrom
spark-compete/wave1-install-build
Draft

[spark-compete wave 1] install & build right — 30 PRs → 6 consolidated commits#1455
vibeforge1111 wants to merge 6 commits into
masterfrom
spark-compete/wave1-install-build

Conversation

@vibeforge1111

Copy link
Copy Markdown
Owner

Spark Compete — Wave 1: "install & build right" (first installer release)

First execution wave from the Spark Compete maintainer audit. Consolidates 30 reviewed-and-accepted Wave-1 PRs (open + resurrected-from-closed) into 6 coherent, conflict-free commits on the install/build surface. Merging the 30 branches individually would cascade conflicts on cli.py; this groups them by concern with maintainer-completion applied.

Commits

  1. input-hardening — module-name sanitization ([spark-compete] fix(security): sanitize module name extracted from git URL to prevent path traversal #1432), SQL column allowlist ([spark-compete] fix(security): validate column names against allowlist before SQL interpolation in system_map #1434), malformed-package tolerance ([spark-compete] tolerate malformed package scripts #1423), unicode/homoglyph prompt-injection defense ([spark-compete] fix(security): add Unicode normalization to prompt injection scanner to prevent homoglyph bypass #1425). Maintainer added the missing normalize_unicode test.
  2. approval-gating (adopt_interim) — require approval for container-escape ([spark-compete] fix(security): require approval for docker exec, nsenter, and chroot #1440) and identity-mutation ([spark-compete] fix(security): require approval for user and group account mutations #1441) commands. Re-home note: on the CLI→harness-core migration, move these detectors into the Governor approval classifier (authority plane), not string matching.
  3. cli-robustness — provider-key errors (fix(cli): accurate error when provider key is managed externally #239), partial doctor report (fix(cli): save partial doctor report even when LLM probe fails #241), trace dedup (fix(system_map): deduplicate trace repair queue entries by (component, event_type) #238), SPARK_HOME write-guard (fix(cli): exclude SPARK_HOME from write_denied_prefixes — unblocks live start / update on root installs #246), restart/SSH/install fixes (fix: restart exit code, stop_module PID safety, SSH JSON error, install.sh word splitting #81), Windows installer preflight (Fix Windows installer preflight when python3 app alias fails #210).
  4. cli-ux — bare-subcommand menus (fix(cli): helpful menus for bare 'spark os', 'spark providers', 'spark support' #242, fix(cli): helpful message for bare 'spark recommend' + clarify --desktop help text #240), Android/Termux Desktop fallback ([spark-compete] fix: fallback Desktop path for Android/Termux where ~/Desktop does not exist #283).
  5. redaction — nine path/secret-redaction PRs (all @Esc1200) consolidated into one pass; _PATH_REDACT_RE narrowed to real filesystem roots so URL paths aren't over-redacted; removed an accidentally-committed packet file.
  6. misc-output — trace-ref cap ([spark-compete] enhance(top): inspect_builder_event_samples top_trace_refs returns up to 19 (not 20) when [missing] is among the top counted refs #1428), builder-overlap disclosure guard ([spark-compete] fix(builder): Builder overlap probes report matched count without disclosing the 500-id sample cap #1410), --lines help ([spark-compete] enhance(spark): spark live logs --lines flag has no help text; operators can't tell 0=all from 0=new-only #1407), uninstall feedback + args.target guard (fix(cli): preserve uninstall feedback when a named target hits empty registry #1439), list-output path cleanup ([spark-compete] fix: remove internal module paths from CLI output and status notes #1427).

Maintainer changes worth review

Verification

python -m compileall src/spark_cli clean; new tests (test_prompt_injection_unicode.py, test_approval_wave1.py) pass; full suite runs in CI.

Excluded

driasim/"Rayiea Hub" fraud PRs (README no-op markers behind fabricated CVSS packets) and duplicate-splits are not here — zero credit per ruleset v2 §5.1.

🤖 Generated with Claude Code

Meta Alchemist and others added 6 commits June 24, 2026 12:59
…ormed-script tolerance, unicode injection defense

Consolidates spark-compete Wave-1 input-hardening PRs:
- #1432 sanitize module name from git URL (path traversal) — @ifeoluwaaj
- #1434 validate column names vs allowlist before SQL interpolation — @ifeoluwaaj
- #1423 tolerate malformed package scripts — @Aeyod7
- #1425 unicode normalization in prompt-injection scanner (homoglyph evasion) — @ifeoluwaaj

Maintainer completion: added tests/test_prompt_injection_unicode.py covering
normalize_unicode + homoglyph-obfuscated injection detection (#1425 headline shipped untested).

Co-authored-by: ifeoluwaaj <ifeoluwaaj@users.noreply.github.com>
Co-authored-by: Aeyod7 <Aeyod7@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ntity-mutation commands

Consolidates spark-compete Wave-1 approval PRs (@mrxlolcat):
- #1440 require approval for docker exec, nsenter, chroot (container_privilege_escalation)
- #1441 require approval for user/group/credential mutations (identity_access_mutation)

adopt_interim: this CLI-surface approval classifier is the still-live gate; on the
CLI->harness-core migration it must be re-homed into the Governor approval classifier
(authority plane), not left as string matching. No data migration.

Maintainer completion: hand-merged #1441's classifier block (line-drift conflict with
#1440 in approval.py/test_cli.py) and added tests/test_approval_wave1.py.

Co-authored-by: mrxlolcat <mrxlolcat@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ace dedup, SPARK_HOME write-guard, restart/SSH/install fixes

Consolidates spark-compete Wave-1 CLI-robustness PRs (resurrected from reviewed-but-unadopted):
- #239 accurate error when provider key is managed externally — @mrxlolcat
- #241 save partial doctor report even when LLM probe fails — @mrxlolcat
- #238 deduplicate trace repair queue entries — @mrxlolcat
- #246 exclude SPARK_HOME from write_denied_prefixes (unblocks live start/update) — @mrxlolcat
- #81  restart exit code, stop_module PID safety, SSH JSON error, install.sh word-split — @binance1230
- #210 Windows installer preflight when python3 app alias fails — @codex

Maintainer completion: 3-way rebased onto current master; stripped the bundled
registry.json commit-pin bumps (unauthorized attestation-pin regression).

Co-authored-by: mrxlolcat <mrxlolcat@users.noreply.github.com>
Co-authored-by: binance1230 <binance1230@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…fallback

Consolidates spark-compete Wave-1 CLI-UX PRs (resurrected):
- #242 helpful menus for bare 'spark os' / 'spark providers' / 'spark support' — @mrxlolcat
- #240 helpful message for bare 'spark recommend' + clarify --desktop help — @mrxlolcat
- #283 Android/Termux Desktop fallback when ~/Desktop does not exist — @johncrossu

Maintainer completion: applied #240 paired with #242's required=False relax (else the
guard is dead code); stripped #283's bundled registry.json bump.

Co-authored-by: mrxlolcat <mrxlolcat@users.noreply.github.com>
Co-authored-by: johncrossu <johncrossu@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…acing CLI output

Consolidates nine spark-compete Wave-1 path-redaction PRs (all @Esc1200) into one
coherent pass — credited as a single systemic group (ruleset v2 §5.2), not nine fixes:
- #1406 secret file path leak in error message
- #1408 redact paths from spawn failure errors
- #1421 redact SPARK_HOME from purge safety error
- #1422 generic text for manifest_path in SystemExit messages
- #1424 redact browser-use print paths (basename reference kept)
- #1429 remove internal path leaks from CLI prints
- #1430 redact hook/log paths from list output
- #1409 redact internal paths from gaps markdown report
- #1426 remove operator/log path leaks

Maintainer completion:
- narrowed _PATH_REDACT_RE to anchor POSIX paths to known roots + ~ + Windows drives,
  so URL paths (/api/v2/users) and slashy text (and/or, 3/4) are no longer over-redacted;
- removed compete-packet-operator-path-leak.json accidentally committed in #1426.

Co-authored-by: Esc1200 <Esc1200@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…--lines help, uninstall-feedback + list/output cleanups

Consolidates remaining spark-compete Wave-1 CLI-output PRs:
- #1428 inspect_builder_event_samples top_trace_refs cap — @4gjnbzb4zf-sudo
- #1410 Builder overlap probes report matched count without disclosing the match — @4gjnbzb4zf-sudo
- #1407 'spark live logs --lines' help text — @4gjnbzb4zf-sudo
- #1427 remove internal module paths from CLI list/status output — @Esc1200
- #1439 preserve uninstall feedback when a named target hits empty registry — @4gjnbzb4zf-sudo

Maintainer completion:
- #1407/#1410: dropped ALL bundled registry.json commit-pin bumps (unauthorized
  attestation regression); kept only the cli.py help string / probe_cap fields;
- #1427: dropped the leaked trailing module.path column instead of duplicating the
  name column (the PR's {module.path}->{module.name} swap created a dup);
- #1439: hardened args.target access with getattr(args, "target", None).

Co-authored-by: 4gjnbzb4zf-sudo <4gjnbzb4zf-sudo@users.noreply.github.com>
Co-authored-by: Esc1200 <Esc1200@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant