diff options
| author | WebX11 SysOp <darkmotox11@gmail.com> | 2026-11-05 20:40:17 +0100 |
|---|---|---|
| committer | WebX11 SysOp <darkmotox11@gmail.com> | 2026-11-05 20:40:17 +0100 |
| commit | 36d45b1f4a9f317843c824946d8cf40a02f9412a (patch) | |
| tree | 7c23a2c6a73b83f12cdfd8666323479b8bdcb961 | |
| parent | 5d1cb2c5778b8ac5f0347aac1b55a1d927212841 (diff) | |
fix(changelog): stop prepending the preamble on every run
write_md() put the H1 + description inside the generated body and also kept
old[:m.start()], so each regeneration added another copy: 44 runs left 44 H1s and
pushed the first release to line 179. Only the region between the markers is
generated now, an existing file with N copies is collapsed to one, and an assert
refuses to write a file containing two generated regions (proven RED by injecting
a duplicate). Regenerated: 83 entries, 185 commits, first heading v4.6.146 (was
v4.6.135 - the file had not been committed since 2026-11-02).
| -rw-r--r-- | CHANGELOG.md | 126 | ||||
| -rw-r--r-- | scripts/build-changelog.py | 46 |
2 files changed, 75 insertions, 97 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 86862da..95f98e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,125 +2,81 @@ Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog - -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +<!-- generated:start --> -# newOS4 changelog +## v4.6.146 — 2026-11-05 -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. - -# newOS4 changelog +_Touches modules (3), README.md (2), main.html (1), LICENSE (1) · docs 2, project 1_ -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +- `One dashboard — port billing/API keys, 301 the duplicate` `8bf70f9` +- `Publishable README, MIT licence, security policy` `447be4b` +- `Clone instructions in the README; publisher sets gitweb owner/description` `350e1d0` -# newOS4 changelog +## v4.6.145 — 2026-11-02 -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +_Touches modules (2), main.html (1) · fix 1_ -# newOS4 changelog +- `Stop offering a Telegram widget where it cannot work` `532e2ff` -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +## v4.6.144 — 2026-11-02 -# newOS4 changelog +_Touches modules (3), main.html (1) · fix 1_ -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +- `One session writer for every login path; expire dead credentials` `2421eb4` -# newOS4 changelog +## v4.6.143 — 2026-11-02 -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +_Touches modules (6), main.html (1) · fix 1_ -# newOS4 changelog +- `Read_file pages were silently truncated; delegation no longer invents "completed"` `b380ec8` -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +## v4.6.141 — 2026-11-02 -# newOS4 changelog +_Touches modules (7), main.html (1) · fix 1_ -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +- `Memory-graph loads stop rewriting user data; unknown sizes say unknown` `8eaf114` -# newOS4 changelog +## v4.6.140 — 2026-11-02 -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +_Touches modules (6), main.html (1) · fix 1_ -# newOS4 changelog +- `WebDAV listing sizes + pull, and five MemoryGraph defects` `e639c2d` -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +## v4.6.139 — 2026-11-02 -# newOS4 changelog +_Touches modules (4), main.html (1) · fix 1_ -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +- `Delegated agent runs no longer serialise; a waiter can't steal a lock` `7491c34` -# newOS4 changelog +## v4.6.138 — 2026-11-02 -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +_Touches modules (4), main.html (1) · fix 1, review 1_ -# newOS4 changelog +- `Chat() threw on every tool-using turn and never returned its answer` `8a9333b` +- `Guard chat()'s return and tool-turn survival` `af28b5b` -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +## v4.6.137 — 2026-11-02 -# newOS4 changelog +_Touches modules (6), help.html (1), main.html (1), modules-index.json (1) · release 1_ -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +- `Configurable tool budgets, per-model defaults, real tool telemetry` `32608bc` -# newOS4 changelog +## v4.6.136 — 2026-11-02 -Generated from git history by `scripts/build-changelog.py` — do not edit by hand between the markers. +_Touches scripts (4), modules (3), main.html (1) · release 4_ -<!-- generated:start --> +- `No model-class gate; free allowance becomes $0.10/day` `a7cbc19` +- `R5 stale-artefact rule + dashboard queues a decision once` `89910fd` +- `Ingest report-like chat messages into the feedback queue` `b7fef93` +- `Chat plane on the dashboard + honest triage ranking` `9f0b042` -## v4.6.135 — 2026-10-29 +## v4.6.135 — 2026-10-30 -_Touches modules (6), course (1), help.html (1), main.html (1) · release 1_ +_Touches modules (6), data (6), course (2), help.html (1) · release 1, docs 1, project 1_ - `Register `test` / `[` so chains decide locally instead of asking a model (v4.6.135)` `4472c81` +- `Regenerate after the metering and shell commits (73 entries)` `4fca1c9` +- `Untrack cron/API runtime state, keep it on disk` `8555cd4` ## v4.6.132 — 2026-10-29 diff --git a/scripts/build-changelog.py b/scripts/build-changelog.py index 1b00a5e..8973761 100644 --- a/scripts/build-changelog.py +++ b/scripts/build-changelog.py @@ -275,21 +275,31 @@ def write_page(page): return len(new) +PREAMBLE = ('# newOS4 changelog\n\n' + 'Generated from git history by `scripts/build-changelog.py` — do not edit by hand ' + 'between the markers.\n\n') +# The preamble is emitted EXACTLY once. Before 2026-11-05 it was part of the generated body *and* +# old[:m.start()] was preserved on top of it, so each run prepended another copy: 44 runs left 44 +# copies of the H1 at the top of the file (and pushed the real first release from line 6 to 179). +PREAMBLE_RE = re.compile(re.escape('# newOS4 changelog') + + r'\n\nGenerated from git history by `scripts/build-changelog\.py` — ' + r'do not edit by hand between the markers\.\n+') + + def write_md(page, rows): - """App-side Keep-a-Changelog history; generated region is delimited.""" - out = ['# newOS4 changelog', '', - 'Generated from git history by `scripts/build-changelog.py` — do not edit by hand ' - 'between the markers.', '', '<!-- generated:start -->', ''] + """App-side Keep-a-Changelog history; only the region between the markers is generated.""" + region = ['<!-- generated:start -->', ''] for entry in page['entries']: - out.append('## %s — %s' % (entry['version'], entry['date'])) - out.append('') + region.append('## %s — %s' % (entry['version'], entry['date'])) + region.append('') if entry['note']: - out.extend(['_' + re.sub(r'<[^>]+>', '', entry['note']) + '_', '']) + region.extend(['_' + re.sub(r'<[^>]+>', '', entry['note']) + '_', '']) for item in entry['items']: - out.append('- ' + re.sub(r'<[^>]+>', '`', item).replace('``', '`').replace('``', '`')) - out.append('') - out.extend(['<!-- generated:end -->', '']) - body = '\n'.join(out) + region.append('- ' + re.sub(r'<[^>]+>', '`', item).replace('``', '`').replace('``', '`')) + region.append('') + region.extend(['<!-- generated:end -->', '']) + region_text = '\n'.join(region) + if os.path.exists(MD): with open(MD, encoding='utf-8') as fh: old = fh.read() @@ -299,7 +309,19 @@ def write_md(page, rows): # hand-edit added, and silently dropping it is worse than failing loudly. raise SystemExit('CHANGELOG.md exists but has no generated:start/end markers - ' 'refusing to overwrite it') - body = old[:m.start()] + body + old[m.end():] + head, tail = old[:m.start()], old[m.end():] + copies = len(PREAMBLE_RE.findall(head)) + if copies != 1: + rest = PREAMBLE_RE.sub('', head).strip('\n') + head = PREAMBLE + (rest + '\n\n' if rest else '') + print('changelog: collapsed %d preamble copies in CHANGELOG.md' % copies) + body = head + region_text + tail + else: + body = PREAMBLE + region_text + # Guard against the 2026-11-05 regression class: the generated region may appear exactly once. + # The old code concatenated the preamble into `body` and kept old[:m.start()] as well, so every + # run appended another copy — 44 runs, 44 H1s, and the first release pushed to line 179. + assert body.count('<!-- generated:start -->') == 1, 'CHANGELOG.md would contain a duplicated region' write_atomic(MD, body) return len(body) |