MailFathom.code-workspace
Rama main · réplica de lectura del repositorio original.
// Copyright © 2026 Krzysztof Kasprowicz
// Licensed under the GNU Affero General Public License, Version 3. See LICENSE in the project root for license information.
// Project repository: https://github.com/fathomise/MailFathom
//
// The VS Code entry point for this repository, because the repository root is not a solution directory. The service
// owns its own solution — backend/MailFathom.slnx — so a root opened on its own loads nothing and C# Dev Kit finds no
// project. Open this file instead, with `code MailFathom.code-workspace` or File → Open Workspace from File.
//
// This is a VS Code file and nothing else reads it. Rider and Visual Studio open a solution directly and neither has
// the problem it solves. `.vscode/` stays gitignored, which is why every section below is inline here rather than in
// a per-user file the repository would have to start tracking.
{
// The service, and then the repository itself for everything belonging to neither stack — `docs/`, `deploy/`,
// `scripts/`, `.github/`, `frontend/`, and the root files. `files.exclude` below keeps the service from appearing
// twice under it.
//
// There is no `client` entry, because there is nothing for it to open: the Uno Platform client was withdrawn and the
// client is being rebuilt in React, so `frontend/` holds two placeholder directories and no solution. It is read
// under `repository` until the new stack arrives with whatever its own editor tooling turns out to be.
"folders": [
{
"name": "service",
"path": "backend"
},
{
"name": "repository",
"path": "."
}
],
"settings": {
// Applied per folder root, so this hides the service from the `repository` entry and reaches nothing inside
// `backend`, which contains no directory by that name. Quick Open and search still find every file in it, through
// the folder that owns it.
"files.exclude": {
"backend": true
},
// The lock files, the golden manifests, and the generated site are read rather than edited, and a search that
// returns them buries the file that was actually being looked for.
"search.exclude": {
"**/packages.lock.json": true,
"deploy/helm/mailfathom/ci/golden": true,
"docfx/_site": true
},
// The build already enforces this through `.editorconfig`, `EnforceCodeStyleInBuild`, and `TreatWarningsAsErrors`.
// Applying it on save is what keeps a formatting failure out of the gate rather than into it.
"editor.formatOnSave": true,
"[csharp]": {
"editor.defaultFormatter": "ms-dotnettools.csharp"
},
// `.slnx` is the solution format the service uses, and VS Code has no built-in association for it.
"files.associations": {
"*.slnx": "xml",
"*.code-workspace": "jsonc"
},
// The SDK is pinned through the root `global.json`, so nothing here should reach for another one.
"dotnet.dotnetPath": "",
"dotnet.server.useOmnisharp": false
},
"extensions": {
// What a fresh machine is prompted to install. C# Dev Kit loads the solution, and the YAML extension is for the
// workflows and the Helm chart. Neither is a dependency of what MailFathom ships — they are editor tooling, and
// the third-party register covers what the product carries rather than what a contributor's editor loads.
"recommendations": [
"ms-dotnettools.csdevkit",
"ms-dotnettools.csharp",
"redhat.vscode-yaml"
]
},
"launch": {
"version": "0.2.0",
"configurations": [
// The whole local system: PostgreSQL, the migration run, and the service, in the order the app model declares.
// This is the same thing `dotnet run --project backend/src/AppHost/AppHost.csproj` starts, with a debugger
// attached to the app host itself rather than to the resources it launches.
{
"name": "Service: app host with the whole orchestration",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build the app host",
"program": "${workspaceFolder:service}/src/AppHost/bin/Debug/net10.0/MailFathom.AppHost.dll",
"cwd": "${workspaceFolder:service}/src/AppHost",
"console": "internalConsole",
"stopAtEntry": false,
"env": {
"DOTNET_ENVIRONMENT": "Development"
},
// The dashboard address is the first thing the app host writes, and opening it is what makes the run usable.
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\blogin\\?t=[a-z0-9]+"
}
}
]
},
"tasks": {
"version": "2.0.0",
"tasks": [
{
"label": "build the app host",
"detail": "Builds backend/src/AppHost, which is what the service launch configuration runs.",
"type": "process",
"command": "dotnet",
"args": [
"build",
"${workspaceFolder:service}/src/AppHost/AppHost.csproj"
],
"problemMatcher": "$msCompile",
"group": "build"
},
{
"label": "verify: fast loop",
"detail": "scripts/verify-fast.sh — the loop to run while implementing.",
"type": "shell",
"command": "./scripts/verify-fast.sh",
"options": {
"cwd": "${workspaceFolder:repository}"
},
"problemMatcher": [],
"group": "test"
},
{
"label": "verify: full gate",
"detail": "scripts/verify-full.sh — the gate to pass before committing. Stage the task's files first.",
"type": "shell",
"command": "./scripts/verify-full.sh",
"options": {
"cwd": "${workspaceFolder:repository}"
},
"problemMatcher": [],
"group": "test"
}
]
}
}