{
  "_doc": "Change record for the BAFO Hours Estimator, bafo.envy.sh. Fleet standard agentic/11-versioning-and-change-records. The page is a parody, the numbers it produces are not: people screenshot them. Bump the version in the SAME edit that adds a release, and keep the chip in index.html in step; scripts/estate-version-check.mjs asserts every published page carries one.",
  "version": "2.0.0",
  "released": "2026-08-19",
  "locator": "bafo.envy.sh",
  "record_url": "https://bafo.envy.sh/version.json",
  "outputs": {
    "estimate-figures": "The estimator output, accepted position and challenged position",
    "competence-discount": "The Design Manager easter egg and its 10% discount",
    "commercial-adjustment": "The Competitive Positioning Adjustment and the Challenge Handling Charge",
    "ledger": "The order deductions are applied in, and the arithmetic shown on the results card",
    "appendices": "Appendices A to D: sensitivity, assumptions, risk register, estimate history"
  },
  "releases": [
    {
      "version": "2.0.0",
      "released": "2026-08-19",
      "headline": "The figures moved. The band is now anchored to the CHALLENGED position rather than the accepted one, so an estimate produced before this release does not reproduce after it.",
      "changes": [
        {
          "kind": "change",
          "summary": "The target band anchors to the challenged position, not the accepted one",
          "affects": ["estimate-figures", "ledger"],
          "detail": "buildEstimate picks a target in 17-18K and divides out every deduction on the fully challenged path. Measured over 800 runs: estimator output 25.6-27.1K plain and 28.4-30.1K with the competence discount, accepted position 17.9-18.9K, challenged position always 17.0-18.0K.",
          "moved": "Every figure on the results card moved. Accepting now leaves you ABOVE the band and challenging brings you back into it, which is the reverse of the previous behaviour. A screenshot taken before this release shows numbers this build cannot reproduce.",
          "misread": ""
        },
        {
          "kind": "fix",
          "summary": "The Design Manager discount now requires an exact name match",
          "affects": ["competence-discount", "estimate-figures"],
          "detail": "Fires only on 'paul yulie' after trim, lowercase and whitespace collapse. It previously accepted 'paul y', 'pyulie', 'p.yulie', 'p yulie' and anything merely CONTAINING both words, so 'Mr Paul Yulie Esq' qualified.",
          "moved": "A run that triggered the discount by accident was 10% lower than the same inputs produce now.",
          "misread": ""
        },
        {
          "kind": "add",
          "summary": "Commercial Review, and Appendices A to D",
          "affects": ["commercial-adjustment", "ledger", "appendices"],
          "detail": "Commercial applies a 30% Competitive Positioning Adjustment; challenging it works once, upholds the adjustment and adds a 5% Challenge Handling Charge. Deductions come off the running total in order: competence 10%, then commercial 30%, then challenge 5%. Appendices are the only place the fifteen inputs do anything, and all they do is generate excuses.",
          "moved": "",
          "misread": ""
        },
        {
          "kind": "fix",
          "summary": "Two real accessibility defects, found by design-lint and fixed rather than baselined",
          "affects": ["estimate-figures"],
          "detail": "White on --accent for the accept button hover was 3.82:1 and failed AA; dark ink on the same fill is 5.12:1. Every new rule under 12px tripped tiny-text and was lifted to 0.75rem, carrying hierarchy on colour and letter-spacing instead of size.",
          "moved": "",
          "misread": ""
        }
      ]
    },
    {
      "version": "1.0.0",
      "released": "2026-07-26",
      "headline": "Moved from bafo.outerstorm.com to its own hostname. Recorded retroactively: nothing before 2.0.0 carried a version.",
      "changes": [
        {
          "kind": "change",
          "summary": "Now served at bafo.envy.sh",
          "affects": ["estimate-figures"],
          "detail": "bafo.outerstorm.com and outerstorm.com/bafo/ 301 to https://bafo.envy.sh/. The redirect is permanent and is no longer tied to outerstorm.com's fate, since that domain was kept.",
          "moved": "",
          "misread": "A figure quoted from the old hostname is the same figure. Only the address changed."
        }
      ]
    }
  ]
}
