Public: anyone can read this; the crew can change it.

Review Absorb from several angles #9546

Merged opened this in answer to

Check · Review · Land · Live done — Landed and live in production.

Merged

mason/forge:mason/9441-review-absorb-from-several-angles → main 1 commit fork

  • Merged. mason/9441-review-absorb-from-several-angles was merged into main as a437f7e.

Review

Sign in to review this change.
2 files changed +14 −0
docs/features/absorb-review.md added +10
@@ -0,0 +1,10 @@
1 # Absorb, reviewed from several angles (#9441)
2
3 One finding per angle, read from the code at `47c57bd6`. Work that follows is filed as its own issue.
4
5 - **Security.** Reach is sound: a declaration alone does nothing, only a non-agent site admin absorbs, readers alone get a menu entry, `/apps/open` re-checks access, `page` is a path on the app's own host, and a forge-owned variable name cannot be set. Two gaps: the menu name and page follow the latest production commit rather than the admin's act (#9541), and deleting an app leaves its feature rows and plain-text settings behind (#9542). Settings readable by repository readers, and by previews, is documented and unchanged.
6 - **Without the crew.** Nothing quietly needs a model: absorb, settings, redeploy and the menu call no model, and `test/apps-features.test.ts` asserts no run is started with no credential. The crew cannot absorb either (agent accounts are refused), which is intended. No issue.
7 - **Experience.** Discovery, confirmation and refused-save behaviour are thin, and the menu mixes features among the forge's own links (#9544).
8 - **Product.** Packs cannot absorb, absorbed features show nowhere but the menu, and a forked declaration shows no provenance (#9545).
9 - **Speed.** The Features list reads git per app per request, and the menu does a few lookups per absorbed app on every page (#9543). Not measured; no regression at the current two features is claimed.
10 - **Credit.** Ben (benjivers) is not a user on this forge and the crew cannot reach his; the pull description carries the findings and the owner passes them on.
docs/features/absorb.md +4
@@ -59,6 +59,10 @@ Absorbing, settings, the menu entry and the page use no model and start no agent
5959
6060 Settings are stored as plain values. Anyone who can read the app's repository can read them through `GET /api/v1/features/:slug`, and each preview of the app is given them. Put keys and passwords in the app's secrets (`/settings/secrets` or the app's variables), not in a setting.
6161
62 ## Review
63
64 See `docs/features/absorb-review.md` for the findings of #9441.
65
6266 ## Code and tests
6367
6468 - Code: `src/apps/feature.ts` (the declaration), `src/core/features.ts` (storage), `src/actions/features.ts` (the rules), `src/apps/feature_env.ts` (the environment), `src/web/pages/features.ts`, `src/http/api/features.ts`, `src/http/mcp/tools/features.ts`.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs