Skip to content

Commit 24f293c

Browse files
authored
Update software stack and dependencies (#66)
Signed-off-by: Steve Scargall <37674041+sscargal@users.noreply.github.com>
1 parent f9c4e8f commit 24f293c

91 files changed

Lines changed: 1357 additions & 505 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.claude/CLAUDE.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This file configures Claude Code for this specific project. It supplements your
44

55
## Project Summary
66

7-
This is the Hugo static website for [MemMachine](https://memmachine.ai/) — an open-source AI agent memory layer. The site is built with Hugo Extended ≥ 0.149.0, uses a custom `memmachine` theme, and deploys to GitHub Pages. See `AGENTS.md` for the full orientation guide.
7+
This is the Hugo static website for [MemMachine](https://memmachine.ai/) — an open-source AI agent memory layer. The site is built with Hugo Extended ≥ 0.161.1, uses a custom `memmachine` theme, and deploys to GitHub Pages. See `AGENTS.md` for the full orientation guide.
88

99
## Critical Rules
1010

@@ -58,7 +58,7 @@ If the build fails, investigate and fix before committing. Never commit with a b
5858

5959
## Hugo Version
6060

61-
Minimum: **0.149.0 Extended**. The Extended edition is required for Sass/SCSS support. Standard Hugo will fail at build time.
61+
Minimum: **0.161.1 Extended**. The Extended edition is required for Sass/SCSS support. Standard Hugo will fail at build time.
6262

6363
## Git Remotes
6464

‎.claude/skills/hugo-chores/SKILL.md‎

Lines changed: 184 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
---
22
name: hugo-chores
3-
description: "Maintenance tasks for the memmachine.github.io Hugo site: upgrade Hugo version in CI/CD, verify the build, update npm dependencies. Use when the user wants to perform site maintenance."
3+
description: "Maintenance tasks for the memmachine.github.io Hugo site: upgrade Hugo version in CI/CD, verify the build, update npm dependencies, update vendored theme libraries. Use when the user wants to perform site maintenance."
44
trigger: /hugo-chores
55
---
66

77
# /hugo-chores
88

9-
Perform maintenance tasks on the MemMachine website repository. Subcommands handle Hugo version upgrades, build verification, and npm dependency updates.
9+
Perform maintenance tasks on the MemMachine website repository. Subcommands handle Hugo version upgrades, build verification, npm dependency updates, and vendored theme library updates.
1010

1111
## Usage
1212

@@ -15,6 +15,7 @@ Perform maintenance tasks on the MemMachine website repository. Subcommands hand
1515
/hugo-chores upgrade-hugo # update Hugo version in CI/CD and docs
1616
/hugo-chores verify-build # run a production build and report results
1717
/hugo-chores update-npm # audit and update npm dependencies
18+
/hugo-chores update-theme # check and update vendored theme libraries
1819
```
1920

2021
## Deployment Model
@@ -25,10 +26,10 @@ The site deploys automatically. Every push to `main` triggers the GitHub Actions
2526

2627
```yaml
2728
env:
28-
DART_SASS_VERSION: 1.91.0
29-
GO_VERSION: 1.25.0
30-
HUGO_VERSION: 0.149.0
31-
NODE_VERSION: 22.18.0
29+
DART_SASS_VERSION: 1.99.0
30+
GO_VERSION: 1.26.3
31+
HUGO_VERSION: 0.161.1
32+
NODE_VERSION: 22.22.3
3233
```
3334
3435
To upgrade any tool, edit the corresponding env var in `.github/workflows/hugo.yaml` and push to main.
@@ -50,41 +51,50 @@ Upgrades the Hugo version used in CI/CD and updates all version references in do
5051
### Step 1 — Find the current version
5152

5253
```bash
53-
grep -n "HUGO_VERSION\|hugo-version\|hugo Extended" .github/workflows/hugo.yaml | head -10
54+
grep -n "HUGO_VERSION\|DART_SASS_VERSION\|GO_VERSION\|NODE_VERSION" .github/workflows/hugo.yaml | head -10
5455
```
5556

56-
Parse the current version from the workflow file (look for the version string in the Hugo setup step, typically `extended_0.149.0` or similar format).
57+
Parse all four pinned versions from the workflow file.
5758

58-
### Step 2 — Find the latest Hugo release
59+
### Step 2 — Find the latest releases
60+
61+
Run these in parallel:
5962

6063
```bash
61-
# Check the latest release tag from the Hugo GitHub releases page
6264
curl -s https://api.github.com/repos/gohugoio/hugo/releases/latest | grep '"tag_name"'
65+
curl -s https://api.github.com/repos/sass/dart-sass/releases/latest | grep '"tag_name"'
66+
curl -s https://go.dev/dl/?mode=json | python3 -c "import sys,json; data=json.load(sys.stdin); stable=[r for r in data if r.get('stable')]; print(stable[0]['version'] if stable else 'not found')"
67+
curl -s https://nodejs.org/dist/index.json | python3 -c "import sys,json; releases=[r for r in json.load(sys.stdin) if r['version'].startswith('v22.') and 'lts' in r and r['lts']]; print(releases[0]['version'] if releases else 'not found')"
6368
```
6469

65-
If network access is unavailable, ask the user to provide the latest version number.
70+
If network access is unavailable, ask the user to provide the latest version numbers.
6671

6772
### Step 3 — Compare versions
6873

69-
If the current version equals the latest, tell the user: "Hugo is already at the latest version (vX.X.X). No update needed." and stop.
74+
If all current versions equal the latest, tell the user all tools are up to date and stop.
7075

71-
If the latest is newer, proceed.
76+
If any are newer, proceed with those that need updating.
7277

7378
### Step 4 — Update the workflow file
7479

75-
In `.github/workflows/hugo.yaml`, update the `HUGO_VERSION` env var at the top of the `build` job. Use the Edit tool for a targeted replacement.
80+
In `.github/workflows/hugo.yaml`, update the env vars that changed. Use the Edit tool for a targeted replacement of the env block.
7681

77-
The exact line to change (no quotes around the version):
78-
- `HUGO_VERSION: 0.149.0` → `HUGO_VERSION: {new_version}` (without a leading `v`)
82+
Version format notes:
83+
- Hugo and Dart Sass: strip leading `v` (e.g., `v0.161.1` → `0.161.1`)
84+
- Go: strip leading `go` (e.g., `go1.26.3` → `1.26.3`)
85+
- Node.js: strip leading `v` (e.g., `v22.22.3` → `22.22.3`)
7986

8087
### Step 5 — Update documentation
8188

8289
Update version references in these files (use grep first to find exact strings):
8390

8491
```bash
85-
grep -n "0\.14[0-9]\|hugo.*version\|Hugo.*version" README.md AGENTS.md 2>/dev/null
92+
grep -rn "[0-9]\+\.[0-9]\+\.[0-9]\+" README.md AGENTS.md .claude/CLAUDE.md 2>/dev/null | grep -i "hugo\|sass\|go\|node"
8693
```
8794

95+
Files that reference Hugo version: `README.md`, `AGENTS.md`, `.claude/CLAUDE.md`
96+
Files that reference all four tool versions: `AGENTS.md`
97+
8898
Use the Edit tool to update each occurrence found.
8999

90100
### Step 6 — Verify
@@ -99,9 +109,9 @@ Report the installed Hugo version. Note if it differs from the new CI version (t
99109

100110
Tell the user:
101111
- What was updated (workflow file + which docs)
102-
- Old version → new version
103-
- Reminder to commit the changes: `git commit -sS -m "chore: upgrade Hugo to v{new_version}"`
104-
- Note that CI will use the new version on next push to main
112+
- Old version → new version for each tool changed
113+
- Reminder to commit the changes: `git commit -sS -m "chore: bump CI tool versions"`
114+
- Note that CI will use the new versions on next push to main
105115

106116
---
107117

@@ -175,18 +185,150 @@ Tell the user:
175185

176186
---
177187

188+
## Subcommand: update-theme
189+
190+
Checks and updates the vendored third-party libraries used by the memmachine theme. The theme vendors libraries directly as minified files rather than using a package manager.
191+
192+
### Theme library inventory
193+
194+
| Library | Vendored files | How to detect version |
195+
|---------|---------------|----------------------|
196+
| Bootstrap (CSS) | `themes/memmachine/assets/css/bootstrap.min.css` | First line comment: `Bootstrap v5.3.8` |
197+
| Bootstrap (JS) | `themes/memmachine/assets/js/bootstrap.bundle.min.js` | First line comment: `Bootstrap v5.3.8` |
198+
| Lenis (CSS) | `themes/memmachine/assets/css/lenis.css` | File is unminified; version not embedded — check git blame or cross-reference JS |
199+
| Lenis (JS) | `themes/memmachine/assets/js/lenis.min.js` | First 200 chars contain `"1.3.23"` (bare version string, first quoted number) |
200+
| Font Awesome | CDN in `themes/memmachine/layouts/_partials/head.html` | `grep 'font-awesome' themes/memmachine/layouts/_partials/head.html` |
201+
202+
**Note:** `themes/memmachine/assets/css/aos.min.css` is vendored but **not included** in the CSS bundle (`themes/memmachine/layouts/_partials/head/css.html`) and not loaded by any layout — skip it.
203+
204+
### Step 1 — Detect current versions
205+
206+
```bash
207+
# Bootstrap version (from CSS comment)
208+
head -2 themes/memmachine/assets/css/bootstrap.min.css | grep -o 'Bootstrap v[0-9.]*'
209+
210+
# Lenis version (from JS string)
211+
python3 -c "
212+
import re
213+
with open('themes/memmachine/assets/js/lenis.min.js') as f:
214+
c = f.read(300)
215+
m = re.search(r'[^0-9]([0-9]+\.[0-9]+\.[0-9]+)[^0-9]', c)
216+
print('Lenis:', m.group(1) if m else 'not found')
217+
"
218+
219+
# Font Awesome version (from CDN URL)
220+
grep -o 'font-awesome/[0-9.]*' themes/memmachine/layouts/_partials/head.html
221+
```
222+
223+
### Step 2 — Check latest versions
224+
225+
Run these in parallel:
226+
227+
```bash
228+
# Bootstrap latest
229+
curl -s https://api.github.com/repos/twbs/bootstrap/releases/latest | grep '"tag_name"'
230+
231+
# Lenis latest
232+
curl -s https://registry.npmjs.org/lenis/latest | python3 -c "import sys,json; d=json.load(sys.stdin); print('lenis:', d['version'])"
233+
234+
# Font Awesome latest
235+
curl -s https://api.github.com/repos/FortAwesome/Font-Awesome/releases/latest | grep '"tag_name"'
236+
```
237+
238+
### Step 3 — Compare and decide
239+
240+
Build a table of current vs. latest. For any library that is already up to date, skip it. For any that has a newer release, proceed to update it.
241+
242+
### Step 4 — Update outdated libraries
243+
244+
#### Updating Bootstrap
245+
246+
Download new CSS and JS from jsDelivr, replacing the vendored files:
247+
248+
```bash
249+
BOOTSTRAP_VERSION=5.3.8 # use the actual latest version
250+
251+
curl -sL "https://cdn.jsdelivr.net/npm/bootstrap@${BOOTSTRAP_VERSION}/dist/css/bootstrap.min.css" \
252+
-o themes/memmachine/assets/css/bootstrap.min.css
253+
254+
curl -sL "https://cdn.jsdelivr.net/npm/bootstrap@${BOOTSTRAP_VERSION}/dist/js/bootstrap.bundle.min.js" \
255+
-o themes/memmachine/assets/js/bootstrap.bundle.min.js
256+
```
257+
258+
Verify the download by checking the version comment:
259+
```bash
260+
head -2 themes/memmachine/assets/css/bootstrap.min.css | grep -o 'Bootstrap v[0-9.]*'
261+
```
262+
263+
#### Updating Lenis
264+
265+
Download new CSS and JS from jsDelivr:
266+
267+
```bash
268+
LENIS_VERSION=1.3.23 # use the actual latest version
269+
270+
curl -sL "https://cdn.jsdelivr.net/npm/lenis@${LENIS_VERSION}/dist/lenis.css" \
271+
-o themes/memmachine/assets/css/lenis.css
272+
273+
curl -sL "https://cdn.jsdelivr.net/npm/lenis@${LENIS_VERSION}/dist/lenis.min.js" \
274+
-o themes/memmachine/assets/js/lenis.min.js
275+
```
276+
277+
Verify by checking the version string in the new JS:
278+
```bash
279+
python3 -c "
280+
import re
281+
with open('themes/memmachine/assets/js/lenis.min.js') as f:
282+
c = f.read(300)
283+
m = re.search(r'[^0-9]([0-9]+\.[0-9]+\.[0-9]+)[^0-9]', c)
284+
print('Lenis:', m.group(1) if m else 'not found')
285+
"
286+
```
287+
288+
#### Updating Font Awesome
289+
290+
Edit the CDN URL in `themes/memmachine/layouts/_partials/head.html`. The line looks like:
291+
292+
```html
293+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.0/css/all.min.css" ...>
294+
```
295+
296+
Use the Edit tool to replace only the version number in the URL. Do not change any other attributes.
297+
298+
### Step 5 — Verify build
299+
300+
```bash
301+
hugo --gc --minify 2>&1
302+
```
303+
304+
If the build fails, the most likely causes are:
305+
- A Lenis API change requiring a JS update in `themes/memmachine/assets/js/custom.js`
306+
- A Bootstrap breaking change in CSS class names
307+
308+
If the build fails, revert the specific failing library and report the issue to the user.
309+
310+
### Step 6 — Report
311+
312+
Tell the user:
313+
- Which libraries were updated (old → new version)
314+
- Which were already up to date
315+
- Build result
316+
- Reminder to commit: `git commit -sS -m "chore: update vendored theme libraries"`
317+
318+
---
319+
178320
## Evaluations
179321

180322
### Evaluation 1: upgrade-hugo with newer version available
181323

182-
**Setup:** Current workflow has `extended_0.149.0`. Latest GitHub release is `v0.151.0`.
324+
**Setup:** Current workflow has `HUGO_VERSION: 0.149.0`. Latest GitHub release is `v0.161.1`.
183325

184326
**Expected behavior:**
185-
- Detects current version as `0.149.0`
186-
- Detects latest as `0.151.0`
187-
- Updates `.github/workflows/hugo.yaml` to `extended_0.151.0`
188-
- Updates version references in `README.md` and `AGENTS.md`
189-
- Reports: "Updated Hugo from 0.149.0 to 0.151.0 in 3 files"
327+
- Detects current versions from workflow file
328+
- Fetches latest from GitHub/Go/Node APIs
329+
- Updates `.github/workflows/hugo.yaml` env block
330+
- Updates version references in `README.md`, `AGENTS.md`, `.claude/CLAUDE.md`
331+
- Reports: "Updated Hugo from 0.149.0 to 0.161.1"
190332

191333
**Pass criteria:** All files updated with correct version string; no other files modified.
192334

@@ -203,3 +345,19 @@ Tell the user:
203345
- Does not commit or push anything
204346

205347
**Pass criteria:** Build passes; only read-only operations and the hugo command are run; `public/` is not staged for commit.
348+
349+
---
350+
351+
### Evaluation 3: update-theme with Bootstrap and Lenis outdated
352+
353+
**Setup:** `bootstrap.min.css` first line shows `Bootstrap v5.3.2`. Lenis JS has `"1.1.14"`. Font Awesome CDN shows `7.0.0`. Latest Bootstrap is `v5.3.8`, Lenis is `1.3.23`, Font Awesome is `7.2.0`.
354+
355+
**Expected behavior:**
356+
- Detects all three as outdated
357+
- Downloads Bootstrap 5.3.8 CSS and JS from jsDelivr
358+
- Downloads Lenis 1.3.23 CSS and JS from jsDelivr
359+
- Edits Font Awesome version in `head.html`
360+
- Verifies build passes
361+
- Reports all three updated
362+
363+
**Pass criteria:** All three libraries at new versions; build passes; no other files modified.

‎.github/workflows/hugo.yaml‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ jobs:
1818
build:
1919
runs-on: ubuntu-latest
2020
env:
21-
DART_SASS_VERSION: 1.91.0
22-
GO_VERSION: 1.25.0
23-
HUGO_VERSION: 0.149.0
24-
NODE_VERSION: 22.18.0
21+
DART_SASS_VERSION: 1.99.0
22+
GO_VERSION: 1.26.3
23+
HUGO_VERSION: 0.161.1
24+
NODE_VERSION: 22.22.3
2525
TZ: UTC
2626
steps:
2727
- name: Checkout

‎AGENTS.md‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ This repository is the source for [memmachine.ai](https://memmachine.ai/), the p
1414

1515
| Component | Version | Notes |
1616
|-----------|---------|-------|
17-
| Hugo | ≥ 0.149.0 **Extended** | Must be Extended edition (Sass support); pinned via `HUGO_VERSION` in workflow |
18-
| Dart Sass | 1.91.0 | CSS compilation; pinned via `DART_SASS_VERSION` in workflow |
19-
| Go | ≥ 1.25.0 | Hugo module dependency; pinned via `GO_VERSION` in workflow |
17+
| Hugo | ≥ 0.161.1 **Extended** | Must be Extended edition (Sass support); pinned via `HUGO_VERSION` in workflow |
18+
| Dart Sass | 1.99.0 | CSS compilation; pinned via `DART_SASS_VERSION` in workflow |
19+
| Go | ≥ 1.26.3 | Hugo module dependency; pinned via `GO_VERSION` in workflow |
2020
| Node.js | ≥ 22.x | PostCSS / Autoprefixer; pinned via `NODE_VERSION` in workflow |
2121
| npm | bundled with Node.js | Dependency management |
2222
| Theme | `memmachine` (custom) | Lives in `themes/memmachine/` |
@@ -90,7 +90,7 @@ brew install hugo
9090

9191
# Verify Extended edition and correct version
9292
hugo version
93-
# Expected: hugo v0.149.0+extended ...
93+
# Expected: hugo v0.161.1+extended ...
9494

9595
# 2. Install Go (Hugo module dependency)
9696
# Download from https://go.dev/dl/ or use your package manager
@@ -176,10 +176,10 @@ All tool versions are pinned as `env:` vars at the top of the `build` job:
176176

177177
| Variable | Current value |
178178
|----------|--------------|
179-
| `HUGO_VERSION` | `0.149.0` |
180-
| `DART_SASS_VERSION` | `1.91.0` |
181-
| `GO_VERSION` | `1.25.0` |
182-
| `NODE_VERSION` | `22.18.0` |
179+
| `HUGO_VERSION` | `0.161.1` |
180+
| `DART_SASS_VERSION` | `1.99.0` |
181+
| `GO_VERSION` | `1.26.3` |
182+
| `NODE_VERSION` | `22.22.3` |
183183

184184
To upgrade any tool, edit its variable and push. The download URLs in the workflow derive the version from these vars automatically.
185185

‎README.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ This repository contains the source code and content for the MemMachine website,
1919

2020
### Prerequisites
2121

22-
- [Hugo](https://gohugo.io/getting-started/installing/) **Extended** edition, version 0.149.0 or newer (the Extended edition is required for Sass support)
23-
- [Go](https://go.dev/dl/) 1.25.0 or newer (Hugo module dependency)
22+
- [Hugo](https://gohugo.io/getting-started/installing/) **Extended** edition, version 0.161.1 or newer (the Extended edition is required for Sass support)
23+
- [Go](https://go.dev/dl/) 1.26.3 or newer (Hugo module dependency)
2424
- [Node.js](https://nodejs.org/) 22.x or newer (for asset building)
2525

2626
### Installation
2727

28-
1. Install Hugo **Extended** (version 0.149.0 or newer):
28+
1. Install Hugo **Extended** (version 0.161.1 or newer):
2929

3030
See the [official Hugo installation guide](https://gohugo.io/getting-started/installing/) for your platform, or use Homebrew (macOS/Linux):
3131

@@ -40,7 +40,7 @@ This repository contains the source code and content for the MemMachine website,
4040

4141
```bash
4242
hugo version
43-
# Should show: hugo v0.149.0+extended ...
43+
# Should show: hugo v0.161.1+extended ...
4444
```
4545

4646
2. Install Go (required as a Hugo module dependency):

0 commit comments

Comments
 (0)