diff --git a/.codex/scripts/bump-version.ps1 b/.codex/scripts/bump-version.ps1
index e21e069..5960c79 100644
--- a/.codex/scripts/bump-version.ps1
+++ b/.codex/scripts/bump-version.ps1
@@ -65,12 +65,12 @@ function Update-Changelog {
$Text = Get-Content -Raw -Path $Path
- $VersionHeadingPattern = '(?m)^`' + [regex]::Escape($Version) + '`$'
+ $VersionHeadingPattern = '(?m)^## v' + [regex]::Escape($Version) + '$'
if ($Text -match $VersionHeadingPattern) {
- throw "CHANGELOG.md already contains a $Version entry."
+ throw "CHANGELOG.md already contains a v$Version entry."
}
- $UnreleasedPattern = '(?ms)^## Unreleased\s*(?
.*?)(?=^`[^`]+`\s*$|^## |\z)'
+ $UnreleasedPattern = '(?ms)^## Unreleased\s*(?.*?)(?=^## |\z)'
$Match = [regex]::Match($Text, $UnreleasedPattern)
if (-not $Match.Success) {
throw "CHANGELOG.md must contain an '## Unreleased' section before bumping."
@@ -82,8 +82,7 @@ function Update-Changelog {
}
$ReleasedBody = if ([string]::IsNullOrWhiteSpace($Body)) { "- No user-facing changes recorded." } else { $Body }
- $VersionHeading = '`' + $Version + '`'
- $Replacement = "## Unreleased`r`n`r`n$VersionHeading`r`n$ReleasedBody`r`n`r`n"
+ $Replacement = "## Unreleased`r`n`r`n## v$Version`r`n`r`n$ReleasedBody`r`n`r`n"
$Updated = $Text.Substring(0, $Match.Index) + $Replacement + $Text.Substring($Match.Index + $Match.Length)
Set-TextPreservingUtf8Bom -Path $Path -Value $Updated
}
diff --git a/.codex/scripts/prerelease-notes.sh b/.codex/scripts/prerelease-notes.sh
index a327217..d68c228 100644
--- a/.codex/scripts/prerelease-notes.sh
+++ b/.codex/scripts/prerelease-notes.sh
@@ -97,7 +97,7 @@ fi
unreleased_body=$(
awk '
/^##[[:space:]]*Unreleased[[:space:]]*$/ { in_unreleased = 1; next }
- in_unreleased && (/^`[^`]+`[[:space:]]*$/ || /^## /) { exit }
+ in_unreleased && /^## / { exit }
in_unreleased { print }
' "$CHANGELOG_PATH"
)
@@ -108,8 +108,8 @@ fi
version_body=$(
awk -v version="$VERSION" '
- $0 == "`" version "`" { in_version = 1; next }
- in_version && (/^`[^`]+`[[:space:]]*$/ || /^## /) { exit }
+ $0 == "## v" version { in_version = 1; next }
+ in_version && /^## / { exit }
in_version { print }
' "$CHANGELOG_PATH"
)
@@ -156,7 +156,7 @@ ${handoff_heading}
| Signal | Detail |
| --- | --- |
-| 📝 Changelog | \`## Unreleased\` is empty; notes below come from \`${VERSION}\`. |
+| 📝 Changelog | \`## Unreleased\` is empty; notes below come from \`v${VERSION}\`. |
| 🌿 Branch | \`${BRANCH}\` |
| 🔖 Commit | \`${short_commit}\` |
| ▶️ Run | ${run_detail} |
diff --git a/.codex/scripts/prerelease-notes.tests.ps1 b/.codex/scripts/prerelease-notes.tests.ps1
index b63eb7c..ebf8bba 100644
--- a/.codex/scripts/prerelease-notes.tests.ps1
+++ b/.codex/scripts/prerelease-notes.tests.ps1
@@ -47,13 +47,17 @@ function Test-PrereleaseNotesIncludesChangelogAndDetailsCard {
$ChangelogPath = Join-Path $FixtureRoot "CHANGELOG.md"
$OutputPath = Join-Path $FixtureRoot "prerelease-notes.md"
Set-Content -Path $ChangelogPath -Value @'
+# Changelog
+
## Unreleased
-`1.2.3`
+## v1.2.3
+
- fixed the client widget timing
- added a runtime receipt
-`1.2.2`
+## v1.2.2
+
- previous release
'@
@@ -101,10 +105,13 @@ function Test-PrereleaseNotesRejectsUnreleasedContent {
try {
$ChangelogPath = Join-Path $FixtureRoot "CHANGELOG.md"
Set-Content -Path $ChangelogPath -Value @'
+# Changelog
+
## Unreleased
- still parked for the next release
-`1.2.3`
+## v1.2.3
+
- fixed the client widget timing
'@
@@ -128,7 +135,10 @@ function Test-PrereleaseNotesRejectsMissingUnreleasedHeader {
try {
$ChangelogPath = Join-Path $FixtureRoot "CHANGELOG.md"
Set-Content -Path $ChangelogPath -Value @'
-`1.2.3`
+# Changelog
+
+## v1.2.3
+
- fixed the client widget timing
'@
@@ -152,9 +162,12 @@ function Test-PrereleaseNotesRejectsMissingVersionEntry {
try {
$ChangelogPath = Join-Path $FixtureRoot "CHANGELOG.md"
Set-Content -Path $ChangelogPath -Value @'
+# Changelog
+
## Unreleased
-`1.2.2`
+## v1.2.2
+
- previous release
'@
diff --git a/.codex/scripts/release-hygiene.tests.ps1 b/.codex/scripts/release-hygiene.tests.ps1
index a1f6546..ebc9266 100644
--- a/.codex/scripts/release-hygiene.tests.ps1
+++ b/.codex/scripts/release-hygiene.tests.ps1
@@ -79,11 +79,14 @@ versionNumber = "1.2.3"
"@ -NoNewline
Set-Content -Path (Join-Path $FixtureRoot "CHANGELOG.md") -Value @"
+# Changelog
+
## Unreleased
- planned fix
-`1.2.3`
+## v1.2.3
+
- previous release
"@ -NoNewline
@@ -112,7 +115,7 @@ function Test-BumpVersionUpdatesEclipseMetadata {
Assert-Match -Text $ProjectText -Pattern '1\.2\.4' -Message "Project version was not updated."
Assert-Match -Text $ThunderstoreText -Pattern 'versionNumber = "1\.2\.4"' -Message "Thunderstore version was not updated."
- Assert-Match -Text $ChangelogText -Pattern '(?m)^## Unreleased\s+`1\.2\.4`\s+- planned fix' -Message "Changelog release entry was not created."
+ Assert-Match -Text $ChangelogText -Pattern '(?m)^## Unreleased\s+## v1\.2\.4\s+- planned fix' -Message "Changelog release entry was not created."
}
finally {
Remove-Item -LiteralPath $FixtureRoot -Recurse -Force
diff --git a/.codex/scripts/release-nudge.ps1 b/.codex/scripts/release-nudge.ps1
index eba9d6b..bf76beb 100644
--- a/.codex/scripts/release-nudge.ps1
+++ b/.codex/scripts/release-nudge.ps1
@@ -46,7 +46,7 @@ function Write-Nudge {
function Get-UnreleasedBody {
$Text = Get-Content -Raw -Path $ChangelogPath
- $Match = [regex]::Match($Text, '(?ms)^## Unreleased\s*(?.*?)(?=^`[^`]+`\s*$|^## |\z)')
+ $Match = [regex]::Match($Text, '(?ms)^## Unreleased\s*(?.*?)(?=^## |\z)')
if (-not $Match.Success) {
return $null
diff --git a/.codex/scripts/version-metadata.sh b/.codex/scripts/version-metadata.sh
index de7d397..fe411e6 100644
--- a/.codex/scripts/version-metadata.sh
+++ b/.codex/scripts/version-metadata.sh
@@ -38,8 +38,7 @@ read_thunderstore_version() {
read_latest_changelog_entry() {
local entry
- # sed needs literal backticks to match the repo's changelog header format.
- entry=$(sed -n '/^`[^`][^`]*`$/ { s/^`//; s/`$//; p; q; }' "$CHANGELOG_PATH" | tr -d '\r')
+ entry=$(sed -n 's/^## v\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$/\1/p' "$CHANGELOG_PATH" | head -n 1 | tr -d '\r')
if [ -z "$entry" ]; then
fail "Unable to determine the latest CHANGELOG entry from $CHANGELOG_PATH."
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ab6469b..2201788 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,99 +1,127 @@
+# Changelog
+
## Unreleased
-`1.3.17`
+## v1.3.17
+
- added prerelease note generation and changelog turnover validation for GitHub and Thunderstore release flows
-`1.3.16`
+## v1.3.16
+
- hardened attribute UI initialization so runtime-loaded clients defer when the inventory attribute hierarchy is not ready
- collapsed Emberglass bridge progress receipts to one client log line per config/progress batch
-`1.3.15`
+## v1.3.15
+
- added release hygiene helper scripts for changelog/version bump review and metadata updates
- added CI coverage for the release hygiene nudge before build verification
-`1.3.14`
+## v1.3.14
+
- optional Emberglass bridge support for Bloodcraft registration and server messages
- release workflow hardening for safer prerelease and Thunderstore publishing
-`1.3.13`
+## v1.3.13
+
- primal weapons
-`1.3.12`
+## v1.3.12
+
- attributes
-`1.3.11`
+## v1.3.11
+
- decreased update interval for more responsive UI elements (1s -> 0.1s), added config option if you prefer the old behavior; for noticeable effect requires Bloodcraft v1.11.14 or higher with fast updates enabled (Eclipsed = true)
-`1.3.10`
+## v1.3.10
+
- gamepad mode (position of quest windows and profession bars will change based on detected input)
- ability slot click-toggle for profession bars functional again
-`1.3.9`
+## v1.3.9
+
- preventing duplicate coroutine instances from being created if one is already present
-`1.3.8`
+## v1.3.8
+
- removing interact progress bar when unlocking familiars from buff entity on client
- changed abbreviation for PrimaryLifeLeech to PAL
-`1.3.7`
+## v1.3.7
+
- adjusted name trimming to target only vBloods for fam bar/quest targets
- handling for movementSpeed to show correctly on expertise bar and weapon tooltips
-`1.3.6`
+## v1.3.6
+
- small fix for legacy bar errors in console
- weapon expertise stats (most, not all) appear on tooltips
-`1.3.5`
+## v1.3.5
+
- Updated for VRising 1.1 compatibility
-`1.3.3`
+## v1.3.3
+
- small changes to accomodate minor version increases without needing to add more boilerplate logic to client/server
- minor recipe adjustments to match server-side changes for the client visually
-`1.3.2`
+## v1.3.2
+
- backwards compatible with Bloodcraft 1.5.3 (will show NPC spell cooldown's on shift when using 1.6.4 #soonYM, other changes below do not require additional information from Bloodcraft)
- weapon expertise stats show on tooltips accordingly (not all stats will show there for some reason but works for most)
- new recipe/salvage additions and changes added in 1.6.4 with ExtraRecipes enabled are best experienced with Eclipse
- profession bars no longer an eyesore (thin gold bar represents progress to max level, icon indicates profession, reordered to crafting profs then gathering profs)
-`1.2.2`
+## v1.2.2
+
- added bar for basic familiar info
- added bargraph of sorts for professions
- can toggle individual parts by clicking on ability slots 1-7
-`1.1.2`
+## v1.1.2
+
- removed unneeded dependency like I meant to for 1.1.1, oopsie
-`1.1.1`
+## v1.1.1
+
- class text under experience bar formatted more aesthetically
- improved positioning for UI elements at various resolutions (probably >_>)
-`1.0.0`
+## v1.0.0
+
- versioning for Thunderstore/sanity
- requires Bloodcraft 1.4.0
-`0.2.1`
+## v0.2.1
+
- fixed loop update if more than 3 bonus stats were chosen
- added quest icons for crafting and gathering
-`0.2.0`
+## v0.2.0
+
- added icons for quests based on normal/vblood target
- handled displaying stats in different locales
-`0.1.4`
+## v0.1.4
+
- making an attempt at handling scaling for UI elements at various resolutions, will need feedback on this although seems decent so far
-`0.1.3`
+## v0.1.3
+
- changed click detection to work off the same blood object that shows blood information when hovered over (this should fix any issues with errant clicks as if the blood object is not present it cannot be interacted with)
- quests should reliably be on the bottom right of the screen now
-`0.1.2`
+## v0.1.2
+
- clicking blood orb area if UI not active in-game will not do anything
-`0.1.1`
+## v0.1.1
+
- fixed extra bar at top of screen if only experience is enabled
-`0.1.0`
+## v0.1.0
+
- initial test release
- config values for experience, prestige, legacy, expertise, and quests (should be okay to mix and match but probably works best with all atm)
- progress bars for experience, legacies, expertise with bonus stats displayed beneath and prestige in bar header if enabled with current level on the left