Repository navigation
demo(#324): record price-conflict and restricted-write denial - #332
Conversation
Add a disposable WordPress 7.1.2, WooCommerce 11.1.2, and MySQL 8.0.44 fixture plus the recording of repository commit 3be6805 (plugin header 0.2.0). Apply leaves the newer $120.00 regular price in place. A restricted shop manager's PUT /wp-json/wc/v3/products/10 returns HTTP 403 writeleash_perimeter_denied and changes zero product rows. This is an unreleased demonstration. It is not the WordPress.org 0.2.2 package, and these files are not listing assets.
|
QA verdict: FAIL at Mergeable against This does not replace merged PR #333 (
Demo was not re-run here. NOT_TESTED. |
Fixes nothing in the plugin. Records the #324 seatbelt demonstration against repository commit
3be680557c476f30e93e45cf7bf0bc62009ef8c6(plugin header 0.2.0). Do not merge this as a release and do not upload the media to WordPress.org SVN.Scope
Disposable demo only: Docker fixtures, the scenario script, captions, database evidence, and the recorded MP4, WebM, GIF, and poster under
demo/324-seatbelt/. No plugin, readme, orwordpress/assets/change.Invariant / Current Spec Reference
Unreleased demonstration of the tree at
3be6805. WordPress.org currently distributes 0.2.2, which was not the build on camera. The conflict is Bulk Prices optimistic concurrency on the reviewed regular price. The denial is the grant perimeter onPUT /wp-json/wc/v3/products/{id}for a restricted user, matching the #311rest_updatecell. The auditobject_idis the actor user id, not the product id.Relevant Canonical CC-* Tests (
docs/test-plan.md)None added. This PR does not change the test plan. The scenario assertions live in
demo/324-seatbelt/capture.cjsand are demo evidence, not a canonical CC gate.What Changed
demo/324-seatbelt/run.shbuilds a disposable WordPress 7.1.2 / PHP 8.2.34 / WooCommerce 11.1.2 / MySQL 8.0.44 InnoDB site, stages the distribution allowlist, seeds fictional product Northwind Canvas Tote, and tears the stack down.PUT /wp-json/wc/v3/products/10withregular_price49.99. The response is HTTP 403writeleash_perimeter_denied. Product-row sha256 stayseb57b6df695e52df0bba3856b7ed70c485e6233b7d22997bc49f299285ebdde9.out/captions.en.vttare fitted to the 63.8 s MP4.out/scenes.jsonis the longer runner clock and is not the caption timeline.Security Impact
No new enforcement. The clip shows the existing conflict check and the existing REST denial. It does not claim a firewall, universal protection, hostile-plugin isolation, or an agent-safe store. Passwords for the disposable users are generated per run into gitignored
runtime/secrets.json. The committed evidence redacts the application password.PostgreSQL Semantics Considered
Not applicable. The recorded engine is MySQL 8.0.44,
wp_postsInnoDB.Adversarial / Bypass Testing
The recorded request is one real REST PUT from a restricted grant actor. HTTP 403, unchanged product rows, and the debug-log denial line are in
out/evidence.json. This does not add a bypass matrix.Limitations / Unknowns
Preview hash
833f68687def9f21c1b4874ee6a1a5d0e3558665c29dfee1c2dd82d512cfdcadat regular price100.00. After the colleague edit, after Apply, and after the denied PUT, the hash iseb57b6df695e52df0bba3856b7ed70c485e6233b7d22997bc49f299285ebdde9and the regular price is120.00. Counts stay 1 post, 20 meta rows, 1 lookup row across the denial.A fresh
run.shoverwritescaptions.en.vttfrom the runner clock. Check that file against the new pictures before replacing these cues. The H.264 encode logs one OpenH264cmInitParaErrorand the decoded MP4 frames still match the WebM.Playable files:
demo/324-seatbelt/out/writeleash-seatbelt-demo.mp4demo/324-seatbelt/out/writeleash-seatbelt-demo.webmdemo/324-seatbelt/out/writeleash-seatbelt-loop.gifdemo/324-seatbelt/out/writeleash-seatbelt-poster.pngdemo/324-seatbelt/out/captions.en.vttOut-of-Scope Work Explicitly Not Included
Do not merge, do not publish, and do not commit these media files to WordPress.org SVN. The GIF and poster are under the 2 MiB non-icon cap and are still not listing banners (772×250, 1544×500) or icons (128, 256).