@astram/guide 0.2.18 → 0.2.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/CAPABILITIES.md +20 -2
  2. package/package.json +1 -1
package/CAPABILITIES.md CHANGED
@@ -501,8 +501,26 @@ imports: [
501
501
  change sends nothing; a notice failure never blocks the change. `bootstrap:org --apply` sends
502
502
  none. You do not register or post this kind (apps cannot use `shield.*`); label your permissions
503
503
  (`@ObjectType({ permissions })`) so the notices read well.
504
- - Not yet: admin tasks for new permissions (step 4), the frontend-core service and the scaffold
505
- bell (step 5), email delivery.
504
+ - **Admin tasks for new permissions (G-027 step 4, identity 0.22):** each company gets one open
505
+ task per active permission key with a first-seen date that no role owned by the company holds
506
+ (directly or through `identity:<type>:*` / `identity:*`). `GET /identity/permission-announcements
507
+ ?status=open|dismissed&page=&limit=&companyUuid=` lists the tasks the caller can act on: holders
508
+ of `identity:role:update` whose grant ceiling covers the key, for the companies below them (their
509
+ own company already holds what they can grant; this needs `scopeSubtreeResolver` wired in
510
+ `ShieldModule.forRoot`, which the scaffold does not do yet); root sees every company. On a fresh
511
+ install the keys from the very first catalogue pass raise no task (identity 0.23). Granting the key to any of the company's roles closes the
512
+ task on the next read; `POST /identity/permission-announcements/:companyUuid/:key/dismiss`
513
+ ("Reviewed, not needed", audited) closes it on purpose and `…/reopen` undoes that. A key removed
514
+ and re-added by a later release opens again. Framework keys count like yours. Tasks are not
515
+ notices: they never enter `/account/notifications`.
516
+ - **Frontend (G-027 step 5, frontend-core 0.10):** `createNotificationService(http)`
517
+ (`listNotifications`, `unreadNotificationCount`, `markNotificationRead`, `markAllNotificationsRead`) and
518
+ `identity.{listPermissionAnnouncements,dismissPermissionAnnouncement,reopenPermissionAnnouncement}`. The scaffolded
519
+ header has a bell (personal notices) and an Announcements icon (announcement notices, plus admin tasks for holders of
520
+ `identity:role:update`); "Grant…" opens `/access/add?key=<key>` with the key ticked; the Access form marks keys
521
+ with a caution and asks to confirm before granting them. Counts refresh on focus and every 60 s while the tab is
522
+ visible, and right after the user's own actions. Delivery is polling; there is no server push yet.
523
+ - Not yet: email delivery.
506
524
 
507
525
  ## Separation of duties (ADR-0048; core 1.12, engine 0.14, guard 0.21, identity 0.18)
508
526
  - **Declare it on the type** when the people who started or asked about a record must not
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astram/guide",
3
- "version": "0.2.18",
3
+ "version": "0.2.20",
4
4
  "license": "MIT",
5
5
  "description": "Astram framework — the AI/dev GUIDE layer (ADR-0025). Ships the framework's hard rules + capabilities manifest as installed, upgrade-refreshed docs. A consumer app's CLAUDE.md references FRAMEWORK_RULES.md from this package; `npm update` replaces it wholesale so new rules arrive cleanly, while the app's own .astram/guide/ layer is never touched. This is the framework-owned FLOOR: an app rule may tighten it, never weaken it.",
6
6
  "type": "commonjs",