Intent: the door is where a person lands when the app is broken or refuses the pill, so it should offer the report the pill offers.
Done when:
[ ] When reportUrl(runtime, target) in src/apps/proxy.ts is defined (a public app whose repository anyone may read), the door handler passes it to doorPage. The door's link list then shows "Report a problem, no account needed", linking to /__forge/report on the app's own host.
[ ] A private app, a nested target and a repository the public may not read show no such link.
[ ] The link is escaped with escapeAttr. The door's CSP and its no-script shape are unchanged.
[ ] A test in test/apps-door.test.ts fails without the change. It covers a public app (link present, href /__forge/report) and a private app (absent).
Files: src/apps/door.ts, src/apps/proxy.ts, test/apps-door.test.ts
Risks: #7853 also adds a fact to DoorFacts. Add one optional field and one link line, so the two merge cleanly whichever lands first.
Intent: the door is where a person lands when the app is broken or refuses the pill, so it should offer the report the pill offers.
Done when:
reportUrl(runtime, target)insrc/apps/proxy.tsis defined (a public app whose repository anyone may read), the door handler passes it todoorPage. The door's link list then shows "Report a problem, no account needed", linking to/__forge/reporton the app's own host.escapeAttr. The door's CSP and its no-script shape are unchanged.test/apps-door.test.tsfails without the change. It covers a public app (link present, href/__forge/report) and a private app (absent).Files: src/apps/door.ts, src/apps/proxy.ts, test/apps-door.test.ts Risks: #7853 also adds a fact to
DoorFacts. Add one optional field and one link line, so the two merge cleanly whichever lands first.