@astram/guide 0.2.17 → 0.2.19

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
@@ -493,8 +493,26 @@ imports: [
493
493
  name only what concerns its recipient.
494
494
  - Retention: read notices are deleted after `NOTIFICATION_READ_RETENTION_DAYS` (90), every notice
495
495
  after `NOTIFICATION_MAX_RETENTION_DAYS` (365), counted from posting; an hourly job does it.
496
- - Not yet: personal notices when a user's access changes (G-027 step 3), admin tasks for new
497
- permissions (step 4), the frontend-core service and the scaffold bell (step 5), email delivery.
496
+ - **Access-change notices (G-027 step 3):** the framework posts its own `shield.access_changed`
497
+ notices (category `personal`, title "Your access changed", body "You can now: …" / "You can no
498
+ longer: …" with permission labels) when a user's effective keys change. The triggers are role
499
+ grant/revoke, bundle grant/revoke, role delete, posting replace/add and switching or creating the
500
+ active membership. They are written on the same transaction as the change, so a rolled-back
501
+ change sends nothing; a notice failure never blocks the change. `bootstrap:org --apply` sends
502
+ none. You do not register or post this kind (apps cannot use `shield.*`); label your permissions
503
+ (`@ObjectType({ permissions })`) so the notices read well.
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=` (root may add `companyUuid`) lists the tasks the caller can
508
+ act on: holders of `identity:role:update` whose grant ceiling covers the key, in their active
509
+ company only; root sees every company. Granting the key to any of the company's roles closes the
510
+ task on the next read; `POST /identity/permission-announcements/:companyUuid/:key/dismiss`
511
+ ("Reviewed, not needed", audited) closes it on purpose and `…/reopen` undoes that. A key removed
512
+ and re-added by a later release opens again. Framework keys count like yours. Tasks are not
513
+ notices: they never enter `/account/notifications`.
514
+ - Not yet: the frontend-core service and the scaffold bell and Announcements icon (step 5), email
515
+ delivery.
498
516
 
499
517
  ## Separation of duties (ADR-0048; core 1.12, engine 0.14, guard 0.21, identity 0.18)
500
518
  - **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.17",
3
+ "version": "0.2.19",
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",