feature/resource-deltas-founding-date-multi-chain #17

Merged
Xeplosion merged 3 commits from feature/resource-deltas-founding-date-multi-chain into dev 2026-08-27 20:22:27 +00:00
Owner

What changed and why

Implements three related capture-model improvements, discussed and confirmed
before building:

Resource quantification for add-ons (issue #3). Add-ons that grant more
of a resource tracked elsewhere (RAM, storage, backup capacity, instance
slots) could previously only describe that in free-text notes, making an
offering's effective total (base + purchased add-ons) uncomputable
downstream. Added addon.resource_deltas — a closed-vocabulary map of
resource → increase amount — plus instance_slots as a new config
vocabulary entry (needed regardless of add-ons, since multi-instance-panel
providers like BisectHosting had no field for baseline instance count at
all). Non-quantitative grants (Discord perks, vanity subdomains) still stay
in notes.

Optional founding date / earliest review date (issue #4). Added
provider.founding_date and provider.reviews.earliest_review_date, both
nullable ISO dates. Two separate raw fields rather than one merged
"estimate" object, consistent with how the rest of the schema keeps raw
facts separate (e.g. complies_with_guidelines / compliance_notes).
earliest_review_date serves as a lower-bound proxy when founding date is
unstated/undiscoverable.

Multiple main/flagship offerings per line (issue #5). is_main_offering
was never schema-constrained — the "at most one true per line" limit was
purely a misleading schema description string plus the capture-form's own
client-side check. Removed the check, corrected the description, since
providers sometimes genuinely co-emphasize multiple offerings equally.

All three schema additions are optional/nullable and not in any required
array, so every existing provider file remains valid unmodified — no
migration needed.

Closes #3
Closes #4
Closes #5

How to test

  1. pytest — 71 tests, all should pass unmodified against the updated
    schema (purely additive changes).
  2. Open the capture-form, open any provider, go to an offering's
    Configuration section — confirm an "Instance slots" field appears.
  3. Mark two offerings on the same product line as "main / flagship
    offering" — confirm no validation error is raised (previously blocked
    at "more than one offering marked main").
  4. On an add-on, check "This add-on increases capacity of an existing
    resource" — confirm a grid of 8 resource fields appears, and that
    filling in only some of them (e.g. just instance_slots and
    storage_gb) omits the rest from the saved JSON rather than writing
    them as zero.
  5. On the Provider step, fill in "Founding date"; on the Reviews step,
    fill in "Earliest review date" — save, reopen the file, confirm both
    values persisted.
  6. Validate a saved file with capture-validate (or against
    schema/provider-schema-v2.3.json directly) and confirm it passes.

Checklist

  • Tests added or updated
  • Docs updated if behaviour changed
  • No unrelated changes included
  • PR is focused on one thing

Release notes

Add optional founding-date and earliest-review-date fields, structured resource_deltas for add-ons, an instance_slots config field, and allow multiple offerings to be marked main/flagship per product line.

## What changed and why Implements three related capture-model improvements, discussed and confirmed before building: **Resource quantification for add-ons (issue #3).** Add-ons that grant more of a resource tracked elsewhere (RAM, storage, backup capacity, instance slots) could previously only describe that in free-text `notes`, making an offering's effective total (base + purchased add-ons) uncomputable downstream. Added `addon.resource_deltas` — a closed-vocabulary map of resource → increase amount — plus `instance_slots` as a new `config` vocabulary entry (needed regardless of add-ons, since multi-instance-panel providers like BisectHosting had no field for baseline instance count at all). Non-quantitative grants (Discord perks, vanity subdomains) still stay in `notes`. **Optional founding date / earliest review date (issue #4).** Added `provider.founding_date` and `provider.reviews.earliest_review_date`, both nullable ISO dates. Two separate raw fields rather than one merged "estimate" object, consistent with how the rest of the schema keeps raw facts separate (e.g. `complies_with_guidelines` / `compliance_notes`). `earliest_review_date` serves as a lower-bound proxy when founding date is unstated/undiscoverable. **Multiple main/flagship offerings per line (issue #5).** `is_main_offering` was never schema-constrained — the "at most one true per line" limit was purely a misleading schema description string plus the capture-form's own client-side check. Removed the check, corrected the description, since providers sometimes genuinely co-emphasize multiple offerings equally. All three schema additions are optional/nullable and not in any `required` array, so every existing provider file remains valid unmodified — no migration needed. ## Related issues Closes #3 Closes #4 Closes #5 ## How to test 1. `pytest` — 71 tests, all should pass unmodified against the updated schema (purely additive changes). 2. Open the capture-form, open any provider, go to an offering's Configuration section — confirm an "Instance slots" field appears. 3. Mark two offerings on the same product line as "main / flagship offering" — confirm no validation error is raised (previously blocked at "more than one offering marked main"). 4. On an add-on, check "This add-on increases capacity of an existing resource" — confirm a grid of 8 resource fields appears, and that filling in only some of them (e.g. just `instance_slots` and `storage_gb`) omits the rest from the saved JSON rather than writing them as zero. 5. On the Provider step, fill in "Founding date"; on the Reviews step, fill in "Earliest review date" — save, reopen the file, confirm both values persisted. 6. Validate a saved file with `capture-validate` (or against `schema/provider-schema-v2.3.json` directly) and confirm it passes. ## Checklist - [x] Tests added or updated - [x] Docs updated if behaviour changed - [ ] No unrelated changes included - [x] PR is focused on one thing ## Release notes Add optional founding-date and earliest-review-date fields, structured resource_deltas for add-ons, an instance_slots config field, and allow multiple offerings to be marked main/flagship per product line.
docs: document resource_deltas, instance_slots, founding_date, earliest_review_date, and the relaxed main-offering rule.
All checks were successful
CI / format (push) Successful in 7s
CI / test (push) Successful in 8s
Validate capture files / validate (push) Successful in 7s
CI / format (pull_request) Successful in 7s
CI / test (pull_request) Successful in 8s
Validate capture files / validate (pull_request) Successful in 7s
4334405e6d
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
XeplosionGames/minecraft-provider-analysis!17
No description provided.