PluginProbe
WCPOS – Point of Sale (POS) plugin for WooCommerce / 1.10.19
WCPOS – Point of Sale (POS) plugin for WooCommerce v1.10.19
1.10.19 1.10.18 1.10.17 1.10.16 1.10.15 1.10.13 1.10.14 1.10.12 1.10.11 1.10.10 1.10.9 1.10.8 untagged-3d9b7ccddc54df87c672 1.10.7 1.10.6 1.10.5 1.10.3 1.10.4 1.10.2 1.10.1 1.10.0 1.9.17 1.9.15 1.9.16 1.9.14 All 163 releases
← All changes | includes/Sync/Collections.php +76 -8 1.10.21.10.19 View file →
@@ -44,9 +44,14 @@
44 44 * Carries the stored object_types AND the live-row predicate
45 45 * name on Digest_Index, so the reader, the proxy stamper and
46 46 * the authoritative-absence answer all read one id-space fact
47 47 * instead of each re-deciding it.
48 - * - fingerprint — config-change detection membership + the barcode flag.
48 + * - repair — explicit drill_down/self_heal support, with a reason for nulls.
49 + * - fingerprint — UNIVERSAL config-change detection membership; every
50 + * collection carries it (null is invalid), with the barcode
51 + * flag naming recipe membership. The contract-version lever
52 + * itself lives in Config_Fingerprint::PAYLOAD_CONTRACT_VERSION,
53 + * keyed by these same names.
49 54 * - backfill — uuid backfill support: the meta-store kind (post, order,
50 55 * user, or term) and the SCAN
51 56 * scope (products+variations scan together — which is why
52 57 * scan_post_types lives here and not on identity).
@@ -78,11 +83,23 @@
78 83 'write' => array( 'route' => '/wc/v3/products' ),
79 84 'journal' => array( 'object_type' => 'product' ),
80 85 'digest' => array(
81 86 'id_space' => 'products',
87 + 'label' => '',
82 88 'object_types' => array( 'product', 'variation' ),
89 + 'child_type' => 'variation',
90 + 'select' => 'row_digest_select_sql',
91 + 'id_column' => 'p.ID',
92 + 'live_max' => 'product_live_max_id_sql',
93 + 'servable' => 'servable_product_ids',
94 + 'published_ids' => 'published_product_ids',
83 95 'live_rows' => 'live_row_exists_sql',
84 96 ),
97 + 'repair' => array(
98 + 'drill_down' => true,
99 + 'self_heal' => true,
100 + 'reason' => 'Products support drill-down and automatic repair, including variations in their shared id-space.',
101 + ),
85 102 'fingerprint' => array( 'barcode' => true ),
86 103 'backfill' => array(
87 104 'kind' => 'post',
88 105 'scan_post_types' => array( 'product', 'product_variation' ),
@@ -98,14 +115,22 @@
98 115 // serialized-product filter, not a proxy list page.
99 116 'bulk_reader' => null,
100 117 'loader' => 'product',
101 118 ),
102 - 'proxy' => null, // hydrated via the per-id /variations controller
119 + // No wcpos proxy lane, and that is principled (ADR 0034): the flat
120 + // /variations route is both the per-id hydration lane AND the
121 + // list/seed lane (bare collection pages for the idle trickle).
122 + 'proxy' => null,
103 123 // Variations use WooCommerce's nested REST resource. The write controller
104 124 // takes the parent from create payloads and the stored object thereafter.
105 125 'write' => array( 'route' => '/wc/v3/products' ),
106 126 'journal' => array( 'object_type' => 'variation' ),
107 127 'digest' => null, // folded into the products id-space (owner row carries it)
128 + 'repair' => array(
129 + 'drill_down' => null,
130 + 'self_heal' => null,
131 + 'reason' => 'Variations are repaired through the products id-space.',
132 + ),
108 133 'fingerprint' => array( 'barcode' => true ),
109 134 'backfill' => array(
110 135 'kind' => 'post',
111 136 'scan_post_types' => array( 'product', 'product_variation' ),
@@ -128,12 +153,21 @@
128 153 'write' => array( 'route' => '/wc/v3/orders' ),
129 154 'journal' => array( 'object_type' => 'order' ), // orders consume the journal via the payload-windowed pull lane, catalogue via the pointer stream
130 155 'digest' => array(
131 156 'id_space' => 'orders',
157 + 'label' => 'order ',
132 158 'object_types' => array( 'order' ),
159 + 'select' => 'order_digest_select_sql',
160 + 'id_column' => '{id}',
161 + 'live_max' => 'order_live_max_id_sql',
133 162 'live_rows' => 'order_live_row_exists_sql',
134 163 ),
135 - 'fingerprint' => null,
164 + 'repair' => array(
165 + 'drill_down' => null,
166 + 'self_heal' => null,
167 + 'reason' => 'Detection is available; drill-down and automatic repair are not implemented.',
168 + ),
169 + 'fingerprint' => array( 'barcode' => false ),
136 170 'backfill' => array( 'kind' => 'order' ),
137 171 ),
138 172 'customers' => array(
139 173 'object_type' => 'customer',
@@ -152,12 +186,21 @@
152 186 'write' => array( 'route' => '/wc/v3/customers' ),
153 187 'journal' => array( 'object_type' => 'customer' ),
154 188 'digest' => array(
155 189 'id_space' => 'customers',
190 + 'label' => 'customer ',
156 191 'object_types' => array( 'customer' ),
192 + 'select' => 'customer_digest_select_sql',
193 + 'id_column' => 'u.ID',
194 + 'live_max' => 'customer_live_max_id_sql',
157 195 'live_rows' => 'customer_live_row_exists_sql',
158 196 ),
159 - 'fingerprint' => null,
197 + 'repair' => array(
198 + 'drill_down' => null,
199 + 'self_heal' => null,
200 + 'reason' => 'Detection is available; drill-down and automatic repair are not implemented.',
201 + ),
202 + 'fingerprint' => array( 'barcode' => false ),
160 203 'backfill' => array( 'kind' => 'user' ),
161 204 ),
162 205 'categories' => array(
163 206 'object_type' => 'category',
@@ -176,9 +219,14 @@
176 219 ),
177 220 'write' => array( 'route' => '/wc/v3/products/categories' ),
178 221 'journal' => array( 'object_type' => 'category' ),
179 222 'digest' => null,
180 - 'fingerprint' => null,
223 + 'repair' => array(
224 + 'drill_down' => null,
225 + 'self_heal' => null,
226 + 'reason' => 'No digest id-space is implemented for this collection.',
227 + ),
228 + 'fingerprint' => array( 'barcode' => false ),
181 229 'backfill' => array(
182 230 'kind' => 'term',
183 231 'taxonomy' => 'product_cat',
184 232 ),
@@ -200,9 +248,14 @@
200 248 ),
201 249 'write' => array( 'route' => '/wc/v3/products/brands' ),
202 250 'journal' => array( 'object_type' => 'brand' ),
203 251 'digest' => null,
204 - 'fingerprint' => null,
252 + 'repair' => array(
253 + 'drill_down' => null,
254 + 'self_heal' => null,
255 + 'reason' => 'No digest id-space is implemented for this collection.',
256 + ),
257 + 'fingerprint' => array( 'barcode' => false ),
205 258 'backfill' => array(
206 259 'kind' => 'term',
207 260 'taxonomy' => 'product_brand',
208 261 ),
@@ -224,9 +277,14 @@
224 277 ),
225 278 'write' => null, // read-only: no client push path exists
226 279 'journal' => array( 'object_type' => 'tag' ),
227 280 'digest' => null,
228 - 'fingerprint' => null,
281 + 'repair' => array(
282 + 'drill_down' => null,
283 + 'self_heal' => null,
284 + 'reason' => 'No digest id-space is implemented for this collection.',
285 + ),
286 + 'fingerprint' => array( 'barcode' => false ),
229 287 'backfill' => array(
230 288 'kind' => 'term',
231 289 'taxonomy' => 'product_tag',
232 290 ),
@@ -248,9 +306,14 @@
248 306 ),
249 307 'write' => array( 'route' => '/wc/v3/coupons' ),
250 308 'journal' => array( 'object_type' => 'coupon' ),
251 309 'digest' => null,
252 - 'fingerprint' => null,
310 + 'repair' => array(
311 + 'drill_down' => null,
312 + 'self_heal' => null,
313 + 'reason' => 'No digest id-space is implemented for this collection.',
314 + ),
315 + 'fingerprint' => array( 'barcode' => false ),
253 316 'backfill' => array(
254 317 'kind' => 'post',
255 318 'scan_post_types' => array( 'shop_coupon' ),
256 319 ),
@@ -266,8 +329,13 @@
266 329 ),
267 330 'write' => null, // principled read-only
268 331 'journal' => array( 'object_type' => 'tax_rate' ),
269 332 'digest' => null,
333 + 'repair' => array(
334 + 'drill_down' => null,
335 + 'self_heal' => null,
336 + 'reason' => 'No digest id-space is implemented for this collection.',
337 + ),
270 338 'fingerprint' => array( 'barcode' => false ),
271 339 'backfill' => null, // no meta store to stamp
272 340 ),
273 341 );