Skip to content

docs: drop stamps from pointer records (docs) - #15463

Open
kyle-sexton wants to merge 10 commits into
mainfrom
docs/drop-pointer-stamps-docs
Open

kyle-sexton wants to merge 10 commits into
mainfrom
docs/drop-pointer-stamps-docs

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Nov 11, 2026 •

Copy link
Copy Markdown
Member

No related issue: batch 1 (docs/) of the sweep that follows #15449, which made pointer records stamp-free; it has no tracking issue.

Summary

Under upstream-drift 5.0.0, a pointer record carries no as-of date and no recheck trigger, and only a
stored value keeps them. This PR sweeps docs/**/*.md. It leaves out CHANGELOG.md files,
docs/standards/ (which is managed) and the generated docs/native-surfaces.md.

Fix

  • Pointer records lose both stamps. The decision sentence and the anchored link stay.
  • Recorded decisions with a named trigger lose only the as-of date. These are in
    config-cascade deviations, ecosystem-commands, rendered-views, routing-as-data team layer,
    shared-surface-instruction-governance, loop-lane, hook-observability and plugin-philosophy.
  • Kept unchanged:
    • Stored values: restated upstream behavior, Claim/Basis records, probes, version gates,
      measured figures and hashes.
    • All ADRs, because history is never rewritten.
    • All docs/upstream/ records, which are stored values.
    • Tables with an As of column (structured data).
  • Anchors added, each confirmed against the live page:
    • execution-target: the cloud environments sections. The cloud launch pointer now links
      #start-a-cloud-session-from-your-terminal, because the old #from-terminal-to-cloud
      anchor no longer exists.
    • workspace-environment: three cloud-environments sections, two hooks sections and Compose
      #ports.
  • Shared copies: sync-shared-copies.sh regenerated the plugin copies of the standards and
    plugin-reconfiguration contracts across 33 plugins. Each of those plugins gets one patch
    fragment.
  • Contract changelogs: execution-target (2.0.1), workspace-environment (1.0.1) and
    routing-as-data (2.0.1) each get a patch entry, because their Versioning sections ask for one
    for a wording change. The other touched contracts' Versioning sections do not ask for one.

Second pass: owner decision D26

D26 narrows what counts as a stored value. A record keeps its stamps only when it holds a number or
string copied or measured from upstream: a default, limit, version gate, price, error string,
measured figure, hash or pinned SHA. Every other stamp outside ADRs is removed. That covers observed
behavior with no value, "no docs page covers X" notes, and last-researched dates. A recorded
decision keeps its named trigger and drops only its as-of date. A docs/upstream record keeps its
stamps only when it stores a figure, version, hash or pinned SHA. Two files are left for a separate
PR: docs/contracts/upstream-drift/README.md and docs/review/skills-and-agents.md.

The second pass also adds patch entries to authoring-formats (1.0.7) and native-references (3.6.1).
execution-target's 2.0.1 entry now covers the routine-triggers record. The mattpocock-skills C22
pointer now links #control-who-invokes-a-skill, an anchor checked against the live page.

Restored stamps

I re-scanned every removed stamp's record for a probe or measurement result and found five. Under
D26 they are stored values, so their as-of dates and triggers are back unchanged:

  • loop-lane: the --permission-prompts host run on 2.1.312.
  • mod-authoring: the session-type probe on 2.1.288, with its not-probed note.
  • plugin-philosophy: the --scope local observation on 2.1.289.
  • migration-playbook: the --plugin-dir bullet with the v2.1.128 zip gate.
  • permission-rule-hygiene: the auto-mode record with its v2.1.284 source conflict.

A second correction restored the stamps on records that state an upstream exit code or another
upstream number:

  • hook-observability: four exit-code pointers.
  • hook-input-rewriting: the record comparing a JSON deny with exit 2.
  • extensibility smoke tests: the already installed string and its claude plugin configure
    pointer.
  • finding-your-unknowns: the HTTP 402 record and the N = 1,372 record.
  • the automations post: its shared stamp, because the page stores the post's figures.

Other removals stay. In those records a version appears only as the build the page was read on, or
the number is an issue number or one of our own constants.

Stamp counts

Counted by script, one count per matching line:

Scope Before After pass 1 After D26 and restores
docs/ total 442 321 211
ADRs (untouched) 21 21 21
docs/upstream 127 127 87
Other docs 294 173 103

The 103 lines left in other docs include 10 in upstream-drift, which this PR leaves alone, and lines
that only define the terms.

Restated behavior to cut

The stamp is removed and the prose stays. Each passage restates upstream behavior and should be cut
later. Line numbers are approximate.

  • docs/cloud-sessions.md:286: what the reloadSkills section names.
  • docs/contracts/authoring-formats/README.md:78-86: mermaid C4 is not stable and has no landscape type.
  • docs/contracts/execution-target/README.md:232: the routine connector default.
  • docs/contracts/hook-input-rewriting/README.md:58: auto mode refuses rewritten input.
  • docs/contracts/hook-telemetry/README.md:55: settings env values get no shell expansion.
  • docs/contracts/permission-rule-hygiene/README.md:30: the auto-mode start default.
  • docs/contracts/permission-rule-hygiene/README.md:260: bash is not a stripped wrapper.
  • docs/conventions/gather-block/README.md:22-30: the worktree isolation checks.
  • docs/migration-playbook.md:689-694: the trust rule, and cloud sessions not loading repo plugins.
  • docs/out-of-scope/agent-run-artifact-attestation.md:20: actions/attest predicates.
  • hook-observability:
    • :70: no file-change surface.
    • :88: exit-2 delivers the reason.
    • :138: fork inheritance.
    • :145: stderr on an exit-0 skip.
    • :191: classifierContext.
    • :212: no OTEL_* reaches hooks.
  • loop-lane:
    • :721: an unlisted header variable becomes empty.
    • :836: classifier fallback.
    • :1114: no session-total token field.
    • :1196: fork context.
    • :1222: /loop is bundled.
    • :1230: jittered cron.
    • :1245: a fixed loop runs until stopped.
    • :1293: --permission-prompts none.
  • mod-authoring:
    • :99: a mod overrides settings hooks.
    • :114: the mod switches and plugin test policy.
    • :147: $.process and session.start after /clear.
    • :176: troubleshooting behavior.
  • plugin-philosophy (line numbers before the D26 pass):
    • 243-253: the bare alias.
    • 258: no collisions.
    • 455-470: pluginConfigs and value storage.
    • 1009: local settings in a worktree.
    • 1097: fork inheritance.
    • 1166: the test-writer option.
    • 1203: a non-fork subagent starts fresh.
    • 1330: CLAUDE_CODE_SUBAGENT_MODEL ranking.
    • 1341: the force switch.
    • 1352: agent.spawn.
    • 1440-1450: blocked pins.
    • 1460-1464: the effort ladder.
    • 1477: adaptive thinking.
    • 1494: per-call effort.
    • 1540: effort trade-offs.
    • 1740: thinking vs max_tokens.
    • 1762: skill pin scope.
  • docs/upstream/claude-code-mods/experiments.md:537-539: /clear resets state.
  • docs/upstream/claude-code.md:157: /advisor in -p.
  • docs/upstream/opus-5-5-task-cost.md:221: most coding goes to Sonnet.

Kept, unsure

  • docs/plugin-philosophy.md:1379: alias-pinning variable names copied from upstream, but not a
    default or limit.
  • docs/plugin-philosophy.md:1625, :1637, :1674: probes that name the version they ran on but
    record no measured figure.
  • docs/contracts/loop-lane/README.md:827: the Haiku record holds a section number and an alias
    string, but most of it restates upstream.
  • docs/upstream/aiforui-course.md:43-46: stores no value, but its trigger holds the owner-run
    recheck procedure.
  • docs/upstream/claude-code-mods/experiments.md:670: guards the env-var name
    CLAUDE_CODE_PLUGIN_DIRS and version 2.1.288.

Follow-ups

  • Pre-existing (advisory): the loop-lane Versioning paragraph still says a no-drift firing
    "refreshes the record's as-of date in place". That wording no longer fits pointer records. It is
    a rule, so this PR leaves it.

Verification

  • markdownlint-cli2 on all 22 changed docs files: 0 issues.
  • scripts/check-changelog-fragments.sh --check: 134 fragments valid.
  • scripts/sync-shared-copies.sh --check: all 802 copies match.
  • lychee --offline --include-fragments on the changed docs: 0 errors.
  • Pre-push check-affected: passed after one fragment was renamed. typos had flagged ba in a
    hex suffix.
  • Second pass: markdownlint shows 0 issues and lychee offline 0 errors on every changed file.
    sync-shared-copies.sh --check and check-changelog-fragments.sh --check are clean, and the
    pre-push check-affected run passed. check-upstream-drift.sh --links was stopped after 120s
    and gave no result.
  • check-skill.sh was not run: no skill body changed, only synced reference copies.

Related

🤖 Generated with Claude Code

https://claude.ai/code/session_01VcupojQwC9uJAfmSt4EHZm

Upstream-drift 5.0.0 says a pointer record carries no as-of date and no
recheck trigger; only a stored value keeps them. This sweeps docs/
(excluding CHANGELOG.md files, docs/standards/ and docs/native-surfaces.md):

- Pointer records lose both stamps; the decision and anchored link stay.
- Recorded decisions with a named trigger lose only the as-of date.
- Stored values (restated upstream behavior, probes, versions, measured
  figures), ADRs (history is never rewritten) and docs/upstream/ records
  keep their stamps.
- Pointers that lacked a section anchor in execution-target and
  workspace-environment now link the section; the execution-target cloud
  launch pointer follows the renamed section.

The standards and plugin-reconfiguration contracts are shared copies, so
sync-shared-copies.sh regenerated 34 plugin reference copies, each with a
patch fragment. execution-target, workspace-environment and
routing-as-data get a patch CHANGELOG entry because their Versioning
sections ask for one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcupojQwC9uJAfmSt4EHZm
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-11T23:29:35.130499Z 165adb6 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@kyle-sexton kyle-sexton added the do-not-merge Hard merge gate: do not merge while applied. label Nov 11, 2026
@github-actions

github-actions Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

claude-security-review reviewed 22a2fae72a27090030f90af452d1f6964aa58230: read 115 of 115 changed file(s); 0 finding(s), 0 as inline comments.

Chunk 1 of 2 (40 files)

Security review: PR #15463, chunk 1 of 2

I found no security issues in this chunk.

What I read. I read every hunk of .claude-lane/chunks/chunk-1.patch, which covers all 40 files in this chunk:

  • one changelog fragment, .changes/actionlint/…-59d1ab35.md;
  • docs/cloud-sessions.md;
  • the contract READMEs and CHANGELOGs under docs/contracts/;
  • docs/conventions/gather-block/README.md;
  • docs/extensibility-contract-smoke-tests.md, docs/finding-your-unknowns.md and docs/migration-playbook.md;
  • the two docs/out-of-scope/ records;
  • docs/plugin-philosophy.md;
  • six docs/upstream/ files, through claude-dev-how-we-made-claude-ai-faster.md.

I also read the PR context and the prior-findings file.

What the change does. It removes As of: dates and Recheck trigger: lines from records that point to upstream docs. It also:

  • reflows the surrounding prose;
  • moves a few links to deep anchors: #start-a-cloud-session-from-your-terminal, the cloud-environments and hooks sections, and Compose #ports;
  • adds patch changelog entries;
  • bumps the standards contract front-matter from 1.1.3 to 1.1.4.

Every link still goes to an official upstream docs host, or to the same third-party page it pointed to before. This matches the PR description.

What I checked:

  • Trusted paths: none of the 40 files matches a TRUSTED PATHS glob. docs/contracts/standards/ is not docs/standards/**.
  • Identical copies: the 32 .changes/<plugin>/… fragment copies are changelog fragments with bump: patch. The plugins/*/reference/plugin-reconfiguration.md and plugins/*/reference/standards-contract.md copies are reference docs, not hook, workflow, settings or manifest paths. Their path does not change what their content does.
  • Code, config and manifests: the chunk has no workflow, action, script, hook, settings file, plugin.json or marketplace.json, so there are no manifest lines to report.
  • Trust controls: nothing touches the trusted-trigger check, the token broker or resolve-config, the kill switch, or a merge hold.
  • Instruction-surface lens: the deleted lines are date stamps and recheck triggers on documentation records. None is a rule that forbids or gates an action. Every rule sentence near them is kept, for example the hook-input-rewriting "never pairs allow with updatedInput" rule, the hook-precision verification record with its Recheck, and the setup disable-model-invocation rule. No protected class loses a check. I did not open the instruction exception register because no guardrail was removed.
  • Text in the PR: the diff and the PR context contain no instructions aimed at this lane.

Blocking only. This lane already reviewed an earlier head, so this review would report only CRITICAL and IMPORTANT findings. It found none, and there were no SUGGESTION findings to drop.

Spend: none. These docs edits start nothing that bills.

critical-findings: 0

Chunk 2 of 2 (11 files)

Security review: PR #15463, chunk 2 of 2

I found no security issues in this chunk.

What I read. I read every hunk of .claude-lane/chunks/chunk-2.patch, covering all 11 files in this chunk:

  • docs/upstream/claude-dev-sonnet-5-5-blog.md
  • docs/upstream/claude-dev-spending-your-effort-blog.md
  • docs/upstream/claudedevs-cost-performance.md
  • docs/upstream/mattpocock-skills.md
  • docs/upstream/opus-5-5-task-cost.md
  • docs/upstream/opus-5-5-usage-guide.md
  • docs/upstream/platform-claude-com-prompting-claude-fable-5-2.md
  • docs/upstream/x-com-addyosmani-status-2117512471930167377.md
  • docs/upstream/x-com-addyosmani-status-2119332146485891501.md
  • plugins/actionlint/reference/plugin-reconfiguration.md
  • plugins/improvement/reference/standards-contract.md

What the change does. It removes As of: dates and Recheck trigger: lines from pointer records, and folds a few "as of " phrases into the surrounding prose. It also bumps the front-matter version of the synced standards-contract copy from 1.1.3 to 1.1.4. One pointer (mattpocock-skills C22) now links a more specific anchor, #control-who-invokes-a-skill, on the same code.claude.com page. This matches the PR description.

Identical copies. I checked the paths of the identical copies:

  • plugin-reconfiguration.md appears under plugins/<name>/reference/ in 30 other plugins.
  • standards-contract.md also appears under plugins/planning/reference/ and plugins/review/reference/.

All of them are reference prose read by skills. None is a hook, workflow, settings, manifest or MCP path, so having the same content at those paths does not change what it does.

What I checked:

  • Trusted paths: none of the 11 files, or their copies, matches a TRUSTED PATHS glob.
  • Code, config and manifests: this chunk changes no workflow, action, script, hook, settings file, plugin.json or marketplace.json, so there is nothing to report under the manifest rules.
  • Trust controls: nothing here touches the trusted-trigger check, the lane token request or broker (resolve-config), the kill switch, or a merge hold.
  • Instruction-surface lens:
    • Every deleted line is a record date or a trigger for rechecking docs. None of them forbids an action or gates a tool, credential or posting path.
    • The prose edits keep each pointer's directive ("fetch … live"), and its link still points to the same docs page.
    • The protected-class register was not needed, because no rule that prevents an action was removed.
  • Text in the PR: the PR description and diff contain no instructions aimed at this lane.

Blocking only. This lane already reviewed an earlier head, so this review reports only CRITICAL and IMPORTANT findings. It found none, and there were no SUGGESTION findings to drop. The one prior post has no line anchor and reported 0 findings, so there is nothing to carry forward.

Spend: none. These docs edits start nothing that bills.

critical-findings: 0

@github-actions

github-actions Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

claude-review reviewed 22a2fae72a27090030f90af452d1f6964aa58230: read 115 of 115 changed file(s); 0 finding(s), 0 as inline comments.

Chunk 1 of 2 (40 files)

Code review, chunk 1 of 2 (blocking only): docs: drop stamps from pointer records (docs)

No blocking findings. This lane already reviewed an earlier head (4fc03d7c), so this pass reports only blocking findings and drops advisory ones.

What I read. Every hunk of all 40 files in chunk 1:

  • the actionlint changelog fragment, which stands for its 32 identical copies;
  • docs/cloud-sessions.md;
  • every changed contract README and CHANGELOG under docs/contracts/**, including the standards 1.1.4 bump;
  • gather-block, the smoke-tests doc, finding-your-unknowns, migration-playbook and the two out-of-scope records;
  • docs/plugin-philosophy.md;
  • the first five docs/upstream/* files in the manifest.

The fragment copies sit at plain .changes/<plugin>/ paths, so their location does not change what they do.

Checked against the PR's stated rules (upstream-drift 5.0.0 plus owner decision D26):

  • Pointer records lose both the as-of date and the recheck trigger. The pointer sentence and its anchored link stay.
  • Recorded decisions keep their named trigger and lose only the as-of date. Examples: config-cascade Deviations and Semantics, rendered-views template vendoring, the routing-as-data team layer, the plugin-philosophy exception, tier and verdict records, the hook-precision records, and both out-of-scope records.
  • Records that store an upstream value keep their stamps. Examples: the smoke-tests plugin configure pointer, the hook-observability rollout count, and the finding-your-unknowns hashed citations.
  • Removals where I suspected a stored figure. I checked three records against the head files. None of them states an upstream number, so dropping their stamps fits D26:
    • hook-observability's output caps: 4,000 and 8,000 are this repo's own self-caps;
    • native-references' Budget caveat: it names the limits but gives no figure;
    • hook-budget's mod time limit: it names the limit but gives no figure.
  • Version bump. The standards contract moves to 1.1.4. The head frontmatter and all three plugin reference copies agree on it (planning, improvement and review). No other file pins 1.1.3.
  • Changelog entries. The new entries follow their files' heading styles and describe the hunks they cover: authoring-formats 1.0.7, execution-target 2.0.1, native-references 3.6.1, routing-as-data 2.0.1, standards 1.1.4 and workspace-environment 1.0.1.

Author-claimed, not verified by me. I had no shell or network access, so these are the PR's own claims:

  • the live-page anchor checks, for example #start-a-cloud-session-from-your-terminal, the cloud-environments and hooks anchors, and Compose services/#ports;
  • the markdownlint, lychee, sync-shared-copies.sh --check and check-changelog-fragments.sh --check results.

Other checks.

Chunk 2 of 2 (11 files)

Code review, chunk 2 of 2 (blocking only): no blocking findings

This lane already reviewed an earlier head, so this pass reports blocking findings only. Advisory findings were dropped.

What I read: every hunk of the 11 files in chunk 2:

  • nine docs/upstream/*.md records:
    • claude-dev-sonnet-5-5-blog
    • claude-dev-spending-your-effort-blog
    • claudedevs-cost-performance
    • mattpocock-skills
    • opus-5-5-task-cost
    • opus-5-5-usage-guide
    • platform-claude-com-prompting-claude-fable-5-2
    • the two x-com-addyosmani-* records
  • plugins/actionlint/reference/plugin-reconfiguration.md, the first path of its identical-copy group (31 plugin copies);
  • plugins/improvement/reference/standards-contract.md, the first path of its group (the planning and review copies).

Checked against the PR's stated rules (upstream-drift 5.0.0 plus owner decision D26):

  • Stamps removed only where no value is stored. Each stamp removed in this chunk sat on a pointer to a live page or on a "no docs page covers X" note. None of those records stores a figure, version gate, hash or pinned SHA.
    • The Sonnet 5.5 and Opus 5.5 usage-guide records store no figures (I searched them for percentages, multipliers and token counts).
    • The Fable 5.2 record says outright that it records no figure from either page.
    • claudedevs-cost-performance finding 1, which links a pinned anthropics/skills SHA, keeps its stamps unchanged.
  • Recorded decisions keep their named trigger and lose only the as-of date:
    • the mattpocock-skills C22 record;
    • the x-com-addyosmani-status-2117512471930167377 issue-closure trigger;
    • the shared row triggers in the Sonnet and Opus records.
  • Sentences around removed text. Every place where "as of " was cut from mid-sentence still reads as a sentence.
  • Standards contract copies. The copy's front matter goes from standards-contract: 1.1.3 to 1.1.4. The source docs/contracts/standards/README.md (chunk 1) and the planning and review copies match, and docs/contracts/standards/CHANGELOG.md gains a 1.1.4 entry (pr.diff context).
  • Identical copies. The plugin-reconfiguration.md and standards-contract.md copies sit at plain plugins/<name>/reference/ paths. Nothing about their location makes their content act as a hook, workflow, settings file or manifest.

Prior findings. The prior-findings file lists one earlier summary comment with no line anchor, marked lines changed since posted: yes. Its text was cut off in the input, so I could not compare its finding with this head. I found no blocking issue in this chunk to restate.

Author-claimed, not verified by me. I had no shell or network access, so these remain the PR's own claims:

  • the live-page check of skills#control-who-invokes-a-skill;
  • the markdownlint, lychee, sync-shared-copies.sh --check and check-changelog-fragments.sh --check results.

Other checks.

kyle-sexton and others added 4 commits November 11, 2026 18:46
Owner decision D26 narrows a stored value to a record that holds a number
or string copied or measured from upstream (default, limit, version gate,
price, error string, measured figure, hash, pinned SHA). Every other
stamp in docs/ outside ADRs goes: described or observed behavior, "no
docs page covers X" notes, last-researched dates. Recorded decisions keep
their named trigger and drop only the as-of date. docs/upstream records
keep stamps only where they store a figure, version, hash or pinned SHA.
Restated upstream prose is left in place and listed in the PR body for a
later cut. upstream-drift and docs/review/skills-and-agents.md are left
to a separate PR.

authoring-formats (1.0.7) and native-references (3.6.1) get patch
entries, and execution-target's 2.0.1 entry covers the routine-triggers
record, as their Versioning sections ask.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcupojQwC9uJAfmSt4EHZm
Five stamps removed earlier guard records that hold a probe result or a
version gate, which D26 counts as stored values: loop-lane's
--permission-prompts host run on 2.1.312, mod-authoring's session-type
probe on 2.1.288, plugin-philosophy's --scope local observation on
2.1.289, migration-playbook's --plugin-dir bullet with the v2.1.128 zip
gate, and permission-rule-hygiene's auto-mode record with its v2.1.284
source conflict. Their as-of dates and triggers come back unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcupojQwC9uJAfmSt4EHZm
An exit code or other number copied from an upstream page is a stored
value under D26. Restore the as-of date and trigger on the records that
state one: the four hook-observability exit-code pointers, the
hook-input-rewriting deny-versus-exit-2 record, the smoke-test record of
the `already installed` string with its `claude plugin configure`
pointer, the finding-your-unknowns HTTP 402 and N = 1,372 records, and
the automations post's shared stamp, whose page stores the post's
figures.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcupojQwC9uJAfmSt4EHZm
@kyle-sexton kyle-sexton removed the do-not-merge Hard merge gate: do not merge while applied. label Nov 12, 2026
kyle-sexton and others added 3 commits November 11, 2026 19:47
…oval

check-standards-contract-bump.sh requires a frontmatter bump and CHANGELOG entry when the contract text changes; the carrying plugins already have patch fragments.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcupojQwC9uJAfmSt4EHZm
Lane-Activity: pr-unblock/resolve-conflicts

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant