diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ecba06..b075013 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,30 @@ # Urda's Forged Status Line CHANGELOG +## [Unreleased] + +### Changed + +- README now opens with a demo screenshot (`docs/img/demo.png`) and drops the + text render examples it duplicated; the sample model name is current. + +### Security + +- State files (the rate-limit cache, `last_check`, and `remote_version`) are + now written through private (`umask 077`) `mktemp` swaps instead of + predictable `.$$.tmp` names or in-place redirects. A pre-existing + world-readable state file goes private on its next write, and a symlink or + directory planted at a state path is replaced or refused, never written + through. + +### Fixed + +- Clock values now normalize to plain epoch integers before any arithmetic: + the debug clock (`URDA_AI_FORGED_STATUS_LINE_DEBUG_NOW`), the rate-limit + reset epochs, the update-check `last_check` state, and the update-lock + timestamp. A malformed value such as `08` (invalid octal in bash + arithmetic) or an arithmetic-expression shape previously broke countdown + and throttle math; it now degrades to the real clock or a safe default. + ## [1.0.1] - 2026-08-03 ### Changed diff --git a/README.md b/README.md index cba26c5..6d463f6 100644 --- a/README.md +++ b/README.md @@ -16,17 +16,7 @@ rate-limit gauges below.** See the demo and gallery at [anvil.urda.com/forged-statusline](https://anvil.urda.com/forged-statusline/). -```text -🔮 Opus 4.8 🦾 max | 💾 ~/dev/urda/forged-statusline -🧠 [██▏ ] 28% | ⏳ 5h [███▌ ] 44% (3h42m) | 🪔 7d [█ ] 14% (5d08h) -``` - -With icons disabled: - -```text -Opus 4.8 max | ~/dev/urda/forged-statusline -[██▏ ] 28% | 5h [███▌ ] 44% (3h42m) | 7d [█ ] 14% (5d08h) -``` +![Forged Status Line running in a terminal](docs/img/demo.png) ## Features diff --git a/docs/img/demo.png b/docs/img/demo.png new file mode 100644 index 0000000..b9d9e19 Binary files /dev/null and b/docs/img/demo.png differ diff --git a/scripts/test-urda-com-forged-statusline.sh b/scripts/test-urda-com-forged-statusline.sh index b85b703..9641bbd 100755 --- a/scripts/test-urda-com-forged-statusline.sh +++ b/scripts/test-urda-com-forged-statusline.sh @@ -318,7 +318,7 @@ seed_completeness_case() { failed="true" reason="could not extract the seed block" else for name in ${allowlist}; do - if ! printf '%s\n' "${seeds}" | grep -qE "(^| )${name}="; then + if ! grep -qE "(^| )${name}=" <<<"${seeds}"; then failed="true" reason="parser destination ${name} is not seeded before the parse" break fi @@ -361,6 +361,23 @@ cache_report() { fi } +perm_case() { + # perm_case