---
title: Accounting Products Planning Examination
examined_at: '2026-10-23'
examiner: codex
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
branch: agent/accounting-products-plan-exam-1
---

# Accounting Products Planning Examination

## Scope and method

This is an independent OpenAI examination of the drafted planning layer at the pinned repositories. Source review covers the module’s declared paths and cited dependency records. I compare source statements, decision origins, enforcement declarations and test assertions, then author the final prose and structured human-facing text. Existing test bindings identify tests read at the pinned commits; they do not report a new service or browser run.

Verification corrections precede the individual final rewrites of the original capabilities, acceptance sets, concepts and journeys. Later supplemental commits complete examples, canonical source inventories and newly discovered database and posting variants. A temporary commit contains unsupported proof-level values after a failed check; the immediately following correction restores conformance, and the final acceptance run validates the resulting branch. Stable identifiers, pinned commits and predecessor references remain intact.

## Counts examined

| Item | Count | Qualification |
|---|---:|---|
| Planning artifacts | 52 | Four features, four concepts, nineteen capabilities, nineteen acceptance sets and six journeys |
| Active broad concepts | 3 | Product, Price and Accounting Setup; one retained superseded concept |
| Charter and registers | 3 | Module charter, identifier register and findings register |
| Accounting actor rows | 6 | All rows introduced by this module |
| Business rules | 173 | Includes eight newly allocated rows across export, database variants and posting preservation |
| Must-prove rules | 132 | 130 name a scenario; two require findings for absent scenarios |
| Capability scenarios and edge cases | 36 | All structured conditions and results rewritten |
| Acceptance scenarios | 121 | 113 have existing bindings; eight remain unbound |
| Journey steps and assertions | 31 / 15 | Alternates and failure conditions also examined and rewritten |
| Findings and open questions | 34 / 3 | Ten new findings; all earlier statements and recommendations rewritten |
| Source-reference fields | 980 | Includes source, origin, intent-source and binding occurrences; composite references checked separately |

The three active concepts contain approximately six hundred to seven hundred words each; the retained superseded explanation also meets the four-hundred-word minimum. Each uses the six required sections. The final layer keeps nineteen capabilities, treats selling settings as Product facets and adds export participation as a distinct outcome.

## Coverage

Covered means the behavior has a capability or a named evidence or finding location. It does not mean every variant has executable proof.

| Surface | Covered / total | Capability or evidence home | Uncovered by name |
|---|---|---|---|
| HTTP business operations | 17 / 17 | Operation map below | None |
| Public health route | 1 / 1 | Route declaration; operational evidence | None |
| Product tables | 13 / 13 | Table map below | None |
| Declared permission keys | 13 / 13 | Catalogue, setup and tax capabilities; inactive permissions finding | None; three keys have no operation |
| End-to-end service spec files | 6 / 6 | Acceptance bindings | None |
| Integration service spec files | 13 / 13 | Acceptance bindings and canonical capability evidence | None |
| Current unit spec files | 2 / 2 | Rule and API-mapper evidence | None |
| Carried legacy spec files with direct planning citation | 1 / 21 | Visibility evidence; remaining inventory below and FND-ACC-PRD-030 | Twenty named below |
| Browser product specs | 16 / 16 | Acceptance bindings and journey sources | None; database rollback spec skips its database work |
| Earlier capability and rule inventory | 22 / 22 and 54 / 54 | Corpus-qualified predecessor references | None |
| Earlier journey records | 41 / 52 absorbed | Journey predecessor references; remaining records below | Eleven are boundary, repetition or retired records |
| Console catalogue pages and tax panel | 3 / 3 and 1 / 1 | Catalogue, edit, setup and tax capabilities | None |
| Database domain entry points | 2 / 2 | Domain ownership and save capability | Parity and extension rollback proof remain open |
| Metadata registrations | 1 / 1 | Export and metadata capability | No dedicated metadata proof |
| Export datasets and record types | 1 / 1 and 2 / 2 | Export and metadata capability | Delivery, cutoff and collection completeness lack bound proof |
| State machines, queues, schedules | 0 / 0 each | Module stack declares an HTTP function | None |

| Operation | Capability |
|---|---|
| listProductTypes | CAP-ACC-PRD-001 |
| createProduct | CAP-ACC-PRD-002 |
| listProducts, getProduct | CAP-ACC-PRD-003 |
| updateProduct | CAP-ACC-PRD-004 |
| retireProduct, reactivateProduct | CAP-ACC-PRD-005 |
| deleteProduct | CAP-ACC-PRD-006 |
| getProductAccounting, replaceProductAccounting, deleteProductAccounting | CAP-ACC-PRD-015 / CAP-ACC-PRD-016 |
| listProductsWithoutAccounting, replaceProductAccountings | CAP-ACC-PRD-017 |
| listProductTypeTaxClasses, getProductTypeTaxClass, replaceProductTypeTaxClass, deleteProductTypeTaxClass | CAP-ACC-PRD-018 |

| Table | Capability |
|---|---|
| product_types | CAP-ACC-PRD-001 |
| products | CAP-ACC-PRD-002 through CAP-ACC-PRD-007 |
| product_prices | CAP-ACC-PRD-008 |
| pricing_audience_handovers | CAP-ACC-PRD-009 |
| product_bulk_pricing_rules | CAP-ACC-PRD-010 |
| product_bundle_components | CAP-ACC-PRD-011 |
| product_task_templates | CAP-ACC-PRD-013 |
| product_accounting_setups | CAP-ACC-PRD-015 |
| product_deferral_fixed_dates, product_deferral_relative_rules, product_revenue_splits, product_inter_entity_accounts | CAP-ACC-PRD-016 |
| product_type_tax_classes | CAP-ACC-PRD-018 |

| Permission group | Keys | Home |
|---|---|---|
| accounting.products | read, create, update, delete | Catalogue capabilities |
| accounting.products | bulk | FND-ACC-PRD-010 |
| accounting.product-accounting | read, update, delete | Setup capabilities |
| accounting.product-accounting | create, bulk | FND-ACC-PRD-010 |
| accounting.tax-classes | read, update, delete | CAP-ACC-PRD-018 |

The carried tests use compatibility adapters and include legacy configuration seams; their existence does not establish current endpoint behavior. Their business subjects fit existing catalogue and accounting outcomes, so the remaining gap concerns direct bindings rather than twenty missing capabilities.

| Carried file without direct planning binding | Behavioral home |
|---|---|
| unit/carried/products/validate.spec.js | CAP-ACC-PRD-002 / CAP-ACC-PRD-008 / CAP-ACC-PRD-011 |
| unit/carried/donation-products/object/change-validation.spec.js | CAP-ACC-PRD-004 |
| unit/carried/donation-products/object/cleaning.spec.js | CAP-ACC-PRD-002 / CAP-ACC-PRD-008 / CAP-ACC-PRD-011 |
| unit/carried/donation-products/object/deletion-validation.spec.js | CAP-ACC-PRD-006 |
| unit/carried/donation-products/object/generate-identifier.spec.js | CAP-ACC-PRD-002 |
| unit/carried/donation-products/object/validation.spec.js | CAP-ACC-PRD-002 / CAP-ACC-PRD-008 / CAP-ACC-PRD-011 |
| unit/carried/legacy-import-products/object/change-validation.spec.js | CAP-ACC-PRD-004 |
| unit/carried/legacy-import-products/object/cleaning.spec.js | CAP-ACC-PRD-002 / CAP-ACC-PRD-008 / CAP-ACC-PRD-011 |
| unit/carried/legacy-import-products/object/deletion-validation.spec.js | CAP-ACC-PRD-006 |
| unit/carried/legacy-import-products/object/generate-identifier.spec.js | CAP-ACC-PRD-002 |
| unit/carried/legacy-import-products/object/validation.spec.js | CAP-ACC-PRD-002 / CAP-ACC-PRD-008 / CAP-ACC-PRD-011 |
| unit/carried/miscellaneous-products/object/change-validation.spec.js | CAP-ACC-PRD-004 |
| unit/carried/miscellaneous-products/object/cleaning.spec.js | CAP-ACC-PRD-002 / CAP-ACC-PRD-008 / CAP-ACC-PRD-011 |
| unit/carried/miscellaneous-products/object/deletion-validation.spec.js | CAP-ACC-PRD-006 |
| unit/carried/miscellaneous-products/object/validation.spec.js | CAP-ACC-PRD-002 / CAP-ACC-PRD-008 / CAP-ACC-PRD-011 |
| unit/carried/product-financial-configs/object/change-validation.spec.js | CAP-ACC-PRD-015 / CAP-ACC-PRD-016 |
| unit/carried/product-financial-configs/object/cleaning.spec.js | CAP-ACC-PRD-015 / CAP-ACC-PRD-016 |
| unit/carried/product-financial-configs/object/deletion-validation.spec.js | CAP-ACC-PRD-015 / CAP-ACC-PRD-016 |
| unit/carried/product-financial-configs/object/id-generation.spec.js | CAP-ACC-PRD-015 / CAP-ACC-PRD-016 |
| unit/carried/product-financial-configs/object/validation.spec.js | CAP-ACC-PRD-015 / CAP-ACC-PRD-016 |

| Earlier journey not absorbed into a journey | Disposition |
|---|---|
| ACT-ACC-0104, ACT-ACC-0105, ACT-ACC-0111, ACT-ACC-0115, ACT-ACC-0124, ACT-ACC-0126, ACT-ACC-0130, ACT-ACC-0145, ACT-ACC-0146 | Boundary, repeated, isolation, purge or tax-default evidence; retain in source inventory, not as additional journeys |
| ACT-ACC-0127, ACT-ACC-0149 | Retired source records |

## Changes by artifact

Every original artifact receives OpenAI final text. All human-facing rule statements, scenario conditions and results, actions, expectations, alternate paths, assertions, facet explanations and recommendations are rewritten. Canonical evidence inventories retain source filenames and test titles as literals. Ordinary domain names and permanent identifiers remain recognizable.

Capability-wide and concept-wide confirmation is removed where the cited approval covers only specific rules. The affected capabilities are the first eleven and the fifteenth and sixteenth; all three active concepts, the catalogue, pricing and accounting features, and the lifecycle, pricing, setup and domain journeys become proposed. Existing proposed and out-of-scope values remain, and named rule origins continue carrying the authority of Andrew’s decisions.

| Artifact | Verification correction or final-text treatment |
|---|---|
| ATS-ACC-PRD-001 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-001. |
| ATS-ACC-PRD-002 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-002. |
| ATS-ACC-PRD-003 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-003. |
| ATS-ACC-PRD-004 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-004. |
| ATS-ACC-PRD-005 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-005. |
| ATS-ACC-PRD-006 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-006. |
| ATS-ACC-PRD-007 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-007. |
| ATS-ACC-PRD-008 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-008. |
| ATS-ACC-PRD-009 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-009. |
| ATS-ACC-PRD-010 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-010. |
| ATS-ACC-PRD-011 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-011. |
| ATS-ACC-PRD-012 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-012. |
| ATS-ACC-PRD-013 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-013. |
| ATS-ACC-PRD-014 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-014. |
| ATS-ACC-PRD-015 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-015. |
| ATS-ACC-PRD-016 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-016. |
| ATS-ACC-PRD-017 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-017. |
| ATS-ACC-PRD-018 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-018. |
| ATS-ACC-PRD-019 | Rewrite all scenario titles, fixture conditions, actions and expected results; retain verified bindings except the scope corrections recorded for CAP-ACC-PRD-019. |
| CAP-ACC-PRD-001 | Require proof of the two-hundred-kind refusal; source it from observed persistence rather than an unrelated test. Narrow successful authorization proof. |
| CAP-ACC-PRD-002 | Repair the custom-field decision heading and identify the console-kind decisions separately; use observed navigation evidence. Narrow older-identity proof to operations actually exercised. |
| CAP-ACC-PRD-003 | Describe the page size as a ceiling; identify API and service enforcement. Use the portal helper as observed evidence. |
| CAP-ACC-PRD-004 | Remove the creation-only binding from replacement workspace and derived-field proof. Narrow browser preservation assertions to the fields actually checked. |
| CAP-ACC-PRD-005 | Distinguish documented downstream invoice policy from examined enforcement. Clarify that row actions request confirmation. |
| CAP-ACC-PRD-006 | Retain database reference restrictions and uncompensated remote cleanup as sourced behavior. Proposed reference-error proof remains open. |
| CAP-ACC-PRD-007 | Limit the domain contract to its available database path; add observed rules for unweighted bundle allocation and held-audience admission. Add two unbound direct-function scenarios and retain the rollback gap. |
| CAP-ACC-PRD-008 | Describe backing-row validation without claiming downstream inheritance execution. Remove unexamined downstream enforcement and distinguish console time and period restrictions. |
| CAP-ACC-PRD-009 | Remove unexamined Commerce enforcement; unbind the audience-query test from a product-edit scenario and assign the proposed edit proof to API level. |
| CAP-ACC-PRD-010 | Remove claimed order-time enforcement and fold its concept reference into Product. Narrow amount and percentage proof to the tested inputs. |
| CAP-ACC-PRD-011 | Describe the actual list-price lookup and its quantity-weighted service calculation. Remove claimed downstream posting enforcement and fold selling configuration into Product. |
| CAP-ACC-PRD-012 | Separate stored purchase restriction from future order enforcement. Fold the concept reference into Product. |
| CAP-ACC-PRD-013 | Describe stored task instructions instead of executed task creation. Use observed normalization evidence, narrow syntax and count proof, and fold the concept reference into Product. |
| CAP-ACC-PRD-014 | Separate template storage from sending, preserve remote compensation gaps and the console-only presentation boundary, and fold the concept reference into Product. |
| CAP-ACC-PRD-015 | Narrow missing-setup proof to the read contract. Add a separately bound posting scenario and rule for unchanged posted accounts after setup correction; extend the optional-setup rule’s source to the posting test. |
| CAP-ACC-PRD-016 | Correct the list-price selection description; mark accounting child limits must-prove with observed persistence evidence. Keep absent boundary proof explicit. |
| CAP-ACC-PRD-017 | Describe stable lock ordering without promising universal deadlock freedom. Keep bulk setup work API-only. |
| CAP-ACC-PRD-018 | Describe delete-only versus combined locks correctly. Remove local enforcement claims for future tax transfer and retain out-of-scope intent. |
| CAP-ACC-PRD-019 | Add the previously missing export and metadata capability, five observed rules and two proposed export scenarios. |
| CON-ACC-PRD-001 | Fold five selling facets into Product, update capability links and keep the setup relationship sourced. |
| CON-ACC-PRD-002 | Retain Price as a broad noun and correct the bundle relationship to the actual allocation proof. |
| CON-ACC-PRD-003 | Mark the facet-sized concept superseded, preserve its identifier and redirect readers to Product. |
| CON-ACC-PRD-004 | Retain Accounting Setup as a broad noun and correct its price relationship to the fixed-allocation test. |
| FEAT-ACC-PRD-01 | Rewrite feature purpose and outcomes as grouping language only. |
| FEAT-ACC-PRD-02 | Rewrite feature purpose and outcomes as grouping language only. |
| FEAT-ACC-PRD-03 | Rewrite feature purpose and outcomes as grouping language only. |
| FEAT-ACC-PRD-04 | Rewrite feature purpose and outcomes as grouping language only. |
| JNY-ACC-PRD-001 | Rewrite the preparation journey while retaining separate product and setup saves and partial failure. |
| JNY-ACC-PRD-002 | Rewrite lifecycle and removal actions without extending tested authority. |
| JNY-ACC-PRD-003 | Bind valid pricing entry to the valid-creation browser spec rather than the refusal spec. |
| JNY-ACC-PRD-004 | Source general field preservation from form serialization, narrow the asserted browser fields and describe the remote-template commit window. |
| JNY-ACC-PRD-005 | Remove an untested percentage example, correct bulk version expectations and describe the posting preservation test’s actual assertion. |
| JNY-ACC-PRD-006 | Use documented domain-transaction evidence instead of a browser rollback claim; source console partial saves from editor state and retain missing executable rollback proof. |
| MOD-ACC-PRD | Rewrite the charter and regenerate title and intent summaries from the final artifacts; remove inaccurate coverage totals. |
| ID_REGISTRY | Retain permanent allocations, reserve new rule and scenario rows before authoring, and update display titles and next-free numbers. |
| FINDINGS | Rewrite all earlier findings and three recommendations; add examination findings and retain unresolved evidence gaps. |
| ACT-ACC-006 through ACT-ACC-011 | Rewrite the module-added actor descriptions, goals and broad actions; preserve permissions and represented principals. |
| MOD-ACC-PRD registry row | Set planning examined; retain the registered source scope. |


## Verified metadata changes

This table records changes to protected evidence and authority fields against the supplied draft. Row indices locate entries within the artifact; permanent rule and scenario identifiers are retained. Whole-concept relationship changes reflect the selling-facet merge. New rows are reserved separately in the identifier register.

| Artifact | Field | Draft value | Examined value |
|---|---|---|---|
| ATS-ACC-PRD-001 | .scenarios[2].bound_to | ["services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#reads the product type registry","services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#is refused reading the products"] | ["services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#reads the product type registry"] |
| ATS-ACC-PRD-004 | .scenarios[7].bound_to | ["react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0108.spec.ts#ACT-ACC-0108"] | [] |
| ATS-ACC-PRD-004 | .scenarios[7].provenance | "test" | "proposed" |
| ATS-ACC-PRD-004 | .scenarios[7].source | "react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0108.spec.ts#ACT-ACC-0108" | "FND-ACC-PRD-022" |
| ATS-ACC-PRD-009 | .scenarios[2].level | "unit" | "api" |
| ATS-ACC-PRD-009 | .scenarios[2].bound_to | ["services-accounting:modules/products/tests/integration/services/persistence/pricing-audiences.integration.spec.js#answers the built-ins and the tenant’s active audiences among the ids asked: not an inactive one, not another tenant’s, not the ids held"] | [] |
| ATS-ACC-PRD-009 | .scenarios[2].provenance | "test" | "proposed" |
| ATS-ACC-PRD-009 | .scenarios[2].source | "services-accounting:modules/products/tests/integration/services/persistence/pricing-audiences.integration.spec.js#answers the built-ins and the tenant’s active audiences among the ids asked: not an inactive one, not another tenant’s, not the ids held" | "FND-ACC-PRD-026" |
| ATS-ACC-PRD-015 | .scenarios[0].bound_to | ["services-accounting:modules/products/tests/e2e/product-accounting.e2e.spec.js#answers accounting: null on the product","services-accounting:modules/products/tests/e2e/product-accounting.e2e.spec.js#answers 404 to a read of its setup","react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0121.spec.ts#ACT-ACC-0121"] | ["services-accounting:modules/products/tests/e2e/product-accounting.e2e.spec.js#answers accounting: null on the product","services-accounting:modules/products/tests/e2e/product-accounting.e2e.spec.js#answers 404 to a read of its setup"] |
| CAP-ACC-PRD-001 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-001 | .rules[4].must_prove | false | true |
| CAP-ACC-PRD-001 | .rules[4].provenance | "test" | "observed" |
| CAP-ACC-PRD-001 | .rules[4].source | "services-accounting:modules/products/tests/integration/services/persistence/product-types.queries.integration.spec.js#answers the fourteen seeded types in display order, each mapped whole, the Events ones inactive" | "services-accounting:modules/products/services/persistence/product-types.ts:listProductTypes" |
| CAP-ACC-PRD-002 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-002 | .intent_sources | ["services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D3","services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D4","services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D12","services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R10","services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#Notes on the decisions (D4, R2-ARCH-001 D1)"] | ["services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D3","services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D4","services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D12","services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R10","services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#Notes on the decisions:","services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R11"] |
| CAP-ACC-PRD-002 | .rules[12].origin | "services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#Notes on the decisions (D4, R2-ARCH-001 D1)" | "services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#Notes on the decisions:" |
| CAP-ACC-PRD-002 | .rules[14].provenance | "documented" | "observed" |
| CAP-ACC-PRD-002 | .rules[14].source | "services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R10" | "react-console:components/accounting-config/products/use-products.ts:newProductPath" |
| CAP-ACC-PRD-002 | .rules[14].origin | "services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R10" | "services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R10; services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R11; services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R20" |
| CAP-ACC-PRD-003 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-003 | .rules[0].enforced_at | ["api"] | ["api","service"] |
| CAP-ACC-PRD-003 | .rules[7].provenance | "test" | "observed" |
| CAP-ACC-PRD-003 | .rules[7].source | "services-accounting:modules/products/tests/unit/carried/products/product-visible-properites.spec.js#should remove bundled_products" | "services-accounting:modules/products/services/rules/product-rules.ts:portalVisibleProduct" |
| CAP-ACC-PRD-004 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-004 | .rules[9].provenance | "test" | "observed" |
| CAP-ACC-PRD-004 | .rules[9].source | "react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0112.spec.ts#ACT-ACC-0112" | "react-console:lib/accounting-config/product-form.ts:formToWrite" |
| CAP-ACC-PRD-005 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-005 | .rules[6].enforced_at | ["console","service"] | [] |
| CAP-ACC-PRD-006 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-007 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-008 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-008 | .rules[7].provenance | "test" | "observed" |
| CAP-ACC-PRD-008 | .rules[7].source | "services-accounting:modules/products/tests/integration/services/persistence/products.integration.spec.js#lets a period cell inherit the always cell of its audience (a percentage in a period needs a standard price in that period or always)" | "services-accounting:modules/products/services/rules/product-rules.ts:rowsBacking" |
| CAP-ACC-PRD-008 | .rules[12].enforced_at | ["service"] | [] |
| CAP-ACC-PRD-009 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-009 | .rules[2].enforced_at | ["service"] | [] |
| CAP-ACC-PRD-009 | .rules[3].enforced_at | ["database"] | [] |
| CAP-ACC-PRD-010 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-010 | .concepts | ["CON-ACC-PRD-003"] | ["CON-ACC-PRD-001"] |
| CAP-ACC-PRD-010 | .rules[4].enforced_at | ["service"] | [] |
| CAP-ACC-PRD-011 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-011 | .concepts | ["CON-ACC-PRD-003"] | ["CON-ACC-PRD-001"] |
| CAP-ACC-PRD-011 | .rules[5].provenance | "test" | "observed" |
| CAP-ACC-PRD-011 | .rules[5].source | "services-accounting:modules/products/tests/integration/services/persistence/products.integration.spec.js#totals each component price times its quantity (ACCT-M1 D12 A2)" | "services-accounting:modules/products/services/rules/product-rules.ts:listPrice; services-accounting:modules/products/services/rules/product-rules.ts:bundleTotalsProblem" |
| CAP-ACC-PRD-011 | .rules[6].enforced_at | ["service"] | [] |
| CAP-ACC-PRD-012 | .concepts | ["CON-ACC-PRD-003"] | ["CON-ACC-PRD-001"] |
| CAP-ACC-PRD-012 | .rules[3].enforced_at | ["service"] | [] |
| CAP-ACC-PRD-013 | .concepts | ["CON-ACC-PRD-003"] | ["CON-ACC-PRD-001"] |
| CAP-ACC-PRD-013 | .rules[4].enforced_at | ["service"] | [] |
| CAP-ACC-PRD-013 | .scenarios[0].provenance | "test" | "observed" |
| CAP-ACC-PRD-013 | .scenarios[0].source | "services-accounting:modules/products/tests/integration/services/persistence/products.features.integration.spec.js#answers every feature as written, the lists in the order sent" | "services-accounting:modules/products/services/persistence/products.ts:normalizedFeatures" |
| CAP-ACC-PRD-014 | .concepts | ["CON-ACC-PRD-003"] | ["CON-ACC-PRD-001"] |
| CAP-ACC-PRD-014 | .rules[6].enforced_at | ["service"] | [] |
| CAP-ACC-PRD-014 | .rules[7].enforced_at | ["console","service"] | ["console"] |
| CAP-ACC-PRD-014 | .rules[7].provenance | "documented" | "observed" |
| CAP-ACC-PRD-014 | .rules[7].source | "services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R22" | "react-console:components/accounting-config/products/product-section-types.ts:REMOVED_SECTION_KEYS" |
| CAP-ACC-PRD-015 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-015 | .rules[0].source | "services-accounting:modules/products/tests/e2e/product-accounting.e2e.spec.js#answers accounting: null on the product" | "services-accounting:modules/products/tests/e2e/product-accounting.e2e.spec.js#answers accounting: null on the product; react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0121.spec.ts#ACT-ACC-0121" |
| CAP-ACC-PRD-016 | .product_intent | "confirmed" | "proposed" |
| CAP-ACC-PRD-016 | .rules[5].provenance | "test" | "observed" |
| CAP-ACC-PRD-016 | .rules[5].source | "services-accounting:modules/products/tests/integration/services/persistence/product-accounting-setups.integration.spec.js#refuses fixed amounts adding up to more than the standard base price" | "services-accounting:modules/products/services/rules/product-rules.ts:listPrice; services-accounting:modules/products/services/rules/product-rules.ts:revenueSplitsProblem" |
| CAP-ACC-PRD-016 | .rules[8].must_prove | false | true |
| CAP-ACC-PRD-016 | .rules[8].source | "services-accounting:modules/products/db/product-accounting-children.table.ts:MAX_REVENUE_SPLITS" | "services-accounting:modules/products/services/persistence/product-accounting-setups.ts:replaceProductAccounting" |
| CAP-ACC-PRD-018 | .rules[8].enforced_at | ["service"] | [] |
| CAP-ACC-PRD-018 | .rules[9].enforced_at | ["service","console"] | [] |
| CON-ACC-PRD-001 | .product_intent | "confirmed" | "proposed" |
| CON-ACC-PRD-001 | .relationships[1].to | "CON-ACC-PRD-003" | "CON-ACC-PRD-004" |
| CON-ACC-PRD-001 | .relationships[1].source | "services-accounting:modules/products/services/rules/product-rules.ts:productFeaturesTypeProblem" | "services-accounting:modules/products/db/product-accounting-setups.table.ts" |
| CON-ACC-PRD-001 | .relationships[2].to | "CON-ACC-PRD-004" | null |
| CON-ACC-PRD-001 | .relationships[2].provenance | "observed" | null |
| CON-ACC-PRD-001 | .relationships[2].source | "services-accounting:modules/products/db/product-accounting-setups.table.ts" | null |
| CON-ACC-PRD-001 | .acted_on_by | ["CAP-ACC-PRD-001","CAP-ACC-PRD-002","CAP-ACC-PRD-003","CAP-ACC-PRD-004","CAP-ACC-PRD-005","CAP-ACC-PRD-006","CAP-ACC-PRD-007"] | ["CAP-ACC-PRD-001","CAP-ACC-PRD-002","CAP-ACC-PRD-003","CAP-ACC-PRD-004","CAP-ACC-PRD-005","CAP-ACC-PRD-006","CAP-ACC-PRD-007","CAP-ACC-PRD-010","CAP-ACC-PRD-011","CAP-ACC-PRD-012","CAP-ACC-PRD-013","CAP-ACC-PRD-014"] |
| CON-ACC-PRD-002 | .product_intent | "confirmed" | "proposed" |
| CON-ACC-PRD-002 | .relationships[1].to | "CON-ACC-PRD-003" | "CON-ACC-PRD-001" |
| CON-ACC-PRD-003 | .status | "draft" | "superseded" |
| CON-ACC-PRD-003 | .relationships[0].provenance | "observed" | "documented" |
| CON-ACC-PRD-003 | .relationships[0].source | "services-accounting:modules/products/services/rules/product-rules.ts:productFeaturesTypeProblem" | "rhythm-v2-docs:specs/CONVENTIONS.md#5.0a Key Concept (`CON`)" |
| CON-ACC-PRD-003 | .relationships[1].to | "CON-ACC-PRD-002" | null |
| CON-ACC-PRD-003 | .relationships[1].provenance | "test" | null |
| CON-ACC-PRD-003 | .relationships[1].source | "services-accounting:modules/products/tests/integration/services/persistence/products.integration.spec.js#totals each component price times its quantity (ACCT-M1 D12 A2)" | null |
| CON-ACC-PRD-003 | .relationships[2].to | "CON-ACC-PRD-004" | null |
| CON-ACC-PRD-003 | .relationships[2].provenance | "documented" | null |
| CON-ACC-PRD-003 | .relationships[2].source | "services-accounting:modules/products/db/product-bundle-components.table.ts" | null |
| CON-ACC-PRD-003 | .acted_on_by | ["CAP-ACC-PRD-010","CAP-ACC-PRD-011","CAP-ACC-PRD-012","CAP-ACC-PRD-013","CAP-ACC-PRD-014"] | [] |
| CON-ACC-PRD-004 | .product_intent | "confirmed" | "proposed" |
| FEAT-ACC-PRD-01 | .product_intent | "confirmed" | "proposed" |
| FEAT-ACC-PRD-02 | .product_intent | "confirmed" | "proposed" |
| FEAT-ACC-PRD-04 | .product_intent | "confirmed" | "proposed" |
| JNY-ACC-PRD-002 | .product_intent | "confirmed" | "proposed" |
| JNY-ACC-PRD-003 | .product_intent | "confirmed" | "proposed" |
| JNY-ACC-PRD-003 | .steps[3].source | "react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0108.spec.ts#ACT-ACC-0108" | "react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0100.spec.ts#ACT-ACC-0100" |
| JNY-ACC-PRD-004 | .steps[2].provenance | "test" | "observed" |
| JNY-ACC-PRD-004 | .steps[2].source | "react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0112.spec.ts#ACT-ACC-0112" | "react-console:lib/accounting-config/product-form.ts:formToWrite" |
| JNY-ACC-PRD-005 | .product_intent | "confirmed" | "proposed" |
| JNY-ACC-PRD-006 | .product_intent | "confirmed" | "proposed" |
| JNY-ACC-PRD-006 | .steps[1].provenance | "test" | "documented" |
| JNY-ACC-PRD-006 | .steps[1].source | "services-accounting:modules/products/tests/integration/db/save-product-function.integration.spec.js#answers the product as written, stamped with the person the session acts for" | "services-accounting:docs/migrations/accounting-modernization/products-shared/README.md#The write path" |
| JNY-ACC-PRD-006 | .alternates[0].provenance | "test" | "observed" |
| JNY-ACC-PRD-006 | .alternates[0].source | "services-accounting:modules/products/tests/integration/services/persistence/products.shared-base.integration.spec.js#lets Membership create a membership package, and a console caller too" | "react-console:components/accounting-config/products/product-editor.tsx:useProductEditorState" |

| New allocation | Home |
|---|---|
| BR-CAP-ACC-PRD-019-01 through BR-CAP-ACC-PRD-019-05 | CAP-ACC-PRD-019 |
| ATS-ACC-PRD-019-01 through ATS-ACC-PRD-019-02 | ATS-ACC-PRD-019 |
| BR-CAP-ACC-PRD-007-11 through BR-CAP-ACC-PRD-007-12 | CAP-ACC-PRD-007 |
| ATS-ACC-PRD-007-08 through ATS-ACC-PRD-007-09 | ATS-ACC-PRD-007 |
| BR-CAP-ACC-PRD-015-16 | CAP-ACC-PRD-015 |
| ATS-ACC-PRD-015-14 | ATS-ACC-PRD-015 |
| FND-ACC-PRD-025 through FND-ACC-PRD-034 | FINDINGS |

## Open disagreements and proof gaps

| Finding | State after examination |
|---|---|
| FND-ACC-PRD-001 | Registry mismatch corrected in the draft lineage; final status updated. |
| FND-ACC-PRD-002 | Open: tax ownership transition and retained assignments. |
| FND-ACC-PRD-003 | Open: contradictory milestone summary status. |
| FND-ACC-PRD-004 | Open: products guide disagrees with screens and deletion restrictions. |
| FND-ACC-PRD-005 | Open: migrated audiences can block HTTP edits after Commerce activation. |
| FND-ACC-PRD-006 | Open: untranslated discount-product and installment delete refusals. |
| FND-ACC-PRD-007 | Open: separate console saves and partial completion. |
| FND-ACC-PRD-008 | Open: split identities regenerated by console saves; posting reconciliation consequence requires proof. |
| FND-ACC-PRD-009 | Open: HTTP and database omission contracts differ. |
| FND-ACC-PRD-010 | Open: three declared permissions have no route. |
| FND-ACC-PRD-011 | Open: remote template cleanup and commit windows lack compensation. |
| FND-ACC-PRD-012 | Open: product-owner comments lack identifiable decision authority. |
| FND-ACC-PRD-013 | Open: earlier acceptance text and console behavior disagree. |
| FND-ACC-PRD-014 | Planning references disambiguate colliding predecessor identifiers. |
| FND-ACC-PRD-015 | Open: stricter console accounting validation, including deferral ranges and year offsets. |
| FND-ACC-PRD-016 | Open: assignee syntax does not establish user existence. |
| FND-ACC-PRD-017 | Open: pricing-period existence is unchecked. |
| FND-ACC-PRD-018 | Open: accounting edits remain possible for retired products. |
| FND-ACC-PRD-019 | Open: removed custom-field and UUID terminology remnants. |
| FND-ACC-PRD-020 | Open: domain writes have no service HTTP route. |
| FND-ACC-PRD-021 | Open: deprecated audience alias remains. |
| FND-ACC-PRD-022 | Open: replacement workspace and derived-field proof. |
| FND-ACC-PRD-023 | Open: missing-setup and bulk work are API-only. |
| FND-ACC-PRD-024 | Open: guide does not distinguish hidden console sections. |
| FND-ACC-PRD-025 | Planning overconfirmation corrected; Andrew still decides uncited behavior. |
| FND-ACC-PRD-026 | Bindings narrowed; negative authorization, precision boundaries, all-time clearing and replacement proof remain incomplete. |
| FND-ACC-PRD-027 | Open: browser skips do not prove domain extension rollback. |
| FND-ACC-PRD-028 | Open: delete-only tax-default lock lacks dedicated proof. |
| FND-ACC-PRD-029 | Coverage repaired; export execution and metadata proof remain open. |
| FND-ACC-PRD-030 | Counts repaired; twenty carried files lack direct planning bindings. |
| FND-ACC-PRD-031 | Open: registry-size and accounting child limits lack scenarios. |
| FND-ACC-PRD-032 | Posting proof retained separately; other downstream contracts and execution remain open. |
| FND-ACC-PRD-033 | Open: console and backend price time and period contracts differ. |
| FND-ACC-PRD-034 | Open: domain bundle calculation and audience admission diverge from HTTP writes. |

| Unbound scenario | Finding or source home |
|---|---|
| ATS-ACC-PRD-001-04 | FND-ACC-PRD-013 |
| ATS-ACC-PRD-004-08 | FND-ACC-PRD-022 |
| ATS-ACC-PRD-006-03 | FND-ACC-PRD-006 |
| ATS-ACC-PRD-007-08 | FND-ACC-PRD-034 |
| ATS-ACC-PRD-007-09 | FND-ACC-PRD-034 |
| ATS-ACC-PRD-009-03 | FND-ACC-PRD-026 |
| ATS-ACC-PRD-019-01 | FND-ACC-PRD-029 |
| ATS-ACC-PRD-019-02 | FND-ACC-PRD-029 |

| Must-prove rule without scenario | Finding |
|---|---|
| BR-CAP-ACC-PRD-001-05 | FND-ACC-PRD-031 |
| BR-CAP-ACC-PRD-016-09 | FND-ACC-PRD-031 |

The eight unbound scenarios and the two missing-scenario rules prevent a claim of complete executable acceptance coverage. Some bound scenarios prove only part of their broader rule, with remaining variants retained in the findings. The layer describes current configuration while marking future execution and unapproved choices explicitly.

## Validation

The final acceptance commands install dependencies, run corpus conformance and run the repository’s checker tests. Service integration and browser suites are read as evidence but are not executed by this documentation job. No service implementation, reader, workflow or deployment changes are made.

| Command | Result |
|---|---|
| npm ci | Pass; dependency audit reports no vulnerabilities |
| npm run check | Pass; zero conformance errors |
| npm test | Pass; all four checker tests pass |
| Source-reference existence audit | Pass; composite file, symbol and title references resolve at the pinned commits |

## Verdict for Andrew

The examined layer is a faithful, sourced planning description of the module at the pinned commits, with implementation differences and incomplete proofs made explicit rather than presented as approvals. Its weakest areas are domain-versus-HTTP parity, downstream execution contracts and the boundary proofs that existing bindings omit. Before design begins, the product should resolve the three open choices, settle the tax transition and edit contracts, and commission the missing parity, rollback, export and boundary proofs.
