Skip to content

v11 Strategy Sprint complete — profiles, metadata, quick analysis, feature gating #32

@USTungsten

Description

@USTungsten

Sprint summary

The v11 Strategy Sprint is complete on main (commit 4d16fcc).

The sprint locked the forensic data surface for the full multi-profile product (Racer / Research / Shop & Repair / Factory & QA / Gov & Mil / Advanced / Default) without building billing, cloud, or cosmetic polish.

What shipped

  • Case metadata — 30+ optional fields covering operational context, platform/system, human/org, and investigation outcome. Fully backward-compatible (unknown keys filtered on load).
  • Attachment modelAttachment dataclass + AttachmentType enum. Full CRUD routes under /api/cases/{id}/attachments/... with per-case manifest.
  • Profile system — Data-driven ProfileConfig registry for all 7 profiles, WordingPack for profile-specific terminology, get_profile() with default fallback. Exposed via GET /api/profiles and GET /api/profiles/{id}.
  • Timeline — Formal TimelineEvent model with type and category enums. build_timeline_from_findings, build_timeline_from_flight, build_full_timeline. Persisted as analysis/timeline.json during analyze runs. Route now returns v2.0 schema with legacy fallback.
  • Hypothesis — New fields category, recommendations, related_timeline_events, generated_by. Lifting assigns category per theme, attaches default recommendations, and applies a missing-data confidence penalty from ParseDiagnostics.stream_coverage.
  • Feature gating scaffoldgoose.features.FeatureGate with EntitlementLevel (OSS_CORE → LOCAL_PRO → HOSTED_TEAM → ENTERPRISE_GOV) and CapabilityGroup. GET /api/features exposes current state. No billing logic; OSS build always runs at OSS_CORE.
  • Quick Analysis flowPOST /api/quick-analysis runs the full forensic pipeline (parser + plugins + hypotheses + signal quality + timeline) without persisting anything. Profile-driven plugin selection. POST /api/quick-analysis/save-as-case promotes the result into a real Investigation Case.
  • GUI welcome screen — Three entry paths (Quick Analysis, Investigation Case, Open Recent Case). Profile selector on the Quick Analysis panel, inline result rendering, and a one-click Save-as-Case action. Default tab switched to welcome on boot.

Tests

  • 59 new tests in tests/test_profiles/:
    • test_profiles.py — profile registry, roundtrip, API (15)
    • test_case_metadata.py — case metadata, attachment model, attachment API (16)
    • test_feature_gating.py — entitlement levels + /api/features (15)
    • test_timeline.py — timeline event builders + serialization (8)
    • test_quick_analysis.py — quick-analysis pipeline + save-as-case (5)
  • 2 pre-existing timeline route tests updated for the v2.0 schema.
  • 620 tests passing (561 baseline + 59 new).

Engineering rules honored

  • No billing / cloud / licensing code in the core.
  • Quick Analysis persists nothing to disk.
  • Profile system never changes forensic truth — same parser, plugins, canonical models.
  • Font size ≥ 12px in all new GUI elements.
  • Vanilla JS only.
  • All new dataclasses have to_dict / from_dict with unknown-key filtering.

Deferred

  • Billing + entitlement enforcement.
  • Hosted collaboration, org admin, batch processing UIs.
  • Profile-aware report generators.
  • Real plugin matches for some profile-declared ids (e.g. ekf_health, ekf_innovation chart preset) — profiles accept unknown plugin ids safely; runner filters to PLUGIN_REGISTRY membership.

Recommended next sprint

  • Wire profile defaults into the case-based analyze route (currently only Quick Analysis consumes default_plugins).
  • Render profile wording + field visibility in the GUI case detail view.
  • Profile-aware chart presets on the results view.
  • Add an ekf_health plugin to match Research / Gov-Mil profile expectations.
  • First profile-specific report generator (Mishap Investigation Report for Gov/Mil).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions