Files
pad/internal/appstore
xarmian e87ace01e0 feat(apps): app webhook events name the install that wrote them (TASK-3411, SPEC-6 U10d) (#1781)
* feat(apps): app webhook events name the install that wrote them (TASK-3411, SPEC-6 U10d)

The app-projection block (v2) gains actor_via_app: the install whose
fenced write caused the event. The emitters get AsInstall variants that
take it; the existing signatures pass "", so every human and agent path is
unchanged and writes none. The five fenced emit sites (item create and
update, comment create, update and delete) pass FencedTx's install.

The app DTO's envelope via_app is now the actor on every event, so an app
can suppress the echo of its own writes (the support portal patches
public_status and receives item.updated for it) while a person's edit to
the same item carries none. A v1 block, written before v2 and still
pending, keeps U10b's rule: via_app on create events only, from the
creator.

Census: human writes carry no actor_via_app (TestTask3389), fenced writes
carry their install across every retained type (TestTask3411).

Claude-Session: https://claude.ai/code/session_01Q9WssCjFuHjSfLABoW4tmS

* test(apps): appstore boundary allow-list for the AsInstall emitters (TASK-3411)

Claude-Session: https://claude.ai/code/session_01Q9WssCjFuHjSfLABoW4tmS
2026-10-04 21:36:33 -04:00
..