Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 1 addition & 6 deletions .github/workflows/validate-branches.yml
Original file line number Diff line number Diff line change
Expand Up @@ -103,19 +103,14 @@ jobs:
node-version: '22'
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0'
dotnet-version: '10.0'
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Provision Java 11 (audit-svc / auth-svc)
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '11'
- name: Ensure base commit present
run: git fetch --no-tags origin "$(node -e "console.log(require('./course-build/manifest.json').base.sha)")" || true
- name: Configure git identity (for git am)
Expand Down
2 changes: 1 addition & 1 deletion course-build/REFS.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ The state-changing chain is `base -> M01 -> M02 -> ... -> M07`. `M00` is the pri
Three layers, from most to least durable:

1. **Base (immutable tag) — `acc-base`**
Pinned at the pristine `legacy-app` app tree (origin/main HEAD before course tooling landed: `3689288d1f5a9ed6871db94a09c2e651bc20af3e`). Every module delta applies on top of this. Learner branches contain the app + module content only — never `course-build/` or the course automation workflows.
Pinned at the pristine, tooling-free `legacy-app` app tree updated to the current main app state (.NET 10 assets-svc + Spring Boot 3.5.16 / Java 17 Java services): `510b4ffa1b1f95234ec6c7bd1d0983060e5081c3`. Every module delta applies on top of this. Learner branches contain the app + module content only — never `course-build/` or the course automation workflows. The tag **moves** only via an approved promotion: when a regen PR that advances `manifest.base.sha` is merged, the `acc-base` tag is re-pointed to the new base commit as part of the gated promotion.

2. **Mutable convenience branches — `start-of-module-N`**
The learner-facing `git checkout` targets. They **move** (only via an approved, all-or-nothing promotion). `N` runs `02..07`.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ Subject: [PATCH 1/2] Update postCreateCommand to install GitHub Copilot using
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index ef54ecc..c5b19a8 100644
index 21a78c5..ad838ab 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -41,6 +41,6 @@
@@ -40,6 +40,6 @@
]
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ Subject: [PATCH 2/2] 01-solution-Add ARCHITECTURE.md to document service

---
ARCHITECTURE.md | 95 +++++++++++++++++++++++++++++++++++++++++++++++++
README.md | 12 ++++---
2 files changed, 102 insertions(+), 5 deletions(-)
README.md | 8 +++--
2 files changed, 100 insertions(+), 3 deletions(-)
create mode 100644 ARCHITECTURE.md

diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md
Expand Down Expand Up @@ -112,19 +112,10 @@ index 0000000..eec8bab
+- **Tech debt:** SQL injection in username lookup; plain-text seeded passwords; no tests; legacy Spring Boot 2.7 / Java 11
+- **Unenforced rules:** authentication data is intentionally insecure for course material
diff --git a/README.md b/README.md
index 22351d8..886803d 100644
index f5aa1d2..8d32df3 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ flowchart LR
browser([Browser]) --> web

subgraph frontend
- web[web<br/>Astro SSR + React islands]
+ web[web<br/>Astro SSR + Bootstrap 5]
end

subgraph modern[Modern services]
@@ -34,11 +34,11 @@ flowchart LR
@@ -34,7 +34,7 @@ flowchart LR
workforce -.JWKs.-> auth
```

Expand All @@ -133,11 +124,6 @@ index 22351d8..886803d 100644

| Service | Stack | Port | Owns |
|----------------------|----------------------------------------|-------|-------------------------------------|
-| `web` | Astro (SSR) + React islands + Bootstrap 5 | 4321 | UI, BFF composition |
+| `web` | Astro (SSR) + Bootstrap 5 | 4321 | UI, BFF composition |
| `assets-svc` | .NET 8 (ASP.NET Core minimal APIs) | 5001 | Asset CRUD + search |
| `workforce-svc` | Java 21 / Spring Boot 3 | 5002 | Employees + Assignments |
| `reporting-svc` | Python 3.12 / FastAPI | 5003 | Reports, CSV bulk import |
@@ -82,9 +82,11 @@ docker compose up --build

Open http://localhost:4321.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,37 +37,37 @@ index 3797129..b13f322 100644
+playwright-report/
+playwright/.cache/
diff --git a/package-lock.json b/package-lock.json
index 3001b53..6a0f4fd 100644
index e86c5d4..1e1ce81 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,9 +6,26 @@
"": {
"name": "assettrack-dev",
"devDependencies": {
+ "@playwright/test": "^1.49.1",
"concurrently": "^9.1.0"
"concurrently": "^10.0.5"
}
},
+ "node_modules/@playwright/test": {
+ "version": "1.61.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz",
+ "integrity": "sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==",
+ "version": "1.62.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.62.1.tgz",
+ "integrity": "sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright": "1.61.1"
+ "playwright": "1.62.1"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ "node": ">=20"
+ }
+ },
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -142,6 +159,21 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz",
@@ -105,6 +122,21 @@
"node": ">=6"
}
},
Expand All @@ -89,51 +89,51 @@ index 3001b53..6a0f4fd 100644
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -172,6 +204,38 @@
"node": ">=8"
@@ -128,6 +160,38 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/playwright": {
+ "version": "1.61.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz",
+ "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==",
+ "version": "1.62.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz",
+ "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright-core": "1.61.1"
+ "playwright-core": "1.62.1"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ "node": ">=20"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
+ "node_modules/playwright-core": {
+ "version": "1.61.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz",
+ "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==",
+ "version": "1.62.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz",
+ "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ "node": ">=20"
+ }
+ },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"node_modules/rxjs": {
"version": "7.8.2",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
diff --git a/package.json b/package.json
index 0baf6c1..abf18f1 100644
index f677727..e86fcc5 100644
--- a/package.json
+++ b/package.json
@@ -12,9 +12,12 @@
"dev:auth": "cd services/auth-svc && mkdir -p data && SERVER_PORT=5006 AUTH_DB_PATH=$PWD/data/auth.db LOGGING_LEVEL_ROOT=${LOG_LEVEL_JAVA:-WARN} ../../scripts/with-java11 mvn -q spring-boot:run",
"dev:auth": "cd services/auth-svc && mkdir -p data && SERVER_PORT=5006 AUTH_DB_PATH=$PWD/data/auth.db LOGGING_LEVEL_ROOT=${LOG_LEVEL_JAVA:-WARN} mvn -q spring-boot:run",
"dev": "node scripts/dev-banner.mjs && concurrently --names web,assets,workforce,reporting,notif,audit,auth --prefix-colors auto --kill-others-on-fail npm:dev:web npm:dev:assets npm:dev:workforce npm:dev:reporting npm:dev:notifications npm:dev:audit npm:dev:auth",
"dev:verbose": "LOG_LEVEL_JAVA=INFO LOG_LEVEL_DOTNET=Information LOG_LEVEL_PY=info npm run dev",
- "install:all": "npm --prefix services/web install && pip install -e services/reporting-svc && pip install -e services/notifications-svc"
Expand All @@ -143,7 +143,7 @@ index 0baf6c1..abf18f1 100644
},
"devDependencies": {
+ "@playwright/test": "^1.49.1",
"concurrently": "^9.1.0"
"concurrently": "^10.0.5"
}
}
diff --git a/playwright.config.ts b/playwright.config.ts
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -556,16 +556,16 @@ index 0000000..3befbbe
+ #endregion
+}
diff --git a/services/reporting-svc/pyproject.toml b/services/reporting-svc/pyproject.toml
index d93c870..29ffedf 100644
index cabeaaa..da0b06c 100644
--- a/services/reporting-svc/pyproject.toml
+++ b/services/reporting-svc/pyproject.toml
@@ -18,5 +18,7 @@ include = ["app*"]
dev = [
"pytest==9.0.3",
"pytest-asyncio==1.3.0",
"pytest==9.1.1",
"pytest-asyncio==1.4.0",
+ "pytest-mock==3.14.0",
+ "respx==0.22.0",
"ruff==0.15.13",
"ruff==0.16.3",
]
diff --git a/services/reporting-svc/tests/test_csv_import.py b/services/reporting-svc/tests/test_csv_import.py
new file mode 100644
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: acc-course-bot <acc-course-bot@users.noreply.github.com>
Date: Mon, 17 Aug 2026 09:14:38 -0700
Subject: [PATCH 1/1] feat(hooks): add lifecycle test-router hook + hooks.json
Subject: [PATCH] feat(hooks): add lifecycle test-router hook + hooks.json
(module 04)

---
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: acc-course-bot <acc-course-bot@users.noreply.github.com>
Date: Wed, 1 Jan 2020 00:00:00 +0000
Subject: [PATCH 1/1] feat(module-05): add QR/barcode support + QA agent,
research, plan
Subject: [PATCH] feat(module-05): add QR/barcode support + QA agent, research,
plan

Module 5 seed: Playwright MCP-backed Quality assurance agent, /research report, /plan, and the barcode/QR feature across assets-svc (.NET) and web (Astro) with tests.
---
Expand Down Expand Up @@ -157,15 +157,15 @@ index 0000000..64d3870
+> [!NOTE]
+> This report is evidence for the decision, not the decision itself. If a reviewer prefers a different option that still satisfies the pure-managed + SVG + permissive-license constraints, the integration sketch is the only part that changes.
diff --git a/services/assets-svc/AssetsService.csproj b/services/assets-svc/AssetsService.csproj
index adeaf54..db736a3 100644
index 8a74b57..40c8bcd 100644
--- a/services/assets-svc/AssetsService.csproj
+++ b/services/assets-svc/AssetsService.csproj
@@ -9,6 +9,7 @@
<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.4" />
<PackageReference Include="Dapper" Version="2.1.79" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.11" />
+ <PackageReference Include="Net.Codecrete.QrCodeGenerator" Version="2.0.5" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.2.3" />
</ItemGroup>
<ItemGroup>
diff --git a/services/assets-svc/Data/AssetsDb.cs b/services/assets-svc/Data/AssetsDb.cs
Expand Down
Loading
Loading