Skip to content

Draw clean lines between modules, locale packs, compliance packs, and boilerplate packs - #28

Draft
RobGrafrath wants to merge 5 commits into
debt-grouping-levelsfrom
pack-construct-lines
Draft

RobGrafrath wants to merge 5 commits into
debt-grouping-levelsfrom
pack-construct-lines

Conversation

@RobGrafrath

@RobGrafrath RobGrafrath commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

What this changes and why

The record named its extensibility constructs in ways that blurred where compliance belongs. WAX-0008 said a Region Pack holds no compliance content, yet HIVE-0009 and two module decisions called the home of compliance rules a region pack. WAX-0007 put address structure in the Region Pack and date formats in the Language Pack. WAX-0004 gave a Region Pack its own schema, although a Pack owns no tables. WAX-0011 called the federal pack a reference configuration, and WAX-0008 gave the Reference Pack the example identifier reference.us.fdcpa, which named a statute, while its Template Pack overlapped the Reference Pack on workflow definitions. This pull request draws the lines once and brings every decision that used the old names into line.

WAX-0008 now states the rule in its Decision section. Compliance rules, which govern how a collector must treat a debtor or another party, ship only in a Compliance Pack for the jurisdiction whose rules they are. The Locale Module, Region Pack, and Language Pack that carry a country's structure, formats, and translations carry none. Starting content that is not compliance, including the procedure that a module follows in a given jurisdiction, ships in a Boilerplate Pack. A rule's mechanism is code in the core or a Module, built once, and a Pack supplies only the values for its jurisdiction. The Collective certifies Modules as software and publishes Packs as educational reference material, so an agency adopts a Pack as a starting point and remains responsible for its own compliance.

A new section gives four tests that place any piece of content and its defaults. The compliance test sends a rule on how a collector must treat a debtor, such as what to disclose, when and how often to make contact, or what to stop doing, to that jurisdiction's Compliance Pack. A procedural rule of a court or another body, such as the format of a filing or the time before a motion may be filed, is not compliance: it is the bureaucracy of that body's process, and it goes in the Boilerplate Pack of the module that follows the process. The code test sends anything that needs code, a table, or validation logic to a Module. The mechanism test builds a rule's mechanism once, such as a contact counter or a calling window in the debtor's local time, and lets each Pack supply its values, in the same way that the legal module builds the mechanism for a court case once and a Boilerplate Pack for each state configures that state's case flow. The default test, added on 2026-10-11, gives a mechanism a cautious default before any pack configures it: a Compliance Pack replaces the default with the value that a jurisdiction's law sets, flagged until verified, and a Boilerplate Pack can set a conservative starting value for any setting that a mechanism exposes, such as whether a bucket accrues interest, when the value is sound practice that an agency may change rather than law.

Worked through for the United States, the US Locale Module carries the address structure with its state codes, the SSN and EIN formats and their validation, and the name components, region.us carries the currency and formats, and a Language Pack carries the translations, none of them carrying compliance. The federal pack compliance.us carries the federal rules, and one Compliance Pack per state carries that state's additions. The US Boilerplate Pack carries the starting content a typical agency wants, such as promise to pay, broken promise, and NSF statuses, default roles, departments, workflows, and letters, and an agency that litigates adds the legal module's Boilerplate Pack for each state in which it files. A state has no Locale Module or Region Pack of its own, because its differences are legal and procedural and not structural, and a Louisiana parish goes in the county field.

The Reference Pack and the Template Pack become one Boilerplate Pack: all starting content that is not compliance, from statuses, roles, departments, rules, and workflows to letters, reports, and screens, so that an agency does not begin with an empty system. With those two names gone, reference goes back to meaning reference values, and template goes back to meaning a letter or disclosure template. Each Compliance Pack value records its source, its legal force, its effective dates, and its verification status. WAX-0008 also lists the Contract Type Module that WAX-0033 added and the Seed Package that WAX-0033 describes, and WAX-0010 and WAX-0009 now list a module type for every construct. The v1 Seed Pack becomes the v1 Boilerplate Pack, because it is that starting content and because its old name collided with the seed package of WAX-0033, which is a different thing.

Interacting decisions

  • WAX-0007: the taxonomy table gives the Language Pack translations only and the Region Pack the currency, formats, time zones, and defaults, and it adds Locale Module, Compliance Pack, and Boilerplate Pack rows. The Debt Type Module row listed contract types, so it now lists debt types, and a Contract Type Module row follows WAX-0033.
  • WAX-0004: the us_region schema owned by a Region Pack becomes us_locale, owned by the US Locale Module, because WAX-0008 says a construct that adds tables is a Module.
  • WAX-0009 and WAX-0010: the module type lists now agree with each other and with WAX-0008. WAX-0010's two lists had already diverged, with contract_type in only one. The new values are locale, compliance_pack, and boilerplate_pack.
  • WAX-0011: the planned FDCPA and Regulation F reference configuration becomes the United States Federal Compliance Pack, compliance.us, and the state reference configurations become State Compliance Packs layered on it. In the example of what a Pack contains, dispute types named for a statute and the validation notice document type come from the jurisdiction's Compliance Pack. The packs for operation types are Boilerplate Packs.
  • WAX-0020 and WAX-0023: the Seed Pack becomes the Boilerplate Pack, and the workflow source_type value seed_pack becomes pack.
  • WAX-0032: its reference report packs become report packs, since they are business intelligence deliverables and not a Wax construct.
  • WAX-0033: "a reference pack" becomes "a Pack".
  • HIVE-0009: region packs and the locale layer become Compliance Packs in eight places, including its Decision section. The rule that compliance lives outside the core and the debt-type modules is unchanged.
  • HIVE-0005: the tenet that HiveAR is inert without modules names the constructs a working configuration needs.
  • HIVE-0003 and HIVE-0004: the seed pack becomes the Boilerplate Pack.
  • MOD-PURCHASE-0001 and MOD-UNSECURED-0001: region pack becomes Compliance Pack where they meant compliance rules.
  • MOD-US-0001, from Rename account to debt and add multi-level debt grouping #27: it describes its constructs with these names, and compliance.us is now named by WAX-0008 rather than proposed.
  • OPEN-QUESTIONS.md: the reporting item says that a Module delivers read model projections, since a projection is code.

If this touches decisions/wax/

Ten Wax decisions change. Most of the change is naming, and the substantive part is WAX-0008's rule and tests.

  • Hash chain integrity is untouched. No event, chain, or hashing text changes.
  • Event immutability is untouched. No stored shape changes, and the renamed source_type value and the new module types have no stored data yet.
  • Schema ownership is clarified, not weakened. The US schema moves from a Region Pack to the US Locale Module, which matches the existing rule that only a Module owns tables. Ownership of core and ar is unchanged.
  • Module boundaries are sharpened. The tests put compliance rules in Compliance Packs, other starting content and jurisdictional procedure in Boilerplate Packs, structure in Locale Modules, formats in Region Packs, and mechanisms in the core or a Module. No boundary moves between existing Modules.

Version bumps

Major: WAX-0008 to 2.0, because its Decision section now states the rule and the standing. HIVE-0009 to 3.0, because its Decision section changes wording, and the validator requires a major bump for any change there after #27 took it to 2.0.

Minor: WAX-0004 to 2.1, WAX-0007 to 1.2, WAX-0009 to 1.2, WAX-0010 to 1.2, and WAX-0011 to 1.2.

No bump, because only names change: WAX-0020, WAX-0023, WAX-0032, WAX-0033, HIVE-0003, HIVE-0004, HIVE-0005, MOD-PURCHASE-0001, MOD-UNSECURED-0001, and MOD-US-0001.

CHANGELOG.md gains no entry. The unreleased v0.2.0 entry from #27 names the constructs with these names, and naming a construct is a decision change, not a change to the container.

Choices this draft makes

  1. Rob Grafrath set the model: one structural layer per country that carries no compliance, a federal Compliance Pack, and one Compliance Pack for each state, with no structural packs for states.
  2. The Reference Pack and the Template Pack become one Boilerplate Pack, as Rob Grafrath chose: starting content that is not compliance, such as statuses, roles, departments, rules, workflows, letters, reports, and screens, plus the procedure a module follows in each jurisdiction, such as a state's court case flow for the legal module. Every installed pack's content is already the agency's to edit under WAX-0011, so the Template Pack's separate install behavior is not needed.
  3. Court procedure is not compliance. The compliance test sends rules on how a collector must treat a debtor to the Compliance Pack, and the procedure of a court or another body to the Boilerplate Pack of the module that follows it.
  4. The federal level is identified as compliance.us, and a subdivision's pack layers on its country's pack. How the two combine stays the open question that Rename account to debt and add multi-level debt grouping #27 records.
  5. Each Compliance Pack value records its source, legal force, effective dates, and verification status.
  6. For auto-close, a jurisdiction counts as configured only when a pack is installed at the most specific level its country's packs are published at, so the federal pack alone configures no state.
  7. The v1 Seed Pack and the seed pack mentions become the Boilerplate Pack, and the workflow source_type value becomes pack.
  8. The new module type for a Locale Module is locale, matching business_class and debt_type, and the new Pack types end in _pack like language_pack and region_pack.
  9. As Rob Grafrath directed on 2026-10-11, a question of law is framed as a core mechanism with a cautious default, the law's value goes in a Compliance Pack with its verification flag, and a conservative starting value that an agency may change goes in a Boilerplate Pack. His example is the US Boilerplate Pack's starting value of no interest on disputed principal, which a later pull request adds with the interest settings it configures.

Stacked on #27

This pull request is based on #27, because most of the files it touches are already changed there, and it names MOD-US-0001, which #27 adds. Its base is the debt-grouping-levels branch, and when #27 merges, its base becomes main.

Checklist

  • I read the decisions neighboring this change, not just the file I edited.
  • New or retitled decisions have a matching line in INDEX.md, and front matter follows CONTRIBUTING.md.
  • python3 scripts/validate.py --base main passes locally, or I am relying on CI to tell me.
  • No pricing, rates, market or customer allocation, consumer data, or client-confidential information.
  • Claims about law or regulation are flagged for verification, not asserted.
  • Commits are signed off (DCO). If I forgot, I will post the retroactive sign-off comment per CONTRIBUTING.md.
  • I license this contribution under CC BY 4.0 (prose) and Apache 2.0 (embedded code samples).

🤖 Generated with Claude Code

Rob Grafrath and others added 3 commits October 10, 2026 23:52
WAX-0008 now states the rule in its Decision section: law ships only
in a Compliance Pack for the jurisdiction whose law it is, and the
Locale Module, Region Pack, and Language Pack that carry a country's
structure, formats, and translations carry no law. A rule's mechanism
is code in the core or a Module, built once, and a Compliance Pack
supplies only its values. The Collective certifies Modules as software
and publishes Packs as educational reference material. A new section
gives the three tests that place content, law, code, and mechanism,
and works them through for the United States: one Locale Module,
region.us, and a Language Pack with no law, the federal pack
compliance.us, and one Compliance Pack per state. A state has no
structural pack of its own, and a Louisiana parish goes in the county
field. Each Compliance Pack value records its source, legal force,
effective dates, and verification status.

The Reference Pack becomes the Vocabulary Pack, shared industry codes
that are neither law nor locale, so it cannot be mistaken for law.
WAX-0008 also lists the Contract Type Module and the Seed Package, and
WAX-0010 and WAX-0009 now list a module type for every construct. The
v1 Seed Pack becomes the starter configuration, so it no longer
collides with the seed package of WAX-0033.

The rest of the record is brought in line. WAX-0007's taxonomy moves
address structure to the Locale Module, adds Compliance Pack and
Contract Type Module rows, and gives the Debt Type Module real debt
types. WAX-0004 gives the US schema to the Locale Module, because a
Pack owns no tables. WAX-0011 names its planned federal and state packs
as Compliance Packs. HIVE-0009, HIVE-0005, MOD-PURCHASE-0001, and
MOD-UNSECURED-0001 say Compliance Pack where they meant law, HIVE-0003
and HIVE-0004 say starter configuration, and the BI reference packs of
WAX-0032 become report packs.

Rob Grafrath set the model: one structural layer per country, a federal
Compliance Pack, and a Compliance Pack for each state.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Rob Grafrath <[email protected]>
Undo the Vocabulary Pack rename. Rob Grafrath defined the Reference
Pack as the configuration a typical agency wants that is not
compliance, so that it does not start with an empty system: promise to
pay, broken promise, and NSF statuses, default roles, departments, and
rules, and the procedure that a module follows in each jurisdiction,
such as the state-by-state court case flow of the legal module. Court
procedure is the bureaucracy of the court system and not compliance.

WAX-0008's law test becomes a compliance test. A rule on how a
collector must treat a debtor or another party belongs to the
Compliance Pack of its jurisdiction, and a procedural rule of a court
or another body, such as the format of a filing or the time before a
motion may be filed, belongs to the Reference Pack of the module that
follows that procedure. The Decision section, the mechanism test, and
the United States example say the same, and the Reference Pack has
identifiers such as reference.us.collections and
reference.us.tx.legal_case_flow.

The v1 Seed Pack and the seed pack mentions in WAX-0020, HIVE-0003, and
HIVE-0004 become the Reference Pack, the module type is reference_pack
in WAX-0009 and WAX-0010, WAX-0007's taxonomy gains a Reference Pack
row, and WAX-0011's operation-type packs are Reference Packs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Rob Grafrath <[email protected]>
Rob Grafrath chose the word boilerplate and one pack for it. The
Boilerplate Pack carries all starting content that is not compliance,
so that an agency does not begin with an empty system: statuses such
as promise to pay, broken promise, and NSF, default roles, departments,
rules, workflows, letters, reports, and screens, and the procedure that
a module follows in each jurisdiction, such as the state-by-state court
case flow of the legal module.

The Template Pack is folded in. Every installed pack's content is
already the agency's to edit under WAX-0011, so its separate install
behavior is not needed, and the overlap on workflow definitions is
gone. With both names retired, reference goes back to meaning reference
values and template to meaning a letter or disclosure template.

WAX-0008 defines the Boilerplate Pack with identifiers such as
boilerplate.us.collections and boilerplate.us.tx.legal_case_flow, and
its Decision, tests, United States example, Bundle, phasing, and
implications use it. The module type is boilerplate_pack in WAX-0009
and WAX-0010, WAX-0007's taxonomy row follows, and WAX-0011, WAX-0020,
HIVE-0003, HIVE-0004, MOD-US-0001, the changelog entry, and the modules
README say Boilerplate Pack.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Rob Grafrath <[email protected]>
@RobGrafrath RobGrafrath changed the title Draw clean lines between modules, locale packs, and compliance packs Draw clean lines between modules, locale packs, compliance packs, and boilerplate packs Oct 11, 2026
Rob Grafrath and others added 2 commits October 11, 2026 11:10
…ith PR 26

PR 26 merged into main, and the branch below this one now carries it,
with the conflicts resolved and the rename applied to what PR 26
added. This merge brings that into the stack above it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Rob Grafrath <[email protected]>
Rob's direction is that a question of law is framed as a core mechanism
with a cautious default, with the value set by a pack and flagged for
verification, and that conservative starting values an agency may change
go in the Boilerplate Pack rather than the Compliance Pack. WAX-0008 now
has a fourth content test that says so. The Boilerplate Pack may set the
starting value of any setting that a mechanism exposes, and the
contributor implications name all four tests.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Rob Grafrath <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant