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
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@
bin/
obj/
dist/
build/
out/
.artifacts/
artifacts/
.dotnet-cli-home/
.nuke/temp/
restore*.log
*.log

Expand Down
129 changes: 129 additions & 0 deletions .nuke/build.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"Host": {
"type": "string",
"enum": [
"AppVeyor",
"AzurePipelines",
"Bamboo",
"Bitbucket",
"Bitrise",
"GitHubActions",
"GitLab",
"Jenkins",
"Rider",
"SpaceAutomation",
"TeamCity",
"Terminal",
"TravisCI",
"VisualStudio",
"VSCode"
]
},
"ExecutableTarget": {
"type": "string",
"enum": [
"BuildAll",
"BuildFrontend",
"Clean",
"Compile",
"Coverage",
"Mutation",
"Restore",
"RunLocal",
"Test",
"TestBackend",
"TestFrontend"
]
},
"Verbosity": {
"type": "string",
"description": "",
"enum": [
"Verbose",
"Normal",
"Minimal",
"Quiet"
]
},
"NukeBuild": {
"properties": {
"Continue": {
"type": "boolean",
"description": "Indicates to continue a previously failed build attempt"
},
"Help": {
"type": "boolean",
"description": "Shows the help text for this build assembly"
},
"Host": {
"description": "Host for execution. Default is 'automatic'",
"$ref": "#/definitions/Host"
},
"NoLogo": {
"type": "boolean",
"description": "Disables displaying the NUKE logo"
},
"Partition": {
"type": "string",
"description": "Partition to use on CI"
},
"Plan": {
"type": "boolean",
"description": "Shows the execution plan (HTML)"
},
"Profile": {
"type": "array",
"description": "Defines the profiles to load",
"items": {
"type": "string"
}
},
"Root": {
"type": "string",
"description": "Root directory during build execution"
},
"Skip": {
"type": "array",
"description": "List of targets to be skipped. Empty list skips all dependencies",
"items": {
"$ref": "#/definitions/ExecutableTarget"
}
},
"Target": {
"type": "array",
"description": "List of targets to be invoked. Default is '{default_target}'",
"items": {
"$ref": "#/definitions/ExecutableTarget"
}
},
"Verbosity": {
"description": "Logging verbosity during build execution. Default is 'Normal'",
"$ref": "#/definitions/Verbosity"
}
}
}
},
"allOf": [
{
"properties": {
"Configuration": {
"type": "string",
"description": "Configuration to build - Default is 'Debug' (local) or 'Release' (server)",
"enum": [
"Debug",
"Release"
]
},
"MutationScope": {
"type": "string",
"description": "Mutation scope: domain, application, both"
}
}
},
{
"$ref": "#/definitions/NukeBuild"
}
]
}
3 changes: 3 additions & 0 deletions .nuke/parameters.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"$schema": "./build.schema.json"
}
15 changes: 11 additions & 4 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
{
"chat.agent.enabled": true,
"files.exclude": {
"**/.vs":true,
"**/.codex": true,
"**/.ai": false,
"**/.ai": true,
"**/node_modules": true,
"**/bin": true,
"**/obj": true,
Expand All @@ -12,15 +13,21 @@
"**/.github": true,
"**/.artifacts": true,
"**/.dotnet-cli-home": true,
"**/.nuke": true,
"**/.dockerignore": true,
"**/.gitignore": false,
"**/.prettierignore": true,
"**/.specify": true,
},

"search.exclude": {
"**/dist": true,
"**/*.js.map": true
"**/*.js.map": true,
"**/bin": true,
"**/obj": true,
},
"sonarlint.connectedMode.project": {
"connectionId": "marciomyst",
"projectKey": "marciomyst_SmartMovieCatalog"
}

}
}
18 changes: 9 additions & 9 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ Prefer the narrowest verification command that covers the change. Run broader bu

## 4. Read First
- `CONTEXT.md` - repository context and backend/frontend routing rules.
- `docs/ARCHITECTURE.md` - current architecture, boundaries, and architecture decision rules.
- `docs/DOMAIN.md` - domain scope, candidate concepts, and domain constraints.
- `docs/API.md` - backend API design conventions.
- `docs/FRONTEND.md` - frontend structure and Angular guidance.
- `docs/TESTING.md` - verification and testing policy.
- `docs/SECURITY.md` - security and secret-handling rules.
- `docs/CONVENTIONS.md` - coding and commit conventions.
- `docs/ROADMAP.md` - planned direction and open decisions.
- `eng/docs/ARCHITECTURE.md` - current architecture, boundaries, and architecture decision rules.
- `eng/docs/DOMAIN.md` - domain scope, candidate concepts, and domain constraints.
- `eng/docs/API.md` - backend API design conventions.
- `eng/docs/FRONTEND.md` - frontend structure and Angular guidance.
- `eng/docs/TESTING.md` - verification and testing policy.
- `eng/docs/SECURITY.md` - security and secret-handling rules.
- `eng/docs/CONVENTIONS.md` - coding and commit conventions.
- `eng/docs/ROADMAP.md` - planned direction and open decisions.
- `.specify/memory/constitution.md` - repository-wide Spec Kit governance.
- `.specify/memory/constitution-backend.md` - backend-specific Spec Kit governance when backend files are in scope.
- `.specify/memory/constitution-frontend.md` - frontend-specific Spec Kit governance when frontend files are in scope.
Expand All @@ -57,7 +57,7 @@ If a referenced architecture document does not exist, do not invent rules from i
- `backend/src/SmartMovieCatalog.Contracts/` - public API contracts.
- `backend/tests/` - backend test projects.
- `frontend/` - Angular SPA.
- `docs/` - project documentation when present.
- `eng/docs/` - project documentation when present.

Do not read, modify, or base analysis on generated/vendor output unless explicitly required:
- `node_modules/`
Expand Down
8 changes: 4 additions & 4 deletions DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ This file defines the root-level product design policy for Smart Movie Catalog /
For implementation-level frontend tokens and component rules, read:

- `frontend/DESIGN.md`
- `docs/FRONTEND.md`
- `eng/docs/FRONTEND.md`

## Product Identity
- Product type: AI-assisted movie catalog and discovery experience.
Expand All @@ -15,12 +15,12 @@ For implementation-level frontend tokens and component rules, read:
## Design Source Of Truth
- Root product design policy: `DESIGN.md`.
- Angular implementation design system: `frontend/DESIGN.md`.
- Frontend engineering guidance: `docs/FRONTEND.md`.
- Frontend engineering guidance: `eng/docs/FRONTEND.md`.

If these documents conflict, prefer the most specific document:

1. `frontend/DESIGN.md` for component-level implementation.
2. `docs/FRONTEND.md` for frontend architecture and conventions.
2. `eng/docs/FRONTEND.md` for frontend architecture and conventions.
3. `DESIGN.md` for product-level visual direction.

## Experience Principles
Expand Down Expand Up @@ -67,4 +67,4 @@ If these documents conflict, prefer the most specific document:
## Change Control
- Update this file when product-level visual direction changes.
- Update `frontend/DESIGN.md` when implementation tokens, component specs, or frontend styling rules change.
- Update `docs/FRONTEND.md` when frontend structure, state management, or integration conventions change.
- Update `eng/docs/FRONTEND.md` when frontend structure, state management, or integration conventions change.
66 changes: 30 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,12 @@ Persistence, local JWT authentication, Clean Architecture layers, and Wolverine-
├── SmartMovieCatalog.slnx
├── docker-compose.yml
├── docker-compose.override.yml
├── docker/
│ └── README.md
├── eng/
│ ├── build/
│ ├── docs/
│ ├── scripts/
│ ├── docker/
│ └── .env.example
├── backend/
│ ├── src/
│ │ ├── SmartMovieCatalog.Api/
Expand All @@ -35,21 +39,6 @@ Persistence, local JWT authentication, Clean Architecture layers, and Wolverine-
│ ├── SmartMovieCatalog.Domain.Tests/
│ └── SmartMovieCatalog.Infrastructure.Tests/
├── frontend/
├── docs/
│ ├── ARCHITECTURE.md
│ ├── API.md
│ ├── CONVENTIONS.md
│ ├── DOMAIN.md
│ ├── FRONTEND.md
│ ├── ROADMAP.md
│ ├── SECURITY.md
│ ├── TESTING.md
│ └── adr/
├── scripts/
│ ├── build.ps1
│ ├── clean.ps1
│ ├── run-local.ps1
│ └── test.ps1
```

## Prerequisites
Expand All @@ -62,19 +51,24 @@ Persistence, local JWT authentication, Clean Architecture layers, and Wolverine-
From the repository root:

```bash
dotnet build SmartMovieCatalog.slnx
dotnet build backend/src/SmartMovieCatalog.Api/SmartMovieCatalog.Api.csproj
dotnet run --project eng/build/_build.csproj -- Compile
dotnet run --project eng/build/_build.csproj -- Test
dotnet run --project eng/build/_build.csproj -- BuildFrontend
```

PowerShell helpers:
NUKE targets:

```powershell
.\scripts\build.ps1
.\scripts\test.ps1
.\scripts\run-local.ps1
.\scripts\clean.ps1
.\eng\build.ps1 Compile
.\eng\build.ps1 Test
.\eng\build.ps1 Coverage
.\eng\build.ps1 Mutation --MutationScope both
.\eng\build.ps1 Clean
.\eng\build.ps1 RunLocal
```

Legacy wrappers are available in `eng/scripts/*.ps1`.

Docker:

```bash
Expand All @@ -93,7 +87,7 @@ The backend auth endpoints are:
- `POST /api/auth/authenticate`
- `GET /api/auth/me`

The Angular login screen is available at the SPA root. It calls `POST /api/auth/authenticate`, then `GET /api/auth/me`, through same-origin `/api` routes. In local frontend development, `frontend/src/proxy.conf.js` proxies `/api` to the backend.
The Angular home page is available at the SPA root (`/`). The Angular login screen is available at `/login`. It calls `POST /api/auth/authenticate`, then `GET /api/auth/me`, through same-origin `/api` routes. In local frontend development, `frontend/src/proxy.conf.js` proxies `/api` to the backend.

Health check:

Expand All @@ -112,7 +106,7 @@ npm start
Local environment:

```bash
cp .env.example .env
cp eng/.env.example .env
```

The example values are for local development only. Do not commit real secrets in `.env`.
Expand Down Expand Up @@ -149,7 +143,7 @@ ADMIN_SEED_NAME=Admin
The seed runs only during API startup. After changing `.env`, restart the API process or recreate the Docker Compose API container:

```powershell
.\scripts\run-local.ps1
.\eng\scripts\run-local.ps1
docker compose up -d --force-recreate api
```

Expand All @@ -163,15 +157,15 @@ docker compose up -d --force-recreate api
- Root design policy: `DESIGN.md`.

## Documentation
- Architecture: `docs/ARCHITECTURE.md`
- Domain direction: `docs/DOMAIN.md`
- API conventions: `docs/API.md`
- Frontend conventions: `docs/FRONTEND.md`
- Testing policy: `docs/TESTING.md`
- Security rules: `docs/SECURITY.md`
- Engineering conventions: `docs/CONVENTIONS.md`
- Roadmap: `docs/ROADMAP.md`
- Architecture decisions: `docs/adr`
- Architecture: `eng/docs/ARCHITECTURE.md`
- Domain direction: `eng/docs/DOMAIN.md`
- API conventions: `eng/docs/API.md`
- Frontend conventions: `eng/docs/FRONTEND.md`
- Testing policy: `eng/docs/TESTING.md`
- Security rules: `eng/docs/SECURITY.md`
- Engineering conventions: `eng/docs/CONVENTIONS.md`
- Roadmap: `eng/docs/ROADMAP.md`
- Architecture decisions: `eng/docs/adr`

## Safety
- Do not commit secrets, credentials, certificates, connection strings, or private keys.
Expand Down
Loading
Loading