Skip to content

Correct forward-pointer entries in retirement guide - #1047

Draft
ideaship wants to merge 2 commits into
mainfrom
docs/fix-forward-pointer-entries
Draft

Correct forward-pointer entries in retirement guide#1047
ideaship wants to merge 2 commits into
mainfrom
docs/fix-forward-pointer-entries

Conversation

@ideaship

@ideaship ideaship commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Four of the seven entries under "Version pointers that move forward
(not retirement)" no longer matched the repositories they describe, and the
section gave the reader no way to tell its own two cases apart. Two commits:
the entries themselves, then the removal checklist on the other side of the
same distinction.

Correct forward-pointer entries in retirement guide

Checked every entry against the current sources.

  • testbed does not keep version defaults in config/scripts/*.sh — that
    path does not exist. More importantly, the entry pointed at values that
    govern nothing. What governs is openstack_version /
    openstack_version_next in .zuul.yaml, backed by the | default(...)
    values in playbooks/*.yml. Everything below that is shadowed: the playbook
    passes VERSION_OPENSTACK to make, make writes openstack_version into
    the generated tfvars on both branches of its conditional (so
    terraform/variables.tf's default is unreachable), and every caller of the
    upgrade scripts passes all four arguments (so their ${3:-…} fallbacks are
    unreachable too). Anyone following the old entry would have edited inert
    literals and left the real pointer untouched.
  • release — the origin/stable/<version> map in src/git-diff-log.py is
    pinned at 2023.1 for every entry and has not advanced with the releases, so
    it is not in fact maintained as a forward pointer. Say it needs checking
    before being treated as one; whether the script is still used was not
    established here.
  • defaults — the entry named one conditional as though it were the only
    one. all/002-images-kolla.yml gates image selection in more than one place,
    and all/099-kolla.yml gates enablement and other settings the same way. All
    enumerate a set of versions, so none is a pointer that advances.
  • ansible-collection-servicesopenstackclient_version is derived from
    openstack_version rather than pinned, so there is nothing to advance. The
    entry stays, since the section's purpose is to list what must not be mistaken
    for a retirement target, but it now says it is derived.

openstack-ironic-images, zuul-jobs and container-images were checked and
are accurate as written.

Two rules of thumb are added ahead of the list, because four wrong entries
out of seven suggests the reader needs a test rather than a longer list: does the
reference name one version or a set, and which layer actually supplies the
value. ansible-collection-services is cited as the shape to aim for — a value
derived from a single source cannot go stale.

Cover version-keyed logic in the removal checklist

The removal checklist covered each repository's per-version build matrix and
nothing else, so it read as complete while leaving behind logic that is also
keyed on the release. The testbed row went further and said "verification
only", which is wrong.

That gate is not in one place. The same case selecting the key-value store
appears in testbed/scripts/include.sh and metalbox/scripts/include.sh as
byte-identical copies of a valkey_or_redis() helper, again in
container-image-kolla-ansible/scripts/test.sh as a hand-written variant that
sets several variables instead of echoing a name, and once more declaratively in
defaults as enable_redis / enable_valkey. No shared library, so the copies
can only be kept in step by editing each one — hence naming them in the rows
that own them.

defaults gets a row of its own. The forward-pointer section sends the reader
here for the gates in all/002-images-kolla.yml and all/099-kolla.yml, and
until now the checklist did not mention the repository at all — so that
cross-reference led nowhere. The row also covers all/010-<version>.yml, a
backward-compat layer extending the 001 mirror for an older supported release:
its own header says to delete it when that release leaves the range, which makes
it a retirement step recorded only in a comment. Two rows now describe
repositories with no build matrix, so the sentence introducing the table no
longer claims they all have one.

A note covers the pattern rather than just this instance: a gate naming a
retired release is dead, not broken, so no build fails to prompt the cleanup —
which is how a victoria gate survived years in a defaults image selection. A
retirement is therefore incomplete until nothing still names the retired release,
and the rows are the control.

The note deliberately says nothing about which of this a drift check can
find
, which also makes this PR independent of the drift-checker work. Coverage
is a property of the checker at a point in time: asserting it here would be wrong
on merge in one order, and would need a follow-up docs change every time the
checker gains or loses a check. Same reason this series states rules instead of
inventorying current values. The checker reports its own findings with their own
remediation text; this guide's job is to say which files to edit while doing the
work. So this PR and osism/release#2642 can merge in either order, and no
follow-up docs update is owed when a gate check lands.

Deliberately not included

No inventory of current values. An earlier draft recorded which defaults are
stale and at what version — that rots on the next release and documents defects
instead of fixing them. The rules are stated so they do not need re-auditing.
Nor are any repositories changed here: the stale literals turned out to be
shadowed on every automated path, so there is no live bug to fix, only a
maintainability smell that is out of scope for a docs correction.

Assisted-by: Claude:claude-opus-5
Signed-off-by: Roger Luethi luethi@osism.tech


Stack created with GitHub Stacks CLIGive Feedback 💬

@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown

MegaLinter analysis: Error

Descriptor Linter Files Fixed Errors Warnings Elapsed time
✅ ACTION actionlint 5 0 0 0.07s
✅ JSON jsonlint 4 0 0 0.11s
✅ JSON prettier 4 0 0 0.48s
✅ JSON v8r 4 0 0 7.81s
❌ MARKDOWN markdownlint 158 8 0 2.35s
❌ MARKDOWN markdown-table-formatter 158 1 0 0.4s
✅ REPOSITORY betterleaks yes no no 0.7s
✅ REPOSITORY checkov yes no no 19.99s
✅ REPOSITORY git_diff yes no no 0.08s
✅ REPOSITORY secretlint yes no no 1.97s
✅ REPOSITORY trufflehog yes no no 4.65s
✅ SPELL codespell 168 0 0 0.63s
⚠️ SPELL lychee 168 1 0 27.73s
✅ YAML prettier 6 0 0 0.43s
✅ YAML v8r 6 0 0 6.95s
✅ YAML yamllint 6 0 0 0.64s

Detailed Issues

❌ MARKDOWN / markdown-table-formatter - 1 error
1 files contain markdown tables to format:
- docs/guides/developer-guide/retiring-openstack-releases.md
❌ MARKDOWN / markdownlint - 8 errors
docs/guides/developer-guide/retiring-openstack-releases.md:181:451 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
docs/guides/developer-guide/retiring-openstack-releases.md:181:536 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
docs/guides/developer-guide/retiring-openstack-releases.md:183:451 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
docs/guides/developer-guide/retiring-openstack-releases.md:183:536 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
docs/guides/developer-guide/retiring-openstack-releases.md:184:451 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
docs/guides/developer-guide/retiring-openstack-releases.md:184:536 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
docs/guides/developer-guide/retiring-openstack-releases.md:185:486 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
docs/guides/developer-guide/retiring-openstack-releases.md:185:571 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
⚠️ SPELL / lychee - 1 error
📝 Summary
---------------------
🔍 Total..........900
🔗 Unique.........726
✅ Successful.....844
⏳ Timeouts.........4
🔀 Redirected.......4
👻 Excluded........52
❓ Unknown..........0
🚫 Errors...........0
⛔ Unsupported......0

Errors in docs/guides/user-guide/openstack/migration-vmware-esxi.md
[TIMEOUT] https://www.openstack.org/vmware-migration-to-openstack/ (at 20:1) | Request timed out

Errors in docs/release-notes/osism-10.md
[TIMEOUT] https://gateway-api.sigs.k8s.io/ (at 729:3) | Request timed out

Errors in docs/release-notes/osism-7.md
[TIMEOUT] https://www.openstack.org/software/openstack-bobcat (at 978:38) | Request timed out

Errors in docs/release-notes/osism-8.md
[TIMEOUT] https://www.openstack.org/software/openstack-caracal (at 223:38) | Request timed out

Hint: Followed 4 redirects. You might want to consider replacing redirecting URLs with the resolved URLs. Use verbose mode (`-v`/`-vv`) to see redirection details.

Notices

📣 MegaLinter 9.5.0 is out! Discover the new features and security recommendations in the release announcement. (Skip this info by defining SECURITY_SUGGESTIONS: false)

See detailed reports in MegaLinter artifacts

Your project could benefit from a custom flavor, which would allow you to run only the linters you need, and thus improve runtime performances. (Skip this info by defining FLAVOR_SUGGESTIONS: false)

  • Documentation: Custom Flavors
  • Command: npx mega-linter-runner@9.6.0 --custom-flavor-setup --custom-flavor-linters ACTION_ACTIONLINT,JSON_JSONLINT,JSON_V8R,JSON_PRETTIER,MARKDOWN_MARKDOWNLINT,MARKDOWN_MARKDOWN_TABLE_FORMATTER,REPOSITORY_CHECKOV,REPOSITORY_GIT_DIFF,REPOSITORY_BETTERLEAKS,REPOSITORY_SECRETLINT,REPOSITORY_TRUFFLEHOG,SPELL_LYCHEE,SPELL_CODESPELL,YAML_PRETTIER,YAML_YAMLLINT,YAML_V8R

MegaLinter is graciously provided by OX Security
Show us your support by starring ⭐ the repository

@berendt berendt moved this from New to In progress in Human Board Aug 3, 2026
@ideaship
ideaship force-pushed the docs/fix-forward-pointer-entries branch from d1f4849 to 15f4fc2 Compare August 4, 2026 12:03
Four of the seven entries under "Version pointers that move forward
(not retirement)" no longer matched the repositories they describe, and the
section gave the reader no way to tell its own two cases apart. Checked each
entry against the current sources.

- testbed does not keep version defaults in config/scripts/*.sh; that path
  does not exist. What governs is openstack_version /
  openstack_version_next in .zuul.yaml, backed by the | default(...) values
  in playbooks/*.yml. terraform/ and scripts/ do carry their own version
  defaults, but the playbook passes VERSION_OPENSTACK to make, make writes
  openstack_version into the generated tfvars on both branches of its
  conditional, and every caller of the upgrade scripts passes all four
  arguments -- so those inner defaults are shadowed on every automated path
  and are not pointers to advance. Say so, rather than listing them as if
  editing them had an effect.
- The per-component origin/stable/<version> map in the release repository's
  src/git-diff-log.py is pinned at 2023.1 throughout and has not been
  advanced with the releases, so it is not in fact maintained as a forward
  pointer. Note that it needs checking before it is treated as one; whether
  the script is still used was not established here.
- The defaults entry named one conditional as though it were the only one.
  all/002-images-kolla.yml gates image selection in more than one place and
  all/099-kolla.yml gates enablement and other settings the same way. All of
  them enumerate a set of versions, so none is a pointer that advances;
  point at the retirement section instead of describing them as pointers
  that happen to belong elsewhere.
- openstackclient_version in ansible-collection-services is derived from
  openstack_version rather than pinned, so there is nothing to advance.
  Keep the entry, since the point of the section is to list what must not
  be mistaken for a retirement target, but state that it is derived.

The openstack-ironic-images, zuul-jobs and container-images entries were
checked and are accurate as written.

Two rules of thumb are added ahead of the list, because four wrong entries
out of seven is a sign the reader needs a test rather than a longer list:
whether the reference names one version or a set, and which layer actually
supplies the value. Both are stated as rules and not as an inventory of
current values, so they do not need re-auditing every release --
ansible-collection-services is cited as the shape to aim for, since a value
derived from a single source cannot go stale.

Assisted-by: Claude:claude-opus-5
Signed-off-by: Roger Luethi <luethi@osism.tech>
@ideaship
ideaship force-pushed the docs/fix-forward-pointer-entries branch 2 times, most recently from dd0b4bd to 9a6ec3d Compare August 4, 2026 13:48
The removal checklist covered each repository's per-version build matrix and
nothing else, so it read as complete while leaving behind logic that is also
keyed on the release. The testbed row went further and said "verification
only", which is wrong: testbed carries a per-version case statement selecting
the key-value store service.

That gate is not one place. The same case appears in testbed and metalbox as
byte-identical copies of a valkey_or_redis() helper, again in
container-image-kolla-ansible scripts/test.sh as a hand-written variant setting
several variables rather than echoing a name, and once more declaratively in
the defaults repository as enable_redis / enable_valkey. There is no shared
library, so the copies can only be kept in step by editing each one. Name them
in the rows that own them, so following the checklist reaches all of them.

defaults gets a row of its own. The forward-pointer section sends the reader
here for the version gates in all/002-images-kolla.yml and all/099-kolla.yml,
and until now the checklist did not mention the repository at all, so that
cross-reference led nowhere. The row also covers all/010-<version>.yml, a
backward-compat layer that extends the 001 mirror for an older supported
release: its own header says to delete it when that release leaves the range,
which makes it a retirement step recorded only in a comment.

Since two rows now describe repositories with no build matrix, the sentence
introducing the table no longer claims they all have one.

Add a note on the pattern rather than only the instance. A gate naming a
retired release is dead, not broken: no build fails, so nothing prompts the
cleanup, which is how a victoria gate survived years in a defaults image
selection. The note therefore frames a retirement as incomplete until nothing
names the retired release, and points at the rows as the control.

The note deliberately says nothing about which of this a drift check can find.
Coverage is a property of the checker at a point in time, so asserting it here
would either be wrong on merge or need a follow-up documentation change every
time the checker gains or loses a check -- the same reason this series states
rules instead of inventorying current values. The checker reports its own
findings with their own remediation text; this guide's job is to say which files
to edit while doing the work.

Assisted-by: Claude:claude-opus-5
Signed-off-by: Roger Luethi <luethi@osism.tech>
@ideaship
ideaship force-pushed the docs/fix-forward-pointer-entries branch from 9a6ec3d to 252aee9 Compare August 4, 2026 14:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In progress

Development

Successfully merging this pull request may close these issues.

3 participants