// WARNING: This pattern is INTENTIONALLY non-idempotent. // It exists to test detectNonIdempotent() diagnosis tooling. // Do NOT use as a reference for correct pattern development. import { computed, Default, pattern, safeDateNow, UI, Writable, } from "commonfabric"; interface Item { title: string; } interface ProcessedItem { title: string; processedAt: number; } const preset: Item[] = [ { title: "Task A" }, { title: "Task B" }, { title: "Task C" }, ]; export default pattern<{ items: Writable>; }>(({ items }) => { // Anti-pattern: safeDateNow() in computed() — every run produces different timestamps const processed = new Writable([]); computed(() => { processed.set( items.get().map((i) => ({ title: i.title, processedAt: safeDateNow(), })), ); }); return { $NAME: "Non-Idempotent Timestamp", [UI]: (

Non-Idempotent Timestamp

Input items:
    {items.map((item) =>
  • {item.title}
  • )}
Processed (timestamps keep changing):
    {processed.map((p) => (
  • {p.title} — {p.processedAt}
  • ))}
Anti-pattern:{" "} safeDateNow() inside computed() — each run produces different values.
Fix:{" "} Use timestamps only in handlers, not in computed().
), }; });