mirror of
https://github.com/yanislav-igonin/micrach
synced 2026-07-27 05:14:17 +03:00
docs: mark Wave 1 plan complete (#19)
All checks were successful
CI / verify (push) Successful in 11m10s
All checks were successful
CI / verify (push) Successful in 11m10s
This commit is contained in:
parent
db8a46cdf1
commit
028ee12b70
@ -67,7 +67,7 @@
|
|||||||
- Consumes: existing unexported configuration helpers, `utils.ValidatePost`, `controllers.GetThreads`, and `controllers.GetThread`.
|
- Consumes: existing unexported configuration helpers, `utils.ValidatePost`, `controllers.GetThreads`, and `controllers.GetThread`.
|
||||||
- Produces: regression tests that must pass before and after dependency migration.
|
- Produces: regression tests that must pass before and after dependency migration.
|
||||||
|
|
||||||
- [ ] **Step 1: Record the pre-change baseline**
|
- [x] **Step 1: Record the pre-change baseline**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ go build ./...
|
|||||||
|
|
||||||
Expected: all commands exit 0; packages report no test files.
|
Expected: all commands exit 0; packages report no test files.
|
||||||
|
|
||||||
- [ ] **Step 2: Add configuration characterization tests**
|
- [x] **Step 2: Add configuration characterization tests**
|
||||||
|
|
||||||
Create `config/config_test.go`:
|
Create `config/config_test.go`:
|
||||||
|
|
||||||
@ -153,7 +153,7 @@ func TestDefaultConfigs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 3: Add post and upload validation tests**
|
- [x] **Step 3: Add post and upload validation tests**
|
||||||
|
|
||||||
Create `utils/utils_test.go`:
|
Create `utils/utils_test.go`:
|
||||||
|
|
||||||
@ -208,7 +208,7 @@ func TestValidatePost(t *testing.T) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 4: Add DB-free Fiber error-path smoke tests**
|
- [x] **Step 4: Add DB-free Fiber error-path smoke tests**
|
||||||
|
|
||||||
Create `controllers/threads_controller_test.go`:
|
Create `controllers/threads_controller_test.go`:
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ func TestGetThreadRejectsInvalidID(t *testing.T) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 5: Run the new safety net**
|
- [x] **Step 5: Run the new safety net**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -273,7 +273,7 @@ go vet ./...
|
|||||||
|
|
||||||
Expected: all tests pass and vet exits 0.
|
Expected: all tests pass and vet exits 0.
|
||||||
|
|
||||||
- [ ] **Step 6: Commit the safety net**
|
- [x] **Step 6: Commit the safety net**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git add config/config_test.go utils/utils_test.go controllers/threads_controller_test.go
|
git add config/config_test.go utils/utils_test.go controllers/threads_controller_test.go
|
||||||
@ -295,7 +295,7 @@ git commit -m "test: characterize legacy behavior"
|
|||||||
- Consumes: characterization tests from Task 1.
|
- Consumes: characterization tests from Task 1.
|
||||||
- Produces: Go 1.26 module baseline using Fiber v2.52.14 and HTML template v2.1.3; no route or handler API change.
|
- Produces: Go 1.26 module baseline using Fiber v2.52.14 and HTML template v2.1.3; no route or handler API change.
|
||||||
|
|
||||||
- [ ] **Step 1: Set the module Go line**
|
- [x] **Step 1: Set the module Go line**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -312,7 +312,7 @@ go 1.26.0
|
|||||||
toolchain go1.26.5
|
toolchain go1.26.5
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 2: Upgrade direct non-database dependencies deliberately**
|
- [x] **Step 2: Upgrade direct non-database dependencies deliberately**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -326,7 +326,7 @@ go get github.com/disintegration/imaging@v1.6.2
|
|||||||
|
|
||||||
Expected: each command exits 0; Fiber remains on major version 2.
|
Expected: each command exits 0; Fiber remains on major version 2.
|
||||||
|
|
||||||
- [ ] **Step 3: Switch the template import to its current module path**
|
- [x] **Step 3: Switch the template import to its current module path**
|
||||||
|
|
||||||
In `main.go`, replace:
|
In `main.go`, replace:
|
||||||
|
|
||||||
@ -346,7 +346,7 @@ Keep initialization unchanged:
|
|||||||
engine := html.New("./templates", ".html")
|
engine := html.New("./templates", ".html")
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 4: Normalize the module graph**
|
- [x] **Step 4: Normalize the module graph**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -367,7 +367,7 @@ github.com/joho/godotenv v1.5.1
|
|||||||
|
|
||||||
The old root `github.com/gofiber/template` requirement must be absent.
|
The old root `github.com/gofiber/template` requirement must be absent.
|
||||||
|
|
||||||
- [ ] **Step 5: Verify behavior on the new HTTP dependency baseline**
|
- [x] **Step 5: Verify behavior on the new HTTP dependency baseline**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -379,7 +379,7 @@ go build ./...
|
|||||||
|
|
||||||
Expected: all commands exit 0.
|
Expected: all commands exit 0.
|
||||||
|
|
||||||
- [ ] **Step 6: Commit the toolchain and Fiber v2 baseline**
|
- [x] **Step 6: Commit the toolchain and Fiber v2 baseline**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git add go.mod go.sum main.go
|
git add go.mod go.sum main.go
|
||||||
@ -408,7 +408,7 @@ git commit -m "build: update Go and Fiber v2"
|
|||||||
- Consumes: `fiber.Ctx.UserContext() context.Context`; startup uses `context.Background()`.
|
- Consumes: `fiber.Ctx.UserContext() context.Context`; startup uses `context.Background()`.
|
||||||
- Produces: repository and DB operations accepting `context.Context`; pgx v5 transaction types; `toInt32s([]int) []int32` for PostgreSQL `integer[]` parameters.
|
- Produces: repository and DB operations accepting `context.Context`; pgx v5 transaction types; `toInt32s([]int) []int32` for PostgreSQL `integer[]` parameters.
|
||||||
|
|
||||||
- [ ] **Step 1: Write the integer-array conversion test**
|
- [x] **Step 1: Write the integer-array conversion test**
|
||||||
|
|
||||||
Create `repositories/files_repository_test.go`:
|
Create `repositories/files_repository_test.go`:
|
||||||
|
|
||||||
@ -441,7 +441,7 @@ func TestToInt32s(t *testing.T) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 2: Run the focused test and confirm the missing helper**
|
- [x] **Step 2: Run the focused test and confirm the missing helper**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -451,7 +451,7 @@ go test ./repositories -run TestToInt32s -count=1
|
|||||||
|
|
||||||
Expected: build failure containing `undefined: toInt32s`.
|
Expected: build failure containing `undefined: toInt32s`.
|
||||||
|
|
||||||
- [ ] **Step 3: Add the minimal array conversion helper**
|
- [x] **Step 3: Add the minimal array conversion helper**
|
||||||
|
|
||||||
Add to `repositories/files_repository.go`:
|
Add to `repositories/files_repository.go`:
|
||||||
|
|
||||||
@ -477,7 +477,7 @@ rows, err := Db.Pool.Query(ctx, sql, toInt32s(postIDs))
|
|||||||
|
|
||||||
Do not keep `pgtype.Int4Array` or the standalone `github.com/jackc/pgtype` import.
|
Do not keep `pgtype.Int4Array` or the standalone `github.com/jackc/pgtype` import.
|
||||||
|
|
||||||
- [ ] **Step 4: Write SQLSTATE classification tests**
|
- [x] **Step 4: Write SQLSTATE classification tests**
|
||||||
|
|
||||||
Create `db/db_test.go`:
|
Create `db/db_test.go`:
|
||||||
|
|
||||||
@ -512,7 +512,7 @@ func TestIsUndefinedTable(t *testing.T) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 5: Upgrade pgx and replace imports**
|
- [x] **Step 5: Upgrade pgx and replace imports**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -537,7 +537,7 @@ with:
|
|||||||
|
|
||||||
Only import `pgconn` in `db/db.go` and `db/db_test.go`.
|
Only import `pgconn` in `db/db.go` and `db/db_test.go`.
|
||||||
|
|
||||||
- [ ] **Step 6: Define the contextual DB and repository signatures**
|
- [x] **Step 6: Define the contextual DB and repository signatures**
|
||||||
|
|
||||||
Change signatures to this exact set:
|
Change signatures to this exact set:
|
||||||
|
|
||||||
@ -577,7 +577,7 @@ through internal repository calls such as:
|
|||||||
filesMap, err := Files.GetByPostIDs(ctx, postIDs)
|
filesMap, err := Files.GetByPostIDs(ctx, postIDs)
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 7: Propagate startup and request contexts at call sites**
|
- [x] **Step 7: Propagate startup and request contexts at call sites**
|
||||||
|
|
||||||
In `main.go`:
|
In `main.go`:
|
||||||
|
|
||||||
@ -602,7 +602,7 @@ ctx := c.UserContext()
|
|||||||
Pass `ctx` as the first argument to every repository call, `db.Pool.Acquire`,
|
Pass `ctx` as the first argument to every repository call, `db.Pool.Acquire`,
|
||||||
`conn.Begin`, `tx.Rollback`, and `tx.Commit`.
|
`conn.Begin`, `tx.Rollback`, and `tx.Commit`.
|
||||||
|
|
||||||
- [ ] **Step 8: Make rows lifecycle and migration error handling correct**
|
- [x] **Step 8: Make rows lifecycle and migration error handling correct**
|
||||||
|
|
||||||
After every successful `Query`, add:
|
After every successful `Query`, add:
|
||||||
|
|
||||||
@ -659,7 +659,7 @@ if err != nil {
|
|||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 9: Check transaction completion in both write handlers**
|
- [x] **Step 9: Check transaction completion in both write handlers**
|
||||||
|
|
||||||
Import `errors` and `github.com/jackc/pgx/v5` in
|
Import `errors` and `github.com/jackc/pgx/v5` in
|
||||||
`controllers/threads_controller.go`. Replace each bare rollback defer with:
|
`controllers/threads_controller.go`. Replace each bare rollback defer with:
|
||||||
@ -682,7 +682,7 @@ if err := tx.Commit(ctx); err != nil {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 10: Normalize and verify the pgx v5 migration**
|
- [x] **Step 10: Normalize and verify the pgx v5 migration**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -697,7 +697,7 @@ rg 'jackc/(pgx/v4|pgtype)|context\.TODO' --glob '*.go'
|
|||||||
|
|
||||||
Expected: build and checks pass; final `rg` returns no matches.
|
Expected: build and checks pass; final `rg` returns no matches.
|
||||||
|
|
||||||
- [ ] **Step 11: Commit the database driver migration**
|
- [x] **Step 11: Commit the database driver migration**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git add go.mod go.sum main.go controllers/threads_controller.go repositories db
|
git add go.mod go.sum main.go controllers/threads_controller.go repositories db
|
||||||
@ -719,7 +719,7 @@ git commit -m "refactor(db): migrate to pgx v5"
|
|||||||
- Consumes: existing file paths, CSS rewrite behavior, and gateway registration request.
|
- Consumes: existing file paths, CSS rewrite behavior, and gateway registration request.
|
||||||
- Produces: identical behavior through `os` and `io`, with gateway response bodies closed.
|
- Produces: identical behavior through `os` and `io`, with gateway response bodies closed.
|
||||||
|
|
||||||
- [ ] **Step 1: Replace deprecated filesystem calls**
|
- [x] **Step 1: Replace deprecated filesystem calls**
|
||||||
|
|
||||||
In `build/css.go`, remove `io/ioutil` and use:
|
In `build/css.go`, remove `io/ioutil` and use:
|
||||||
|
|
||||||
@ -739,7 +739,7 @@ file, err := os.ReadFile(fullFilePath)
|
|||||||
|
|
||||||
Preserve existing return values, ordering, permissions, and error policy.
|
Preserve existing return values, ordering, permissions, and error policy.
|
||||||
|
|
||||||
- [ ] **Step 2: Replace gateway body reading and close the response**
|
- [x] **Step 2: Replace gateway body reading and close the response**
|
||||||
|
|
||||||
In `gateway/connect.go`, replace `io/ioutil` with `io`, then use:
|
In `gateway/connect.go`, replace `io/ioutil` with `io`, then use:
|
||||||
|
|
||||||
@ -756,7 +756,7 @@ if err != nil {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 3: Verify deprecated APIs are gone**
|
- [x] **Step 3: Verify deprecated APIs are gone**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -770,7 +770,7 @@ rg 'io/ioutil|ioutil\.' --glob '*.go'
|
|||||||
|
|
||||||
Expected: Go checks pass; final `rg` returns no matches.
|
Expected: Go checks pass; final `rg` returns no matches.
|
||||||
|
|
||||||
- [ ] **Step 4: Commit the compatibility cleanup**
|
- [x] **Step 4: Commit the compatibility cleanup**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git add build/css.go files/get_files_in_folder.go gateway/connect.go
|
git add build/css.go files/get_files_in_folder.go gateway/connect.go
|
||||||
@ -792,7 +792,7 @@ git commit -m "refactor: replace deprecated I/O APIs"
|
|||||||
- Consumes: application `POSTGRES_URL` configuration.
|
- Consumes: application `POSTGRES_URL` configuration.
|
||||||
- Produces: PostgreSQL at `localhost:5432`, database/user/password `micrach`, persistent volume `micrach-postgres`, and host-run development commands.
|
- Produces: PostgreSQL at `localhost:5432`, database/user/password `micrach`, persistent volume `micrach-postgres`, and host-run development commands.
|
||||||
|
|
||||||
- [ ] **Step 1: Replace Compose with the PostgreSQL-only definition**
|
- [x] **Step 1: Replace Compose with the PostgreSQL-only definition**
|
||||||
|
|
||||||
Replace `docker-compose.yml` with:
|
Replace `docker-compose.yml` with:
|
||||||
|
|
||||||
@ -822,7 +822,7 @@ volumes:
|
|||||||
The `/var/lib/postgresql` mount intentionally follows the PostgreSQL 18 image
|
The `/var/lib/postgresql` mount intentionally follows the PostgreSQL 18 image
|
||||||
layout.
|
layout.
|
||||||
|
|
||||||
- [ ] **Step 2: Make local environment defaults safe and compatible**
|
- [x] **Step 2: Make local environment defaults safe and compatible**
|
||||||
|
|
||||||
Replace `.env.example` with:
|
Replace `.env.example` with:
|
||||||
|
|
||||||
@ -842,7 +842,7 @@ GATEWAY_BOARD_URL=
|
|||||||
GATEWAY_BOARD_DESCRIPTION=
|
GATEWAY_BOARD_DESCRIPTION=
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 3: Add explicit host and infrastructure commands**
|
- [x] **Step 3: Add explicit host and infrastructure commands**
|
||||||
|
|
||||||
Replace `Makefile` with:
|
Replace `Makefile` with:
|
||||||
|
|
||||||
@ -862,7 +862,7 @@ infra-down:
|
|||||||
docker compose down
|
docker compose down
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 4: Validate Compose syntax and database health**
|
- [x] **Step 4: Validate Compose syntax and database health**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -874,7 +874,7 @@ docker compose ps
|
|||||||
|
|
||||||
Expected: configuration is valid; `db` transitions to `healthy`.
|
Expected: configuration is valid; `db` transitions to `healthy`.
|
||||||
|
|
||||||
- [ ] **Step 5: Verify clean startup against disposable local data**
|
- [x] **Step 5: Verify clean startup against disposable local data**
|
||||||
|
|
||||||
Run with a copied local environment:
|
Run with a copied local environment:
|
||||||
|
|
||||||
@ -887,7 +887,7 @@ Expected: logs report database and migrations online; application listens on
|
|||||||
port 3000. Stop the process after startup verification. An existing `.env` is
|
port 3000. Stop the process after startup verification. An existing `.env` is
|
||||||
never overwritten or removed, and `.env` is never staged.
|
never overwritten or removed, and `.env` is never staged.
|
||||||
|
|
||||||
- [ ] **Step 6: Commit local infrastructure**
|
- [x] **Step 6: Commit local infrastructure**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git add docker-compose.yml .env.example Makefile
|
git add docker-compose.yml .env.example Makefile
|
||||||
@ -908,7 +908,7 @@ git commit -m "build: add local PostgreSQL compose"
|
|||||||
- Consumes: Go module, templates, static assets, migrations, and writable `/app/uploads`.
|
- Consumes: Go module, templates, static assets, migrations, and writable `/app/uploads`.
|
||||||
- Produces: local `micrach:wave1` Linux image; no registry interaction.
|
- Produces: local `micrach:wave1` Linux image; no registry interaction.
|
||||||
|
|
||||||
- [ ] **Step 1: Replace the Dockerfile**
|
- [x] **Step 1: Replace the Dockerfile**
|
||||||
|
|
||||||
Replace `Dockerfile` with:
|
Replace `Dockerfile` with:
|
||||||
|
|
||||||
@ -939,7 +939,7 @@ USER micrach
|
|||||||
ENTRYPOINT ["./micrach"]
|
ENTRYPOINT ["./micrach"]
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 2: Exclude local state from build context**
|
- [x] **Step 2: Exclude local state from build context**
|
||||||
|
|
||||||
Create `.dockerignore`:
|
Create `.dockerignore`:
|
||||||
|
|
||||||
@ -957,7 +957,7 @@ micrach
|
|||||||
*.test
|
*.test
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 3: Build and inspect the image**
|
- [x] **Step 3: Build and inspect the image**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -972,7 +972,7 @@ Expected inspect output:
|
|||||||
micrach ["./micrach"]
|
micrach ["./micrach"]
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 4: Confirm upload storage is writable by the runtime user**
|
- [x] **Step 4: Confirm upload storage is writable by the runtime user**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -982,7 +982,7 @@ docker run --rm --entrypoint sh micrach:wave1 -c 'touch /app/uploads/write-test
|
|||||||
|
|
||||||
Expected: exit 0.
|
Expected: exit 0.
|
||||||
|
|
||||||
- [ ] **Step 5: Commit the image build**
|
- [x] **Step 5: Commit the image build**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git add Dockerfile .dockerignore
|
git add Dockerfile .dockerignore
|
||||||
@ -1004,7 +1004,7 @@ git commit -m "build: add multi-stage image"
|
|||||||
- Consumes: `go.mod`, `go.sum`, Dockerfile, and repository tests.
|
- Consumes: `go.mod`, `go.sum`, Dockerfile, and repository tests.
|
||||||
- Produces: read-only checks for pushes and pull requests; reviewed dependency update pull requests.
|
- Produces: read-only checks for pushes and pull requests; reviewed dependency update pull requests.
|
||||||
|
|
||||||
- [ ] **Step 1: Replace the workflow with read-only CI**
|
- [x] **Step 1: Replace the workflow with read-only CI**
|
||||||
|
|
||||||
Replace `.github/workflows/push.yml` with:
|
Replace `.github/workflows/push.yml` with:
|
||||||
|
|
||||||
@ -1062,7 +1062,7 @@ jobs:
|
|||||||
Do not add registry login, image push, artifact upload, SSH, environment secrets,
|
Do not add registry login, image push, artifact upload, SSH, environment secrets,
|
||||||
Swarm, or deployment steps.
|
Swarm, or deployment steps.
|
||||||
|
|
||||||
- [ ] **Step 2: Remove CodeSee**
|
- [x] **Step 2: Remove CodeSee**
|
||||||
|
|
||||||
Delete:
|
Delete:
|
||||||
|
|
||||||
@ -1070,7 +1070,7 @@ Delete:
|
|||||||
.github/workflows/codesee-arch-diagram.yml
|
.github/workflows/codesee-arch-diagram.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 3: Add Dependabot**
|
- [x] **Step 3: Add Dependabot**
|
||||||
|
|
||||||
Create `.github/dependabot.yml`:
|
Create `.github/dependabot.yml`:
|
||||||
|
|
||||||
@ -1090,7 +1090,7 @@ updates:
|
|||||||
open-pull-requests-limit: 5
|
open-pull-requests-limit: 5
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] **Step 4: Validate workflow syntax and execute its commands locally**
|
- [x] **Step 4: Validate workflow syntax and execute its commands locally**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -1108,7 +1108,7 @@ Expected: every command exits 0. If `govulncheck` reports a reachable
|
|||||||
vulnerability, upgrade or document the exact blocking dependency before this
|
vulnerability, upgrade or document the exact blocking dependency before this
|
||||||
task can pass; do not suppress findings generically.
|
task can pass; do not suppress findings generically.
|
||||||
|
|
||||||
- [ ] **Step 5: Commit CI and dependency automation**
|
- [x] **Step 5: Commit CI and dependency automation**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git add .github
|
git add .github
|
||||||
@ -1129,7 +1129,7 @@ git commit -m "ci: replace legacy deployment workflow"
|
|||||||
- Consumes: completed Wave 1 commands and versions.
|
- Consumes: completed Wave 1 commands and versions.
|
||||||
- Produces: one accurate setup and verification path for humans and coding agents.
|
- Produces: one accurate setup and verification path for humans and coding agents.
|
||||||
|
|
||||||
- [ ] **Step 1: Update README stack and prerequisites**
|
- [x] **Step 1: Update README stack and prerequisites**
|
||||||
|
|
||||||
State these exact baselines:
|
State these exact baselines:
|
||||||
|
|
||||||
@ -1141,7 +1141,7 @@ State these exact baselines:
|
|||||||
|
|
||||||
Remove claims that CI uses Go 1.17 and that Docker requires a prebuilt binary.
|
Remove claims that CI uses Go 1.17 and that Docker requires a prebuilt binary.
|
||||||
|
|
||||||
- [ ] **Step 2: Replace local setup with the host-run workflow**
|
- [x] **Step 2: Replace local setup with the host-run workflow**
|
||||||
|
|
||||||
Document this command sequence:
|
Document this command sequence:
|
||||||
|
|
||||||
@ -1160,7 +1160,7 @@ make dev
|
|||||||
State that Compose runs PostgreSQL only and that nodemon is required by
|
State that Compose runs PostgreSQL only and that nodemon is required by
|
||||||
`make dev`.
|
`make dev`.
|
||||||
|
|
||||||
- [ ] **Step 3: Replace container and CI documentation**
|
- [x] **Step 3: Replace container and CI documentation**
|
||||||
|
|
||||||
Document local image verification:
|
Document local image verification:
|
||||||
|
|
||||||
@ -1172,7 +1172,7 @@ State that CI checks formatting, tests, vet, native and Linux builds,
|
|||||||
reachable vulnerabilities, and Docker image construction. State explicitly
|
reachable vulnerabilities, and Docker image construction. State explicitly
|
||||||
that CI does not publish or deploy images.
|
that CI does not publish or deploy images.
|
||||||
|
|
||||||
- [ ] **Step 4: Update AGENTS guidance**
|
- [x] **Step 4: Update AGENTS guidance**
|
||||||
|
|
||||||
Replace stale Go 1.15/1.17 constraints with Go 1.26. Replace the production
|
Replace stale Go 1.15/1.17 constraints with Go 1.26. Replace the production
|
||||||
Docker and Swarm description with:
|
Docker and Swarm description with:
|
||||||
@ -1187,7 +1187,7 @@ Docker and Swarm description with:
|
|||||||
Keep all existing architecture, upload, migration, testing, and secret-handling
|
Keep all existing architecture, upload, migration, testing, and secret-handling
|
||||||
rules that remain accurate.
|
rules that remain accurate.
|
||||||
|
|
||||||
- [ ] **Step 5: Verify documentation**
|
- [x] **Step 5: Verify documentation**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -1198,7 +1198,7 @@ git diff --check
|
|||||||
|
|
||||||
Expected: no stale deployment or toolchain matches; `git diff --check` exits 0.
|
Expected: no stale deployment or toolchain matches; `git diff --check` exits 0.
|
||||||
|
|
||||||
- [ ] **Step 6: Commit documentation**
|
- [x] **Step 6: Commit documentation**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git add README.md AGENTS.md
|
git add README.md AGENTS.md
|
||||||
@ -1218,7 +1218,7 @@ git commit -m "docs: document modern development workflow"
|
|||||||
- Consumes: all Wave 1 tasks.
|
- Consumes: all Wave 1 tasks.
|
||||||
- Produces: fresh evidence that Wave 1 is safe to merge and that Wave 2 may be planned separately.
|
- Produces: fresh evidence that Wave 1 is safe to merge and that Wave 2 may be planned separately.
|
||||||
|
|
||||||
- [ ] **Step 1: Verify repository hygiene**
|
- [x] **Step 1: Verify repository hygiene**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -1231,7 +1231,7 @@ git ls-files .env uploads micrach '*.out' '*.test'
|
|||||||
Expected: clean worktree after task commits; no forbidden local artifacts are
|
Expected: clean worktree after task commits; no forbidden local artifacts are
|
||||||
tracked.
|
tracked.
|
||||||
|
|
||||||
- [ ] **Step 2: Run the full Go gate**
|
- [x] **Step 2: Run the full Go gate**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -1250,7 +1250,7 @@ go run golang.org/x/vuln/cmd/govulncheck@v1.6.0 ./...
|
|||||||
Expected: every command exits 0; module files remain unchanged after tidy;
|
Expected: every command exits 0; module files remain unchanged after tidy;
|
||||||
no reachable vulnerability remains unhandled.
|
no reachable vulnerability remains unhandled.
|
||||||
|
|
||||||
- [ ] **Step 3: Run the container and infrastructure gate**
|
- [x] **Step 3: Run the container and infrastructure gate**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
@ -1265,7 +1265,7 @@ docker run --rm --entrypoint sh micrach:wave1 -c 'touch /app/uploads/write-test
|
|||||||
Expected: PostgreSQL is healthy, the image builds, and the runtime user can
|
Expected: PostgreSQL is healthy, the image builds, and the runtime user can
|
||||||
write uploads.
|
write uploads.
|
||||||
|
|
||||||
- [ ] **Step 4: Run manual application smoke tests**
|
- [x] **Step 4: Run manual application smoke tests**
|
||||||
|
|
||||||
With `.env` copied from `.env.example`, run `go run .` and verify:
|
With `.env` copied from `.env.example`, run `go run .` and verify:
|
||||||
|
|
||||||
@ -1283,7 +1283,7 @@ limiting, `sage`, bump limit, and archival behavior. Inspect catalog and thread
|
|||||||
pages at narrow and wide viewport widths; Wave 1 must introduce no visual
|
pages at narrow and wide viewport widths; Wave 1 must introduce no visual
|
||||||
change.
|
change.
|
||||||
|
|
||||||
- [ ] **Step 5: Remove disposable local state**
|
- [x] **Step 5: Remove disposable local state**
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user