gitextract_aoxwd8ux/ ├── .claude/ │ ├── .vscode/ │ │ ├── arduino.json │ │ ├── c_cpp_properties.json │ │ ├── settings.json │ │ └── tasks.json │ ├── adr-kit-guide.md │ ├── backlog-cli-reference.md │ ├── commands/ │ │ ├── backlog_discord.md │ │ └── check_otgw_issues.md │ ├── docs/ │ │ └── discord-backlog-bridge.md │ ├── settings.20260421_085354.bak │ ├── settings.json │ └── skills/ │ ├── adr/ │ │ └── SKILL.md │ ├── flash/ │ │ └── SKILL.md │ ├── release/ │ │ └── SKILL.md │ └── update-docs/ │ └── SKILL.md ├── .codex ├── .copilot-tracking/ │ └── research/ │ ├── 20260306-mqtt-json-refactor-research.md │ └── 20260306-ui-fixes-otmonitor-panel-spacing-research.md ├── .external-reviews/ │ ├── HANDOFF-claude-review-c-codebase-303Qj.md │ └── README.md ├── .full-review/ │ ├── 00-scope.md │ ├── 01-quality-architecture.md │ ├── 02-security-performance.md │ ├── 03-testing-documentation.md │ ├── 05-final-report.md │ ├── phase1a-code-quality.md │ ├── phase1b-architecture.md │ ├── phase2a-security.md │ ├── phase2b-performance.md │ ├── phase3a-testing.md │ ├── phase3b-documentation.md │ └── state.json ├── .full-review-archive-20260421-085044/ │ ├── 00-scope.md │ ├── 01-quality-architecture.md │ ├── 02-security-performance.md │ └── state.json ├── .gitattributes ├── .githooks/ │ └── pre-commit ├── .github/ │ ├── PULL_REQUEST_TEMPLATE.md.example │ ├── actions/ │ │ ├── build/ │ │ │ └── action.yml │ │ └── setup/ │ │ └── action.yml │ ├── agents/ │ │ ├── adr-generator.agent.md │ │ ├── api-architect.agent.md │ │ ├── context7.agent.md │ │ ├── critical-thinking.agent.md │ │ ├── debug.agent.md │ │ ├── devils-advocate.agent.md │ │ ├── expert-cpp-software-engineer.agent.md │ │ ├── expert-react-frontend-engineer.agent.md │ │ ├── gpt-5-beast-mode.agent.md │ │ ├── implementation-plan.agent.md │ │ ├── specification.agent.md │ │ ├── task-planner.agent.md │ │ └── task-researcher.agent.md │ ├── copilot-instructions.md │ ├── instructions/ │ │ ├── adr.code-review.instructions.md │ │ └── adr.coding-agent.instructions.md │ ├── prompts/ │ │ └── check-discord-issues.prompt.md │ ├── skills/ │ │ ├── adr/ │ │ │ ├── ALWAYS_USE_SKILL.md │ │ │ ├── IMPLEMENTATION_SUMMARY.md │ │ │ ├── QUICK_START.md │ │ │ ├── README.md │ │ │ ├── SKILL.md │ │ │ └── USAGE_GUIDE.md │ │ ├── algorithmic-art/ │ │ │ ├── LICENSE.txt │ │ │ ├── SKILL.md │ │ │ └── templates/ │ │ │ ├── generator_template.js │ │ │ └── viewer.html │ │ ├── brand-guidelines/ │ │ │ ├── LICENSE.txt │ │ │ └── SKILL.md │ │ ├── canvas-design/ │ │ │ ├── LICENSE.txt │ │ │ ├── SKILL.md │ │ │ └── canvas-fonts/ │ │ │ ├── ArsenalSC-OFL.txt │ │ │ ├── BigShoulders-OFL.txt │ │ │ ├── Boldonse-OFL.txt │ │ │ ├── BricolageGrotesque-OFL.txt │ │ │ ├── CrimsonPro-OFL.txt │ │ │ ├── DMMono-OFL.txt │ │ │ ├── EricaOne-OFL.txt │ │ │ ├── GeistMono-OFL.txt │ │ │ ├── Gloock-OFL.txt │ │ │ ├── IBMPlexMono-OFL.txt │ │ │ ├── InstrumentSans-OFL.txt │ │ │ ├── Italiana-OFL.txt │ │ │ ├── JetBrainsMono-OFL.txt │ │ │ ├── Jura-OFL.txt │ │ │ ├── LibreBaskerville-OFL.txt │ │ │ ├── Lora-OFL.txt │ │ │ ├── NationalPark-OFL.txt │ │ │ ├── NothingYouCouldDo-OFL.txt │ │ │ ├── Outfit-OFL.txt │ │ │ ├── PixelifySans-OFL.txt │ │ │ ├── PoiretOne-OFL.txt │ │ │ ├── RedHatMono-OFL.txt │ │ │ ├── Silkscreen-OFL.txt │ │ │ ├── SmoochSans-OFL.txt │ │ │ ├── Tektur-OFL.txt │ │ │ ├── WorkSans-OFL.txt │ │ │ └── YoungSerif-OFL.txt │ │ ├── doc-coauthoring/ │ │ │ └── SKILL.md │ │ ├── docx/ │ │ │ ├── LICENSE.txt │ │ │ ├── SKILL.md │ │ │ └── scripts/ │ │ │ ├── __init__.py │ │ │ ├── accept_changes.py │ │ │ ├── comment.py │ │ │ ├── office/ │ │ │ │ ├── helpers/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── merge_runs.py │ │ │ │ │ └── simplify_redlines.py │ │ │ │ ├── pack.py │ │ │ │ ├── schemas/ │ │ │ │ │ ├── ISO-IEC29500-4_2016/ │ │ │ │ │ │ ├── dml-chart.xsd │ │ │ │ │ │ ├── dml-chartDrawing.xsd │ │ │ │ │ │ ├── dml-diagram.xsd │ │ │ │ │ │ ├── dml-lockedCanvas.xsd │ │ │ │ │ │ ├── dml-main.xsd │ │ │ │ │ │ ├── dml-picture.xsd │ │ │ │ │ │ ├── dml-spreadsheetDrawing.xsd │ │ │ │ │ │ ├── dml-wordprocessingDrawing.xsd │ │ │ │ │ │ ├── pml.xsd │ │ │ │ │ │ ├── shared-additionalCharacteristics.xsd │ │ │ │ │ │ ├── shared-bibliography.xsd │ │ │ │ │ │ ├── shared-commonSimpleTypes.xsd │ │ │ │ │ │ ├── shared-customXmlDataProperties.xsd │ │ │ │ │ │ ├── shared-customXmlSchemaProperties.xsd │ │ │ │ │ │ ├── shared-documentPropertiesCustom.xsd │ │ │ │ │ │ ├── shared-documentPropertiesExtended.xsd │ │ │ │ │ │ ├── shared-documentPropertiesVariantTypes.xsd │ │ │ │ │ │ ├── shared-math.xsd │ │ │ │ │ │ ├── shared-relationshipReference.xsd │ │ │ │ │ │ ├── sml.xsd │ │ │ │ │ │ ├── vml-main.xsd │ │ │ │ │ │ ├── vml-officeDrawing.xsd │ │ │ │ │ │ ├── vml-presentationDrawing.xsd │ │ │ │ │ │ ├── vml-spreadsheetDrawing.xsd │ │ │ │ │ │ ├── vml-wordprocessingDrawing.xsd │ │ │ │ │ │ ├── wml.xsd │ │ │ │ │ │ └── xml.xsd │ │ │ │ │ ├── ecma/ │ │ │ │ │ │ └── fouth-edition/ │ │ │ │ │ │ ├── opc-contentTypes.xsd │ │ │ │ │ │ ├── opc-coreProperties.xsd │ │ │ │ │ │ ├── opc-digSig.xsd │ │ │ │ │ │ └── opc-relationships.xsd │ │ │ │ │ ├── mce/ │ │ │ │ │ │ └── mc.xsd │ │ │ │ │ └── microsoft/ │ │ │ │ │ ├── wml-2010.xsd │ │ │ │ │ ├── wml-2012.xsd │ │ │ │ │ ├── wml-2018.xsd │ │ │ │ │ ├── wml-cex-2018.xsd │ │ │ │ │ ├── wml-cid-2016.xsd │ │ │ │ │ ├── wml-sdtdatahash-2020.xsd │ │ │ │ │ └── wml-symex-2015.xsd │ │ │ │ ├── soffice.py │ │ │ │ ├── unpack.py │ │ │ │ ├── validate.py │ │ │ │ └── validators/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── docx.py │ │ │ │ ├── pptx.py │ │ │ │ └── redlining.py │ │ │ └── templates/ │ │ │ ├── comments.xml │ │ │ ├── commentsExtended.xml │ │ │ ├── commentsExtensible.xml │ │ │ ├── commentsIds.xml │ │ │ └── people.xml │ │ ├── frontend-design/ │ │ │ ├── LICENSE.txt │ │ │ └── SKILL.md │ │ ├── internal-comms/ │ │ │ ├── LICENSE.txt │ │ │ ├── SKILL.md │ │ │ └── examples/ │ │ │ ├── 3p-updates.md │ │ │ ├── company-newsletter.md │ │ │ ├── faq-answers.md │ │ │ └── general-comms.md │ │ ├── mcp-builder/ │ │ │ ├── LICENSE.txt │ │ │ ├── SKILL.md │ │ │ ├── reference/ │ │ │ │ ├── evaluation.md │ │ │ │ ├── mcp_best_practices.md │ │ │ │ ├── node_mcp_server.md │ │ │ │ └── python_mcp_server.md │ │ │ └── scripts/ │ │ │ ├── connections.py │ │ │ ├── evaluation.py │ │ │ ├── example_evaluation.xml │ │ │ └── requirements.txt │ │ ├── pdf/ │ │ │ ├── LICENSE.txt │ │ │ ├── SKILL.md │ │ │ ├── forms.md │ │ │ ├── reference.md │ │ │ └── scripts/ │ │ │ ├── check_bounding_boxes.py │ │ │ ├── check_fillable_fields.py │ │ │ ├── convert_pdf_to_images.py │ │ │ ├── create_validation_image.py │ │ │ ├── extract_form_field_info.py │ │ │ ├── extract_form_structure.py │ │ │ ├── fill_fillable_fields.py │ │ │ └── fill_pdf_form_with_annotations.py │ │ ├── pptx/ │ │ │ ├── LICENSE.txt │ │ │ ├── SKILL.md │ │ │ ├── editing.md │ │ │ ├── pptxgenjs.md │ │ │ └── scripts/ │ │ │ ├── __init__.py │ │ │ ├── add_slide.py │ │ │ ├── clean.py │ │ │ ├── office/ │ │ │ │ ├── helpers/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── merge_runs.py │ │ │ │ │ └── simplify_redlines.py │ │ │ │ ├── pack.py │ │ │ │ ├── schemas/ │ │ │ │ │ ├── ISO-IEC29500-4_2016/ │ │ │ │ │ │ ├── dml-chart.xsd │ │ │ │ │ │ ├── dml-chartDrawing.xsd │ │ │ │ │ │ ├── dml-diagram.xsd │ │ │ │ │ │ ├── dml-lockedCanvas.xsd │ │ │ │ │ │ ├── dml-main.xsd │ │ │ │ │ │ ├── dml-picture.xsd │ │ │ │ │ │ ├── dml-spreadsheetDrawing.xsd │ │ │ │ │ │ ├── dml-wordprocessingDrawing.xsd │ │ │ │ │ │ ├── pml.xsd │ │ │ │ │ │ ├── shared-additionalCharacteristics.xsd │ │ │ │ │ │ ├── shared-bibliography.xsd │ │ │ │ │ │ ├── shared-commonSimpleTypes.xsd │ │ │ │ │ │ ├── shared-customXmlDataProperties.xsd │ │ │ │ │ │ ├── shared-customXmlSchemaProperties.xsd │ │ │ │ │ │ ├── shared-documentPropertiesCustom.xsd │ │ │ │ │ │ ├── shared-documentPropertiesExtended.xsd │ │ │ │ │ │ ├── shared-documentPropertiesVariantTypes.xsd │ │ │ │ │ │ ├── shared-math.xsd │ │ │ │ │ │ ├── shared-relationshipReference.xsd │ │ │ │ │ │ ├── sml.xsd │ │ │ │ │ │ ├── vml-main.xsd │ │ │ │ │ │ ├── vml-officeDrawing.xsd │ │ │ │ │ │ ├── vml-presentationDrawing.xsd │ │ │ │ │ │ ├── vml-spreadsheetDrawing.xsd │ │ │ │ │ │ ├── vml-wordprocessingDrawing.xsd │ │ │ │ │ │ ├── wml.xsd │ │ │ │ │ │ └── xml.xsd │ │ │ │ │ ├── ecma/ │ │ │ │ │ │ └── fouth-edition/ │ │ │ │ │ │ ├── opc-contentTypes.xsd │ │ │ │ │ │ ├── opc-coreProperties.xsd │ │ │ │ │ │ ├── opc-digSig.xsd │ │ │ │ │ │ └── opc-relationships.xsd │ │ │ │ │ ├── mce/ │ │ │ │ │ │ └── mc.xsd │ │ │ │ │ └── microsoft/ │ │ │ │ │ ├── wml-2010.xsd │ │ │ │ │ ├── wml-2012.xsd │ │ │ │ │ ├── wml-2018.xsd │ │ │ │ │ ├── wml-cex-2018.xsd │ │ │ │ │ ├── wml-cid-2016.xsd │ │ │ │ │ ├── wml-sdtdatahash-2020.xsd │ │ │ │ │ └── wml-symex-2015.xsd │ │ │ │ ├── soffice.py │ │ │ │ ├── unpack.py │ │ │ │ ├── validate.py │ │ │ │ └── validators/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── docx.py │ │ │ │ ├── pptx.py │ │ │ │ └── redlining.py │ │ │ └── thumbnail.py │ │ ├── refactor/ │ │ │ └── SKILL.md │ │ ├── skill-creator/ │ │ │ ├── LICENSE.txt │ │ │ ├── SKILL.md │ │ │ ├── references/ │ │ │ │ ├── output-patterns.md │ │ │ │ └── workflows.md │ │ │ └── scripts/ │ │ │ ├── init_skill.py │ │ │ ├── package_skill.py │ │ │ └── quick_validate.py │ │ ├── template-skill/ │ │ │ └── SKILL.md │ │ ├── theme-factory/ │ │ │ ├── LICENSE.txt │ │ │ ├── SKILL.md │ │ │ └── themes/ │ │ │ ├── arctic-frost.md │ │ │ ├── botanical-garden.md │ │ │ ├── desert-rose.md │ │ │ ├── forest-canopy.md │ │ │ ├── golden-hour.md │ │ │ ├── midnight-galaxy.md │ │ │ ├── modern-minimalist.md │ │ │ ├── ocean-depths.md │ │ │ ├── sunset-boulevard.md │ │ │ └── tech-innovation.md │ │ ├── web-artifacts-builder/ │ │ │ ├── LICENSE.txt │ │ │ ├── SKILL.md │ │ │ └── scripts/ │ │ │ ├── bundle-artifact.sh │ │ │ └── init-artifact.sh │ │ ├── webapp-testing/ │ │ │ ├── LICENSE.txt │ │ │ ├── SKILL.md │ │ │ ├── examples/ │ │ │ │ ├── console_logging.py │ │ │ │ ├── element_discovery.py │ │ │ │ └── static_html_automation.py │ │ │ └── scripts/ │ │ │ └── with_server.py │ │ └── xlsx/ │ │ ├── LICENSE.txt │ │ ├── SKILL.md │ │ └── scripts/ │ │ ├── office/ │ │ │ ├── helpers/ │ │ │ │ ├── __init__.py │ │ │ │ ├── merge_runs.py │ │ │ │ └── simplify_redlines.py │ │ │ ├── pack.py │ │ │ ├── schemas/ │ │ │ │ ├── ISO-IEC29500-4_2016/ │ │ │ │ │ ├── dml-chart.xsd │ │ │ │ │ ├── dml-chartDrawing.xsd │ │ │ │ │ ├── dml-diagram.xsd │ │ │ │ │ ├── dml-lockedCanvas.xsd │ │ │ │ │ ├── dml-main.xsd │ │ │ │ │ ├── dml-picture.xsd │ │ │ │ │ ├── dml-spreadsheetDrawing.xsd │ │ │ │ │ ├── dml-wordprocessingDrawing.xsd │ │ │ │ │ ├── pml.xsd │ │ │ │ │ ├── shared-additionalCharacteristics.xsd │ │ │ │ │ ├── shared-bibliography.xsd │ │ │ │ │ ├── shared-commonSimpleTypes.xsd │ │ │ │ │ ├── shared-customXmlDataProperties.xsd │ │ │ │ │ ├── shared-customXmlSchemaProperties.xsd │ │ │ │ │ ├── shared-documentPropertiesCustom.xsd │ │ │ │ │ ├── shared-documentPropertiesExtended.xsd │ │ │ │ │ ├── shared-documentPropertiesVariantTypes.xsd │ │ │ │ │ ├── shared-math.xsd │ │ │ │ │ ├── shared-relationshipReference.xsd │ │ │ │ │ ├── sml.xsd │ │ │ │ │ ├── vml-main.xsd │ │ │ │ │ ├── vml-officeDrawing.xsd │ │ │ │ │ ├── vml-presentationDrawing.xsd │ │ │ │ │ ├── vml-spreadsheetDrawing.xsd │ │ │ │ │ ├── vml-wordprocessingDrawing.xsd │ │ │ │ │ ├── wml.xsd │ │ │ │ │ └── xml.xsd │ │ │ │ ├── ecma/ │ │ │ │ │ └── fouth-edition/ │ │ │ │ │ ├── opc-contentTypes.xsd │ │ │ │ │ ├── opc-coreProperties.xsd │ │ │ │ │ ├── opc-digSig.xsd │ │ │ │ │ └── opc-relationships.xsd │ │ │ │ ├── mce/ │ │ │ │ │ └── mc.xsd │ │ │ │ └── microsoft/ │ │ │ │ ├── wml-2010.xsd │ │ │ │ ├── wml-2012.xsd │ │ │ │ ├── wml-2018.xsd │ │ │ │ ├── wml-cex-2018.xsd │ │ │ │ ├── wml-cid-2016.xsd │ │ │ │ ├── wml-sdtdatahash-2020.xsd │ │ │ │ └── wml-symex-2015.xsd │ │ │ ├── soffice.py │ │ │ ├── unpack.py │ │ │ ├── validate.py │ │ │ └── validators/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── docx.py │ │ │ ├── pptx.py │ │ │ └── redlining.py │ │ └── recalc.py │ └── workflows/ │ ├── claude-code-review.yml │ ├── claude.yml │ ├── evaluate.yml │ ├── opentherm-v42-spec-audit.yml │ ├── release-assets.yml │ └── trigger-copilot-agent.yml ├── .gitignore ├── .gitmodules ├── AGENTS.md ├── AUTHORS ├── CHANGELOG.md ├── CLAUDE.md ├── LICENSE ├── Makefile ├── README.md ├── backlog/ │ ├── archive/ │ │ └── tasks/ │ │ ├── task-1 - Audit-and-fix-cMsg-shared-global-buffer-reentrancy-hazard.md │ │ ├── task-10 - Harden-REST-API-input-validation-postSettings-field-whitelist-Dallas-labels.md │ │ ├── task-11 - Add-WebSocket-idle-timeout-and-Content-Length-headers-for-file-serving.md │ │ ├── task-12 - Fix-typos-and-minor-code-quality-issues-across-codebase.md │ │ ├── task-13 - Upgrade-WiFiManager-from-RC-to-stable-release.md │ │ ├── task-14 - Check-and-upgrade-WebSockets-DallasTemperature-and-OneWire-libraries.md │ │ ├── task-15 - Refactor-OTA-updater-flow.md │ │ ├── task-15.1 - Refactor-OTA-page-JavaScript.md │ │ ├── task-15.2 - Refactor-OTA-backend-handler.md │ │ ├── task-15.3 - Clarify-flash-mode-runtime-handling.md │ │ ├── task-16 - Fix-MQTT-status-first-publish-and-reconnect-republish.md │ │ ├── task-17 - Align-MQTT-publish-implementation-to-ADR-052.md │ │ ├── task-18 - Reclaim-FSexplorer-static-HTML-streaming-buffers.md │ │ ├── task-19 - Replace-global-sMessage-scratch-buffer-with-smaller-status-representation.md │ │ ├── task-2 - Move-networkStuff.h-function-bodies-to-networkStuff.ino.md │ │ ├── task-20 - Reduce-persistent-RAM-used-by-webhook-payload-expansion.md │ │ ├── task-21 - Compact-OT-MQTT-publish-tracking-tables.md │ │ ├── task-22 - Release-MQTT-autodiscovery-workspace-after-publish-sessions.md │ │ ├── task-22.1 - Implement-in-place-MQTT-autodiscovery-line-parsing.md │ │ ├── task-22.2 - Implement-streaming-MQTT-autodiscovery-template-rendering.md │ │ ├── task-22.3 - Integrate-and-validate-reduced-workspace-MQTT-autodiscovery.md │ │ ├── task-23 - Stream-PROGMEM-MQTT-payloads-and-remove-1200-byte-payload-scratch-buffer.md │ │ ├── task-24 - Convert-all-MQTT-publishes-to-chunked-beginPublish-flow-and-shrink-client-buffer.md │ │ ├── task-241 - Investigate-Tado-X-DHW-control-not-reflecting-correctly-via-OTGW.md │ │ ├── task-242 - Fix-upgrade-to-v6.6-fails-reported-by-Tomba-on-Tweakers.md │ │ ├── task-243 - Fix-NTP-time-sync-still-stuck-at-2106-02-07-after-v1.3.7-beta-fix.md │ │ ├── task-243 - Investigate-Tado-X-DHW-control-not-reflecting-correctly-via-OTGW.md │ │ ├── task-25 - Stream-mqttha.cfg-parsing-and-remove-persistent-MQTT-autodiscovery-workspace.md │ │ ├── task-254 - Upgrade-ESP8266-Arduino-core-from-2.7.4-to-3.1.2.md │ │ ├── task-255 - Update-all-pinned-Arduino-libraries-to-latest-compatible-versions.md │ │ ├── task-256 - Fix-ESP8266-3.x-breaking-changes-in-firmware-code.md │ │ ├── task-257 - SimpleTelnet-library-scaffold-and-build-integration.md │ │ ├── task-258 - SimpleTelnet-core-connection-management-engine.md │ │ ├── task-259 - SimpleTelnet-Stream-interface-—-broadcast-write-and-polling-read.md │ │ ├── task-26 - Replace-dense-MQTT-publish-tracking-table-with-bounded-sparse-tracking.md │ │ ├── task-260 - SimpleTelnet-CLI-input-mode-with-per-client-line-buffering.md │ │ ├── task-261 - SimpleTelnet-printf-en-printf_P-PROGMEM-helpers.md │ │ ├── task-262 - SimpleTelnet-firmware-migratie-—-OTGWstream-en-debugTelnet.md │ │ ├── task-263 - SimpleTelnet-integratie-validatie-en-heap-meting.md │ │ ├── task-264 - SimpleTelnet-worked-examples-—-StreamingMode-CLIMode-DualInstance.md │ │ ├── task-265 - SimpleTelnet-API-documentatie-en-doxygen-header-comments.md │ │ ├── task-266 - SimpleTelnet-publicatiebestanden-Arduino-Library-Manager-en-PlatformIO.md │ │ ├── task-267 - SimpleTelnet-README.md-—-menselijk-Engelstalig-met-shoutouts-en-onderbouwing.md │ │ ├── task-268 - Fix-ESP8266-v1.4.0-beta-reboot-loop-after-flash.md │ │ ├── task-269 - Fix-PIC-firmware-v6.6-upgrade-via-web-UI-fails.md │ │ ├── task-270 - Fix-MQTT-discovery-burst-on-every-reconnect.md │ │ ├── task-271 - Build-generate-mqttha_progmem.h-from-mqttha.cfg.md │ │ ├── task-272 - Refactor-MQTT-discovery-to-use-PROGMEM-index-instead-of-LittleFS.md │ │ ├── task-273 - Config-switch-to-lwIP2-Low-Memory-variant-MSS536.md │ │ ├── task-274 - Feature-scheduled-nightly-restart-for-heap-recovery.md │ │ ├── task-276 - Optimize-eliminate-sLine1200-global-buffer-—-pass-PROGMEM-msg-pointers-directly.md │ │ ├── task-277 - Optimize-eliminate-topicBuf200-stack-buffer-—-pass-PROGMEM-topic-pointers-directly.md │ │ ├── task-278 - Fix-v1.4.0-beta-ESP8266-crash-reboot-loop-Exception-2-3.md │ │ ├── task-279 - Fix-autodiscovery-PROGMEM-as-RAM-crashes-Exception-3.md │ │ ├── task-280 - Fix-NULL-pointer-crash-in-getOTGWValue-updateSetting-at-boot-Exception-28.md │ │ ├── task-281 - Refactor-mqttha_progmem-naar-leesbare-OTlookup_t-stijl.md │ │ ├── task-282 - Refactor-MQTT-HA-discovery-compact-array-streaming-constructors.md │ │ ├── task-3 - const-correctness-pass-on-MQTT-and-helper-functions.md │ │ ├── task-338 - Slow-MQTT-discovery-drip-interval-from-1s-to-2s.md │ │ ├── task-339 - Widen-MQTT-discovery-heap-pressure-backoff-trigger-to-HEAP_LOW.md │ │ ├── task-340 - Use-getMaxFreeBlockSize-in-MQTT-WebSocket-publish-gates-for-fragmentation-awareness.md │ │ ├── task-341 - JSON-ify-Status-frame-MQTT-fanout-single-publish-instead-of-9-sub-topics.md │ │ ├── task-342 - Quiesce-MQTT-discovery-drip-during-Status-frame-burst.md │ │ ├── task-343 - Delta-publishing-for-MQTT-Status-sub-topics-parked.md │ │ ├── task-344 - Lower-heap-guard-thresholds-tuned-on-Crashevans-log-data.md │ │ ├── task-345 - Refactor-nightly-restart-to-use-hourChanged-hook.md │ │ ├── task-346 - Cumulative-heap-health-drop-statistics-with-hourly-MQTT-publish.md │ │ ├── task-347 - Post-Status-burst-cooldown-window-for-MQTT-discovery-drip.md │ │ ├── task-348 - Fix-discovery-drip-limbo-on-publish-failure.md │ │ ├── task-349 - On-demand-MQTT-discovery-verification-and-republish.md │ │ ├── task-350 - Unify-time-boundary-dispatcher-single-caller-contract.md │ │ ├── task-351 - Daily-automatic-discovery-verification.md │ │ ├── task-355 - choreadr-revert-ADR-062-064-to-Proposed-and-resolve-ghost-ADR-citations.md │ │ ├── task-356 - fixmqtt-add-cooldown-precondition-on-api-v2-discovery-republish-to-prevent-verify-lockout.md │ │ ├── task-357 - fixmqtt-guard-verify-window-callback-fall-through-to-command-dispatcher.md │ │ ├── task-358 - fixmqtt-dedupe-heap-threshold-6000-between-REST-verify-and-startDiscoveryVerification.md │ │ ├── task-359 - fixmqtt-enforce-NTP-and-uptime-preconditions-in-startDiscoveryVerification.md │ │ ├── task-360 - docsmqtt-fix-stale-comments-on-heapdiag-call-site-drip-interval-and-ADR-077-reference.md │ │ ├── task-361 - featmqtt-distinguish-verify-heap-abort-from-clean-pass-via-outcome-enum.md │ │ ├── task-362 - chorecleanup-remove-dead-code-paths-and-write-only-state-fields-from-1.4.1-refactor.md │ │ ├── task-363 - refactormqtt-extract-discovery-verification-state-machine-into-separate-TU.md │ │ ├── task-364 - choreadr-implement-CI-gates-promised-by-ADR-062-for-discovery-counter-instrumentation.md │ │ ├── task-365 - docsrelease-create-RELEASE_NOTES_1.4.1.md-update-BREAKING_CHANGES.md-README-What-is-new-section.md │ │ ├── task-366 - docsapi-update-openapi.yaml-and-MQTT.md-for-new-discovery-verify-endpoints-and-heap-diag-topic.md │ │ ├── task-367 - chorebacklog-append-erratum-on-TASK-342-346-349-351-Final-Summaries-and-remove-plan-file-references.md │ │ ├── task-368 - choreci-wire-evaluate.py-into-GitHub-Actions-and-add-4-regex-gates-buffer-cooldown-ADR-VH-wrap.md │ │ ├── task-369 - choretests-rewrite-tests-test_dallas_address.cpp-as-host-compilable-or-delete.md │ │ ├── task-370 - fixheap-add-hysteresis-to-drip-interval-mode-transitions-to-stop-oscillation.md │ │ ├── task-371 - fixotgw-quiesce-PIC-PR-readout-during-Status-burst-and-active-drip-tick.md │ │ ├── task-372 - Fix-WiFi-does-not-reconnect-after-access-point-reboot.md │ │ ├── task-386 - Fix-settings-page-double-tap-blanks-all-fields-1.4.2-beta.md │ │ ├── task-4 - Break-OTGW-Core.ino-into-named-logical-regions-with-section-headers.md │ │ ├── task-432 - Fix-1.5.0-beta-first-reboot-WiFi-association-without-DHCP-IP-andrebrait-reproducible.md │ │ ├── task-5 - Add-bounds-validation-to-all-numeric-settings-in-updateSetting.md │ │ ├── task-6 - Fix-MQTT-subscription-topic-truncation-and-byte-by-byte-streaming-write.md │ │ ├── task-7 - Eliminate-String-class-from-FSexplorer-HTTP-handlers.md │ │ ├── task-8 - Fix-undersized-buffers-overflowCountBuf-MQTT-payload-webhook-expansion.md │ │ └── task-9 - Reduce-MQTT-callback-stack-pressure-and-protect-publishToSourceTopic-from-re-entrancy.md │ ├── config.yml │ └── tasks/ │ ├── task-240 - Fix-upgrade-to-v6.6-fails-reported-by-Tomba-on-Tweakers.md │ ├── task-242 - Fix-OTGW-flapping-offline-online-with-serial-overrun-and-MQTT-throttle-drops.md │ ├── task-275 - Validate-heap-stability-after-stap-1-fixes-—-decide-on-core-downgrade.md │ ├── task-283 - Fix-v1.4.0-beta-boot-loop-triggered-by-MQTT-broker-connection.md │ ├── task-352 - fixheapdiag-expand-sendMQTTheapdiag-JSON-buffer-to-prevent-truncation-at-max-counters.md │ ├── task-353 - fixmqtt-lower-STATUS_BURST_COOLDOWN_MS-to-2000ms-to-stop-discovery-drip-stall.md │ ├── task-354 - fixotgw-wrap-VH-status-publishers-in-beginStatusBurst-endStatusBurst-quiesce.md │ ├── task-382 - Fix-MQTT-HA-discovery-drip-never-sends-device-name-or-sw_version-isFirstEntity-always-false.md │ ├── task-383 - Docs-add-Arduino-Core-3.1.2-upgrade-warning-LittleFS-partition-change-causes-~10-min-boot-settings-loss.md │ ├── task-384 - Fix-v1.3.5-bootloop-on-fresh-flash-to-Wemos-D1.md │ ├── task-385 - Fix-text-fields-render-dark-in-light-mode-1.4.2-beta.md │ ├── task-387 - Fix-theme-toggle-icon-overlaps-hostnameIP-text-in-mobile-header.md │ ├── task-388 - Fix-MQTT-binary_sensor-discovery-via-flag-driven-otgw-pic-prefix.md │ ├── task-389 - Create-ADR-065-otgw-pic-MQTT-subtree-is-stable-public-topic-API.md │ ├── task-390 - Add-sendMQTTDataPic-helper-and-migrate-direct-publish-call-sites-to-use-it.md │ ├── task-391 - Fix-1.4.2-webui-boot-lag-render-hotpath-lower-restore-cap-to-10k.md │ ├── task-392 - Fix-findings-from-v1.4.1..dev-handoff-review.md │ ├── task-395 - Port-TASK-394-Phase-12-reboot-diagnostics-fixes-from-2.0.0-to-dev.md │ ├── task-396 - TASK-394-Phase-34-port-dev-hardening-deferred-reboot-OTA-heap-probes-watermark-flash-sanity-exccause.md │ ├── task-397 - Diagnose-random-doBackgroundTasks-loop-stalls-—-BGTRACE-always-on-instrumentation.md │ ├── task-398 - Create-LTS-1.4.x-on-2.7.4-branch-fork-dev-pin-to-Arduino-Core-2.7.4.md │ ├── task-399 - Bump-SimpleTelnet-printf-stack-buffer-from-64-to-256-bytes-tunable-SIMPLETELNET_PRINTF_STACK_LEN.md │ ├── task-400 - Per-bit-change-detection-for-OT-msgId-0-Status-MQTT-fan-out-60s-heartbeat.md │ ├── task-401 - Per-bit-change-detection-60s-heartbeat-for-MQTT-fan-out-on-OT-msgId-5-ASF-6-RBP-and-100-Remote-Override.md │ ├── task-402 - Rate-gate-MQTT-gated-fanout-publishes-at-1s-spacing-with-per-slot-pending-flags.md │ ├── task-403 - Tune-MQTT-gated-fanout-spacing-from-1000ms-to-250ms-disable-BGTRACE-OTTRACE-instrumentation.md │ ├── task-431 - Investigate-rapid-WebUI-page-refresh-freezes-the-OTGW-1.4.2-beta-requires-network-drop-to-recover.md │ ├── task-478 - fixmqtt-stop-master-topic-flapping-for-non-echoed-OT-values-B-hybrid.md │ ├── task-483 - fixwebui-apply-ADR-066-master-topic-filter-to-log-decode-and-REST-state.md │ ├── task-484 - Fix-WiFi-setup-AP-mode-webUI-unreachable-after-Reset-Wifi-andrebrait-1.5.0-beta.md │ ├── task-485 - Fix-AP-not-found-on-Netgear-Orbi-after-upgrading-to-1.4.1-aagorine.md │ ├── task-486 - Fix-PIC-not-detected-on-Wemos-D1-Mini-Pro-GitHub-557-dwd1.md │ ├── task-522 - HA-discovery-suppress-base-entity-when-bSeparateSources-is-enabled-no-overlap-design.md │ ├── task-526 - Make-legacy-port-25238-otmonitor-TCP-opt-in-via-UI-toggle.md │ ├── task-527 - feat-2.0.0-port-legacy-port-25238-opt-in-toggle-from-TASK-526-with-ESP32-OTDirect-considerations.md │ ├── task-531 - Restore-backward-compatible-bare-topic-for-gateway-source-HA-entities-dev.md │ ├── task-534 - Fix-DHW-setpoint-shows-HA-initial-value-43°C-and-DHW-temperature-unknown-in-HA-via-MQTT.md │ ├── task-535 - Docs-fix-duplicate-HA-entities-after-firmware-upgrade-—-stale-retained-MQTT-discovery-topics.md │ ├── task-536 - Add-dump-debug-info-command-to-debug-menu.md │ ├── task-537 - Port-TASK-536-debug-dump-to-ESP32-2.0.0-branch.md │ ├── task-538 - Drop-gateway-MQTT-sub-topic-canonical-entity-replaces-_gateway-HA-discovery.md │ ├── task-538 - Fix-GWR-stuck-in-command-queue-causes-infinite-PIC-reset-loop.md │ ├── task-539 - feat-2.0.0-port-TASK-538-—-drop-gateway-MQTT-sub-topic-canonical-entity-replaces-_gateway-HA-discovery.md │ ├── task-540 - Add-HA-discovery-for-diagnostic-MQTT-topics-otgw-firmware-stats-reboot_count-etc..md │ ├── task-541 - feat-2.0.0-port-TASK-540-—-add-HA-discovery-for-diagnostic-MQTT-topics.md │ ├── task-542 - Fix-SimpleTelnet-OpenTherm-OTGWSerial-submodules-unregistered-in-.gitmodules-feature-dev-2.0.0.md │ ├── task-543 - feat-2.0.0-HA-discovery-for-SAT-OTDirect-user-facing-topics.md │ ├── task-545 - Compact-telnet-welcome-banner-with-diagnostic-snapshot-all-toggles-1.5.x.md │ ├── task-546 - feat-2.0.0-port-TASK-534-DHW-climate-discovery-initial-fallback-removal.md │ ├── task-547 - Fix-Services-unreachable-after-WiFi-reconnect.md │ ├── task-548 - Feature-Static-IP-address-settings.md │ ├── task-549 - Override-side-TSet-TrSet-routing-split-thermostat-vs-boiler-MQTT-publication-during-gateway-override.md │ ├── task-551 - ADR-070-MQTT-source-topic-sibling-suffix-shape-supersedes-ADR-068-refines-ADR-069.md │ ├── task-552 - Implement-ADR-070-switch-to-sibling-suffix-MQTT-source-topics-drop-base-suppression.md │ ├── task-553 - fixmqtt-add-threshold-hysteresis-deadband-K-ticks-to-drip-mode-transitions-to-stop-~60-90s-thrash.md │ ├── task-556 - featmqtt-flip-discovery-topic-shape-to-sibling-suffix-implements-ADR-071-supersedes-ADR-070-carve-out.md │ ├── task-558 - Route-force-discovery-through-drip-publisher-add-maxBlock-to-throttle-warnings.md │ ├── task-559 - Enforce-prerelease-bump-on-firmware-touching-commits-hook-helper-CLAUDE.md.md │ ├── task-560 - Enforce-prerelease-bump-on-firmware-touching-commits-hook-helper-CLAUDE.md.md │ ├── task-561 - fix-ADR-066-source-topic-gate-uses-wrong-enum-family-—-Write-Ack-flapping.md │ ├── task-571 - fixmqtt-flip-MsgID-1-TSet-bSlaveEchoesValuefalse-—-heat-pump-non-echo-flap.md │ ├── task-572 - fixmqtt-HA-discovery-friendly-name-uses-spaces-not-underscores.md │ ├── task-573 - fixmqtt-normalise-HA-discovery-friendly-name-strings-—-split-camelCase-uppercase-acronyms-drop-typos.md │ ├── task-575 - docs-update-documentation-for-changes-since-v1.4.1.md │ ├── task-576 - feat-add-CHANGELOG.md-Keep-a-Changelog-and-integrate-into-release-workflow.md │ ├── task-577 - Pure-JIT-MQTT-discovery-—-publish-OT-configs-only-when-MsgID-received.md │ ├── task-578 - feat-2.0.0-port-TASK-577-—-Pure-JIT-MQTT-discovery-for-feature-branch.md │ ├── task-588 - fixsat-wire-sat-curve_recommendation_attributes-to-HA-discovery-json_attributes_topic-or-remove-orphaned-publish.md │ ├── task-589 - fixsat-remove-or-wire-orphaned-sat-climate_attributes-JSON-publish-512-byte-static-buffer.md │ ├── task-590 - fixsat-remove-or-wire-orphaned-sat-pressure_health_attr-JSON-publish.md │ ├── task-596 - docs-update-documentation-for-changes-since-v1.5.0-fix.md │ └── task-86 - Fix-Max-CH-setpoint-shows-0°C-in-HA-Boiler-entity.md ├── bin/ │ └── bump-prerelease.sh ├── build.bat ├── build.py ├── build.sh ├── commits.txt ├── config.py ├── deep-research-report_arduino_core_3.1.2_reboot_issue_after_OTA.md ├── docs/ │ ├── BREAKING_CHANGES.md │ ├── adr/ │ │ ├── ADR-001-esp8266-platform-selection.md │ │ ├── ADR-002-modular-ino-architecture.md │ │ ├── ADR-003-http-only-no-https.md │ │ ├── ADR-004-static-buffer-allocation.md │ │ ├── ADR-005-websocket-real-time-streaming.md │ │ ├── ADR-006-mqtt-integration-pattern.md │ │ ├── ADR-007-timer-based-task-scheduling.md │ │ ├── ADR-008-littlefs-configuration-persistence.md │ │ ├── ADR-009-progmem-string-literals.md │ │ ├── ADR-010-multiple-concurrent-network-services.md │ │ ├── ADR-011-external-hardware-watchdog.md │ │ ├── ADR-012-pic-firmware-upgrade-via-web.md │ │ ├── ADR-013-arduino-framework-over-esp-idf.md │ │ ├── ADR-014-dual-build-system.md │ │ ├── ADR-015-ntp-acetime-time-management.md │ │ ├── ADR-016-opentherm-command-queue.md │ │ ├── ADR-017-wifimanager-initial-configuration.md │ │ ├── ADR-018-arduinojson-data-interchange.md │ │ ├── ADR-019-rest-api-versioning-strategy.md │ │ ├── ADR-020-dallas-ds18b20-sensor-integration.md │ │ ├── ADR-021-s0-pulse-counter-interrupt-architecture.md │ │ ├── ADR-022-gpio-output-bit-flag-control.md │ │ ├── ADR-023-filesystem-explorer-http-api.md │ │ ├── ADR-024-debug-telnet-command-console.md │ │ ├── ADR-025-safari-websocket-connection-management.md │ │ ├── ADR-026-conditional-javascript-cache-busting.md │ │ ├── ADR-027-version-mismatch-warning-system.md │ │ ├── ADR-028-file-streaming-over-loading.md │ │ ├── ADR-029-simple-xhr-ota-flash.md │ │ ├── ADR-030-heap-memory-monitoring-emergency-recovery.md │ │ ├── ADR-031-two-microcontroller-coordination-architecture.md │ │ ├── ADR-032-no-authentication-local-network-security.md │ │ ├── ADR-033-dallas-sensor-custom-labels-graph-visualization.md │ │ ├── ADR-034-non-blocking-modal-dialogs.md │ │ ├── ADR-035-restful-api-compliance-strategy.md │ │ ├── ADR-036-boot-sequence-ordering.md │ │ ├── ADR-037-gateway-mode-detection.md │ │ ├── ADR-038-opentherm-data-flow-pipeline.md │ │ ├── ADR-039-otgraph-real-time-charting.md │ │ ├── ADR-040-mqtt-source-specific-topics.md │ │ ├── ADR-041-jit-ha-discovery.md │ │ ├── ADR-042-streaming-json-no-arduinojson.md │ │ ├── ADR-043-reset-pattern-wifi-recovery.md │ │ ├── ADR-044-global-state-header-definition-pattern.md │ │ ├── ADR-045-ps1-print-summary-parsing.md │ │ ├── ADR-046-ps1-summary-translation-shared-publish-helpers.md │ │ ├── ADR-047-nonblocking-wifi-reconnect.md │ │ ├── ADR-048-nonblocking-webhook-state-machine.md │ │ ├── ADR-049-string-prohibition-protocol-paths.md │ │ ├── ADR-050-centralized-api-route-dispatch.md │ │ ├── ADR-051-dual-encapsulating-structs.md │ │ ├── ADR-052-mqtt-publish-eligibility-contract.md │ │ ├── ADR-053-large-feature-buffer-static-allocation.md │ │ ├── ADR-054-optional-http-basic-auth.md │ │ ├── ADR-055-webhook-outbound-http-integration.md │ │ ├── ADR-056-protected-admin-endpoint-security-and-secret-handling-contract.md │ │ ├── ADR-057-webhook-delivery-retry-and-protected-test-endpoint-policy.md │ │ ├── ADR-058-nonblocking-pic-command-response.md │ │ ├── ADR-059-ser2net-queue-awareness.md │ │ ├── ADR-060-pic-availability-guard-pattern.md │ │ ├── ADR-061-wifi-reconnect-timeout-tuning.md │ │ ├── ADR-062-retained-discovery-verification.md │ │ ├── ADR-064-time-boundary-single-caller-contract.md │ │ ├── ADR-065-otgw-pic-mqtt-subtree.md │ │ ├── ADR-066-mqtt-publish-gating-by-source-and-slave-echo.md │ │ ├── ADR-067-ha-discovery-state-reconciliation-on-ota-upgrade.md │ │ ├── ADR-068-bseparatesources-mutually-exclusive-base-and-source-variants.md │ │ ├── ADR-069-mqtt-source-topic-worldview-semantics.md │ │ ├── ADR-070-mqtt-source-topic-sibling-suffix-shape.md │ │ ├── ADR-071-mqtt-discovery-topic-sibling-suffix-shape.md │ │ ├── ADR-072-ha-discovery-friendly-name-format.md │ │ ├── ADR-073-jit-ha-discovery-smart-reconnect.md │ │ ├── ADR_DATE_EVIDENCE_EXAMPLES.md │ │ ├── ADR_DATE_VERIFICATION.md │ │ ├── ADR_VERIFICATION_REPORT.md │ │ ├── README.md │ │ └── VERIFICATION_SUMMARY.md │ ├── api/ │ │ ├── DALLAS_SENSOR_LABELS_API.md │ │ ├── MQTT-message-id-echo-audit.md │ │ ├── MQTT.md │ │ ├── README.md │ │ ├── WEBSOCKET_FLOW.md │ │ ├── WEBSOCKET_QUICK_REFERENCE.md │ │ ├── openapi-dallas-sensors.yaml │ │ └── openapi.yaml │ ├── archive/ │ │ ├── MQTT_old.md │ │ ├── RELEASE_GENERATION_GUIDE.md │ │ ├── daily-issue-report.md │ │ ├── mqttha-generator/ │ │ │ ├── README.md │ │ │ ├── generate_mqttha_data.py │ │ │ ├── generate_mqttha_progmem.py │ │ │ ├── generate_mqttha_readable.py │ │ │ └── mqttha.cfg │ │ ├── rc3-rc4-transition/ │ │ │ └── README.md │ │ └── upgrade-from-0.x.md │ ├── daily-issue-report.md │ ├── features/ │ │ ├── TEMPERATURE_SENSOR_DIAGRAM.md │ │ ├── TEMPERATURE_SENSOR_FINAL_SUMMARY.md │ │ ├── TEMPERATURE_SENSOR_GRAPH_IMPLEMENTATION.md │ │ ├── dallas-temperature-sensors.md │ │ ├── data-persistence.md │ │ ├── gateway-mode-detection.md │ │ └── webhook.md │ ├── fixes/ │ │ ├── CI_BUILD_FIX.md │ │ ├── README.md │ │ ├── SAFARI_FLASH_FIX.md │ │ ├── mqtt-auth-analysis-v0.10.3-vs-v1.0.0.md │ │ ├── mqtt-whitespace-auth-fix.md │ │ └── opentherm-v42-mqtt-breaking-changes.md │ ├── guides/ │ │ ├── BUILD.md │ │ ├── FLASH_GUIDE.md │ │ ├── MQTT_LWT.md │ │ ├── MQTT_STALE_TOPICS_CLEANUP.md │ │ ├── WEBSOCKET_LOGGING.md │ │ ├── WIFI_RECOVERY_TRIPLE_RESET.md │ │ └── browser-debug-console.md │ ├── opentherm specification/ │ │ ├── Integration homeassistant.txt │ │ ├── New OT data-ids.txt │ │ ├── OT protocol version information.txt │ │ ├── OT spec 2.3b.txt │ │ ├── OT specification 2.3b.xlsx │ │ ├── OT-specification2.3b-todo.txt │ │ ├── OT-specification2.3b.txt │ │ ├── OpenTherm-Protocol-Specification-v4.2-message-id-reference.md │ │ ├── OpenTherm-Protocol-Specification-v4.2.md │ │ └── OpenTherm-specifications.md │ ├── plan/ │ │ ├── CPP_REFACTORING_PLAN.md │ │ └── SETTINGS_STREAMING_REFACTOR_PLAN.md │ ├── process/ │ │ ├── EVALUATION.md │ │ ├── RELEASE_PROCESS.md │ │ ├── branch-hygiene-queue.csv │ │ ├── branch-hygiene-status.md │ │ ├── ps1-lean-translator-refactor-plan.md │ │ └── release-workflow.md │ ├── releases/ │ │ ├── RELEASE_GITHUB_1.3.5.md │ │ ├── RELEASE_GITHUB_1.4.1.md │ │ ├── RELEASE_GITHUB_1.5.0-beta.md │ │ ├── RELEASE_GITHUB_1.5.0.md │ │ ├── RELEASE_NOTES_1.3.5.md │ │ ├── RELEASE_NOTES_1.4.1.md │ │ ├── RELEASE_NOTES_1.5.0-beta.md │ │ ├── RELEASE_NOTES_1.5.0.md │ │ └── archive/ │ │ ├── GITHUB_RELEASE_v1.3.0.md │ │ ├── RELEASE_GITHUB_1.1.0.md │ │ ├── RELEASE_GITHUB_1.2.0.md │ │ ├── RELEASE_GITHUB_1.3.0.md │ │ ├── RELEASE_GITHUB_1.3.1.md │ │ ├── RELEASE_GITHUB_1.3.2.md │ │ ├── RELEASE_GITHUB_1.3.3.md │ │ ├── RELEASE_GITHUB_1.3.4.md │ │ ├── RELEASE_NOTES_1.0.0.md │ │ ├── RELEASE_NOTES_1.1.0.md │ │ ├── RELEASE_NOTES_1.2.0.md │ │ ├── RELEASE_NOTES_1.3.0.md │ │ ├── RELEASE_NOTES_1.3.1.md │ │ ├── RELEASE_NOTES_1.3.2.md │ │ ├── RELEASE_NOTES_1.3.3.md │ │ └── RELEASE_NOTES_1.3.4.md │ └── reviews/ │ ├── 2026-01-17_dev-rc4-analysis/ │ │ ├── ACTION_CHECKLIST.md │ │ ├── DEV_RC4_BRANCH_REVIEW.md │ │ ├── EVALUATION_QUICKREF.md │ │ ├── EVALUATION_SUMMARY.md │ │ ├── FLASH_GUIDE.md │ │ ├── HEAP_OPTIMIZATION_SUMMARY.md │ │ ├── HIGH_PRIORITY_FIXES.md │ │ ├── IMPLEMENTATION_SUMMARY.md │ │ ├── LARGE_BUFFER_ANALYSIS.md │ │ ├── LIBRARY_ANALYSIS.md │ │ ├── MERGED_BINARY_GUIDE.md │ │ ├── MQTT_STREAMING_AUTODISCOVERY.md │ │ ├── OTGWSerial_PR_Description.md │ │ ├── PIC_Flashing_Fix_Analysis.md │ │ ├── README.md │ │ ├── REVIEW_INDEX.md │ │ ├── REVIEW_SUMMARY.md │ │ ├── SENSOR_FIX_SUMMARY.md │ │ ├── SENSOR_MQTT_ANALYSIS.md │ │ └── Stream Logging.md │ ├── 2026-01-18_post-merge-final/ │ │ ├── POST_MERGE_REVIEW.md │ │ └── README.md │ ├── 2026-01-19_pr364-verification/ │ │ ├── PR_364_VERIFICATION_REPORT.md │ │ └── VERIFICATION_SUMMARY.md │ ├── 2026-01-21_filesystem-flash-robustness/ │ │ ├── FLASH_ROBUSTNESS_ANALYSIS.md │ │ ├── QUICK_REFERENCE.md │ │ └── README.md │ ├── 2026-01-23_pic-flash-update/ │ │ └── PIC_FLASH_WEBSOCKET_UPDATE.md │ ├── 2026-01-26_browser-compatibility-review/ │ │ ├── ACTION_CHECKLIST.md │ │ ├── BROWSER_COMPATIBILITY_AUDIT_2026.md │ │ ├── COMPATIBILITY_SUMMARY_2026.md │ │ ├── HIGH_PRIORITY_FIXES.md │ │ ├── README.md │ │ ├── REVIEW_INDEX.md │ │ ├── SAFARI_COMPATIBILITY_ASSESSMENT.md │ │ ├── WEBSOCKET_IMPROVEMENTS_SUMMARY.md │ │ ├── WEBSOCKET_QUICKREF.md │ │ ├── WEBSOCKET_ROBUSTNESS_ANALYSIS.md │ │ └── WEBSOCKET_VISUAL_GUIDE.md │ ├── 2026-01-27_pr384-code-review/ │ │ ├── PR384_CODE_REVIEW.md │ │ └── README.md │ ├── 2026-02-01_memory-management-bug-fix/ │ │ ├── BUG_FIX_ASSESSMENT.md │ │ ├── EXECUTIVE_SUMMARY.md │ │ ├── QUICK_REFERENCE.md │ │ └── README.md │ ├── 2026-02-04_flash-approach-assessment/ │ │ ├── EXECUTIVE_SUMMARY.md │ │ ├── FLASH_APPROACH_ASSESSMENT.md │ │ └── README.md │ ├── 2026-02-06_config-strategy-analysis/ │ │ └── CONFIG_STRATEGY_EVALUATION.md │ ├── 2026-02-11_codebase-improvements/ │ │ ├── ACTION_CHECKLIST.md │ │ ├── BACKWARDS_COMPATIBILITY_PROOF.md │ │ ├── CODEBASE_REVIEW.md │ │ ├── EXECUTIVE_SUMMARY.md │ │ └── README.md │ ├── 2026-02-13_codebase-review/ │ │ ├── CODEBASE_REVIEW.md │ │ └── README.md │ ├── 2026-02-15_opentherm-v42-compliance/ │ │ ├── OPENTHERM_V42_COMPLIANCE_PLAN.md │ │ ├── OUT_OF_SCOPE_ANALYSIS.md │ │ └── README.md │ ├── 2026-02-16_restful-api-evaluation/ │ │ ├── IMPROVEMENT_PLAN.md │ │ └── REST_API_EVALUATION.md │ ├── 2026-02-20_issue-143-source-separation/ │ │ └── ISSUE_143_OPTIONS_ANALYSIS.md │ ├── 2026-03-16_gpio-ota-postmortem/ │ │ ├── POSTMORTEM.md │ │ └── README.md │ ├── 2026-03-19_critical-review-refactoring/ │ │ └── REVIEW.md │ ├── 2026-03-20_v1.2.0-to-v1.3.0-beta-review/ │ │ ├── FIXES_APPLIED.md │ │ └── REVIEW.md │ ├── 2026-04-07_issue-525-sdk-dhcp-analysis/ │ │ └── ANALYSIS_REPORT.md │ ├── 2026-04-07_opentherm-spec-deep-audit/ │ │ ├── AUDIT_REPORT.md │ │ ├── AUDIT_REPORT_EN.md │ │ ├── AUDIT_REPORT_NL.md │ │ └── README.md │ └── 2026-04-24_v1.4.1-to-dev-handoff/ │ └── FINDINGS.md ├── evaluate.py ├── example-api/ │ ├── API_CHANGES_v1.0.0.md │ ├── api-call-responses.txt │ ├── hotwater_examples.md │ └── outside_temperature_override_examples.md ├── flash_esp.py ├── flash_otgw.bat ├── flash_otgw.sh ├── logfile.txt ├── package.json ├── plan/ │ ├── OTGW_1.5.0_Beta_11.txt │ └── process-debug-ota-filesystem-regression-1.md ├── scripts/ │ ├── README.md │ ├── autoinc-semver.py │ ├── branch-hygiene-queue.ps1 │ └── webui_launcher.py ├── src/ │ ├── OTGW-firmware/ │ │ ├── Debug.h │ │ ├── FSexplorer.ino │ │ ├── MQTTstuff.h │ │ ├── MQTTstuff.ino │ │ ├── OTGW-Core.h │ │ ├── OTGW-Core.ino │ │ ├── OTGW-ModUpdateServer-impl.h │ │ ├── OTGW-ModUpdateServer.h │ │ ├── OTGW-firmware.h │ │ ├── OTGW-firmware.ino │ │ ├── SATcontrol.ino │ │ ├── SATcycles.ino │ │ ├── SATpid.ino │ │ ├── SATpressure.ino │ │ ├── SATweather.ino │ │ ├── data/ │ │ │ ├── FSexplorer.css │ │ │ ├── FSexplorer.html │ │ │ ├── FSexplorer_dark.css │ │ │ ├── ds-tokens.css │ │ │ ├── graph.js │ │ │ ├── index.css │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ ├── index_common.css │ │ │ ├── index_dark.css │ │ │ ├── pic16f1847/ │ │ │ │ ├── diagnose.hex │ │ │ │ ├── diagnose.ver │ │ │ │ ├── gateway.hex │ │ │ │ ├── gateway.ver │ │ │ │ ├── interface.hex │ │ │ │ └── interface.ver │ │ │ ├── pic16f88/ │ │ │ │ ├── diagnose.hex │ │ │ │ ├── diagnose.ver │ │ │ │ ├── gateway-4.3.hex │ │ │ │ ├── gateway-4.3.ver │ │ │ │ ├── gateway.hex │ │ │ │ ├── gateway.ver │ │ │ │ ├── interface.hex │ │ │ │ └── interface.ver │ │ │ ├── settings.ini │ │ │ └── version.hash │ │ ├── handleDebug.ino │ │ ├── helperStuff.ino │ │ ├── jsonStuff.ino │ │ ├── mqtt_configuratie.cpp │ │ ├── mqtt_discovery_verify.cpp │ │ ├── mqtt_discovery_verify.h │ │ ├── networkStuff.h │ │ ├── networkStuff.h.tmp │ │ ├── networkStuff.ino │ │ ├── outputs_ext.ino │ │ ├── restAPI.ino │ │ ├── s0PulseCount.ino │ │ ├── safeTimers.h │ │ ├── sensors_ext.ino │ │ ├── settingStuff.ino │ │ ├── updateServerHtml.h │ │ ├── version.h │ │ ├── versionStuff.ino │ │ ├── webSocketStuff.ino │ │ └── webhook.ino │ ├── OTGW-firmware$f │ └── libraries/ │ └── OTGWSerial/ │ ├── OTGWSerial.cpp │ └── OTGWSerial.h ├── test_flash_automation.py ├── tests/ │ ├── README.md │ └── test_dallas_address.cpp └── tools/ └── opentherm_v42_spec_audit.py