You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat(report): P-REPORT.9 — multi-repo remote fetch + PR aggregation for the Engineering Report (ADR-0160)
The Engineering Report was blind to anything not already on one repo's local
default branch. This adds a repo picker (workspace ∪ recents ∪ tracked repos,
plus add-by-path/clone-URL), a read-only `git fetch` per selected repo (never a
pull — no working-tree mutation), recent-commit aggregation across branches, and
opt-in GitHub PR listing via `gh` — folded into a new "Cross-repo activity" annex.
- harness/brief/repo_activity.ts (+test): PURE parser/renderer; untrusted commit/
PR text escaped + fence-stripped + capped before the markdown (invariant #5).
- desktop/repo_collect.ts: first-party fetch/branch/log/gh collector (fail-soft,
timeouts), like cloneRepo — not the agent gate.
- /api/brief POST + /api/report/repos(/add); settings reportRepos; bridge methods.
- Reports panel: checkable repo picker with remote-URL verify surface + per-repo PR
toggle (GitHub + gh-auth gated), and a hero Generate button with the rail-pill
chasing-light border. Rail fly-outs now toggle closed on a second click.
Verified: 25 unit tests + demo-P-REPORT.9 green; renderer suite 134 pass; live
across public (mlcyclops/lucidagentide) + private (TechLead187/lucidagentIDEaddon)
repos — commits across 8 branches each + PRs, working trees untouched.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(ui): pin composer on short windows + report repo sort (Recent/Name)
Composer clipping: the .body grid's implicit row was content-sized (`auto`), so a
tall column (chat+composer, or a full rail) overflowed the viewport and clipped the
prompt bar / mic when the window was shrunk vertically. Pin the row with
`minmax(0,1fr)` so columns shrink below content — the composer stays at the bottom
and the thread just gets shorter (still scrollable). The nav rail + metrics rail now
scroll instead of clipping; a short-window media query trims the composer footprint
(hides the keyboard hint) so ~3 lines of thread stay visible. Verified 250–380px.
Report repo sort: a Recent/Name picker in the Repositories header (persisted to
localStorage). listReportRepos now returns each repo's last-commit epoch; "Recent"
orders by it (desc), "Name" alphabetically. Sort affects display only — the active
workspace pre-check still keys off the server order.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(report): entity-escape pipes in clean() — resolve CodeQL js/incomplete-sanitization
clean() escaped `|` as `\|` (backslash) without escaping backslashes — an incomplete
sanitization scheme (CodeQL js/incomplete-sanitization, high). Switch to the `|`
HTML entity: table-safe (the markdown parser sees the entity, not a `|`), renders as
`|`, runs after the &-escape so the entity's & stays literal, and introduces no
backslash escaping at all.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: mlcyclops <mlcyclops@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: Makefile
+4Lines changed: 4 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -463,6 +463,10 @@ demo-P-FIGMA.2: ## P-FIGMA.2 (ADR-0154): after /figma import, a guided step —
463
463
demo-P-SANDBOX.1: ## P-SANDBOX.1 (ADR-0157): the runtime execution boundary — sandbox seam (bwrap/noop), canNetwork/canExec caps ENFORCED at the omp spawn (suspicious-chain downgrade = real --unshare-net), managed require-isolation fail-closes, disclosed passthrough elsewhere
464
464
$(BUN) run harness/scripts/demo_p_sandbox_1.ts
465
465
466
+
.PHONY: demo-P-REPORT.9
467
+
demo-P-REPORT.9: ## P-REPORT.9 (ADR-0162): multi-repo remote fetch + PR aggregation for the Engineering Report — remote-URL parse (GitHub vs not), commits aggregated across branches (deduped) + line totals, the Cross-repo activity annex, fail-soft on a failed fetch (local refs still shown), PRs skipped with a reason on non-GitHub/unauthed remotes, and untrusted commit/PR text neutralized (no HTML/fence breakout)
468
+
$(BUN) run desktop/scripts/demo_p_report_9.ts
469
+
466
470
.PHONY: dashboards
467
471
dashboards: ## Materialize dashboard CSVs from a DuckDB into observable/docs/data (DB=path)
468
472
$(BUN) run harness/scripts/materialize_dashboards.ts $(DB) observable/docs/data
Copy file name to clipboardExpand all lines: PROGRESS.md
+5Lines changed: 5 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3080,3 +3080,8 @@ Roadmap phases (each its own future increment + ADR for its frozen-contract delt
3080
3080
-**shipped:** harness/runs/sandbox_exec.ts (SandboxBackend bwrap|noop, pure resolveBackend, wrapForProfile = the single fail-closed decision point: managed require-isolation unsatisfiable => refuse; canExec:false => refuse-exec; canNetwork:false on a passthrough => refuse, under bwrap => --unshare-net total deny - the chooseProfile suspicious downgrade is finally REAL); wired at BOTH spawns (lucid_acp execGated: refused resolution = exit 1 pre-spawn like the scanner preflight + loud sandboxDisclosure() passthrough line; acp_backend resolveSandboxPlan: managed-require w/o backend spawns with EVERY exec permission denied + audited via existing SecurityEvent - no new EventNames, P-SANDBOX.3 owns those); security.exec.requireIsolation managed knob (+ GPO ExecRequireIsolation), tighten-only. 16+4 new tests (801 green), tsc x3 clean, standalone launcher still compiles, demo-P-SANDBOX.1 green. Merge housekeeping: local marketplace ADR renumbered 0156->0158 (upstream took 0156/0157).
3081
3081
-**stubbed:** bwrap mount plan binds $HOME rw (fs containment stays omp --isolate's; network is the v1 boundary); seccomp deferred (needs a compiled BPF fd); agent_run.ts spawnGatedOmp not yet routed through the seam; macOS/Windows have NO isolating backend (disclosed passthrough) until P-SANDBOX.4.
3082
3082
-**next:** P-SANDBOX.2 - egress_proxy.ts (loopback DNS + CONNECT proxy consulting egressDecisionDetailed) for canNetwork:true profiles; the increment that directly answers the DNS-TXT exfil.
3083
+
3084
+
**P-REPORT.9 - multi-repo remote fetch + PR aggregation for the Engineering Report (ADR-0162)**
3085
+
- **shipped:** harness/brief/repo_activity.ts (PURE: parseRemoteUrl/parseCommits/parsePrJson/buildRepoActivity + renderRepoActivityAnnex → the "Annex C - Cross-repo activity" markdown; clean() neutralizes untrusted commit/PR text - HTML escape + fence-breakout strip + pipe escape + cap, invariant #5); desktop/repo_collect.ts (fetch-only `git fetch --prune --no-tags`, for-each-ref branch enumeration capped at 8 by recency w/ origin-HEAD filtered, per-branch git log, window diff totals, gh PR list opt-in behind ghAvailable cache; listReportRepos/addReportRepo/collectRepoActivity - first-party spawn like cloneRepo, fail-soft + timeouts); /api/brief POST path + /api/report/repos(/add) endpoints; settings_store reportRepos; bridge reportRepos/addReportRepo + engineeringBrief(repos); Reports-panel repo picker (checkable rows + remote-URL verify surface + per-repo PR toggle gated on GitHub+gh-auth + Add-repo path/URL + Fetch-latest checkbox) + .rp-repo* styles. 25 tests + demo-P-REPORT.9 green; harness 826 pass/0 fail; verified live against real GitHub/GitLab/Azure-DevOps remotes.
3086
+
-**stubbed:** fetch-only (no pull/merge - deliberate); brief NARRATIVE still primary-repo DECISIONS/PROGRESS (only the annex is cross-repo); PRs GitHub-only (GitLab MRs / Azure DevOps detected + skipped-with-reason, not supported); no per-fetch formal audit event yet (fetch status is surfaced in the annex, reach-out is loopback first-party).
3087
+
-**next:** P-REPORT.10 candidates - GitLab/Azure PR providers; a formal SecurityEvent per fetch/PR reach-out; optional pull (ff-only) as an explicit opt-in; cross-repo narrative synthesis.
0 commit comments