Skip to content

Commit 4a09bd9

Browse files
v0.11.0: HabitAgility rebrand complete - infra renamed end-to-end + docs rewritten
Infrastructure renamed: HabitAgilityCert + HabitAgility stacks (was GoodHabitTrackerCert + GoodHabitTracker). DynamoDB: habit-agility-meta + habit-agility-rows. Lambda: habit-agility-sync, habit-agility-auth. S3: habit-agility-app-{account}. Construct IDs cleaned up too: MetaTable + RowsTable replace the misleading CyclesTable + CheckinsTable. Old stacks destroyed via 'aws cloudformation delete-stack' (data was wiped earlier so no migration needed). Lambda@Edge replicas of the old auth function need ~hours to age out before AWS will let the function itself be deleted; retained from the stack via --retain-resources and will self-clean. Old DDB tables and S3 bucket survived stack delete via RemovalPolicy.RETAIN and will be cleaned up out-of-band. Repo renamed: StevenEmelander/HabitAgility (PascalCase matching the brand, replaces the kebab-case habit-agility from v0.10.4). Local git remote updated; GitHub auto-forwards. Documentation rewrite: README.md is now a product-marketing landing page (streaks-vs-HabitAgility table, concept glossary, three-tab overview, privacy + ownership section, quick-start, architecture diagram, roadmap). CLAUDE.md updated for v0.11 infra names. CONTRIBUTING.md sharpened around CI-only deploys, rollback recovery, and the pure-helpers-in-their-own-module pattern for testability. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 8d55cf6 commit 4a09bd9

10 files changed

Lines changed: 578 additions & 190 deletions

File tree

CHANGELOG.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,76 @@ All notable changes to this project are documented here.
44

55
## [Unreleased]
66

7+
## [0.11.0] - 2026-05-19
8+
9+
Full rebrand to HabitAgility — completes what v0.10.4 started. **AWS
10+
infrastructure renamed end-to-end**, repo renamed to PascalCase (matches brand),
11+
and **all documentation rewritten with a product-marketing voice** instead of
12+
the previous "personal notes" tone.
13+
14+
### Documentation rewrite
15+
16+
- **README.md** — rewritten from scratch as a marketing landing page. Hero
17+
pitch ("treat your habits like a Scrum team treats their work"). Streaks-vs-
18+
HabitAgility comparison table. Concept glossary (Sprint / Velocity /
19+
Granularity / Burndown / PACE / Retrospective / Planning). Tab-by-tab
20+
feature overview. Privacy + ownership section. Quick-start, architecture
21+
diagram, costs, shipped + roadmap sections. The repo now reads like an
22+
*invitation* to fork and run, not a maintenance log.
23+
- **CLAUDE.md** — fully aligned to v0.11 infra names; new "Brand vs infra"
24+
table is now a single column (all HabitAgility); explicit list of bulk-
25+
endpoint / streak / telemetry anti-patterns under "What to avoid".
26+
- **CONTRIBUTING.md** — sharpened around the deploy-is-CI-only rule, the
27+
cross-region rollback recovery procedure, and the new pure-helpers-in-their-
28+
own-module pattern that lets `tests/` import without the AWS SDK.
29+
30+
### Infrastructure rename (the big one — full destroy + recreate)
31+
32+
- **CDK stacks renamed**: `GoodHabitTrackerCert`**`HabitAgilityCert`**,
33+
`GoodHabitTracker`**`HabitAgility`**. The old stacks were deleted via
34+
`aws cloudformation delete-stack` after the prior data wipe (no entries or
35+
sprint defs to migrate).
36+
- **DynamoDB tables renamed**: `good-habit-tracker-cycles`**`habit-agility-meta`**,
37+
`good-habit-tracker-day-checkins`**`habit-agility-rows`**. Construct IDs
38+
also renamed for clarity (`CyclesTable``MetaTable`, `CheckinsTable`
39+
`RowsTable`) — the new names match what each table actually holds in the
40+
current schema (meta row vs DAY/SPRINT_DEF/SPRINT_SUM rows).
41+
- **Lambda functions renamed**: `good-habit-tracker-sync`**`habit-agility-sync`**,
42+
`good-habit-tracker-auth`**`habit-agility-auth`**.
43+
- **S3 bucket renamed**: `good-habit-tracker-app-{account}`
44+
**`habit-agility-app-{account}`**.
45+
- **Stack interface renamed**: `GoodHabitTrackerStackProps``HabitAgilityStackProps`;
46+
class `GoodHabitTrackerStack``HabitAgilityStack`; `CertStack`
47+
`HabitAgilityCertStack`.
48+
- **Lambda env-var names retained** (`CYCLES_TABLE_NAME`, `ENTRIES_TABLE_NAME`)
49+
to avoid changing the lambda source in this release. The names are now
50+
misleading; they'll be renamed to `META_TABLE_NAME` / `ROWS_TABLE_NAME` in
51+
a follow-up patch alongside their `require()` consumers in `constants.js`.
52+
53+
### Orphan resources from the destroy
54+
55+
- **`good-habit-tracker-auth` Lambda@Edge** remained after stack delete
56+
because edge replicas take hours to clear; it's a no-op orphan and was
57+
detached from the deleted stack via `--retain-resources`. AWS will let it
58+
delete cleanly in a few hours.
59+
- **Old DDB tables and S3 bucket** were `RemovalPolicy.RETAIN`; they survived
60+
the stack delete as empty orphans. Cleaned up out-of-band via the AWS CLI
61+
after the new stacks deploy successfully.
62+
63+
### GitHub repo rename
64+
65+
- `StevenEmelander/good-habit-tracker``StevenEmelander/habit-agility` (in
66+
v0.10.4) → **`StevenEmelander/HabitAgility`** (in v0.11, PascalCase matching
67+
the brand exactly). Old URLs auto-forward; local git remote updated.
68+
69+
### `package.json` updates
70+
71+
- Root `package.json`: name `good-habit-tracker``habit-agility`, version
72+
bumped to 0.11.0.
73+
- `infrastructure/package.json`: name `good-habit-tracker-infrastructure`
74+
`habit-agility-infrastructure`, version bumped to 0.11.0.
75+
- Lockfiles regenerated.
76+
777
## [0.10.4] - 2026-05-19
878

979
Rebrand + Scrum-vocabulary alignment + Plan-tab date compaction.

CLAUDE.md

Lines changed: 240 additions & 75 deletions
Large diffs are not rendered by default.

CONTRIBUTING.md

Lines changed: 72 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,91 @@
1-
# Contributing
1+
# Contributing to HabitAgility
22

3-
Thanks for your interest in this project.
3+
Thanks for your interest! HabitAgility is a personal-use product, but the repo
4+
exists so you can fork it. The code is small and intentional — the contribution
5+
guidelines below match.
46

57
## Principles
68

7-
- Keep the app in a **single file**: `app/tracker.html` (inline CSS/JS, no frameworks or CDN assets).
8-
- Prefer **small, focused changes** over drive-by refactors.
9-
- Do not commit **secrets**: `unlock_token` is only passed at deploy time (`--context unlock_token=...` or `UNLOCK_TOKEN` in the deploy scripts). Never paste real tokens into issues or PRs.
9+
- **Single-file shell.** `app/tracker.html` is the only HTML — inline CSS/JS or
10+
small ES modules under `app/scripts/`. No frameworks. No CDN assets.
11+
- **Strict per-item REST.** API endpoints under `/api/*` operate on one row at
12+
a time. No bulk endpoints. No DynamoDB Scans on read paths. See
13+
[CLAUDE.md](./CLAUDE.md) for the current route list.
14+
- **Cloud-first.** No `localStorage` for tracker data. Boot loads exactly two
15+
rows; everything else is lazy.
16+
- **Small, focused diffs.** Avoid drive-by refactors mixed into feature changes.
17+
- **No secrets in the repo.** `UNLOCK_TOKEN` is passed only at deploy time —
18+
`--context unlock_token=...` or `UNLOCK_TOKEN` in the deploy script. Never
19+
paste real tokens in commits, issues, or PR descriptions.
1020

1121
## Local checks
1222

13-
From `infrastructure/`:
23+
```bash
24+
npm ci # root: lint + test deps
25+
npm run check # Biome (format + lint)
26+
npm test # Vitest (101 tests)
27+
28+
cd infrastructure
29+
npm ci
30+
npx cdk synth --context unlock_token=ci-synth-only --quiet
31+
```
32+
33+
The first `synth` against a fresh checkout may write `infrastructure/cdk.context.json`
34+
(the `HostedZone.fromLookup` cache). That file is committed in this repo so
35+
synth is reproducible across machines and CI.
36+
37+
## Deploy is CI-only
38+
39+
Local `cdk deploy` is **denied** by `.claude/settings.json` + a `PreToolUse`
40+
hook (`.claude/block-local-deploy.js`). Deploys go through GitHub Actions:
41+
42+
```bash
43+
git tag 0.11.1
44+
git push origin 0.11.1
45+
```
46+
47+
The `.github/workflows/deploy.yml` workflow runs `cdk deploy --all` against
48+
the `production` environment. The required secrets are `AWS_ACCESS_KEY_ID`,
49+
`AWS_SECRET_ACCESS_KEY`, and `UNLOCK_TOKEN`.
50+
51+
If a deploy fails mid-stream and CloudFormation gets stuck in
52+
`UPDATE_ROLLBACK_FAILED` on `ExportsWriteruswest2…`, the recovery is:
1453

1554
```bash
16-
npm install
17-
npm run build
18-
npx cdk synth --context unlock_token=dummy-token-for-synth-only
55+
aws cloudformation continue-update-rollback \
56+
--stack-name HabitAgilityCert --region us-east-1 \
57+
--resources-to-skip ExportsWriteruswest209BD44F0A7CF058B
1958
```
2059

21-
The first `synth` / deploy that uses `HostedZone.fromLookup` may create `cdk.context.json` (ignored by git). That is expected.
60+
then re-run `cdk deploy --all` via CI.
2261

2362
## Forking and your own domain
2463

25-
The CDK stacks assume a Route 53 hosted zone and DNS names wired in code:
64+
The CDK stacks assume a Route 53 hosted zone and DNS names wired in code:
2665

27-
- `infrastructure/lib/cert-stack.ts` — ACM certificate domain, auth asset generation
28-
- `infrastructure/lib/stack.ts` — CloudFront alternate domain, Route 53 `A` record name
66+
- `infrastructure/lib/cert-stack.ts` — ACM cert domain, Lambda@Edge auth asset
67+
- `infrastructure/lib/stack.ts` — CloudFront alternate domain, Route 53 ARecord
2968

30-
Update those to match your zone and hostname before deploying. Search the repo for `ght.vexom.io` and `vexom.io` as a starting point.
69+
Search the repo for `ght.vexom.io` and `vexom.io` and replace with your zone +
70+
subdomain before deploying. (Future: parameterize via `cdk.json` context so a
71+
fork doesn't need to edit source — see roadmap in README.)
72+
73+
## Adding a test
74+
75+
The `tests/` directory is at the repo root and contains pure-function tests
76+
against both the front-end and the lambda. New utility helpers should land
77+
with tests — see `tests/lambda-sprint-helpers.test.js` for the pattern (pure
78+
helpers extracted from a handler module so the test loads without the AWS SDK
79+
at the test runner's resolution scope).
3180

3281
## Maintainer notes
3382

34-
See [CLAUDE.md](./CLAUDE.md) for architecture, data schema, and editing conventions shared with automation tools.
83+
[CLAUDE.md](./CLAUDE.md) is the architecture + editing-conventions doc shared
84+
between human contributors and coding agents. It records:
85+
86+
- The strict per-item REST contract
87+
- DynamoDB partition design and attribute conventions
88+
- Which AWS constructs are stable IDs and which can be renamed safely
89+
- Token-rotation deploy procedure + recovery steps
90+
- The "user-facing HabitAgility / infra `good-habit-tracker`" rule from before
91+
v0.11 (resolved in v0.11 — see CHANGELOG)

0 commit comments

Comments
 (0)