Repository navigation
feat(projects): an agent can start a project for its owner — projects.manage + create_project / import_project (abilityai/trinity-enterprise#588) - #3339
Conversation
/review + test run (2026-10-07)Branch: Execution coverage
Tests (local)
Critical findingsNone. Informational findings[I1] The "Start projects" toggle shows on builds that have no projects module (Confidence: 8/10) [I2] A capability whose only enforcement is in a private module (Confidence: 6/10) Summary
🤖 Generated with Claude Code |
73ea1c0 to
4785b99
Compare
08362ff to
2196f9c
Compare
|
Rebased onto the current #3330 head ( trinity-enterprise#835's refusal tests now accept the generic code until this PR lands, so that PR can go green against 🤖 Generated with Claude Code |
….manage + create_project / import_project (trinity-enterprise#588) Re-scope of ent#588 (ruling 2026-09-29, ent#661): on Trinity, /project-init creates the project through the platform. ent#661 planned the agent right as "a new capability beside skills.manage; changing members or visibility stays person-only" — this is that capability, on the #3236 seam: - db/capability_grants: `projects.manage` joins the closed set — start a Workspace project ON BEHALF OF the agent's owner (owner = creator and first member, agent = steward, members-only) and import one of the agent's OWN folder projects. People and visibility are never grantable. - dependencies: its named refusal (`project_management_not_permitted`) with the ask instruction. - Settings → Permissions to change itself: a fifth toggle, "Start projects". - MCP: `create_project` and `import_project` (license-blind, like the rest of projects.ts), each saying the grant is needed and what the owner keeps. The enforcement and the create/import themselves are in the enterprise projects module (abilityai/trinity-enterprise, same issue), which checks projects.manage before any read. Until this lands on dev the enterprise routes refuse every agent — the capability is not in the closed set — so the merge order is this PR, then the enterprise PR. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2196f9c to
085f6f6
Compare
|
merge-train (2026-10-09): base PR #3330 ( |
…ts.manage (ent#588) — mechanical, per the merge-train note on the PR
|
merge-train (2026-10-10): pushed one mechanical commit fixing the three stale "four" lines the validation flagged ( |
Summary
Re-scope of ent#588 (ruling 2026-09-29, ent#661): on Trinity,
/project-initcreates the project through the platform. ent#661 planned the agent's right as "a new capability besideskills.manage; changing members or visibility stays person-only". This PR adds that capability.projects.managejoins the closed capability set. It lets an agent start a Workspace project on its owner's behalf: the owner is the creator and first member, the agent is the steward, and the project is members-only. It also lets the agent import one of its own folder projects. Adding people or changing who can see a project is never grantable.project_management_not_permitted, with the ask instruction from feat(agents): the self-change permissions as four admin-only toggles in Agent Settings (abilityai/trinity-enterprise#756) #3330.create_projectandimport_project. They are license-blind like the rest ofprojects.ts, and their descriptions state that the grant is needed and what the owner keeps.The routes that enforce this and do the create/import are in the enterprise projects module, which checks
projects.managebefore reading anything (abilityai/trinity-enterprise PR, same issue). The skills that call these tools are in Abilityai/abilities:project-init1.4, plus the ent#673 task skills.Merge order
This PR first, then the enterprise PR. Until this is on
dev,projects.manageisn't in the closed set, so the enterprise routes refuse every agent. That fails closed.Test Plan
tests/unit/test_ent164_self_change_grants.py: the closed set now includesprojects.manage, and its refusal is named and tells the agent how to ask. 113 passed together withtest_2996_human_only_routes.py.MCP
projects.test.ts, 3 new tests:create_projectsendsnameandgoal, and sends the tracker only when one is given;import_projectforwards only the path and surfaces a second import's 409.Including the description-budget and access-wiring guards: 36 passed.
tscis clean.selfChangePermissionsPanel.spec.js: 12 passed. The specs iterate over the capability list, so the fifth toggle is covered.The enterprise-docs guard is clean on the diff.
Look at the fifth toggle in Settings, in both themes.
Refs abilityai/trinity-enterprise#588
🤖 Generated with Claude Code