feat: add portable project bundles - #7181
Conversation
GPT 5.6 Review — 🔴 changes requested (blocking)GPT 5.6 found at least one blocking issue that must be resolved before merging This comment is updated in place on each push. BLOCKING -- website/src/pages/ProjectBundlesPage.tsx:116 -- Project failures bypass the required error surface Adjudication (Opus 4.8) — is blocking on each finding proportionate?The finding anchors to Harm rung: N/A — anchored to a False positive or not applicable? A repository writer can comment: |
UX Review (Fable 5) — 🟡 CONCERNSUX-level review of UX-Verdict: CONCERNS Solid, coherent surface — but the remove confirm reassures while it force-deletes session work, and the repair path hides exactly when a project breaks. Watch
Suggestions
[UX-REVIEWED] c5c308a |
First Principles Review (Fable 5) — 🟡 CONCERNSPremise-level review of All evidence gathered. Producing the review. First-Principles-Verdict: CONCERNS Bundle skills get a second, parallel trust store while the updated RFC still names the existing #3551 per-directory grant as the mechanism — plus dead registry surface. What this change shipsIntent: let one named, credential-free bundle carry repos/agents/skills/MCP so the same working context is usable on any install. ADDITION.
Watch
Subtractions
[FIRST-PRINCIPLES-REVIEWED] c5c308a |
Opus 4.8 Review — ✅ no blocking findingsReviewed Review detailsThe candidate is statically accurate: No grounded Step 2 finding surfaced while verifying. No findings. [OPUS-REVIEWED] c5c308a Verdict parsed from the review's SHA-scoped output markers for commit False positive or not applicable? A repository writer can comment: |
Design Review (Fable 5) — 🟡 CONCERNSDesign-level review of All three investigations are complete. The trust core is sound (digest-bound trust, materialize-by-copy, namespaced install, revoke-on-digest-change, uniform runtime governance — no bypass), specs and RFC were genuinely updated, and shared infrastructure was reused rather than forked. Three design-level risks survived the kill-filter: a manifest field that escapes the review digest, a portable format with no in-v1 extension path, and a trust confirmation that attests to content the UI never shows. Design-Verdict: CONCERNS Trust core is sound, but Watch
Suggestions
[DESIGN-REVIEWED] c5c308a |
f7c851a to
f507017
Compare
f507017 to
d27d891
Compare
d27d891 to
58b940a
Compare
58b940a to
32c0682
Compare
8ac397b to
e08705a
Compare
e08705a to
5d1db8e
Compare
0585f7c to
add0611
Compare
add0611 to
b31ab8a
Compare
|
/ai-review override gpt 485cdce: Editable metadata is restricted to the owner-only editor and intentionally preserves original values so partial saves cannot persist redaction markers; display fields stay redacted and the regression test pins this contract. |
Human judgment recorded@kyleseaman marked the gpt AI finding as false positive, not applicable, or explicitly accepted for
This decision applies only to this commit. A new push requires a new judgment. |
Open PR relationship auditThis is a consolidated, point-in-time code-level audit note. It compares complete merge-base diffs and current/merged code; it does not treat a shared topic as duplication or partial coverage as completion. Relationship findings
No PR, Issue, label, branch, or review state was changed by the relationship-note portion of this audit. |
Add local and Git-backed Projects that bundle repositories, agents, skills, and MCP configuration. Integrate Projects with session creation and expose the experience under Agent Capabilities.
|
🤖 Kiro Crew [operator: NicholasRBowers#a942f9ca]: This PR has been inactive for 7+ days. I reviewed the blockers but they require your input:
When you've addressed these, the pipeline will re-assess on its next cycle. |
Summary - add portable Project bundles with stable identity and no user identity, loaded from a local folder or a managed Git clone - put Projects under Agent Capabilities, with a focused list/detail/create/add/sync flow that supports multiple repositories, agents, skills, and MCP configuration - let a Project be selected when creating a session and show the Project name in-session while resolving the full multi-repository workspace for the agent - add owner-gated capability review, trust, activation, refresh, and withdrawal with namespaced materialization and Project MCP provenance - keep v1 manifest editing as an ordinary file-and-Git workflow; sync or remove/re-add applies external
|
| | Reviewed capabilities active | Project attached to a session | | --- | --- | |
|
| ## Verification - Project backend suite: 707 passed - focused Projects UI and bundle-gate suite: 180 passed - production portal analyze build and bundle-size gate passed - Python formatting, focused flake8, Linux-parity mypy, subprocess-encoding, docs, TypeScript, ESLint, and clean diff checks passed - offline browser E2E now covers the external Git edit → Project sync → trust → multi-repo session flow; targeted real-gateway Chromium run passed (2/2); exact-head CI is rerunning ## Notes - no linked issue: this feature was developed directly from the Projects RFC - this intentionally lands as one vertical feature PR: splitting the manifest, trust boundary, session contract, and UI would leave partial states that are not independently useful or safe to ship - the two open repository-wide Dependabot alerts are transitive development dependencies inherited from the base lockfile and are being handled by dedicated PRs #7766 and #7767; this PR does not modify dependency manifests -
project.yamlchanges - update the Projects RFC and system specifications to match the shipped v1 contract ## Safety and compatibility - keep bundle content inert until explicit owner trust and SEL audit; bind approval to a content digest over repo declarations, context selectors, agent JSON, skill trees, and MCP JSON - show agent names and exact MCP server commands, arguments, and URLs before a separate trust confirmation - withdraw an active materialization on sync when that digest changes, requiring explicit owner re-review instead of silently installing upstream capabilities - do not expose an in-app manifest replacement endpoint until the filesystem destination can be updated with a true atomic compare-and-swap - clone each derived repository source once, then reuse that validated checkout as a disclosed stale cache without reopening it by name for Git writes; removal and re-addition rebuild derived state - audit allowed and denied Project authorization decisions, reject control characters in workspace paths before prompt construction, accept only canonical persisted Project UUIDs, and keep blocking path resolution off the gateway event loop - redact Project attachment failures before dashboard JSON, diagnostic logs, or persisted and broadcast session errors - redact credentials and exfiltration URLs from Project briefs before model context, reject decoded Git control characters, and fail closed on corrupt activation state or registry path loops - preserve configuration-equal MCP entries that the owner reclaims by removing Project provenance - reject malformed persisted Project ids during both restart restore paths and keep Git transport tests independent of host sandbox availability while pinning production fail-closed behavior - reject credentials, embedded grants, sensitive Git paths, networkfile://authorities, path escapes, links, hardlink aliases, recursive YAML, and alias-amplified manifests - resolve relative repo paths against the declaring bundle before both the security decision and Git clone - use descriptor-pinned or opened-handle-validated reads for the manifest and bundle-owned executable JSON - preflight fetched Git blob size before buffering a remote Project manifest - drop and audit Project briefs that match prompt-injection screening, neutralize structural markers in benign briefs, and reconcile Project MCP revocation inside the final rendered-config lock - preserve the legacy Task Runner/api/projectscontract and keep local credentials/install identity out of the portable manifest ## Screenshots | Projects in Agent Capabilities | Project details | | --- | --- | |CHANGELOG.mdis intentionally untouched; release notes remain release-PR owned