diff --git a/web_field_provenance/README.rst b/web_field_provenance/README.rst new file mode 100644 index 00000000000..674b4563124 --- /dev/null +++ b/web_field_provenance/README.rst @@ -0,0 +1,264 @@ +==================== +Web Field Provenance +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:c0e6a57f9f1fb3302bcfc4940b464ae29fdfd5116dc0cefc8e257efcb4370316 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/18.0/web_field_provenance + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-18-0/web-18-0-web_field_provenance + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Track and surface whether a field value was set by the user, assigned by +a rule/cascade/integration, or is still at its default — Salesforce/ +SAP-style field provenance for Odoo. + +Solves the OCA-wide bug class where +``compute=..., store=True, readonly=False`` ("computed-writable") fields +silently overwrite manual user overrides when an upstream dependency +changes and the compute re-fires through ``super()``. Provides: + +1. A persistent per-record provenance map (``_provenance``) that + records, for every opted-in field, **how** it got its current value. + Three states: + + - **default** — no entry. The field is still at the value it had on + creation. We never stamp the default state, which keeps the JSON + column compact. + - **rule / cascade / EDI** — + ``{s:"r", b:, t:, r: