Skip to content

feat: close all 8 out-of-scope items from earlier today#62

Merged
escapeboy merged 1 commit intodevelopfrom
feat/close-all-out-of-scope
May 4, 2026
Merged

feat: close all 8 out-of-scope items from earlier today#62
escapeboy merged 1 commit intodevelopfrom
feat/close-all-out-of-scope

Conversation

@escapeboy
Copy link
Copy Markdown
Owner

Closes every item I marked out-of-scope in earlier 2026-05-04 sprints. Full implementation, no stubs.

8 items shipped:

  1. UpdateProjectAction settings-payload support
  2. CI architecture test for Livewire Gate::authorize coverage (108 pre-existing gaps allowlisted, future blocked)
  3. Profile/Notification cross-user audit + update-self gate
  4. METR Time-Horizon Dashboard at /metrics/time-horizon
  5. Per-agent tool deny list (capability ACL, narrow scope)
  6. Memory drift monitor (cosine threshold 0.30, configurable)
  7. Browser harness chromium binding (Dockerfile + feature flag)
  8. Reverse Workflow YAML git sync (GitHub PR-merged webhook)

Tests: 3084 pass, 6 pre-existing SocialLoginTest failures unchanged. Pint + PHPStan clean.

🤖 Generated with Claude Code

Closes every item flagged "out of scope" in earlier sprints today.
No 501-deferred stubs, no placeholders, no hardcoded thresholds.

1. UpdateProjectAction settings-payload support — single-source-of-truth
   refactor; EditProjectForm now patches settings via the action instead
   of a separate $project->update() call.

2. CI architecture test (LivewireAuthorizeCoverageTest) — scans every
   Livewire component for write methods missing Gate::authorize. 108
   pre-existing gaps allowlisted with `livewire-authorize-sweep-2 sprint`
   reason; future regressions blocked by the test.

3. Profile/Notification cross-user audit — confirmed all 4 per-user forms
   (UpdateProfileInformationForm, NotificationPreferencesForm,
   NotificationBell, NotificationPreferencesPage) only write to
   auth()->user(). New `update-self` gate (always true in community,
   cloud-overridable) added to all 8 per-user write methods for explicit
   defense-in-depth.

4. METR Time-Horizon Dashboard at /metrics/time-horizon — aggregates
   AgentSession totals by status, P50/P99 durations, LLM cost, tool
   failures, handoff count, sessions/day for last 28d. Pure read.

5. Per-agent capability ACLs — new agents.tool_deny_list JSONB column;
   ResolveAgentToolsAction filters out denied tool IDs; new MCP tool
   agent_tool_deny_set. Narrow scope (deny-list only, not full ACL
   framework) — covers the actual operator use case.

6. Memory drift monitor — new memories.embedding_at_creation pgvector
   column (guarded with pg_extension lookup); MemoryDriftDetector service
   with configurable threshold (default 0.30 cosine); memory:check-drift
   --notify daily command at 04:15; memory_drift_status MCP tool.

7. Browser harness chromium binding — chromium + chromium-chromedriver
   added to docker/sandbox/Dockerfile. CHROME_BIN env var. Feature flag
   browser.harness_enabled (default false) — handler returns "disabled"
   error when off, real Process::run when on. Existing tests updated to
   set the flag.

8. Reverse Workflow YAML git sync — POST /api/webhooks/github/workflow-yaml/{teamId}
   handler with HMAC-SHA256 signature verification (per-team
   git_webhook_secret column or global GITHUB_WORKFLOW_WEBHOOK_SECRET
   fallback); fetches PR diff via GitHub API; dispatches
   ImportWorkflowFromYamlJob for each workflows/*.yaml file in the diff.

Tests: 3084 pass, 6 pre-existing SocialLoginTest failures unchanged.
Pint clean. PHPStan clean (parent + base) — no baseline regenerated.

Migrations (3): tool_deny_list, embedding_at_creation, git_webhook_secret.
New MCP tools: agent_tool_deny_set, memory_drift_status.
New routes: /metrics/time-horizon, /api/webhooks/github/workflow-yaml/{teamId}.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
@escapeboy escapeboy merged commit ae50795 into develop May 4, 2026
2 checks passed
@escapeboy escapeboy deleted the feat/close-all-out-of-scope branch May 4, 2026 12:46
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