Commit Graph
402 Commits
Author SHA1 Message Date
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 86b248e89a feat(fix-coverage-config): add .coveragerc with placeholder module omissions and exclude plain-text output helpers
- Create skills/binary-analysis/.coveragerc omitting reporting/, rules/, worker/, adapters/ghidra/
- Add # pragma: no cover to plain-text output formatting helpers in cli/main.py
- Exclude argparse validators and non-JSON error handler branches from coverage
- Coverage improved from 38.26% to 39.31% (close to 40% foundation threshold)

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 20:53:26 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 801a5be65f feat(json-contracts): implement JSON contract consistency across all commands
Implement JSON envelope contract enforcement: pagination with opaque
next_page_token (null on last page), default page size 100 and max 1000
with clamping, partial success envelope, empty collections as [],
backend-specific data under extensions.<backend>, enriched provenance
(base 7 fields + project/binary/architecture/profile context),
structured warnings (severity/message/category), and bootstrap-to-doctor
roundtrip integration test.

- Add cli/helpers.py with shared pagination, provenance, warning, and
  diagnostic utilities to avoid circular imports
- Add platform field to default provenance (now 7 base fields)
- Add enrich_provenance() for project_id, binary_id, binary_sha256,
  architecture, and analysis_profile context
- Add build_paginated_response() with opaque next_page_token (null on
  last page)
- Add clamp_page_size() with default 100 and max 1000
- Add make_warning() with severity/message/category structure
- Add make_partial_success() for partial=true, diagnostics non-empty
- Add ensure_collection() for empty->[] guarantee
- Add --require-ready flag to doctor command for roundtrip validation
- Add 51 contract tests validating JSON contract assertions
- Fix existing tests for new pagination field names

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 20:21:23 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 55c145185f feat(doctor-bootstrap): implement doctor, bootstrap, and version commands
- Doctor detects missing dependencies (Java, Ghidra, PyGhidra) with
  severity, component, message, and remediation hints. Returns exit code 3
  when deps are missing, exit code 0 when all healthy.
- Bootstrap --plan shows install targets without mutation (name, status,
  action, source). Returns exit code 3 when deps missing.
- Bootstrap --apply attempts to install missing deps (PyGhidra via pip)
  with verification. Reports partial failure with reason.
- Checksum verification fails closed on mismatch (ValueError).
- Version reports cli_version, schema_version, workspace_version,
  adapter (name+version), backend (name+version), platform.
- All commands produce valid JSON envelope with all required fields.
- 45 new tests across test_doctor.py, test_bootstrap.py, test_version.py.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 20:08:59 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 756b50e285 feat(project-lifecycle): implement all project lifecycle commands and state machine
Implement create, list, status, clean, remove, and migrate commands with
full state machine enforcement including FAILED transitions and staleness
detection. Project create produces workspaces with UUIDs and rejects
duplicates. List returns cursor-based paginated results. Status reports
full state with exit code 6 for nonexistent projects. Clean resets FAILED
to CREATED with confirmation gate. Remove deletes workspaces with
confirmation and --dry-run support. Migrate supports --plan and --apply
with lock rejection.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 19:58:58 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> defe46c138 feat(project-system): implement workspace, manifest, locking, and cache
Implement the full project system with atomic write patterns (tempfile +
os.rename) for all persistent state, file-based locking for concurrent
access serialization, corrupted manifest detection (exit code 4), and
cache management with path traversal prevention.

- atomic.py: atomic text, JSON, binary, append, and lines writes
- workspace.py: directory structure management, project name validation
- manifest.py: load/save/create/update with corruption detection
- lock.py: file-based locking with stale lock detection and atexit cleanup
- cache.py: key-value cache with validation and atomic writes
- 123 unit tests covering all modules

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 19:49:42 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 6184673f35 feat(fake-backend): implement FakeAdapter with controllable backend testing
Implements the FakeAdapter - a fully controllable in-memory backend adapter
that implements the BackendAdapter interface for deterministic testing.

Includes:
- Abstract BackendAdapter interface (base.py) with all canonical methods
- FakeAdapter (fake.py) implementing the full interface with:
  - Configurable responses for all structural query types (sections,
    entrypoints, imports, exports, symbols, strings, functions)
  - Import failure simulation (exit code 10)
  - Analysis crash simulation (exit code 11)
  - Backend failure simulation (exit code 13)
  - Slow operation and timeout simulation
  - Unmapped address ranges, partial mapping, and truncation
  - Custom binary fixture registration
- Built-in fixture helpers for PE, ELF, and Mach-O binaries with
  deterministic section/function/import/export layouts
- 75 unit tests covering all adapter methods, failure modes, slow ops,
  address mapping edge cases, and fixture integrity

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 19:41:05 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 3481663595 feat(domain-foundation): implement canonical domain model with entities, enums, schemas, errors, and selectors
- Add 9 domain enums: ProjectState, Confidence, DiagnosticSeverity, ReferenceKind, Endianness, FunctionNameSource, ImportResolution, ReportType, AuditResult
- Create 21 domain entity dataclasses with canonical Address type (space, offset, display, file_offset)
- Implement JSON serialization helpers: address serialization as structured objects, enum serialization as UPPER_CASE, null handling, entity field whitelists
- Expand error hierarchy with all 13 canonical error types mapped to exit codes
- Create entity selectors for function/address resolution with ambiguity detection
- Improve plain-text output mode to be consistent with --json mode
- 188 unit tests covering enums, entities, schemas, errors, and selectors
- Ruff and mypy clean

Fulfills: VAL-CLI-015, VAL-CLI-016, VAL-STRUCT-017, VAL-JSON-003, VAL-JSON-004, VAL-JSON-006, VAL-JSON-013, VAL-JSON-018

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 19:33:44 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> e9397bbb54 feat(binary-analysis): implement CLI skeleton with argparse, JSON envelope, and exit codes
Implements the CLI entrypoint for the binary-analysis skill with:
- argparse-based argument parsing with global flags (--json, --quiet)
- Subcommands: doctor, bootstrap, version, project (with sub-subcommands: create, list, status, clean, remove, migrate)
- Standard exit codes 0-13 with domain error types
- JSON envelope on every command: schema_version, command, generated_at (ISO 8601), duration_ms, success, partial, warnings, diagnostics, provenance, data
- Negative argument validation for --limit and --timeout
- Stub command implementations for future features

62 tests passing, ruff/mypy clean.
Fulfills VAL-CLI-010 through VAL-CLI-019, VAL-JSON-001, VAL-JSON-002, VAL-JSON-005, VAL-JSON-014, VAL-JSON-015.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 19:24:48 -04:00
Magnus HedemarkandGitHub 865a1e90c6 feat: fix remaining agent readiness signals for level 5
Squash merge. All CI passes.

4 signals fixed: min_release_age, issue_labeling_system, error_to_insight_pipeline, deployment_observability.
2026-07-29 18:33:55 -04:00
Magnus HedemarkandGitHub 6b44d6f490 feat: improve agent readiness with dev tooling, CI checks, and tests
All CI steps pass including the root pyproject.toml build fix.

14 signals addressed across 3 phases:
- Phase 1: single_command_setup, devcontainer, large_file_detection, tech_debt_tracking, duplicate_code_detection
- Phase 2: structured_logging, log_scrubbing, test_isolation, service_flow_documented, agents_md_validation
- Phase 3: integration_tests_exist, automated_security_review, runbooks_documented, issue_labeling_system
2026-07-29 18:23:26 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> bfe05ef18a feat(ci): add mypy, radon, and deptry to CI pipeline
Add mypy strict type checking, radon cyclomatic complexity analysis,
and deptry unused dependency detection. Fix type annotations in
eval-coverage.py and release.py to pass strict mypy checks.

Resolves 4 agent-readiness signals: type_check, strict_typing,
cyclomatic_complexity, unused_dependencies_detection.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 17:52:28 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 476d7e11b0 feat(ci): add linting, formatting, coverage, and security configs
Add ruff linter/formatter with pre-commit hooks, pytest-cov with 60%
coverage threshold, CODEOWNERS, Dependabot for pip/GHA updates, and
.env.example. Auto-fix existing ruff violations across eval_runner/
and scripts/.

10 agent-readiness criteria resolved: lint_config, formatter,
pre_commit_hooks, naming_consistency, dead_code_detection,
test_coverage_thresholds, test_performance_tracking, codeowners,
dependency_update_automation, env_template.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 17:43:41 -04:00
Magnus HedemarkandGitHub 55e5ba4b7c Merge pull request #166 from magnus919/fix/chief-task-discipline
Require dated commitments for chief-of-staff tasks
2026-07-29 11:11:15 -04:00
username f285316206 fix: state CoS task-capture boundary 2026-07-29 11:08:05 -04:00
username 857dfc6e1c fix: require dated commitments for CoS tasks 2026-07-29 10:54:17 -04:00
Magnus HedemarkandGitHub c47f604482 Merge pull request #165 from magnus919/chore/remove-comic-chat 2026-07-27 10:06:55 -04:00
username 687d7d7c33 fix: permit removal of eval-covered skills 2026-07-27 10:04:27 -04:00
username 6e08216dcd chore: remove comic-chat skill 2026-07-27 09:53:39 -04:00
Magnus HedemarkandGitHub b84b4aa43f Merge pull request #162 from magnus919/feat/comic-chat 2026-07-27 07:48:51 -04:00
username 2494a66395 feat: add comic chat PNG renderer skill 2026-07-27 01:41:29 -04:00
Magnus HedemarkandGitHub 49b2bbc472 Merge pull request #108 from magnus919/release-please--branches--main
chore(main): release 0.5.0
v0.5.0
2026-07-26 23:38:04 -04:00
github-actions[bot]andGitHub 8cbb91aeb9 chore(main): release 0.5.0 2026-07-27 01:22:41 +00:00
Magnus HedemarkandGitHub 4b60a2efa0 Merge pull request #160 from magnus919/fix/skillopt-grafana-3epochs
fix: require evidence for Grafana dashboard defaults
2026-07-26 21:22:17 -04:00
username 4ecc536ad1 fix: require evidence for Grafana dashboard defaults 2026-07-26 21:21:00 -04:00
Magnus HedemarkandGitHub e62152cf6b Merge pull request #161 from magnus919/feat/pace-plan
feat(skill): add PACE plan lifecycle
2026-07-26 21:19:39 -04:00
username bba2b84346 docs(skill): align PACE verification status
Signed-off-by: username <username>
2026-07-26 21:16:16 -04:00
username f62a5de4a0 fix(skill): finalize PACE delivery evidence
Signed-off-by: username <username>
2026-07-26 21:14:38 -04:00
username 64383d9aa5 feat(skill): add PACE plan lifecycle
Signed-off-by: username <username>
2026-07-26 21:11:42 -04:00
Magnus HedemarkandGitHub cfbcfb09ec Merge pull request #158 from magnus919/fix/raleigh-rpd-live-queries
fix(raleigh): restore live RPD queries
2026-07-26 20:06:02 -04:00
Magnus Hedemarkandusername 6164632151 test(raleigh): cover empty police canary responses 2026-07-26 20:03:33 -04:00
Magnus Hedemarkandusername 3e4b651681 test(raleigh): prevent false-green police canaries 2026-07-26 20:02:14 -04:00
Magnus Hedemarkandusername 4a23562e59 fix(raleigh): restore live RPD queries 2026-07-26 19:58:54 -04:00
Magnus HedemarkandGitHub 4c824b7a09 Merge pull request #156 from magnus919/feat/grafana-skill
feat(grafana): add operations skill
2026-07-26 19:41:50 -04:00
Magnus Hedemark e304366915 feat(grafana): add operations skill 2026-07-26 19:37:08 -04:00
Magnus HedemarkandGitHub dcd6f59fe3 Merge pull request #155 from magnus919/feat/raleigh-public-safety-statistics
feat(raleigh): expose official public safety statistics
2026-07-26 18:59:48 -04:00
Magnus Hedemarkandusername 1bd7b06112 fix(raleigh): enforce publication request contracts 2026-07-26 18:56:09 -04:00
Magnus Hedemarkandusername cc26b4cb27 fix(raleigh): bound publication source contracts 2026-07-26 18:52:02 -04:00
Magnus Hedemarkandusername 07c2ae2e8f fix(raleigh): normalize statistics source failures 2026-07-26 18:47:32 -04:00
Magnus Hedemarkandusername f3dfb68832 fix(raleigh): normalize report probe failures 2026-07-26 18:44:48 -04:00
Magnus Hedemarkandusername 9f2e4b681c fix(raleigh): validate included resource identifiers 2026-07-26 18:41:19 -04:00
Magnus Hedemarkandusername 5f74b4dde5 fix(raleigh): reject malformed content identifiers 2026-07-26 18:38:28 -04:00
Magnus Hedemarkandusername 8becc22822 fix(raleigh): fail on missing statistics sections 2026-07-26 18:36:01 -04:00
Magnus Hedemarkandusername bf69aa1689 fix(raleigh): validate statistics response shapes 2026-07-26 18:33:14 -04:00
Magnus Hedemarkandusername b030f2607c feat(raleigh): add official public safety statistics 2026-07-26 18:30:09 -04:00
Magnus HedemarkandGitHub 12b650e6dc Merge pull request #154 from magnus919/feat/raleigh-rfd-reports
feat(raleigh): add guarded fire report lookups
2026-07-26 18:09:34 -04:00
username 4eaf5aa7ea feat(raleigh): add guarded fire report lookups 2026-07-26 18:07:23 -04:00
usernameandMagnus Hedemark 6b467dffb2 fix: allow incidental text in cyberpunk image briefs 2026-07-26 14:14:10 -04:00
Magnus HedemarkandGitHub 34fab96b8e fix: require causal layer maps for cyberpunk image briefs
fix: require causal layer maps for cyberpunk image briefs
2026-07-26 11:49:41 -04:00
username c514c85fc1 fix: require causal layer maps for cyberpunk image briefs 2026-07-26 11:44:46 -04:00
10054621ce fix(skills): rename gibson-cyberpunk to cyberpunk (#150)
Co-authored-by: username <username@users.noreply.github.com>
2026-07-26 10:35:36 -04:00