⧍ā§Ŧ āĻŽāĻžāĻ°ā§āϚ, ⧍ā§Ļ⧍ā§Ģ¡8 āĻŽāĻŋāύāĻŋāϟ āĻĒāĻĄāĻŧāϤ⧇

āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻ…āĻĄāĻŋāϟ āϞāĻ—: āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ-āχāϤāĻŋāĻšāĻžāϏ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ

āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻ…āĻĄāĻŋāϟ āϞāĻ— āĻŦāĻžāĻ¸ā§āϤāĻŦāϏāĻŽā§āĻŽāϤāĻ­āĻžāĻŦ⧇: āĻĒā§āϰāϤāĻŋāϟāĻŋ CRUD āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇ āϕ⧇, āϕ⧀ āĻāĻŦāĻ‚ āĻ•āĻ–āύ āĻĻ⧇āϖ⧁āύ, āĻĄāĻŋāĻĢ āϏ⧇āĻĢāĻ­āĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ āĻĢāĻŋāĻĄ āĻĻ⧇āĻ–āĻžāύāĨ¤

āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻ…āĻĄāĻŋāϟ āϞāĻ—: āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ-āχāϤāĻŋāĻšāĻžāϏ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ

āϕ⧇āύ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞāϗ⧁āϞ⧋āϰ āĻ…āĻĄāĻŋāϟ āϞāĻ— āĻĒā§āϰāϝāĻŧā§‹āϜāύ (āĻāĻŦāĻ‚ āϤāĻžāϰāĻž āϏāĻžāϧāĻžāϰāύāĻ­āĻžāĻŦ⧇ āϕ⧋āĻĨāĻžāϝāĻŧ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϝāĻŧ)

āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āĻĻāϞ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϞ⧇ āĻŦāĻž āϕ⧋āύ⧋ āĻŦāĻŋāϤāĻ°ā§āĻ• āĻšāϞ⧇ āĻ…āĻĄāĻŋāϟ āϞāĻ— āϝ⧋āĻ— āĻ•āϰ⧇āĨ¤ āϕ⧋āύ⧋ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ…āĻ¸ā§āĻŦā§€āĻ•āĻžāϰ āĻ•āϰāϞ⧇, āϕ⧋āύ⧋ āĻĢāĻžāχāĻ¨ā§āϝāĻžāĻ¨ā§āϏ āύāĻŽā§āĻŦāϰ āϘ⧁āϰ⧇ āϗ⧇āϞ⧇, āĻŦāĻž āĻāĻ•āϜāύ āĻ…āĻĄāĻŋāϟāϰ āϜāĻŋāĻœā§āĻžāĻžāϏāĻž āĻ•āϰāϞ⧇, “āĻāϟāĻž āϕ⧇ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰ⧇āĻ›āĻŋāϞ?” — āϤāĻ–āύāχ āĻļ⧁āϰ⧁ āĻ•āϰāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āφāĻ‚āĻļāĻŋāĻ• āϏ⧂āĻ¤ā§āϰ āĻĨ⧇āϕ⧇ āĻ…āϤ⧀āϤ āĻĒ⧁āύāĻ°ā§āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āϰāϤ⧇ āĻšā§Ÿ: āĻĄāĻžāϟāĻžāĻŦ⧇āϜ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ, Slack āĻŽā§‡āϏ⧇āϜ, āĻāĻŦāĻ‚ āĻ…āύ⧁āĻŽāĻžāύāĨ¤

āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āϜāĻ¨ā§āϝ, “āĻ•āĻŽāĻĒā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϏ⧇āϰ āϜāĻ¨ā§āϝ āϝāĻĨ⧇āĻˇā§āĻŸâ€ āĻŽāĻžāύ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāϖ⧁āρāϤ āĻĢāϰ⧇āύāϏāĻŋāĻ• āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āύ⧟āĨ¤ āĻāϰ āĻŽāĻžāύ⧇ āφāĻĒāύāĻŋ āĻĻā§āϰ⧁āϤ āĻ“ āύāĻŋāϰāĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύāĻ­āĻžāĻŦ⧇ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĒā§āϰāĻļā§āύ⧇āϰ āωāĻ¤ā§āϤāϰ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύ: āϕ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇āϛ⧇, āϕ⧋āύ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇, āϕ⧀ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϝāĻŧ⧇āϛ⧇, āĻ•āĻ–āύ āĻāϟāĻŋ āϘāĻŸā§‡āϛ⧇, āĻāĻŦāĻ‚ āϕ⧋āĻĨāĻž āĻĨ⧇āϕ⧇ āĻāϏ⧇āϛ⧇ (UI, import, API, automation)āĨ¤ āϏ⧇āχ āĻ¸ā§āĻŦāĻšā§āĻ›āϤāĻž āĻšāϞ āϝāĻž āĻ…āĻĄāĻŋāϟ āϞāĻ—āϕ⧇ āĻŽāĻžāύ⧁āώ āĻ­āϰāϏāĻž āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻžāϰ āϝ⧋āĻ—ā§āϝ āĻ•āϰ⧇ āϤ⧋āϞ⧇āĨ¤

āĻ…āĻĄāĻŋāϟ āϞāĻ— āϏāĻžāϧāĻžāϰāĻŖāϤ āĻŦā§āϝāĻ°ā§āĻĨ āĻšā§Ÿ āĻĄāĻžāϟāĻžāĻŦ⧇āĻœā§‡āϰ āĻ•āĻžāϰāϪ⧇ āĻ¨ā§Ÿâ€”āĻāϟāĻŋ āĻ•āĻ­āĻžāϰ⧇āĻœā§‡āϰ āĻ•āĻžāϰāϪ⧇āĨ¤ āϏ⧋āϜāĻž āĻāĻĄāĻŋāĻŸā§‡ āχāϤāĻŋāĻšāĻžāϏ āĻ āĻŋāĻ• āĻĨāĻžāϕ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ•āĻžāϜ āĻĻā§āϰ⧁āϤ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āĻĢāĻžāρāĻ• āĻĻ⧇āĻ–āĻž āĻĻā§‡ā§ŸāĨ¤ āϏāĻžāϧāĻžāϰāĻŖ āĻ…āĻĒāϰāĻžāϧ⧀āϰāĻž āĻšāϞ: āĻŦāĻžāĻ˛ā§āĻ• āĻāĻĄāĻŋāϟ, āχāĻŽāĻĒā§‹āĻ°ā§āϟ, āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻ•āĻžāϜ, āĻāĻŽāύ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻ…ā§āϝāĻžāĻ•āĻļāύ āϝāĻž āϏāĻžāϧāĻžāϰāĻŖ āĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻŦāĻžāχāĻĒāĻžāϏ āĻ•āϰ⧇ (āϝ⧇āĻŽāύ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϰāĻŋāϏ⧇āϟ āĻŦāĻž āĻ­ā§‚āĻŽāĻŋāĻ•āĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ), āĻāĻŦāĻ‚ āĻĄāĻŋāϞāĻŋāϟ (āĻŦāĻŋāĻļ⧇āώāϤ āĻšāĻžāĻ°ā§āĻĄ āĻĄāĻŋāϞāĻŋāϟ)āĨ¤

āφāϰ⧇āĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻŦā§āϝāĻ°ā§āĻĨāϤāĻž āĻšāϞ āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ—āϕ⧇ āĻ…āĻĄāĻŋāϟ āϞāϗ⧇āϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāĻļāĻŋā§Ÿā§‡ āĻĢ⧇āϞāĻžāĨ¤ āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āϜāĻ¨ā§āϝ: āĻļāĻŦā§āĻĻāϰāĻžāĻœā§āϝāĻĒā§‚āĻ°ā§āĻŖ, āĻŸā§‡āĻ•āύāĻŋāĻ•ā§āϝāĻžāϞ āĻāĻŦāĻ‚ āĻ…āύāĻŋ⧟āĻŽāĻŋāϤāĨ¤ āĻ…āĻĄāĻŋāϟ āϞāĻ— āĻĻāĻžā§ŸāĻŦāĻĻā§āϧāϤāĻžāϰ āϜāĻ¨ā§āϝ: āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻĢāĻŋāĻ˛ā§āĻĄ, āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ­āĻžāώāĻž, āĻāĻŦāĻ‚ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻŋāϰ āĻĢāϰāĻŽā§āϝāĻžāϟ āϝāĻž āύāύ-āχāĻžā§āϜāĻŋāύāĻŋ⧟āĻžāϰāĻĻ⧇āϰ āϏāĻžāĻŽāύ⧇ āĻĻ⧇āĻ–āĻžāύ⧋ āϝāĻžā§ŸāĨ¤

āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦ āωāĻĻāĻžāĻšāϰāĻŖ: āĻāĻ•āϟāĻŋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ⧇āϰ āĻĒā§āĻ˛ā§āϝāĻžāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇, āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻŋ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ āĻŦāĻŋāϞāĻŋāĻ‚ āĻĄāĻŋāĻŸā§‡āχāϞāϏ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇āĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻļ⧁āϧ⧁ “updated customer” āϞāĻ— āĻ•āϰ⧇āύ, āφāĻĒāύāĻŋ āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻž āϏ⧇āϟāĻž āĻāĻ•āϜāύ āĻŽāĻžāύ⧁āώ āĻ•āϰ⧇āϛ⧇, āĻāĻ•āϟāĻŋ āĻ“ā§ŸāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋ āĻ•āϰ⧇āϛ⧇, āύāĻžāĻ•āĻŋ āĻāĻ•āϟāĻŋ āχāĻŽāĻĒā§‹āĻ°ā§āϟ āĻ“āĻ­āĻžāϰāϰāĻžāχāϟ āĻ•āϰ⧇āϛ⧇āĨ¤

āϝ⧇ āĻ…āĻĄāĻŋāϟ āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋ āϕ⧇/āĻ•āĻŋ/āĻ•āĻ–āύ āωāĻ¤ā§āϤāϰ āĻĻ⧇āϝāĻŧ

āĻ­āĻžāϞ⧋ āĻ…āĻĄāĻŋāϟ āϞāĻ— āĻāĻ• āϞāĻ•ā§āĻˇā§āϝ āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻšāϝāĻŧ: āĻāĻ•āϜāύ āĻŽāĻžāύ⧁āώ āĻāĻ•āϟāĻŋ āĻāĻ¨ā§āĻŸā§āϰāĻŋ āĻĒāĻĄāĻŧ⧇ āĻ…āύ⧁āĻŽāĻžāύ āύāĻž āĻ•āϰ⧇āχ āϕ⧀ āϘāĻŸā§‡āϛ⧇ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻž āωāϚāĻŋāϤāĨ¤

āϕ⧇ āĻ•āϰ⧇āϛ⧇

āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ actor āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύāĨ¤ āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āĻĻāϞ āĻļ⧁āϧ⧁ “user id”āϤ⧇āχ āĻĨāĻžāĻŽā§‡, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞāϗ⧁āϞ⧋āϤ⧇ āĻĄā§‡āϟāĻž āĻāĻ•āĻžāϧāĻŋāĻ• āĻĻāϰāϜāĻž āĻĻāĻŋā§Ÿā§‡ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāĻ•āϟāĻŋ actor type āĻāĻŦāĻ‚ actor identifier āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ, āϝāĻžāϤ⧇ āφāĻĒāύāĻŋ āĻ¸ā§āϟāĻžāĻĢ, āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦāĻž āĻŦāĻšāĻŋāϰāĻžāĻ—āϤ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύāϕ⧇ āφāϞāĻžāĻĻāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āϟāĻŋāĻŽ āĻŦāĻž āĻŸā§‡āĻ¨ā§āϝāĻžāĻ¨ā§āϟ āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ organization āĻŦāĻž workspace idāĻ“ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞ⧋ āĻ•āĻ–āύāχ āĻŽāĻŋāĻļ⧇ āύāĻž āϝāĻžāϝāĻŧāĨ¤

āϕ⧀ āϘāϟāϞ⧋ āĻāĻŦāĻ‚ āϕ⧋āύ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡

āĻ•āĻ°ā§āĻŽ (create, update, delete, restore) āĻāĻŦāĻ‚ āϞāĻ•ā§āĻˇā§āϝāϟāĻŋ āĻ•ā§āϝāĻžāĻĒāϚāĻžāϰ āĻ•āϰ⧁āύāĨ¤ “Target” āĻšāĻ“ā§ŸāĻž āωāϚāĻŋāϤ āĻŽāĻžāύ⧁āώ⧇āϰ āĻĒāĻ•ā§āώ⧇ āĻŦā§‹āĻāĻžāϰ āĻŽāϤ⧋ āĻāĻŦāĻ‚ āϏāĻ āĻŋāĻ•: āĻŸā§‡āĻŦāĻŋāϞ āĻŦāĻž entity āύāĻžāĻŽ, record id, āĻāĻŦāĻ‚Ideally āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āϞ⧇āĻŦ⧇āϞ (āϝ⧇āĻŽāύ order number) āĻĻā§āϰ⧁āϤ āĻ¸ā§āĻ•ā§āϝāĻžāύ⧇āϰ āϜāĻ¨ā§āϝāĨ¤

āĻĒā§āϰāĻžāϝāĻŧā§‹āĻ—āĻŋāĻ• āĻ¨ā§āϝ⧂āĻ¨ā§āϝāϤāĻŽ āĻĢāĻŋāĻ˛ā§āĻĄ āϏ⧇āϟ:

  • actor_type, actor_id (āĻāĻŦāĻ‚ actor_display_name āĻĨāĻžāĻ•āϞ⧇)
  • action āĻāĻŦāĻ‚ target_type, target_id
  • happened_at_utc (UTC-āϤ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ)
  • source (screen, endpoint, job, import) āĻāĻŦāĻ‚ ip_address (āĻĒā§āĻ°ā§Ÿā§‹āϜāύ⧇)
  • reason (āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āϜāĻ¨ā§āϝ āϐāĻšā§āĻ›āĻŋāĻ• āĻŽāĻ¨ā§āϤāĻŦā§āϝ)

āĻ•āĻ–āύ āϘāϟāϞ⧋

āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ UTC-āϤ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύāĨ¤ āϏāĻ°ā§āĻŦāĻĻāĻžāĨ¤ āϤāĻžāϰāĻĒāϰ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ UI-āϤ⧇ āĻ­āĻŋāĻ‰ā§ŸāĻžāϰ⧇āϰ āϞ⧋āĻ•āĻžāϞ āϟāĻžāχāĻŽā§‡ āĻĻ⧇āĻ–āĻžāύāĨ¤ āĻāϟāĻŋ āϰāĻŋāĻ­āĻŋāĻ‰ā§Ÿā§‡āϰ āϏāĻŽāϝāĻŧ “āĻĻ⧁āχāϜāύ āĻ­āĻŋāĻ¨ā§āύ āϏāĻŽāϝāĻŧ āĻĻ⧇āϖ⧇āϛ⧇āĻ¨â€ āϝ⧁āĻ•ā§āϤāĻŋ āĻā§œāĻŋā§Ÿā§‡ āĻĻ⧇āϝāĻŧāĨ¤

āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āωāĻšā§āϚ-āĻā§āρāĻ•āĻŋāϰ āĻ•āĻžāϜ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧇āύ āϝ⧇āĻŽāύ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ, āϰāĻŋāĻĢāĻžāĻ¨ā§āĻĄ āĻŦāĻž āĻĄā§‡āϟāĻž āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ, āϤāĻžāĻšāϞ⧇ āĻāĻ•āϟāĻŋ “reason” āĻĢāĻŋāĻ˛ā§āĻĄ āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤ āĻāĻŽāύ āĻāĻ• āϛ⧋āϟ āύ⧋āϟāĻ“ āϝāĻĨ⧇āĻˇā§āĻŸâ€”â€œāϟāĻŋāĻ•āĻŋāϟ 1842-āϤ⧇ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰ⧇āϛ⧇āĻ¨â€â€”āϝāĻž āĻ…āĻĄāĻŋāϟ āĻŸā§āϰ⧇āχāϞāϕ⧇ āϕ⧇āĻŦāϞ āĻļāĻŦā§āĻĻ āύ⧟, āĻĒā§āϰāĻŽāĻžāϪ⧇ āĻĒāϰāĻŋāĻŖāϤ āĻ•āϰ⧇āĨ¤

āĻĄā§‡āϟāĻž āĻŽāĻĄā§‡āϞ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰ⧁āύ: āχāϭ⧇āĻ¨ā§āϟ āϞāĻ— āĻŦāύāĻžāĻŽ āĻ­āĻžāĻ°ā§āϏāύ-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āχāϤāĻŋāĻšāĻžāϏ

āĻĒā§āϰāĻĨāĻŽ āĻĄāĻŋāϜāĻžāχāύ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āĻšāĻšā§āϛ⧇ āϕ⧋āĻĨāĻžāϝāĻŧ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āχāϤāĻŋāĻšāĻžāϏ⧇āϰ “āϏāĻ¤ā§āĻ¯â€ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āĻĻāϞ āĻĻ⧁āĻŸā§‹ āĻŽāĻĄā§‡āϞāχ āĻŦ⧇āϛ⧇ āĻ¨ā§‡ā§Ÿ: āĻāĻ•āϟāĻŋ append-only āχāϭ⧇āĻ¨ā§āϟ āϞāĻ—, āĻ…āĻĨāĻŦāĻž per-entity version history āĻŸā§‡āĻŦāĻŋāϞāĨ¤

āĻ…āĻĒāĻļāύ 1: āχāϭ⧇āĻ¨ā§āϟ āϞāĻ— (append-only actions table)

āĻāĻ•āϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āϞāĻ— āĻšāϞ āĻāĻ•āϟāĻŋ āĻāĻ•āĻ• āĻŸā§‡āĻŦāĻŋāϞ āϝāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āĻžāϜāϕ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϰ⧋ āĻšāĻŋāϏ⧇āĻŦ⧇ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰ⧇āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰ⧋āϤ⧇ āϰāĻžāĻ–āĻž āĻĨāĻžāϕ⧇ āϕ⧇ āĻ•āϰ⧇āϛ⧇, āĻ•āĻ–āύ āϘāĻŸā§‡āϛ⧇, āϕ⧋āύ entity āĻ¸ā§āĻĒāĻ°ā§āĻļāĻŋāϤ āĻšāϞ⧋, āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ payload (āφāĻ•āĻ¸ā§āĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇ JSON) āϝ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϟāĻŋ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰ⧇āĨ¤

āĻāχ āĻŽāĻĄā§‡āϞ āϝ⧋āĻ— āĻ•āϰāĻž āϏāĻšāϜ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻĄā§‡āϟāĻž āĻŽāĻĄā§‡āϞ āĻŦāĻĻāϞāĻžāϞ⧇ āύāĻŽāĻ¨ā§€ā§Ÿ āĻĨāĻžāϕ⧇āĨ¤ āĻāϟāĻŋ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ āĻĢāĻŋāĻĄā§‡āϰ āϏāĻžāĻĨ⧇ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻŽāĻŋāϞ āĻ–āĻžā§Ÿ āĻ•āĻžāϰāĻŖ āĻĢāĻŋāĻĄāϟāĻŋ āĻŽā§‚āϞāϤ “āύāϤ⧁āύ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞ⧋ āĻĒā§āϰāĻĨāĻŽā§‡â€āĨ¤

āĻ…āĻĒāĻļāύ 2: āĻ­āĻžāĻ°ā§āϏāύ-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āχāϤāĻŋāĻšāĻžāϏ (per-entity versions)

āĻ­āĻžāĻ°ā§āϏāύ-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āχāϤāĻŋāĻšāĻžāϏ āĻĒā§āϰāϤāĻŋāϟāĻŋ entity-āϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž āχāϤāĻŋāĻšāĻžāϏ āĻŸā§‡āĻŦāĻŋāϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧇, āϝ⧇āĻŽāύ Order_history āĻŦāĻž User_versions, āϝ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āφāĻĒāĻĄā§‡āϟ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāϟ (āĻŦāĻž āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ—āϤ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻĢāĻŋāĻ˛ā§āĻĄ āϏ⧇āϟ) āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ­āĻžāĻ°ā§āϏāύ āύāĻŽā§āĻŦāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤

āĻāϟāĻŋ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ-āχāύ-āϟāĻžāχāĻŽ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āϏāĻšāϜ āĻ•āϰ⧇ (“āĻāχ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ—āϤ āĻŽāĻ™ā§āĻ—āϞāĻŦāĻžāϰ āϕ⧇āĻŽāύ āĻ›āĻŋāϞ?”)āĨ¤ āĻāϟāĻŋ āĻ…āĻĄāĻŋāϟāϰāĻĻ⧇āϰ āĻĒāĻ•ā§āώ⧇ āĻ¸ā§āĻĒāĻˇā§āϟ āĻŽāύ⧇ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻžāϰāĻŖ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āϟāĻžāχāĻŽāϞāĻžāχāύ āύāĻŋāĻœā§‡āχ āĻ¸ā§āĻŦāϤāĻ¨ā§āĻ¤ā§āϰāĨ¤

āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰāĻžāϰ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āωāĻĒāĻžāϝāĻŧ:

  • āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āϏāĻžāĻ°ā§āϚ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϏāĻšāϜ activity feed āϚāĻžāύ, āĻāĻŦāĻ‚ āύāϤ⧁āύ entity āφāϏ⧇ āϤāĻžāϤ⧇ āĻ•āĻŽ friction āϚāĻžāĻ¨â€”āχāϭ⧇āĻ¨ā§āϟ āϞāĻ— āĻŦ⧇āϛ⧇ āύāĻŋāύāĨ¤
  • āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻĒā§āϰāĻžāϝāĻŧāχ āϰ⧇āĻ•āĻ°ā§āĻĄ-āĻ¸ā§āϤāϰ⧇āϰ āϟāĻžāχāĻŽāϞāĻžāχāύ, āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ-āχāύ-āϟāĻžāχāĻŽ āĻ­āĻŋāω āĻŦāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ entity-āϰ āϜāĻ¨ā§āϝ āϏāĻšāϜ diff āϚāĻžāĻ¨â€”versioned history āĻŦ⧇āϛ⧇ āύāĻŋāύāĨ¤
  • āϝāĻĻāĻŋ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āϏāĻŽāĻ¸ā§āϝāĻž āĻĨāĻžāϕ⧇, āχāϭ⧇āĻ¨ā§āϟ āϞāϗ⧇ field-level diffs āϏāĻžāϧāĻžāϰāĻŖāϤ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāĻŸā§‡āϰ āϤ⧁āϞāύāĻžā§Ÿ āĻšāĻžāϞāĻ•āĻžāĨ¤
  • āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻĒā§āϰāϧāĻžāύ āϞāĻ•ā§āĻˇā§āϝ āĻšāϞ⧇, version āĻŸā§‡āĻŦāĻŋāϞāϗ⧁āϞ⧋ āχāϭ⧇āĻ¨ā§āϟ āĻĒ⧇-āϞ⧋āĻĄ āĻĒāĻžāĻ°ā§āϏ āĻ•āϰāĻžāϰ āĻšā§‡ā§Ÿā§‡ āϏāĻšāĻœā§‡ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

āϝ⧇ āĻŽāĻĄā§‡āϞāχ āĻŦ⧇āϛ⧇ āύāĻŋāύ āύāĻž āϕ⧇āύ, āĻ…āĻĄāĻŋāϟ āĻāĻ¨ā§āĻŸā§āϰāĻŋāϗ⧁āϞ⧋ immutable āϰāĻžāϖ⧁āύ: āφāĻĒāĻĄā§‡āϟ āύ⧟, āĻĄāĻŋāϞāĻŋāϟ āύ⧟āĨ¤ āϝāĻĻāĻŋ āĻ•āĻŋāϛ⧁ āϭ⧁āϞ āĻšā§Ÿ, āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻāĻ¨ā§āĻŸā§āϰāĻŋ āϝ⧋āĻ— āĻ•āϰ⧁āύ āϝāĻž āϏāĻ‚āĻļā§‹āϧāύ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰ⧇āĨ¤

āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻāĻ•āϟāĻŋ correlation_id (āĻŦāĻž operation id) āϝ⧋āĻ— āĻ•āϰāĻž āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύāĨ¤ āĻāĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻāĻ•āϟāĻŋ āĻ•āĻžāϜ āĻĒā§āϰāĻžāϝāĻŧāχ āĻāĻ•āĻžāϧāĻŋāĻ• āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ•āϰ⧇ (āωāĻĻāĻžāĻšāϰāĻŖ: “Deactivate user” āχāωāϜāĻžāϰ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇, āϏ⧇āĻļāύ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻšāĻžāϰ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āĻŽā§āϞāϤ⧁āĻŦāĻŋ āϟāĻžāĻ¸ā§āĻ• āĻŦāĻžāϤāĻŋāϞ āĻ•āϰ⧇)āĨ¤ āĻāĻ•āϟāĻŋ āĻļā§‡ā§ŸāĻžāϰāĻĄ correlation id āφāĻĒāύāĻžāϕ⧇ āϐ āϏāĻžāϰāĻŋāϰāϗ⧁āϞ⧋āϕ⧇ āĻāĻ•āχ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ—ā§āϰ⧁āĻĒ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤

CRUD āĻ…ā§āϝāĻžāĻ•āĻļāύ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝāĻ­āĻžāĻŦ⧇ āĻ•ā§āϝāĻžāĻĒāϚāĻžāϰ āĻ•āϰ⧁āύ (āĻĄāĻŋāϞāĻŋāϟ āĻāĻŦāĻ‚ āĻŦāĻžāĻ˛ā§āĻ• āĻāĻĄāĻŋāϟāϏāĻš)

āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ…āĻĄāĻŋāϟ āϞāĻ—āĻŋāĻ‚ āĻļ⧁āϰ⧁ āĻšāϝāĻŧ āĻāĻ• āύāĻŋāϝāĻŧāĻŽ āĻĻāĻŋāϝāĻŧ⧇: āĻĒā§āϰāϤāĻŋāϟāĻŋ write āĻāĻ•āχ āĻĒāĻžāĻĨ āĻĻāĻŋāϝāĻŧ⧇ āϝ⧇āϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϏ⧇āχ āĻĒāĻžāĻĨāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ…āĻĄāĻŋāϟ āχāϭ⧇āĻ¨ā§āϟāĻ“ āϞāĻŋāĻ–āĻŦ⧇āĨ¤ āϝāĻĻāĻŋ āĻ•āĻŋāϛ⧁ āφāĻĒāĻĄā§‡āϟ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āϜāĻŦ⧇, āχāĻŽāĻĒā§‹āĻ°ā§āĻŸā§‡, āĻŦāĻž āĻĻā§āϰ⧁āϤ-āĻāĻĄāĻŋāϟ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āϘāĻŸā§‡ āϝāĻž āφāĻĒāύāĻžāϰ āϏāĻžāϧāĻžāϰāĻŖ āϏ⧇āĻ­ āĻĢā§āϞ⧋ āĻŦāĻžāχāĻĒāĻžāϏ āĻ•āϰ⧇, āφāĻĒāύāĻžāϰ āϞāϗ⧇ āĻ—āĻ°ā§āϤ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤

Create-āϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ actor āĻāĻŦāĻ‚ source (UI, API, import) āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰ⧁āύāĨ¤ āχāĻŽāĻĒā§‹āĻ°ā§āϟ āĻšāϞ⧋ āϏ⧇āχ āϜāĻžā§ŸāĻ—āĻž āϝ⧇āĻ–āĻžāύ⧇ āĻĻāϞāϗ⧁āϞ⧋ āĻĒā§āϰāĻžāϝāĻŧāχ “āĻ•ā§‡â€ āĻšāĻžāϰāĻžā§Ÿ, āϤāĻžāχ āĻāĻŽāύ āĻāĻ•āϟāĻŋ explicit “performed by” āĻŽāĻžāύ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āϝāĻĻāĻŋāĻ“ āĻĄā§‡āϟāĻž āĻĢāĻžāχāϞ āĻŦāĻž āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻĨ⧇āϕ⧇ āĻāϏ⧇āϛ⧇āĨ¤ āĻļ⧁āϰ⧁ āĻŽāĻžāύāϗ⧁āϞāĻŋāĻ“ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻĻāϰāĻ•āĻžāϰ (āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāϟ āĻŦāĻž āĻ•āĻŋāϛ⧁ āĻŽā§‚āϞ āĻĢāĻŋāĻ˛ā§āĻĄ) āϝāĻžāϤ⧇ āφāĻĒāύāĻŋ āĻŦāϞāϤ⧇ āĻĒāĻžāϰ⧇āύ āϕ⧇āύ āĻāĻ•āϟāĻŋ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύāĨ¤

Updateāϗ⧁āϞ⧋ āφāϰ⧋ āϜāϟāĻŋāϞāĨ¤ āφāĻĒāύāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋ āϞāĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ (āĻ•ā§āώ⧁āĻĻā§āϰ, āĻĒāĻžāĻ āϝ⧋āĻ—ā§āϝ āĻāĻŦāĻ‚ āĻĻā§āϰ⧁āϤ), āĻ…āĻĨāĻŦāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏ⧇āϭ⧇āϰ āĻĒāϰ⧇ āĻāĻ•āϟāĻŋ āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāϟ āϰāĻžāϖ⧁āύ (āĻĒāϰ⧇ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻ•āϰāĻž āϏāĻšāϜ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ­āĻžāϰ⧀)āĨ¤ āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻŋāĻ• āĻŽāĻ§ā§āϝāĻ­āĻžāĻ— āĻšāϞ: āϏāĻžāϧāĻžāϰāĻŖ āĻāĻĄāĻŋāĻŸā§‡āϰ āϜāĻ¨ā§āϝ diffs āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϗ⧁āϞ⧋āϰ (āϝ⧇āĻŽāύ permissions, bank details, āĻŦāĻž pricing rules) āϜāĻ¨ā§āϝ āĻļ⧁āϧ⧁ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāϟ āϰāĻžāϖ⧁āύāĨ¤

āĻĄāĻŋāϞāĻŋāϟāϗ⧁āϞ⧋ āĻĒā§āϰāĻŽāĻžāĻŖ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āωāϚāĻŋāϤ āύ⧟āĨ¤ āĻāĻ•āϟāĻŋ soft delete (āĻāĻ•āϟāĻŋ is_deleted āĻĢā§āĻ˛ā§āϝāĻžāĻ— āĻĒā§āϞāĻžāϏ āĻāĻ•āϟāĻŋ āĻ…āĻĄāĻŋāϟ āĻāĻ¨ā§āĻŸā§āϰāĻŋ) āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰ⧁āύāĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϕ⧇ hard delete āĻ•āϰāϤ⧇ āĻšā§Ÿ, āĻĒā§āϰāĻĨāĻŽā§‡ āĻ…āĻĄāĻŋāϟ āχāϭ⧇āĻ¨ā§āϟ āϞāĻŋāϖ⧇ āύāĻŋāύ āĻāĻŦāĻ‚ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāϟ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āφāĻĒāύāĻŋ āĻĒāϰ⧇ āĻĒā§āϰāĻŽāĻžāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻ•āĻŋ āĻŽā§āϛ⧇ āĻ—āĻŋāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤

Undelete-āϕ⧇ āφāϞāĻžāĻĻāĻž āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύāĨ¤ “Restore” āĻšāϞ “Update” āύ⧟, āĻāĻŦāĻ‚ āφāϞāĻžāĻĻāĻž āϰāĻžāĻ–āĻž āϰāĻŋāĻ­āĻŋāω āĻ“ āĻ•āĻŽāĻĒā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϏ āĻšā§‡āĻ•āϕ⧇ āĻ…āύ⧇āĻ• āϏāĻšāϜ āĻ•āϰ⧇āĨ¤

āĻŦāĻžāĻ˛ā§āĻ• āĻāĻĄāĻŋāĻŸā§‡āϰ āϜāĻ¨ā§āϝ, “updated 500 records”-āĻāϰ āĻŽāϤ⧋ āĻāĻ•āϟāĻŋ āĻ…āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻāĻ¨ā§āĻŸā§āϰāĻŋ āĻā§œāĻŋā§Ÿā§‡ āϚāϞ⧁āύāĨ¤ āφāĻĒāύāĻžāϕ⧇ āĻĒāϰ⧇ “āϕ⧋āύ āϰ⧇āĻ•āĻ°ā§āĻĄāϗ⧁āϞ⧋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϞ⧋?” āωāĻ¤ā§āϤāϰ āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻĒāĻ°ā§āϝāĻžāĻĒā§āϤ āĻŦāĻŋāĻļāĻĻ āĻĻāϰāĻ•āĻžāϰāĨ¤ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻšāϞ⧋ āĻāĻ•āϟāĻŋ parent event āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ child event:

  • Parent event: actor, āϟ⧁āϞ/āĻ¸ā§āĻ•ā§āϰāĻŋāύ, āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ, āĻāĻŦāĻ‚ āĻŦā§āϝāĻžāϚ āϏāĻžāχāϜ
  • Child event per record: record id, before/after (āĻŦāĻž changed fields), āĻāĻŦāĻ‚ outcome (success/fail)
  • āϐāĻšā§āĻ›āĻŋāĻ•: āĻāĻ•āϟāĻŋ āĻļā§‡ā§ŸāĻžāϰāĻĄ reason āĻĢāĻŋāĻ˛ā§āĻĄ (policy update, cleanup, migration)

āωāĻĻāĻžāĻšāϰāĻŖ: āĻāĻ•āϟāĻŋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āϞāĻŋāĻĄ 120 āϟāĻŋāĻ•āĻŋāϟ āĻŦāĻžāĻ˛ā§āĻ•-āĻ•ā§āϞ⧋āϜ āĻ•āϰ⧇āĨ¤ āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻāĻ¨ā§āĻŸā§āϰāĻŋ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϟāĻŋ āϧāĻžāϰāĻŖ āĻ•āϰ⧇ “status=open, older than 30 days,” āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϟāĻŋāĻ•āĻŋāĻŸā§‡ āĻāĻ•āϟāĻŋ child āĻāĻ¨ā§āĻŸā§āϰāĻŋ āĻĨāĻžāϕ⧇ āϝāĻž āĻĻ⧇āĻ–āĻžā§Ÿ status open -> closedāĨ¤

āϕ⧀ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϞ⧋ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻĒā§āϰāĻžāχāϭ⧇āϏāĻŋ āĻŦāĻž āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻāĻžāĻŽā§‡āϞāĻž āύāĻž āϤ⧈āϰāĻŋ āĻšā§Ÿ

āĻ…āĻĄāĻŋāϟ-āϰ⧇āĻĄāĻŋ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ
āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ“ā§ŸāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋āϤ⧇ āĻ…āĻĄāĻŋāϟ āϞāĻ— āĻ…āĻ¨ā§āϤāĻ°ā§āύāĻŋāĻ°ā§āĻŽāĻŋāϤ āĻ•āϰ⧇ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤
āĻŦāĻŋāĻ˛ā§āĻĄ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ

āĻ…āĻĄāĻŋāϟ āϞāĻ—āϗ⧁āϞ⧋ āĻĻā§āϰ⧁āϤ āϜāĻžāĻ™ā§āϕ⧇ āĻĒāϰāĻŋāĻŖāϤ āĻšā§Ÿ āϝāĻ–āύ āϤāĻžāϰāĻž āĻŦāĻž āϤ⧋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•āĻŋāϛ⧁ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇ (āĻ­āĻŦāĻŋāĻˇā§āĻ¯ā§Ž-āĻ…āϜāĻ¸ā§āϰ āĻĒā§‚āĻ°ā§āĻŖ āϰ⧇āĻ•āĻ°ā§āĻĄ, āϚāĻŋāϰāĻ•āĻžāϞ⧇āϰ āϜāĻ¨ā§āϝ) āĻŦāĻž āϖ⧁āĻŦāχ āϏāĻžāĻŽāĻžāĻ¨ā§āϝ (āĻļ⧁āϧ⧁ “edited user”)āĨ¤ āϞāĻ•ā§āĻˇā§āϝ āĻšāϞ āĻāĻ•āϟāĻŋ āϰ⧇āĻ•āĻ°ā§āĻĄ āϝāĻž āĻ•āĻŽāĻĒā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϏ⧇āϰ āϜāĻ¨ā§āϝ āĻĻāĻžāϝāĻŧā§€ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻšāϞ⧋ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āφāĻĒāĻĄā§‡āĻŸā§‡āϰ āϜāĻ¨ā§āϝ field-level diff āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻžāĨ¤ āĻļ⧁āϧ⧁ āϝ⧇ āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇ āϏ⧇āϗ⧁āϞ⧋ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ, before āĻāĻŦāĻ‚ after āĻŽāĻžāύāϏāĻšāĨ¤ āĻāϟāĻŋ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻ•āĻŽ āϰāĻžāϖ⧇ āĻāĻŦāĻ‚ activity feed āĻ¸ā§āĻ•ā§āϝāĻžāύ āĻ•āϰāĻž āϏāĻšāϜ āĻ•āϰ⧇: “Status: Pending -> Approved” āĻāĻ•āϟāĻŋ āĻŦāĻĄāĻŧ āĻŦā§āϞāĻŦ⧇āϰ āĻšā§‡āϝāĻŧ⧇ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰāĨ¤

āϝ⧇āϏāĻŦ āĻŽā§āĻšā§‚āĻ°ā§āϤ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖâ€”create, delete, āĻāĻŦāĻ‚ āĻĒā§āϰāϧāĻžāύ workflow transition—āϤāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāϟ āϰāĻžāϖ⧁āύāĨ¤ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāϟ āĻ­āĻžāϰ⧀, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āϰāĻ•ā§āώāĻž āĻ•āϰ⧇ āϝāĻ–āύ āϕ⧇āω āϜāĻŋāĻœā§āĻžāĻžāϏāĻž āĻ•āϰ⧇, “āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻžāϰ āφāϗ⧇ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āĻ āĻŋāĻ• āϕ⧀āĻ­āĻžāĻŦ⧇ āĻĻ⧇āĻ–āϤ?”

āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻĄā§‡āϟāĻžāϰ āϜāĻ¨ā§āϝ āĻŽāĻžāĻ¸ā§āĻ•āĻŋāĻ‚ āύāĻŋ⧟āĻŽ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ, āύāĻž āĻšāϞ⧇ āφāĻĒāύāĻžāϰ āĻ…āĻĄāĻŋāϟ āĻŸā§‡āĻŦāĻŋāϞ āĻāĻ•āϟāĻŋ āĻ—ā§‹āĻĒāύ āϤāĻĨā§āϝāĻĒā§‚āĻ°ā§āĻŖ āϏ⧇āϕ⧇āĻ¨ā§āĻĄāĻžāϰāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻĒāϰāĻŋāĻŖāϤ āĻšāĻŦ⧇āĨ¤ āϏāĻžāϧāĻžāϰāĻŖ āύāĻŋ⧟āĻŽāϗ⧁āϞ⧋:

  • āĻ•āĻ–āύāχ passwords, API tokens, āĻŦāĻž private keys āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻŦ⧇āύ āύāĻž (āĻļ⧁āϧ⧁ “changed” āϞāĻ— āĻ•āϰ⧁āύ)
  • āĻĒāĻžāĻ°ā§āϏ⧋āύāĻžāϞ āĻĄā§‡āϟāĻž āϝ⧇āĻŽāύ email/phone āĻŽāĻžāĻ¸ā§āĻ• āĻŦāĻž āφāĻ‚āĻļāĻŋāĻ•/āĻšā§āϝāĻžāĻļ āĻ•āϰ⧇ āϰāĻžāϖ⧁āύ
  • āύ⧋āϟ āĻŦāĻž free-text āĻĢāĻŋāĻ˛ā§āĻĄ āĻšāϞ⧇ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻĒā§āϰāĻŋāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ “changed” āĻĢā§āĻ˛ā§āϝāĻžāĻ— āϰāĻžāϖ⧁āύ
  • āϏāĻŽā§āĻĒ⧃āĻ•ā§āϤ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻĒ⧁āϰ⧋ āĻ•āĻĒāĻŋ āĻ•āϰāĻžāϰ āĻŦāĻĻāϞ⧇ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ (user_id, order_id) āϞāĻ— āĻ•āϰ⧁āύ

āĻ¸ā§āĻ•āĻŋāĻŽāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻ“ āĻ…āĻĄāĻŋāϟ āχāϤāĻŋāĻšāĻžāϏ āĻ­āĻžāĻ™āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝāĻĻāĻŋ āϕ⧋āύ⧋ āĻĢāĻŋāĻ˛ā§āĻĄ āĻĒāϰ⧇ āϰāĻŋāύ⧇āχāĻŽ āĻŦāĻž āϰāĻŋāĻŽā§āĻ­ āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāϰāĻžāĻĒāĻĻ fallback āϰāĻžāϖ⧁āύ āϝ⧇āĻŽāύ “unknown field” āĻāĻŦāĻ‚ āĻŽā§ŒāϞāĻŋāĻ• field keyāϟāĻŋ āϰ⧇āϖ⧇ āĻĻāĻŋāύāĨ¤ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ, āĻļ⧇āώ āϜāĻžāύāĻž āĻŽāĻžāύ āϰāĻžāϖ⧁āύ āĻ•āĻŋāĻ¨ā§āϤ⧁ ĐžŅ‚ĐŧĐĩŅ‚ āĻ•āϰ⧁āύ “field removed from schema” āϝāĻžāϤ⧇ āĻĢāĻŋāĻĄ āĻ¸ā§Ž āĻĨāĻžāϕ⧇āĨ¤

āĻ…āĻŦāĻļ⧇āώ⧇, āĻāĻ¨ā§āĻŸā§āϰāĻŋāϗ⧁āϞ⧋ āĻŽāĻžāύ⧁āώ-āĻŦāĻžāĻ¨ā§āϧāĻŦ āĻ•āϰ⧁āύāĨ¤ display āϞ⧇āĻŦ⧇āϞ ("Assigned to") āĻ•āĻžāρāϚāĻž āϕ⧀ ("assignee_id")-āĻāϰ āĻĒāĻžāĻļ⧇ āϰāĻžāϖ⧁āύ, āĻāĻŦāĻ‚ āĻŽāĻžāύāϗ⧁āϞ⧋ āĻĢāĻ°ā§āĻŽā§āϝāĻžāϟ āĻ•āϰ⧁āύ (āϤāĻžāϰāĻŋāĻ–, āĻŽā§āĻĻā§āϰāĻž, āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āύāĻžāĻŽ) āϝ⧇āύ āĻĒ⧜āϤ⧇ āϏ⧁āĻŦāĻŋāϧāĻž āĻšā§ŸāĨ¤

āϧāĻžāĻĒ⧇ āϧāĻžāĻĒ⧇ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ: āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ āĻĢā§āϞ⧋āϤ⧇ āĻ…āĻĄāĻŋāϟ āϞāĻ— āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžā§Ÿāύ

āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ…āĻĄāĻŋāϟ āĻŸā§āϰ⧇āχāϞ āĻŽāĻžāύ⧇ āĻŦ⧇āĻļāĻŋ āϞāĻ— āĻ•āϰāĻž āĻ¨ā§Ÿâ€”āĻŦāϰāĻ‚ āĻāĻ•āϟāĻŋ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāϤ⧇ āφāĻĒāύāĻŋ āĻŦāĻžāĻ˛ā§āĻ• āχāĻŽāĻĒā§‹āĻ°ā§āϟ āϞāĻ— āĻšā§ŸāύāĻŋ āĻŦāĻž āĻŽā§‹āĻŦāĻžāχāϞ āĻāĻĄāĻŋāϟ āĻ…āĻœā§āĻžāĻžāϤ āύ⧟ āĻāχ āϧāϰāύ⧇āϰ āĻĢāĻžāρāĻ• āύāĻž āĻĒāĻžāύāĨ¤

1) āĻāĻ•āĻŦāĻžāϰ⧇ āĻ…āĻĄāĻŋāϟ āĻĄā§‡āϟāĻž āĻŽāĻĄā§‡āϞ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰ⧁āύ

āφāĻĒāύāĻžāϰ āĻĄā§‡āϟāĻž āĻŽāĻĄā§‡āϞ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻŸā§‡āĻŦāĻŋāϞ āϏ⧇āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āϝāĻž āϝ⧇āϕ⧋āύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϏāϰāϞ āϰāĻžāϖ⧁āύ: āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ, āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ, āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āϛ⧋āϟ actor contextāĨ¤

  • audit_event: id, entity_type, entity_id, action (create/update/delete/restore), created_at, request_id
  • audit_event_item: id, audit_event_id, field_name, old_value, new_value
  • actor_context (āĻŦāĻž audit_event-āĻ āĻĢāĻŋāĻ˛ā§āĻĄ): actor_type (user/system), actor_id, actor_email, ip, user_agent

2) āĻāĻ•āϟāĻŋ āĻļ⧇āϝāĻŧāĻžāϰāĻĄ “Write + Audit” āϏāĻžāĻŦ-āĻĒā§āϰāϏ⧇āϏ āϝ⧋āĻ— āĻ•āϰ⧁āύ

āĻāĻ•āϟāĻŋ reusable āϏāĻžāĻŦ-āĻĒā§āϰāϏ⧇āϏ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āϝāĻž:

  1. entity name, entity id, action, āĻāĻŦāĻ‚ before/after āĻŽāĻžāύ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤
  2. āĻŽā§‡āχāύ āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻŦā§āϝāĻŦāϏāĻžāϝāĻŧāĻŋāĻ• āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āϞāĻŋāϖ⧇āĨ¤
  3. āĻāĻ•āϟāĻŋ audit_event āϰ⧇āĻ•āĻ°ā§āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤
  4. āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋ āĻ—āĻŖāύāĻž āĻ•āϰ⧇ āĻāĻŦāĻ‚ audit_event_item āϰ⧋ āχāύāϏāĻžāĻ°ā§āϟ āĻ•āϰ⧇āĨ¤

āύāĻŋāϝāĻŧāĻŽāϟāĻŋ āĻ•āĻ ā§‹āϰ: āĻĒā§āϰāϤāĻŋāϟāĻŋ write path-āϕ⧇ āĻāχ āĻāĻ•āχ āϏāĻžāĻŦ-āĻĒā§āϰāϏ⧇āϏ āĻ•āϞ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϤ⧇ UI āĻŦāĻžāϟāύ, API endpoint, āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ, āĻāĻŦāĻ‚ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āϏāĻŦāχ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤāĨ¤

3) āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ actor āĻāĻŦāĻ‚ time āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧁āύ

“āĻ•ā§‡â€ āĻāĻŦāĻ‚ “āĻ•āĻ–āĻ¨â€ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇āϰ āĻ“āĻĒāϰ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤ actor-āϕ⧇ āφāĻĒāύāĻžāϰ auth session āĻĨ⧇āϕ⧇ āĻĒāĻĄāĻŧ⧁āύ, āĻāĻŦāĻ‚ āϏāĻŽā§Ÿ āĻŽā§‚āĻ˛ā§āϝ āϏāĻžāĻ°ā§āĻ­āĻžāϰ-āϏāĻžāχāĻĄā§‡ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧁āύāĨ¤ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ āϚāϞ⧇, actor_type āϏ⧇āϟ āĻ•āϰ⧁āύ system āĻāĻŦāĻ‚ job āύāĻžāĻŽ actor label āĻšāĻŋāϏ⧇āĻŦ⧇ āϰāĻžāϖ⧁āύāĨ¤

4) āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦ āϏāĻžāχāĻ¨ā§āϝāĻžāϰāĻŋāĻ“ āĻĻāĻŋā§Ÿā§‡ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰ⧁āύ

āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻŦ⧇āϛ⧇ āύāĻŋāύ (āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āϟāĻŋāĻ•āĻŋāϟ): āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ, āĻĻ⧁āχāϟāĻž āĻĢāĻŋāĻ˛ā§āĻĄ (status āĻ“ assignee) āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻ•āϰ⧁āύ, āĻŽā§āϛ⧇ āĻĢ⧇āϞ⧁āύ, āϤāĻžāϰāĻĒāϰ restore āĻ•āϰ⧁āύāĨ¤ āφāĻĒāύāĻžāϰ āĻ…āĻĄāĻŋāϟ āĻĢāĻŋāĻĄā§‡ āĻĒāĻžāρāϚāϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤ, āφāĻĒāĻĄā§‡āϟ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āĻĻ⧁āϟāĻŋ update item āϏāĻš, āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ actor āĻ“ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āĻāĻ•āχ āϰāĻ•āĻŽāĻ­āĻžāĻŦ⧇ āĻĒā§‚āϰāĻŖ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤

āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ āĻĢāĻŋāĻĄ āĻŦāĻžāύāĻžāύ āϝāĻž āĻŽāĻžāύ⧁āώ āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇

āĻ…āĻĄāĻŋāϟ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āϞāĻ• āĻ•āϰ⧁āύ
āĻŸā§‡āĻ¨ā§āϝāĻžāĻ¨ā§āϟ, āϟāĻŋāĻŽ āĻŦāĻž āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻ…āĻĄāĻŋāϟ āĻ­āĻŋāϜāĻŋāĻŦāĻŋāϞāĻŋāϟāĻŋ āĻ¸ā§āϕ⧋āĻĒ āĻ•āϰ⧁āύāĨ¤
āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āϏ⧇āϟ āĻ•āϰ⧁āύ

āĻāĻ•āϟāĻŋ āĻ…āĻĄāĻŋāϟ āϞāĻ— āϤāĻ–āύāχ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āϝāĻĻāĻŋ āϕ⧇āω āϏ⧇āϟāĻž āĻĻā§āϰ⧁āϤ āϰāĻŋāĻ­āĻŋāω āĻŦāĻž āχāύāϏāĻŋāĻĄā§‡āĻ¨ā§āĻŸā§‡āϰ āϏāĻŽāϝāĻŧ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻĢāĻŋāĻĄā§‡āϰ āϞāĻ•ā§āĻˇā§āϝ āϏāĻšāϜ: “āĻ•āĻŋ āϘāϟāϞ⧋?” āĻāĻ• āύāϜāϰ⧇ āωāĻ¤ā§āϤāϰ āĻĻāĻŋāύ, āϤāĻžāϰāĻĒāϰ āĻĄāĻŋāĻŸā§‡āχāϞ⧇ āĻĄā§āĻŦāϤ⧇ āĻĻāĻŋāύ JSON-āĻ āĻĄā§āĻŦāĻŋāϝāĻŧ⧇ āĻŽāĻžāύ⧁āώāϕ⧇ āϏ⧇āϟāĻŋāϤ⧇ āĻ­āĻžāϏāĻžāύ⧋ āĻ›āĻžā§œāĻžāĨ¤

āϟāĻžāχāĻŽāϞāĻžāχāύ āϞ⧇-āφāωāϟ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ: newest first, āĻĒā§āϰāϤāĻŋ āχāϭ⧇āĻ¨ā§āĻŸā§‡ āĻāĻ•āϟāĻŋ āϏāĻžāϰāĻŋ, āĻāĻŦāĻ‚ āĻ¸ā§āĻĒāĻˇā§āϟ āĻ•ā§āϰāĻŋ⧟āĻžāϰ āĻļāĻŦā§āĻĻ āϝ⧇āĻŽāύ Created, Updated, Deleted, RestoredāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻžāϰāĻŋāϤ⧇ actor (āĻŦā§āϝāĻ•ā§āϤāĻŋ āĻŦāĻž āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ), target (āϰ⧇āĻ•āĻ°ā§āĻĄ āϟāĻžāχāĻĒ āĻ“ āĻŽāĻžāύ⧁āώ⧇āϰ āĻĒāĻ•ā§āώ⧇ āωāĻĒāϝ⧋āĻ—ā§€ āύāĻžāĻŽ), āĻāĻŦāĻ‚ āϏāĻŽā§Ÿ āĻĻ⧇āĻ–āĻžāύāĨ¤

āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦ āϏāĻžāϰāĻŋ āĻĢāϰāĻŽā§āϝāĻžāϟ:

  • Verb + object: “Updated Customer: Acme Co.”
  • Actor: “Maya (Support)” āĻ…āĻĨāĻŦāĻž “System: Nightly Sync”
  • Time: āĻ…ā§āϝāĻžāĻŦāϏāϞ⧁āϟ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ (āϟāĻžāχāĻŽāĻœā§‹āύāϏāĻš)
  • Change summary: “status: Pending -> Approved, limit: 5,000 -> 7,500”
  • Tags: Updated, Deleted, Integration, Job

“āĻ•āĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāĻ˛ā§‹â€ āĻ•āĻŽāĻĒā§āϝāĻžāĻ•ā§āϟ āϰāĻžāϖ⧁āύāĨ¤ 1-3āϟāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄ āχāύāϞāĻžāχāύ āĻĻ⧇āĻ–āĻžāύ, āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻŋ āĻĄā§āϰāĻŋāϞ-āĻĄāĻžāωāύ āĻĒā§āϝāĻžāύ⧇āϞ (āĻĄā§āϰāϝāĻŧāĻžāϰ/āĻŽāĻĄāĻžāϞ) āĻĻāĻŋāύ āϝāĻž āĻĒā§‚āĻ°ā§āĻŖ āĻĄāĻŋāĻŸā§‡āχāϞ āĻĻ⧇āĻ–āĻžā§Ÿ: before/after āĻŽāĻžāύ, request source (web, mobile, API), āĻāĻŦāĻ‚ āϕ⧋āύ⧋ reason/comment āĻĢāĻŋāĻ˛ā§āĻĄāĨ¤

āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāĻŋāĻ‚āχ āĻĢāĻŋāĻĄāϟāĻŋāϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āϰāĻžāϖ⧇āĨ¤ āĻāĻŽāύ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞ⧋āϰ āωāĻĒāϰ āĻĢā§‹āĻ•āĻžāϏ āĻ•āϰ⧁āύ āϝ⧇āϗ⧁āϞ⧋ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻĒā§āϰāĻļā§āύ⧇āϰ āϏāĻžāĻĨ⧇ āĻŽā§‡āϞ⧇:

  • Actor (user āĻŦāĻž system)
  • Object type (Customers, Orders, Permissions)
  • Action type (Create/Update/Delete/Restore)
  • Date range
  • Text search (record name āĻŦāĻž ID)

āϞāĻŋāĻ™ā§āĻ•āĻŋāĻ‚ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϕ⧇āĻŦāϞ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĨāĻžāĻ•āϞ⧇āĨ¤ āϝāĻĻāĻŋ āĻ­āĻŋāĻ‰ā§ŸāĻžāϰ⧇āϰ āĻ•āĻžāϛ⧇ āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āϰ⧇āĻ•āĻ°ā§āĻĄāϟāĻŋ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĨāĻžāϕ⧇, “View record” āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻĻ⧇āĻ–āĻžāύāĨ¤ āύāĻž āĻšāϞ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāϰāĻžāĻĒāĻĻ āĻĒā§āϞ⧇āϏāĻšā§‹āĻ˛ā§āĻĄāĻžāϰ āĻĻ⧇āĻ–āĻžāύ (āωāĻĻāĻžāĻšāϰāĻŖ: “Restricted record”) āĻāĻŦāĻ‚ āĻ…āĻĄāĻŋāϟ āĻāĻ¨ā§āĻŸā§āϰāĻŋāϟāĻŋ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύ āϰāĻžāϖ⧁āύāĨ¤

āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ…ā§āϝāĻžāĻ•āĻļāύāϗ⧁āϞ⧋ āĻ¸ā§āĻĒāĻˇā§āϟ āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻžāύāĨ¤ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āϜāĻŦ āĻāĻŦāĻ‚ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ⧇āϰ āϞ⧇āĻŦ⧇āϞ āφāϞāĻžāĻĻāĻž āϰāĻžāϖ⧁āύ āϝāĻžāϤ⧇ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύāϰāĻž āĻŦāϞāϤ⧇ āĻĒāĻžāϰ⧇ “Dana āĻāϟāĻž āĻŽā§āϛ⧇ āĻĢ⧇āϞ⧇āĻ›ā§‡â€ āĻāĻŦāĻ‚ “Nightly billing sync āĻāϟāĻž āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇āĻ›ā§‡â€â€”āĻāϗ⧁āϞ⧋ āφāϞāĻžāĻĻāĻžāĨ¤

āĻ…āĻĄāĻŋāϟ āĻĄā§‡āϟāĻžāϰ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻ“ āĻĒā§āϰāĻžāχāϭ⧇āϏāĻŋ āύāĻŋ⧟āĻŽ

āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰāĻžāχāϟ āĻĒāĻžāĻĨ āĻ•āĻžāĻ­āĻžāϰ āĻ•āϰ⧁āύ
UI, API, āχāĻŽāĻĒā§‹āĻ°ā§āϟ āĻāĻŦāĻ‚ āϜāĻŦāϗ⧁āϞ⧋āϕ⧇ āĻāĻ•āϟāĻŋ Write + Audit āĻĢā§āĻ˛ā§‹â€™āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϰ⧁āϟ āĻ•āϰ⧁āύāĨ¤
AppMaster āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ

āĻ…āĻĄāĻŋāϟ āϞāĻ—āϗ⧁āϞ⧋ āĻĒā§āϰāĻŽāĻžāĻŖ āĻšāϞ⧇āĻ“ āϤāĻžāϰāĻž āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻĄā§‡āϟāĻžāĨ¤ āĻ…āĻĄāĻŋāϟ āϞāĻ—āĻŋāĻ‚āϕ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ āφāϞāĻžāĻĻāĻž āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύ: āĻ¸ā§āĻĒāĻˇā§āϟ āĻāĻ•ā§āϏ⧇āϏ āύāĻŋ⧟āĻŽ, āĻ¸ā§āĻĒāĻˇā§āϟ āϏ⧀āĻŽāĻž, āĻāĻŦāĻ‚ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āϤāĻĨā§āϝ⧇āϰ āϝāĻ¤ā§āύāĻļā§€āϞ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻŋāĻ‚āĨ¤

āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ āϕ⧇ āϕ⧀ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻŦāĻŋāĻ­āĻžāϜāύ āĻšāϞ⧋: āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āϏāĻŦāĻžāχ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ; āĻĄāĻŋāĻĒāĻžāĻ°ā§āϟāĻŽā§‡āĻ¨ā§āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰāϰāĻž āϤāĻžāĻĻ⧇āϰ āϟāĻŋāĻŽā§‡āϰ āχāϭ⧇āĻ¨ā§āϟ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ; āϰ⧇āĻ•āĻ°ā§āĻĄ āĻŽāĻžāϞāĻŋāĻ•āϰāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϤāĻžāĻĻ⧇āϰ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻĨāĻžāĻ•āĻž āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āχāϭ⧇āĻ¨ā§āϟ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύāĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ activity feed āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰ⧇āύ, āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻžāϰāĻŋāϤ⧇ āĻāĻ•āχ āϰ⧁āϞ āĻĒā§āĻ°ā§Ÿā§‹āĻ— āĻ•āϰ⧁āύ, āϕ⧇āĻŦāϞ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āύ⧟āĨ¤

āĻŽāĻžāĻ˛ā§āϟāĻŋ-āĻŸā§‡āĻ¨ā§āϝāĻžāĻ¨ā§āϟ āĻŦāĻž āĻ•ā§āϰāϏ-āĻĄāĻŋāĻĒāĻžāĻ°ā§āϟāĻŽā§‡āĻ¨ā§āϟ āϟ⧁āϞ⧇ Row-level visibility āϏāĻŦāĻšā§‡ā§Ÿā§‡ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āφāĻĒāύāĻžāϰ āĻ…āĻĄāĻŋāϟ āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻŦā§āϝāĻŦāϏāĻžāϝāĻŧāĻŋāĻ• āĻĄā§‡āϟāĻžāϰ āĻŽāϤ⧋āχ scope āϕ⧀ āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤ (tenant_id, department_id, project_id), āϝāĻžāϤ⧇ āφāĻĒāύāĻŋ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖ: āĻāĻ•āϟāĻŋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āϤāĻžāĻĻ⧇āϰ āĻ•āĻŋāωāϰ āϟāĻŋāĻ•āĻŋāĻŸā§‡āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ HR-āĻ āĻŦ⧇āϤāύ āϏāĻ‚āĻļā§‹āϧāύ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āύāĻž, āϝāĻĻāĻŋāĻ“ āĻĻ⧁āĻŸā§‹ āĻāĻ•āχ āĻ…ā§āϝāĻžāĻĒ⧇ āϘāϟāϛ⧇āĨ¤

āĻāĻ•āϟāĻŋ āϏāĻšāϜ āύ⧀āϤāĻŋ āϝāĻž āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇:

  • Admin: āĻŸā§‡āĻ¨ā§āϝāĻžāĻ¨ā§āϟ āĻ“ āĻĄāĻŋāĻĒāĻžāĻ°ā§āϟāĻŽā§‡āĻ¨ā§āϟ āϜ⧁āĻĄāĻŧ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ…āĻĄāĻŋāϟ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ
  • Manager: department_id āĻŦāĻž project_id āĻĻā§āĻŦāĻžāϰāĻž āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āĻ…āĻĄāĻŋāϟ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ
  • Record owner: āĻļ⧁āϧ⧁ āϤāĻžāϰāĻž āϝ⧇ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžā§Ÿ āϏ⧇āχ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ
  • Auditor/compliance: āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϰāĻŋāĻĄ-āĻ“āύāϞāĻŋ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ, āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ, āĻāĻĄāĻŋāϟ āĻŦā§āϞāĻ• āĻ•āϰāĻž
  • āĻŦāĻžāĻ•āĻŋāϰāĻž: āĻĄāĻŋāĻĢāĻ˛ā§āϟāĻ­āĻžāĻŦ⧇ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āύ⧇āχ

āĻĒā§āϰāĻžāχāϭ⧇āϏāĻŋ āĻĻā§āĻŦāĻŋāĻ¤ā§€ā§Ÿ āĻ…āĻ°ā§āϧ⧇āĻ•āĨ¤ āϝāĻĨ⧇āĻˇā§āϟ āĻĒā§āϰāĻŽāĻžāĻŖ āϰāĻžāϖ⧁āύ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϞāĻ—āϟāĻŋāϕ⧇ āφāĻĒāύāĻžāϰ āĻĄāĻžāϟāĻžāĻŦ⧇āĻœā§‡āϰ āĻāĻ•āϟāĻŋ āĻ•āĻĒāĻŋ āĻŦāĻžāύāĻžāϤ⧇ āĻĻ⧇āĻŦ⧇āύ āύāĻžāĨ¤ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻĢāĻŋāĻ˛ā§āĻĄ (SSNs, āĻŽā§‡āĻĄāĻŋāĻ•āĻžāϞ āύ⧋āϟ, āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āĻĄāĻŋāĻŸā§‡āχāϞāϏ)–āĻāϰ āϜāĻ¨ā§āϝ āϰ⧇āĻĄā§āϝāĻžāĻ•āĻļāύ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰ⧁āύ: āĻĢāĻŋāĻ˛ā§āĻĄāϟāĻŋ āĻŦāĻĻāϞ⧇āϛ⧇ āϤāĻž āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰ⧁āύ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒ⧁āϰ⧋āύ⧋/āύāϤ⧁āύ āĻŽāĻžāύ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤ āφāĻĒāύāĻŋ “email changed” āϞāĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻ–āύ āφāϏāϞ āĻŽāĻžāύ āĻŽāĻžāĻ¸ā§āĻ• āĻ•āϰāĻž āφāϛ⧇, āĻ…āĻĨāĻŦāĻž āϝāĻžāϚāĻžāχ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻšā§āϝāĻžāĻļ āĻ•āϰāĻž āĻĢāĻŋāĻ™ā§āĻ—āĻžāϰāĻĒā§āϰāĻŋāĻ¨ā§āϟ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞ⧋āϕ⧇ āĻŦā§āϝāĻŦāϏāĻžā§ŸāĻŋāĻ• āϰ⧇āĻ•āĻ°ā§āĻĄ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āĻĨ⧇āϕ⧇ āφāϞāĻžāĻĻāĻž āϰāĻžāϖ⧁āύāĨ¤ āϞāĻ—āχāύ āĻšā§‡āĻˇā§āϟāĻž, MFA āϰāĻŋāϏ⧇āϟ, API āϕ⧀ āϤ⧈āϰāĻŋ, āĻāĻŦāĻ‚ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ security_audit āĻ¸ā§āĻŸā§āϰāĻŋāĻŽā§‡ āϰāĻžāϖ⧁āύ āϝāĻžāϰ āĻāĻ•ā§āϏ⧇āϏ āĻ•ā§œāĻž āĻāĻŦāĻ‚ āϰāĻŋāĻŸā§‡āύāĻļāύ āĻĻā§€āĻ°ā§āϘāĨ¤ āĻŦā§āϝāĻŦāϏāĻžā§ŸāĻŋāĻ• āĻāĻĄāĻŋāϟ (āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āφāĻĒāĻĄā§‡āϟ, āĻ…āύ⧁āĻŽā§‹āĻĻāύ, workflow āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ) āϏāĻžāϧāĻžāϰāĻŖ āĻ…āĻĄāĻŋāϟ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽā§‡ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϝāĻ–āύ āϕ⧇āω āĻĒāĻžāĻ°ā§āϏ⧋āύāĻžāϞ āĻĄā§‡āϟāĻž āĻ…āĻĒāϏāĻžāϰāϪ⧇āϰ āφāĻŦ⧇āĻĻāύ āĻ•āϰ⧇, āĻĒ⧁āϰ⧋ āĻ…āĻĄāĻŋāϟ āĻŸā§āϰ⧇āχāϞ āĻŽā§āϛ⧇ āĻĻ⧇āĻŦ⧇āύ āύāĻžāĨ¤ āĻŦāϰāĻ‚:

  • āχāωāϜāĻžāϰ āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āĻĄā§‡āϟāĻž āĻŽā§āϛ⧇ āĻŦāĻž āĻ…āύāĻžāύ⧋āύāĻžāχāϜ āĻ•āϰ⧁āύ
  • āϞāϗ⧇ actor āĻļāύāĻžāĻ•ā§āϤāĻ•āĻžāϰ⧀āϕ⧇ āĻ¸ā§āĻĨāĻžāϝāĻŧā§€ āĻĒāĻŋāϏ⧁āĻĄā§‹āύāĻŋāĻŽā§‡ āĻŦāĻĻāϞ⧇ āĻĢ⧇āϞ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖ: “deleted-user-123”)
  • āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻĢāĻŋāĻ˛ā§āĻĄ āĻŽāĻžāύāϗ⧁āϞ⧋ āϰ⧇āĻĄā§āϝāĻžāĻ•ā§āϟ āĻ•āϰ⧁āύ āϝāĻĻāĻŋ āϏ⧇āϗ⧁āϞ⧋ āĻĒāĻžāĻ°ā§āϏ⧋āύāĻžāϞ āĻĄā§‡āϟāĻž āĻšā§Ÿ
  • āĻ•āĻŽāĻĒā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϏ⧇āϰ āϜāĻ¨ā§āϝ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ, āĻ…ā§āϝāĻžāĻ•āĻļāύ āϟāĻžāχāĻĒ, āĻāĻŦāĻ‚ āϰ⧇āĻ•āĻ°ā§āĻĄ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āϰāĻžāϖ⧁āύ

āϰāĻŋāĻŸā§‡āύāĻļāύ, āĻ…āĻ–āĻŖā§āĻĄāϤāĻž, āĻāĻŦāĻ‚ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ (āĻ•āĻŽāĻĒā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϏ⧇āϰ āϜāĻ¨ā§āϝ)

āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āĻ…āĻĄāĻŋāϟ āϞāĻ— āϕ⧇āĻŦāϞ “āχāϭ⧇āĻ¨ā§āϟ āφāĻŽāϰāĻž āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰāĻŋ” āύ⧟āĨ¤ āĻ•āĻŽāĻĒā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϏ⧇āϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϕ⧇ āϤāĻŋāύāϟāĻŋ āϜāĻŋāύāĻŋāϏ āĻĒā§āϰāĻŽāĻžāĻŖ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇: āφāĻĒāύāĻŋ āĻĒāĻ°ā§āϝāĻžāĻĒā§āϤ āϏāĻŽāϝāĻŧ āĻĄā§‡āϟāĻž āϰ⧇āϖ⧇āϛ⧇āύ, āĻĒāϰ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āĻšāϝāĻŧāύāĻŋ, āĻāĻŦāĻ‚ āϕ⧇āω āϚāĻžāχāϞ⧇ āĻĻā§āϰ⧁āϤ āĻŦ⧇āϰ āĻ•āϰ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āϰāĻŋāĻŸā§‡āύāĻļāύ: āĻāĻŽāύ āĻāĻ•āϟāĻŋ āύ⧀āϤāĻŋ āĻ āĻŋāĻ• āĻ•āϰ⧁āύ āϝāĻž āφāĻĒāύāĻŋ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ

āφāĻĒāύāĻžāϰ āĻā§āρāĻ•āĻŋ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻāĻ•āϟāĻŋ āϏāĻšāϜ āύāĻŋ⧟āĻŽ āĻĻāĻŋā§Ÿā§‡ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύāĨ¤ āĻ…āύ⧇āĻ• āĻĻāϞ āĻĄā§‡-āϟ⧁-āĻĄā§‡ āĻŸā§āϰāĻžāĻŦāϞāĻļ⧁āϟāĻŋāĻ‚ā§Ÿā§‡āϰ āϜāĻ¨ā§āϝ 90 āĻĻāĻŋāύ, āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻ•āĻŽāĻĒā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϏ⧇āϰ āϜāĻ¨ā§āϝ 1 āĻĨ⧇āϕ⧇ 3 āĻŦāĻ›āϰ, āĻāĻŦāĻ‚ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāĻŋāϤ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āφāϰāĻ“ āĻĻā§€āĻ°ā§āϘ āϏāĻŽā§Ÿ āϰāĻžāϖ⧇āĨ¤ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāύ āϕ⧀ āϘ⧜āĻŋāϟāĻžāϕ⧇ āϰāĻŋāϏ⧇āϟ āĻ•āϰ⧇ (āĻĒā§āϰāĻžāϝāĻŧāχ: āχāϭ⧇āĻ¨ā§āϟ āϏāĻŽā§Ÿ) āĻāĻŦāĻ‚ āϕ⧀ āĻŦāĻžāĻĻ āĻĨāĻžāĻ•āĻŦ⧇ (āωāĻĻāĻžāĻšāϰāĻŖ: āĻāĻŽāύ āϞāĻ— āϝ⧇āϗ⧁āϞ⧋ āφāĻĒāύāĻŋ āϰāĻžāĻ–āĻž āωāϚāĻŋā§Ž āύ⧟)āĨ¤

āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āĻāĻ•āĻžāϧāĻŋāĻ• āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻĨāĻžāϕ⧇, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž āϰāĻŋāĻŸā§‡āύāĻļāύ āϏ⧇āϟ āĻ•āϰ⧁āύāĨ¤ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇āϰ āϞāĻ—āϗ⧁āϞ⧋ āϏāĻžāϧāĻžāϰāĻŖāϤ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧇āĻļāĻŋ āϰāĻŋāĻŸā§‡āύāĻļāύ āĻĻāĻžāĻŦāĻŋ āĻ•āϰ⧇; āĻŸā§‡āĻ¸ā§āϟ āϞāĻ—āϗ⧁āϞ⧋ āϏāĻžāϧāĻžāϰāĻŖāϤ āϰāĻžāĻ–āĻžāϰ āĻĻāϰāĻ•āĻžāϰ āĻšā§Ÿ āύāĻžāĨ¤

āĻ…āĻ–āĻŖā§āĻĄāϤāĻž: āĻŽā§āϝāĻžāύāĻŋāĻĒ⧁āϞ⧇āĻļāύ āĻ•āĻ āĻŋāύ āĻ•āϰ⧁āύ

āĻ…āĻĄāĻŋāϟ āϞāĻ—āϕ⧇ append-only āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύāĨ¤ āϰ⧋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻŦ⧇āύ āύāĻž, āĻāĻŦāĻ‚ āϏāĻžāϧāĻžāϰāĻŖ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻāϗ⧁āϞ⧋ āĻĄāĻŋāϞāĻŋāϟ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āĻŦ⧇āύ āύāĻžāĨ¤ āϝāĻĻāĻŋ āĻĄāĻŋāϞāĻŋāϟ āϏāĻ¤ā§āϝāĻŋāχ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ (āφāχāύāĻŋ āĻ…āύ⧁āϰ⧋āϧ, āĻĄā§‡āϟāĻž āĻ•ā§āϞāĻŋāύāφāĻĒ), āϏ⧇āϟāĻžāĻ“ āĻāĻ•āϟāĻŋ āφāϞāĻžāĻĻāĻž āχāϭ⧇āĻ¨ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰ⧁āύāĨ¤

āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ:

  • āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ…āĻĄāĻŋāϟ āχāϭ⧇āĻ¨ā§āϟ āϞ⧇āϖ⧇, āĻ•āĻ–āύ⧋ āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ āύ⧟
  • āϏāĻžāϧāĻžāϰāĻŖ āϰ⧋āϞāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻ…āĻĄāĻŋāϟ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āωāĻĒāϰ UPDATE/DELETE āĻ…āύ⧁āĻŽāϤāĻŋ āύ⧇āχ
  • āĻŦāĻŋāϰāϞ purge āĻ…ā§āϝāĻžāĻ•āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āφāϞāĻžāĻĻāĻž “break glass” āϰ⧋āϞ
  • āĻĒā§āϰāϧāĻžāύ āĻ…ā§āϝāĻžāĻĒ āĻĄāĻžāϟāĻžāĻŦ⧇āĻœā§‡āϰ āĻŦāĻžāχāϰ⧇ āĻāĻ•āϟāĻŋ āĻĒāĻŋāϰāĻŋ⧟āĻĄāĻŋāĻ• āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāϟ

āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ, āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ, āĻāĻŦāĻ‚ āĻŽāύāĻŋāϟāϰāĻŋāĻ‚

āĻ…āĻĄāĻŋāϟāϰāϰāĻž āĻĒā§āϰāĻžāϝāĻŧāχ CSV āĻŦāĻž JSON āϚāĻžāύāĨ¤ āĻāĻ•āϟāĻŋ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻ•āϰ⧁āύ āϝāĻž āϤāĻžāϰāĻŋāĻ– āĻĒāϰāĻŋāϏāϰ āĻāĻŦāĻ‚ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϟāĻžāχāĻĒ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰ⧇ (āϝ⧇āĻŽāύ Invoice, User, Ticket) āϝāĻžāϤ⧇ āφāĻĒāύāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āĻœā§‡ āĻšāĻžāϤ āĻĻāĻŋā§Ÿā§‡ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āύāĻž āĻ•āϰ⧇ āϰāĻŋāĻ­āĻŋāω āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ⧇āϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āϏāĻžāĻ°ā§āϚ āĻ•āϰāĻŦ⧇āύ āϤāĻž āĻ…āύ⧁āϝāĻžā§Ÿā§€ āχāύāĻĄā§‡āĻ•ā§āϏ āĻ•āϰ⧁āύ:

  • created_at (āϟāĻžāχāĻŽ āϰ⧇āĻžā§āϜ āĻ•ā§ā§Ÿā§‡āϰāĻŋ)
  • object_type + object_id (āĻāĻ• āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āχāϤāĻŋāĻšāĻžāϏ)
  • actor_id (āϕ⧇ āϕ⧀ āĻ•āϰ⧇āϛ⧇)

āύ⧀āϰāĻŦ āĻŦā§āϝāĻ°ā§āĻĨāϤāĻžāϰ āϜāĻ¨ā§āϝ āĻšā§‹āĻ– āϰāĻžāϖ⧁āύāĨ¤ āϝāĻĻāĻŋ āĻ…āĻĄāĻŋāϟ āϞ⧇āĻ–āĻž āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϝāĻŧ, āφāĻĒāύāĻŋ āĻĒā§āϰāĻŽāĻžāĻŖ āĻšāĻžāϰāĻžāύ āĻāĻŦāĻ‚ āĻĒā§āϰāĻžāϝāĻŧāχ āϏ⧇āϟāĻž āϞāĻ•ā§āĻˇā§āϝ āĻ•āϰāϤ⧇āĻ“ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻžāĨ¤ āĻāĻ•āϟāĻŋ āϏāĻšāϜ āĻ…ā§āϝāĻžāϞāĻžāĻ°ā§āϟ āϝ⧋āĻ— āĻ•āϰ⧁āύ: āϝāĻĻāĻŋ āĻ…ā§āϝāĻžāĻĒ āϞāĻŋāĻ–āϛ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽā§Ÿā§‡āϰ āϜāĻ¨ā§āϝ āĻ…āĻĄāĻŋāϟ āχāϭ⧇āĻ¨ā§āϟ āĻļā§‚āĻ¨ā§āϝ⧇ āĻĒ⧌āρāĻ›āĻžāϝāĻŧ, āĻŽāĻžāϞāĻŋāĻ•āĻĻ⧇āϰ āύ⧋āϟāĻŋāĻĢāĻžāχ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻāϰāϰāϟāĻŋ āωāĻšā§āϚ āĻļāĻŦā§āĻĻ⧇ āϞāĻ— āĻ•āϰ⧁āύāĨ¤

āϏāĻžāϧāĻžāϰāĻŖ āϭ⧁āϞ āϝāĻž āĻ…āĻĄāĻŋāϟ āϞāĻ—āϕ⧇ āĻ…āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰ⧇

āĻĻā§āϰ⧁āϤ āφāĻĒāύāĻžāϰ āĻ…āĻĄāĻŋāϟ āĻĄā§‡āϟāĻž āĻŽāĻĄā§‡āϞ āĻ•āϰ⧁āύ
PostgreSQL-āϕ⧇ āĻŽāĻžāĻĨāĻžā§Ÿ āϰ⧇āϖ⧇ āĻ­āĻŋāĻœā§āϝ⧁⧟āĻžāϞāĻŋ āĻ…āĻĄāĻŋāϟ āĻŸā§‡āĻŦāĻŋāϞ āĻ“ āϰāĻŋāϞ⧇āĻļāύ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰ⧁āύāĨ¤
āĻĄāĻžāϟāĻž āĻŽāĻĄā§‡āϞ āĻ•āϰ⧁āύ

āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻĻā§āϰ⧁āϤ āϏāĻŽāϝāĻŧ āύāĻˇā§āϟ āĻ•āϰāĻžāϰ āωāĻĒāĻžā§Ÿ āĻšāϞ āĻ…āύ⧇āĻ• āϏāĻžāϰāĻŋ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻž āϝāĻž āφāϏāϞ āĻĒā§āϰāĻļā§āύāϗ⧁āϞ⧋āϰ āωāĻ¤ā§āϤāϰ āĻĻā§‡ā§Ÿ āύāĻž: āϕ⧇ āϕ⧀ āĻŦāĻĻāϞāĻŋā§Ÿā§‡āϛ⧇, āĻ•āĻ–āύ, āĻāĻŦāĻ‚ āϕ⧋āĻĨāĻž āĻĨ⧇āϕ⧇āĨ¤

āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĢāĻžāρāĻĻ āĻšāϞ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϜ āĻŸā§āϰāĻŋāĻ—āĻžāϰ⧇āϰ āĻ“āĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰāĻžāĨ¤ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻāĻ•āϟāĻŋ āϰ⧋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšā§Ÿā§‡āϛ⧇ āϤāĻž āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤāĻžāϰāĻž āĻĒā§āϰāĻžāϝāĻŧāχ āĻŦā§āϝāĻŦāϏāĻžāϝāĻŧāĻŋāĻ• āĻĒā§āϰāϏāĻ™ā§āĻ— āĻŽāĻŋāϏ āĻ•āϰ⧇: āϕ⧋āύ āĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āϕ⧋āύ āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āϟ āĻāϟāĻŋ āĻ•āϰ⧇āϛ⧇, āϕ⧋āύ āϰ⧋āϞ āĻ›āĻŋāϞ, āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻ•āĻŋ āĻāĻ• āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻāĻĄāĻŋāϟ āύāĻž āϕ⧋āύ⧋ āĻ…āĻŸā§‹āĻŽā§‡āĻŸā§‡āĻĄ āύāĻŋ⧟āĻŽ āĻ›āĻŋāϞāĨ¤

āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧇āĻļāĻŋ compliance āĻāĻŦāĻ‚ āĻĻāĻŋāύ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇ āĻ­āĻžāĻ™ā§āĻ—āĻž āϝ⧇āϏāĻŦ āϭ⧁āϞ:

  • āĻĒāĻžāĻ°ā§āϏ⧋āύāĻžāϞ āĻŦāĻž āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻĒ⧁āϰ⧋ āĻĒ⧇-āϞ⧋āĻĄ āϞāĻ— āĻ•āϰāĻž (āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āϰāĻŋāϏ⧇āϟ, āĻŸā§‹āϕ⧇āύ) āĻŦāĻĻāϞ⧇ āĻāĻ•āϟāĻŋ āύ⧂āĻ¨ā§āϝāϤāĻŽ diff āĻ“ āϏ⧇āĻĢ āφāχāĻĄā§‡āĻ¨ā§āϟāĻŋāĻĢāĻžā§ŸāĻžāϰ āϰāĻžāĻ–āĻž
  • āĻŽāĻžāύ⧁āώāĻĻ⧇āϰāϕ⧇ āĻ…āĻĄāĻŋāϟ āϰ⧇āĻ•āĻ°ā§āĻĄ “āϏāĻ‚āĻļā§‹āϧāĻ¨â€ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻā§‡ā§ŸāĻž āϝāĻžāϤ⧇ āχāϤāĻŋāĻšāĻžāϏ āϞāĻŋāĻ–āĻŋāϤāĻ­āĻžāĻŦ⧇ āĻŦāĻĻāϞ⧇ āϝāĻžā§Ÿ
  • non-UI write path āϭ⧁āϞ⧇ āϝāĻžāĻ“ā§ŸāĻž: CSV āχāĻŽāĻĒā§‹āĻ°ā§āϟ, āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ, āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āϜāĻŦ
  • āĻ…āύāĻŋ⧟āĻŽāĻŋāϤ action āύāĻžāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž: “Updated,” “Edit,” “Change,” “Modify”—āĻĢāĻŋāĻĄāϕ⧇ āĻļāĻŦā§āĻĻāĻāĻžāρāĻ•āϞ⧇ āĻĒāϰāĻŋāĻŖāϤ āĻ•āϰ⧇
  • āϕ⧇āĻŦāϞ object ID āϞāĻ— āĻ•āϰāĻž, āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āϤāĻ–āύāĻ•āĻžāϰ āĻŽāĻžāύ⧁āώ⧇āϰ-āĻĒāĻ•ā§āώ⧇ āύāĻžāĻŽ āϞāĻ— āĻ•āϰāĻž āύ⧇āχ (āύāĻžāĻŽ āĻĒāϰ⧇ āĻŦāĻĻāϞ⧇ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇)

āφāĻĒāύāĻžāϰ āχāϭ⧇āĻ¨ā§āϟ āĻļāĻŦā§āĻĻāĻ­āĻžāĻŖā§āĻĄāĻžāϰ āĻļā§€āĻ˜ā§āϰāχ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄāĻžāχāϜ āĻ•āϰ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖ: user.created, user.updated, invoice.voided, access.granted) āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ write path-āϕ⧇ āĻāĻ•āϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āχāĻŽāĻŋāϟ āĻ•āϰāϤ⧇ āĻŦāĻžāĻ§ā§āϝ āĻ•āϰ⧁āύāĨ¤ āĻ…āĻĄāĻŋāϟ āĻĄā§‡āϟāĻžāϕ⧇ write-once āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύ: āϕ⧇āω āϭ⧁āϞ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϞ⧇, āύāϤ⧁āύ āĻāĻ•āϟāĻŋ corrective action āϞāĻ— āĻ•āϰ⧁āύ āχāϤāĻŋāĻšāĻžāϏ āĻĒ⧁āύāϰāĻžā§Ÿ āϞāĻŋāĻ–āĻŦ⧇āύ āύāĻžāĨ¤

āĻĻā§āϰ⧁āϤ āĻšā§‡āĻ•āϞāĻŋāĻ¸ā§āϟ āĻ“ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒ

āĻĒā§‚āϰāĻŖ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰāĻžāϰ āφāϗ⧇ āĻ•ā§Ÿā§‡āĻ•āϟāĻŋ āĻĻā§āϰ⧁āϤ āĻšā§‡āĻ• āĻ•āϰ⧁āύāĨ¤ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āĻ…āĻĄāĻŋāϟ āϞāĻ— āϏ⧇āϰāĻž āϧāϰāύ⧇āϰ āĻŦā§‹āϰāĻŋāĻ‚: āĻĒā§‚āĻ°ā§āĻŖ, āĻ•āύāϏāĻŋāĻ¸ā§āĻŸā§‡āĻ¨ā§āϟ, āĻāĻŦāĻ‚ āĻ•āĻŋāϛ⧁ āϭ⧁āϞ āĻšāϞ⧇ āϏāĻšāĻœā§‡ āĻĒ⧜āĻž āϝāĻžā§ŸāĨ¤

āĻŸā§‡āĻ¸ā§āϟ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻŦāĻžāĻ¸ā§āϤāĻŦāϧāĻ°ā§āĻŽā§€ āĻĄā§‡āϟāĻž āύāĻŋā§Ÿā§‡ āĻāχ āĻšā§‡āĻ•āϞāĻŋāĻ¸ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ:

  • āĻĒā§āϰāϤāĻŋāϟāĻŋ create, update, delete, restore, āĻāĻŦāĻ‚ āĻŦāĻžāĻ˛ā§āĻ• āĻāĻĄāĻŋāϟ āĻĒā§āϰāĻ¤ā§āϝ⧇āĻ• āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āĻ āĻŋāĻ• āĻāĻ•āϟāĻŋ āĻ…āĻĄāĻŋāϟ āχāϭ⧇āĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ (āĻĢāĻžāρāĻ• āύ⧇āχ, āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āύ⧇āχ)āĨ¤
  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āχāϭ⧇āĻ¨ā§āĻŸā§‡ actor (user āĻŦāĻž system), timestamp (UTC), action, āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻŋāϰ object reference (type + ID) āĻĨāĻžāϕ⧇āĨ¤
  • “āĻ•āĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāĻ˛ā§‹â€ āĻ­āĻŋāωāϟāĻŋ āĻĒāĻžāĻ āϝ⧋āĻ—ā§āϝ: āĻĢāĻŋāĻ˛ā§āĻĄ āύāĻžāĻŽ āĻ¸ā§āĻĒāĻˇā§āϟ, āĻĒ⧁āϰāύ⧋/āύāϤ⧁āύ āĻŽāĻžāύ āĻĻ⧇āĻ–āĻžā§Ÿ, āĻāĻŦāĻ‚ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻĢāĻŋāĻ˛ā§āĻĄ āĻŽāĻžāĻ¸ā§āĻ• āĻŦāĻž āϏāĻžāϰāϏāĻ‚āĻ•ā§āώ⧇āĻĒ āĻ•āϰāĻž āφāϛ⧇āĨ¤
  • āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύāϰāĻž āϟāĻžāχāĻŽ āϰ⧇āĻžā§āϜ, actor, action, āĻāĻŦāĻ‚ object āĻĻā§āĻŦāĻžāϰāĻž āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āĻāĻŦāĻ‚ āϰāĻŋāĻ­āĻŋāĻ‰ā§Ÿā§‡āϰ āϜāĻ¨ā§āϝ āϰ⧇āϜāĻžāĻ˛ā§āϟ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • āϞāĻ— āĻŸā§‡āĻŽā§āĻĒāĻŸā§āϝāĻžāĻ“ā§Ÿ āĻŦāĻž āϕ⧋āύ⧋ āϏāĻžāϧāĻžāϰāĻŖ āϰ⧋āϞ āĻĻāĻŋā§Ÿā§‡ āĻŸā§‡āĻŽā§āĻĒāĻŸā§āϝāĻžāĻ“ā§Ÿ āĻ•āϰāĻž āĻ•āĻ āĻŋāύ: āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āϰ⧋āϞ⧇āϰ āϜāĻ¨ā§āϝ write-only, āĻāĻŦāĻ‚ āĻ…āĻĄāĻŋāϟ āϞāĻ— āύāĻŋāĻœā§‡āχ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϞ⧇ āϏ⧇āϟāĻž āĻŦā§āϞāĻ• āĻŦāĻž āφāϞāĻžāĻĻāĻž āĻ…āĻĄāĻŋāϟ āĻ•āϰāĻž āĻšā§ŸāĨ¤

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ AppMaster (appmaster.io) āĻĻāĻŋā§Ÿā§‡ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞ āĻŦāĻžāύāĻžāύ, āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āωāĻĒāĻžāϝāĻŧ āĻšāϞ UI āĻ…ā§āϝāĻžāĻ•āĻļāύ, API endpoint, āχāĻŽāĻĒā§‹āĻ°ā§āϟ āĻāĻŦāĻ‚ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύāϗ⧁āϞ⧋āϕ⧇ āĻāĻ•āχ Business Process āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϰ⧁āϟ āĻ•āϰāĻž āϝāĻž āωāĻ­ā§Ÿâ€”āĻĄāĻžāϟāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻāĻŦāĻ‚ āĻ…āĻĄāĻŋāϟ āχāϭ⧇āĻ¨ā§āĻŸâ€”āĻāĻ•āϏāĻžāĻĨ⧇ āϞ⧇āϖ⧇āĨ¤ āĻāĻ­āĻžāĻŦ⧇, āφāĻĒāύāĻžāϰ CRUD āĻ…āĻĄāĻŋāϟ āĻŸā§āϰ⧇āχāϞ consistent āĻĨāĻžāĻ•āĻŦ⧇ āϝāϤāχ āĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻ“ āĻ“ā§ŸāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋ āĻŦāĻĻāϞāĻžāĻ•āĨ¤

āϛ⧋āϟ āĻĨ⧇āϕ⧇āχ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ: āĻāĻ•āϟāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ“ā§ŸāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋ (āϟāĻŋāĻ•āĻŋāϟ, āĻ…āύ⧁āĻŽā§‹āĻĻāύ, āĻŦāĻŋāϞāĻŋāĻ‚ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ) āύāĻŋā§Ÿā§‡ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ āĻĢāĻŋāĻĄāϟāĻŋ āĻĒāĻžāĻ āϝ⧋āĻ—ā§āϝ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āĻŦāĻžā§œāĻžāύ āϝāϤāĻ•ā§āώāĻŖ āύāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ write path āĻāĻ•āϟāĻŋ āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽāĻžāύāϝ⧋āĻ—ā§āϝ, āϏāĻžāĻ°ā§āĻšā§‡āĻŦāϞ āĻ…āĻĄāĻŋāϟ āχāϭ⧇āĻ¨ā§āϟ āχāĻŽāĻŋāϟ āĻ•āϰāϛ⧇āĨ¤

āĻĒā§āϰāĻļā§āύ⧋āĻ¤ā§āϤāϰ

āĻ•āĻ–āύ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞ⧇ āĻ…āĻĄāĻŋāϟ āϞāĻ— āϝ⧋āĻ— āĻ•āϰāĻž āωāϚāĻŋāϤ?

āĻ…āĻĄāĻŋāϟ āϞāĻ—āϗ⧁āϞ⧋ āϏ⧇āχ āĻŽā§āĻšā§‚āĻ°ā§āϤ āĻĨ⧇āϕ⧇āχ āϝ⧋āĻ— āĻ•āϰ⧁āύ āϝāĻ–āύ āϟ⧁āϞāϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻĄā§‡āϟāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĒā§āϰāĻĨāĻŽ āĻŦāĻŋāĻŦāĻžāĻĻ āĻŦāĻž āĻ…āĻĄāĻŋāϟ āĻ…āύ⧁āϰ⧋āϧ āĻšā§Ÿ āφāϗ⧇āχ, āĻāĻŦāĻ‚ āĻĒāϰ⧇ āĻĒ⧁āϰ⧋āύ⧋ āχāϤāĻŋāĻšāĻžāϏ āĻĢāĻŋāϰāĻŋā§Ÿā§‡ āφāύāĻž āĻ…āύ⧇āĻ• āϏāĻŽā§Ÿ āĻ•āĻ˛ā§āĻĒāύāĻžāĻļāĻ•ā§āϤāĻŋāϰ āĻ“āĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤

āĻāĻ•āϟāĻŋ āĻ…āĻĄāĻŋāϟ āϞāĻ— āĻ•āĻŽāĻĒāĻ•ā§āώ⧇ āϕ⧀ āĻŦāϞ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇?

āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰ⧀ āĻ…āĻĄāĻŋāϟ āϞāĻ— āĻŦāϞāϤ⧇ āĻŦā§‹āĻāĻžā§Ÿ: āϕ⧇ āĻ•āϰ⧇āϛ⧇, āϕ⧋āύ āϰ⧇āĻ•āĻ°ā§āĻĄāϟāĻŋ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ•āϰāĻž āĻšāϞ⧋, āϕ⧀ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšā§Ÿā§‡āϛ⧇, āĻ•āĻ–āύ āϘāϟāϞ⧋, āĻāĻŦāĻ‚ āϕ⧋āĻĨāĻž āĻĨ⧇āϕ⧇ āĻāϏ⧇āϛ⧇ (UI, API, import, āĻŦāĻž job)āĨ¤ āϝāĻĻāĻŋ āĻāϗ⧁āϞ⧋āϰ āϕ⧋āύ⧋ āĻāĻ•āϟāĻŋāϰ āωāĻ¤ā§āϤāϰ āĻĻā§āϰ⧁āϤ āĻĻ⧇āĻ“ā§ŸāĻž āύāĻž āϝāĻžā§Ÿ, āϤāĻŦ⧇ āϞāĻ— āĻŦāĻŋāĻļā§āĻŦāĻžāϏāϝ⧋āĻ—ā§āϝ āĻšāĻŦ⧇ āύāĻžāĨ¤

āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āĻāĻŦāĻ‚ āĻ…āĻĄāĻŋāϟ āϞāϗ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āϕ⧀?

āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ—āϗ⧁āϞ⧋ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āϜāĻ¨ā§āĻ¯â€”āĻļā§‹āϰāĻ—ā§‹āϞ āĻ•āϰ⧇, āĻŸā§‡āĻ•āύāĻŋāĻ•ā§āϝāĻžāϞ āĻāĻŦāĻ‚ āĻ…āύāĻŋ⧟āĻŽāĻŋāϤāĨ¤ āĻ…āĻĄāĻŋāϟ āϞāĻ—āϗ⧁āϞ⧋ āĻĻāĻžā§ŸāĻŦāĻĻā§āϧāϤāĻžāϰ āϜāĻ¨ā§āĻ¯â€”āϏ⧁āϤāϰāĻžāĻ‚ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻĢāĻŋāĻ˛ā§āĻĄ, āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ­āĻžāώāĻž āĻāĻŦāĻ‚ āύāύ-āχāĻžā§āϜāĻŋāύāĻŋ⧟āĻžāϰāĻĻ⧇āϰ āϜāĻ¨ā§āϝāĻ“ āĻĒāĻžāĻ āϝ⧋āĻ—ā§āϝ āĻĢāϰāĻŽā§āϝāĻžāϟ āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤāĨ¤

āϕ⧇āύ āĻ…āĻĄāĻŋāϟ āϞāϗ⧇ āĻĢāĻžāρāĻ• āĻĨāĻžāϕ⧇, āϝāĻĻāĻŋāĻ“ āφāĻŽāϰāĻž āϏāĻžāϧāĻžāϰāĻŖ āĻāĻĄāĻŋāϟ āϞāĻ— āĻ•āϰāĻŋ?

āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ•āĻžāĻ­āĻžāϰ⧇āϜ āĻŦā§āϝāĻ°ā§āĻĨ āĻšā§Ÿ āϝāĻ–āύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞ⧋ āϏāĻžāϧāĻžāϰāύ āĻāĻĄāĻŋāϟ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇āϰ āĻŦāĻžāχāϰ⧇ āĻšā§ŸāĨ¤ āĻŦāĻžāĻ˛ā§āĻ• āĻāĻĄāĻŋāϟ, āχāĻŽāĻĒā§‹āĻ°ā§āϟ, āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻ•āĻžāϜ, āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻļāĻ°ā§āϟāĻ•āĻžāϟ āĻāĻŦāĻ‚ āĻĄāĻŋāϞāĻŋāϟ āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āĻĻāϞāϗ⧁āϞ⧋ āĻĒā§āϰāĻžāϝāĻŧāχ āĻ…āĻĄāĻŋāϟ āχāϭ⧇āĻ¨ā§āϟ āĻŽāĻ¨ā§āĻĨāϰ āĻ•āϰ⧇ āĻĢ⧇āϞ⧇āĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ āĻŦāĻž āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āϰāĻž āĻ•āĻžāϜāϗ⧁āϞ⧋ āϞāĻ— āĻ•āϰāĻŦ?

āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ āĻ•āĻŋāĻ‚āĻŦāĻž āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ⧇āϰ āĻ•ā§āϰāĻŋ⧟āĻžāϗ⧁āϞ⧋ āϞāĻ— āĻ•āϰāĻžāϰ āϏāĻŽā§Ÿ actor type āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ actor identifier āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āĻ¨â€”āĻļ⧁āϧ⧁ user ID āύ⧟āĨ¤ āĻāĻ­āĻžāĻŦ⧇ āφāĻĒāύāĻŋ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āφāϞāĻžāĻĻāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āϝ⧇ āĻāϟāĻž āĻāĻ•āϜāύ āĻ¸ā§āϟāĻžāĻĢ, āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϜāĻŦ, āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ, āύāĻž āĻŦāĻžāχāϰ⧇āϰ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻ›āĻŋāϞāĨ¤

āĻ…āĻĄāĻŋāϟ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒāϗ⧁āϞ⧋ UTC āϤ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āωāϚāĻŋāϤ āύāĻž āϞ⧋āĻ•āĻžāϞ āϏāĻŽā§Ÿ?

āĻĄāĻžāϟāĻžāĻŦ⧇āĻœā§‡ timestamps UTC-āϤ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ UI-āϤ⧇ āĻ­āĻŋāĻ‰ā§ŸāĻžāϰ⧇āϰ āϞ⧋āĻ•āĻžāϞ āϟāĻžāχāĻŽāĻœā§‹āύ⧇ āĻĻ⧇āĻ–āĻžāύāĨ¤ āĻāϟāĻŋ āϟāĻžāχāĻŽāĻœā§‹āύ āĻŦāĻŋāϤāĻ°ā§āĻ• āĻā§œāĻžāϤ⧇ āĻāĻŦāĻ‚ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟāϗ⧁āϞ⧋ āϏāĻžāĻ°ā§āĻŦāϜāύ⧀āύ āϰāĻžāϖ⧇āĨ¤

āχāϭ⧇āĻ¨ā§āϟ āϞāĻ— āĻŸā§‡āĻŦāĻŋāϞ āύāĻžāĻ•āĻŋ per-entity version history āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤ?

āĻāĻ•āϟāĻŋ append-only āχāϭ⧇āĻ¨ā§āϟ āϞāĻ— āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻāĻ• āϜāĻžā§ŸāĻ—āĻž āĻĨ⧇āϕ⧇ āϏāĻžāĻ°ā§āϚ āĻ•āϰāϤ⧇ āϚāĻžāύ āĻāĻŦāĻ‚ āϏāĻšāϜ āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ āĻĢāĻŋāĻĄ āϚāĻžāύāĨ¤ āϝāĻ–āύ āĻāĻ•āϟāĻŋ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āĻĒā§Ÿā§‡āĻ¨ā§āϟ-āχāύ-āϟāĻžāχāĻŽ āĻ­āĻŋāω āĻĒā§āϰāĻžāϝāĻŧāχ āĻĻāϰāĻ•āĻžāϰ āĻšā§Ÿ, āϤāĻ–āύ per-entity versioned history āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ•āĨ¤ āĻ…āύ⧇āĻ• āĻ…ā§āϝāĻžāĻĒ⧇ field-level diffs āϏāĻš āχāϭ⧇āĻ¨ā§āϟ āϞāĻ— āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āϚāĻžāĻšāĻŋāĻĻāĻž āĻ•āĻŽ āĻ¸ā§āĻŸā§‹āϰ⧇āĻœā§‡ āĻĒā§‚āϰāĻŖ āĻ•āϰ⧇āĨ¤

āĻĄāĻŋāϞ⧇āϟāϗ⧁āϞ⧋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻž āωāϚāĻŋāϤ āϝāĻžāϤ⧇ āĻĒā§āϰāĻŽāĻžāĻŖ āĻŽā§āϛ⧇ āύāĻž āϝāĻžā§Ÿ?

āĻĒā§āϰāϧāĻžāύāϤ soft delete āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ delete āĻ…ā§āϝāĻžāĻ•āĻļāύ āφāϞāĻžāĻĻāĻžāĻ­āĻžāĻŦ⧇ āϞāĻ— āĻ•āϰ⧁āύāĨ¤ āϝāĻĻāĻŋ hard delete āĻ…āĻĒāϰāĻŋāĻšāĻžāĻ°ā§āϝ, āϤāĻžāĻšāϞ⧇ āĻĒā§āϰāĻĨāĻŽā§‡ āĻ…ā§āϝāĻžāĻĄāĻŋāϟ āχāϭ⧇āĻ¨ā§āϟ āϞ⧇āϖ⧁āύ āĻāĻŦāĻ‚ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āĻāĻ•āϟāĻŋ snapshot āĻŦāĻž āĻŽā§‚āϞ āϕ⧀ āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻĒāϰ⧇ āĻĒā§āϰāĻŽāĻžāĻŖ āĻ•āϰāĻž āϝāĻžā§Ÿ āϕ⧀ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤

āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻĄā§‡āϟāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āύāĻž āĻ•āϰ⧇ “āĻ•āĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāĻ˛ā§‹â€ āϞāĻ— āĻ•āϰāĻŦ?

āφāĻĒāĻĄā§‡āĻŸā§‡ āϏāĻžāϧāĻžāϰāĻŖāϤ field-level diffs āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ create āĻ“ delete-āĻāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ snapshot āϰāĻžāϖ⧁āύāĨ¤ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻ•ā§āώ⧇āĻ¤ā§āϰāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻŽāĻžāύāϟāĻŋ āĻŦāĻĻāϞ⧇āϛ⧇ āϤāĻž āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰ⧁āύ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ—ā§‹āĻĒāύ āĻŽāĻžāύāϗ⧁āϞ⧋ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻŦ⧇āύ āύāĻžâ€”āϰ⧇āĻĄā§āϝāĻžāĻ•ā§āϟ āĻŦāĻž āĻŽāĻžāĻ¸ā§āĻ• āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻ…āĻĄāĻŋāϟ āĻŸā§‡āĻŦāĻŋāϞ⧇ āϏāĻŋāĻ•ā§āϰ⧇āϟ āϜāĻŽā§‡ āύāĻž āĻĨāĻžāϕ⧇āĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻŦ āĻĒā§āϰāϤāĻŋāϟāĻŋ write path āϏāĻ¤ā§āϝāĻŋāχ āĻāĻ•āϟāĻŋ āĻ…āĻĄāĻŋāϟ āχāϭ⧇āĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇?

āĻāĻ•āϟāĻŋ āĻļā§‡ā§ŸāĻžāϰāĻĄ “write + audit” āĻĒāĻžāĻĨ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ write-āϕ⧇ āϏ⧇āϟāĻŋāχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻŦāĻžāĻ§ā§āϝ āĻ•āϰ⧁āĻ¨â€”UI, API, āχāĻŽāĻĒā§‹āĻ°ā§āϟ, āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āϜāĻŦ āϏāĻŦāĻ•āĻŋāϛ⧁āχāĨ¤ AppMaster-āĻ āĻĻāϞ⧇āϰāĻž āĻĒā§āϰāĻžāϝāĻŧāχ āĻāϟāĻŋ Business Process āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžā§Ÿāύ āĻ•āϰ⧇ āϝāĻžāϤ⧇ āĻĄāĻžāϟāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻāĻŦāĻ‚ āĻ…āĻĄāĻŋāϟ āχāϭ⧇āĻ¨ā§āϟ āĻāĻ•āχ āĻĢā§āϞ⧋āϤ⧇ āϞ⧇āĻ–āĻž āĻšā§Ÿ āĻāĻŦāĻ‚ āĻĢāĻžāρāĻ• āύāĻž āĻĨāĻžāϕ⧇āĨ¤

āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϏāĻšāϜ
āĻ•āĻŋāϛ⧁ āφāĻļā§āϚāĻ°ā§āϝāϜāύāĻ•āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āϏāĻš āĻ…ā§āϝāĻžāĻĒāĻŽāĻžāĻ¸ā§āϟāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύāĨ¤
āφāĻĒāύāĻŋ āϝāĻ–āύ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻšāĻŦ⧇āύ āϤāĻ–āύ āφāĻĒāύāĻŋ āϏāĻ āĻŋāĻ• āϏāĻĻāĻ¸ā§āϝāϤāĻž āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎

āĻāĻŦāĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ•
āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻ…āĻĄāĻŋāϟ āϞāĻ—: āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ-āχāϤāĻŋāĻšāĻžāϏ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ | AppMaster