Ctrl K
ComunidadGuías…

CONTRIBUTING.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Contributing

Channel Vault NAS is a self-hosted NAS archive console. Contributions are welcome,
but changes should keep the product focused on creator-owned media,
user-authorized backups, Google Takeout, and existing local NAS folders.

## Before Opening A PR

1. Read [Use Boundaries](docs/use-boundaries.md).
2. Read [Security Policy](SECURITY.md) if your change touches runtime settings,
   networking, logs, exports, or download execution.
3. Keep real downloads guarded. New UI flows must not start downloads without an
   explicit operator confirmation.
4. Prefer filesystem-relative archive paths and sidecar-backed recovery.

## Local Checks

Preferred public-alpha gate:

```bash
scripts/public-alpha-check.sh
```

Backend:

```bash
cd backend
source .venv/bin/activate
ruff check app tests scripts
pytest -q
```

Frontend:

```bash
cd frontend
npm run build
npm run e2e:smoke -- --project=chromium
```

Public screenshot refresh, only when README screenshots need updating:

```bash
cd frontend
CVN_CAPTURE_PUBLIC_SCREENSHOTS=true npx playwright test e2e/public-screenshots.spec.ts --project=chromium
```

Use `CVN_PUBLIC_ALPHA_SKIP_BROWSER=true scripts/public-alpha-check.sh` for a
fast non-browser release-gate pass while iterating locally.

## UI Changes

- Keep the first screen useful. Avoid landing-page-only work when the app can
  show an operational surface.
- Make queue/download actions explain whether they are dry-run, queued, locked,
  or live.
- Keep empty states actionable.
- Test desktop and mobile for layout overflow when changing panels or drawers.

## Docker Hub Descriptions

`docs/dockerhub-description.md` is the shared description for the API and web
images. Changes to it on `main` trigger the `Docker Hub descriptions` workflow,
which updates both repositories and verifies the published text.

The workflow uses the existing `DOCKERHUB_USERNAME` Actions secret and a separate
`DOCKERHUB_DESCRIPTION_TOKEN` secret. The description action requires a Docker Hub
personal access token with **Read, Write, Delete** permissions. For repositories
owned by an organization, the account also needs repository **Admin** access.
Store the token only in Actions secrets, not in source files or issue comments.

Keep `DOCKERHUB_TOKEN` for image publishing. A token that can push images may
still receive HTTP 403 when editing repository descriptions. After configuring
the description token, run `Docker Hub descriptions` manually from Actions on
`main`. Updating descriptions does not rebuild images or restart a NAS.

## Reporting Private Details

Do not paste private archive paths, source URLs, support bundles, logs, or
screenshots into public issues before checking them. Redact paths and source
identifiers when they are not needed for reproduction.

## Benchmarks And Attribution

Some repository-shaping patterns — the README front door, environment-split
Compose, same-origin frontend build, path-aware and least-privilege GitHub
Actions, and the release-evidence flow — were studied from a public MIT project
and then re-implemented independently for this domain. No source code, prose,
brand assets, or example data were copied.

| Field | Value |
| --- | --- |
| Reference | [`fastapi/full-stack-fastapi-template`](https://github.com/fastapi/full-stack-fastapi-template) |
| License | MIT |
| Reviewed on | 2026-08-12 |
| Verified commit | `c350936d2888ef16ff4f5549684fd8db54935a89` (default branch `master`) |
| Studied surfaces | `README.md`, `compose*.yml`, `.github/workflows/*` |
| Adaptation | Patterns only; independently re-implemented for NAS archive and recovery |

Repository-level MIT does not clear third-party image or dependency rights, so
introduced assets are self-made and dependencies are checked separately.