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
2 changes: 1 addition & 1 deletion apps/server/src/http/security.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export function buildApiCspDirectives(): ApiCspDirectives {
* SPA, політика задається на CDN-рівні (Vercel headers). **NB:** після
* видалення Replit-режиму (2026-06-08) runtime ніколи не передає
* `servesFrontend: true` — `config.servesFrontend` завжди `false`; ця гілка
* лишається лише як generic capability (kандидат на видалення окремим PR).
* лишається лише як generic capability (кандидат на видалення окремим PR).
* - `servesFrontend: false` (дефолт) — API-only (Railway). CSP буде строгою
* (див. buildApiCspDirectives). `CSP_REPORT_ONLY=1` переводить її у
* report-only-режим — корисно під час phased-rollout: браузер логує
Expand Down
25 changes: 13 additions & 12 deletions apps/server/src/routes/barcode.contract.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,15 @@ import {
type BarcodeErrorFixtureCase,
} from "@sergeant/shared";

// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────
// Dynamic import to pick up __barcodeTestHooks for cache reset.
// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────

import handler, { __barcodeTestHooks } from "../modules/nutrition/barcode.js";

// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────
// Helpers
// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────

interface TestRes {
statusCode: number;
Expand Down Expand Up @@ -112,19 +113,19 @@ afterEach(() => {
vi.restoreAllMocks();
});

// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────
// Fixture self-check (fires before any handler test)
// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────

describe("contract: /api/barcode producer — fixture integrity", () => {
it("every named fixture in @sergeant/shared parses through its schema", () => {
expect(() => assertBarcodeFixturesValid()).not.toThrow();
});
});

// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────
// Success shape — handler emits { product: BarcodeProduct }
// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────

const SUCCESS_NAMES: readonly BarcodeSuccessFixtureCase[] = [
"offFull",
Expand Down Expand Up @@ -209,9 +210,9 @@ describe("contract: /api/barcode producer — success envelope", () => {
});
});

// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────
// Error shape — handler emits { error: string }
// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────

const ERROR_NAMES: readonly BarcodeErrorFixtureCase[] = [
"notFound",
Expand Down Expand Up @@ -278,9 +279,9 @@ describe("contract: /api/barcode producer — error envelope", () => {
});
});

// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────
// Cross-side invariants — ensure producer and consumer shapes are compatible
// ──────────────────────────────────────────────────────────────────────────────
// ────────────────────────────────────────────────────────────────────────────────

describe("contract: /api/barcode producer ↔ consumer shape invariants", () => {
it("shared success fixtures that parse on producer side also encode to the same JSON the consumer expects", () => {
Expand Down
8 changes: 2 additions & 6 deletions docs/02-engineering/architecture/diagrams/c3-workspaces.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# C3 — Workspace dependency graph

> **Last validated:** 2026-06-08 by @Skords-01. **Next review:** 2026-09-06.
> **Last validated:** 2026-06-09 by @Skords-01. **Next review:** 2026-09-07.
> **Status:** Active

<!-- AUTO-GENERATED FILE. Do not edit by hand. Regenerate via `pnpm docs:gen-architecture-diagrams`. -->
Expand All @@ -19,9 +19,6 @@ flowchart LR
apps_server["@sergeant/server"]
apps_web["@sergeant/web"]
end
subgraph tools["tools"]
tools_openclaw["@sergeant/openclaw"]
end
subgraph packages["packages"]
packages_api_client["@sergeant/api-client"]
packages_config["@sergeant/config"]
Expand Down Expand Up @@ -65,13 +62,12 @@ flowchart LR
classDef tool fill:#b45309,stroke:#7c2d12,color:#fff
classDef package fill:#15803d,stroke:#166534,color:#fff
class apps_mobile,apps_mobile_shell,apps_server,apps_web app
class tools_openclaw tool
class packages_api_client,packages_config,packages_db_schema,packages_design_tokens,packages_eslint_plugin_sergeant_design,packages_finyk_domain,packages_fizruk_domain,packages_insights,packages_nutrition_domain,packages_openclaw_plugin,packages_routine_domain,packages_shared package
```

## Stats

- **17** workspaces total — 4 apps, 12 packages, 1 tool.
- **16** workspaces total — 4 apps, 12 packages, 0 tools.
- **24** cross-workspace import edges.

## Top imported workspaces
Expand Down
8 changes: 4 additions & 4 deletions docs/04-governance/governance/freshness-dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -1185,10 +1185,10 @@ <h1>Sergeant — Docs Freshness Dashboard</h1>
</tr>
<tr class="fresh">
<td><code>docs/02-engineering/architecture/diagrams/c3-workspaces.md</code></td>
<td class="status">Fresh (89d)</td>
<td>2026-06-08</td>
<td>2026-09-06</td>
<td class="num days">89</td>
<td class="status">Fresh (90d)</td>
<td>2026-06-09</td>
<td>2026-09-07</td>
<td class="num days">90</td>
<td>@Skords-01.</td>
<td class="num">90</td>
</tr>
Expand Down
18 changes: 9 additions & 9 deletions docs/04-governance/governance/knowledge-graph.html
Original file line number Diff line number Diff line change
Expand Up @@ -677,7 +677,7 @@ <h1>Sergeant — Knowledge Graph</h1>
>
</td>
<td>Active</td>
<td>number=47 · last_validated=2026-06-08</td>
<td>number=47 · last_validated=2026-06-09</td>
</tr>
<tr>
<td>adr</td>
Expand Down Expand Up @@ -714,7 +714,7 @@ <h1>Sergeant — Knowledge Graph</h1>
>
</td>
<td>Accepted</td>
<td>number=50 · last_validated=2026-06-08</td>
<td>number=50 · last_validated=2026-06-09</td>
</tr>
<tr>
<td>adr</td>
Expand Down Expand Up @@ -752,7 +752,7 @@ <h1>Sergeant — Knowledge Graph</h1>
>
</td>
<td>Accepted</td>
<td>number=53 · last_validated=2026-06-08</td>
<td>number=53 · last_validated=2026-06-09</td>
</tr>
<tr>
<td>adr</td>
Expand Down Expand Up @@ -801,7 +801,7 @@ <h1>Sergeant — Knowledge Graph</h1>
>
</td>
<td>Active</td>
<td>number=58 · last_validated=2026-06-08</td>
<td>number=58 · last_validated=2026-06-09</td>
</tr>
<tr>
<td>adr</td>
Expand All @@ -814,7 +814,7 @@ <h1>Sergeant — Knowledge Graph</h1>
>
</td>
<td>Active</td>
<td>number=59 · last_validated=2026-06-08</td>
<td>number=59 · last_validated=2026-06-09</td>
</tr>
<tr>
<td>adr</td>
Expand All @@ -827,7 +827,7 @@ <h1>Sergeant — Knowledge Graph</h1>
>
</td>
<td>Active</td>
<td>number=60 · last_validated=2026-06-08</td>
<td>number=60 · last_validated=2026-06-09</td>
</tr>
<tr>
<td>adr</td>
Expand All @@ -839,7 +839,7 @@ <h1>Sergeant — Knowledge Graph</h1>
>
</td>
<td>Active</td>
<td>number=61 · last_validated=2026-06-08</td>
<td>number=61 · last_validated=2026-06-09</td>
</tr>
<tr>
<td>adr</td>
Expand All @@ -864,7 +864,7 @@ <h1>Sergeant — Knowledge Graph</h1>
>
</td>
<td>Accepted</td>
<td>number=63 · last_validated=2026-06-08</td>
<td>number=63 · last_validated=2026-06-09</td>
</tr>
<tr>
<td>adr</td>
Expand Down Expand Up @@ -904,7 +904,7 @@ <h1>Sergeant — Knowledge Graph</h1>
>
</td>
<td>Active</td>
<td>number=66 · last_validated=2026-06-08</td>
<td>number=66 · last_validated=2026-06-09</td>
</tr>
<tr>
<td>audit</td>
Expand Down
18 changes: 9 additions & 9 deletions docs/04-governance/governance/knowledge-graph.json
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@
"tier": "core",
"meta": {
"number": 47,
"last_validated": "2026-06-08"
"last_validated": "2026-06-09"
}
},
{
Expand Down Expand Up @@ -539,7 +539,7 @@
"tier": "core",
"meta": {
"number": 50,
"last_validated": "2026-06-08"
"last_validated": "2026-06-09"
}
},
{
Expand Down Expand Up @@ -573,7 +573,7 @@
"tier": "core",
"meta": {
"number": 53,
"last_validated": "2026-06-08"
"last_validated": "2026-06-09"
}
},
{
Expand Down Expand Up @@ -619,7 +619,7 @@
"tier": "core",
"meta": {
"number": 58,
"last_validated": "2026-06-08"
"last_validated": "2026-06-09"
}
},
{
Expand All @@ -631,7 +631,7 @@
"tier": "core",
"meta": {
"number": 59,
"last_validated": "2026-06-08"
"last_validated": "2026-06-09"
}
},
{
Expand All @@ -643,7 +643,7 @@
"tier": "core",
"meta": {
"number": 60,
"last_validated": "2026-06-08"
"last_validated": "2026-06-09"
}
},
{
Expand All @@ -655,7 +655,7 @@
"tier": "core",
"meta": {
"number": 61,
"last_validated": "2026-06-08"
"last_validated": "2026-06-09"
}
},
{
Expand All @@ -678,7 +678,7 @@
"tier": "core",
"meta": {
"number": 63,
"last_validated": "2026-06-08"
"last_validated": "2026-06-09"
}
},
{
Expand Down Expand Up @@ -712,7 +712,7 @@
"tier": "core",
"meta": {
"number": 66,
"last_validated": "2026-06-08"
"last_validated": "2026-06-09"
}
},
{
Expand Down
Loading
Loading