You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* demo(showcase): mark task status/priority trackHistory (ADR-0052 §5b)
Demonstrates declarative activity: status/priority changes auto-appear on the
record timeline ("Status: In Progress → In Review") with zero hook code.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(audit): declarative activity milestones (ADR-0052 §5b.2)
Object-level `activityMilestones` — when a watched field transitions INTO a
configured value, the platform emits a templated, semantic activity row
("✅ Task completed: {title}", "Deal won: {name}") on the record timeline, with
zero hook/flow code. Complements field-level `trackHistory` (§5b.1) and takes
precedence over the raw "Field: old → new" summary for the same update. Same
declarative posture as Salesforce Flow / ServiceNow for milestone events.
- spec: `activityMilestones` on ObjectSchema (top-level) + liveness classification
- plugin-audit: matchMilestone() + getObjectDef(); summary precedence
milestone → field-change → generic; milestone may set the activity `type`
- tests: 2 new (interpolated milestone + precedence; no-fire when no transition)
- showcase: showcase_task fires "✅ Task completed: {title}" on status→done
Verified in the showcase browser: status→done renders the milestone row.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
"activityMilestones": { "status": "live", "evidence": "packages/plugins/plugin-audit/src/audit-writers.ts", "note": "ADR-0052 §5b.2 — audit-writer matchMilestone() emits a templated activity row when a watched field transitions into the configured value." },
field: z.string().describe('Field to watch (typically a status/stage select).'),
538
+
value: z.string().describe('The value the field must transition INTO to fire the milestone.'),
539
+
summary: z.string().describe('Activity summary template; {field} tokens interpolate the record value. e.g. "Deal won: {name}".'),
540
+
type: z.string().optional().describe('Activity type for the emitted row (default "completed").'),
541
+
})).optional().describe('Declarative semantic activity milestones — emit a templated timeline row when a field transitions into a value, no hook code (ADR-0052 §5b.2).'),
542
+
526
543
// ADR-0020: record state machines are not a separate `stateMachines` map —
527
544
// each lifecycle is a `state_machine` rule in `validations` above (one rule
528
545
// per state field). Parallel lifecycles = multiple rules. The write path
0 commit comments