Sets up the initial project skeleton so real work has rails to run on:
uv workspace tying nisse-core, nisse-dev, nisse-ops together (src layouts; agents depend on nisse-core via workspace source)
Placeholder hello-world apps: nisse-dev / nisse-ops console entry points calling through nisse-core, exercising the package boundary from day one
Unit test framework: pytest, one suite per package under each package's tests/
Integration test framework: tests/integration/ runs the installed console scripts as real subprocesses, gated behind a strict integration marker (pytest -m integration)
Linting: ruff lint + import sorting + format check, configured at the workspace root
Gitea CI: .gitea/workflows/ci.yml runs lint, format check, unit and integration tests on push and PR; scripts/check.sh runs the identical sequence locally
All checks pass locally: lint and format clean, 3 unit tests and 2 integration tests green.
Note: the workflow expects a runner with the ubuntu-latest label and network access to astral.sh (for the uv installer).
Sets up the initial project skeleton so real work has rails to run on:
- **uv workspace** tying `nisse-core`, `nisse-dev`, `nisse-ops` together (src layouts; agents depend on `nisse-core` via workspace source)
- **Placeholder hello-world apps**: `nisse-dev` / `nisse-ops` console entry points calling through `nisse-core`, exercising the package boundary from day one
- **Unit test framework**: pytest, one suite per package under each package's `tests/`
- **Integration test framework**: `tests/integration/` runs the installed console scripts as real subprocesses, gated behind a strict `integration` marker (`pytest -m integration`)
- **Linting**: ruff lint + import sorting + format check, configured at the workspace root
- **Gitea CI**: `.gitea/workflows/ci.yml` runs lint, format check, unit and integration tests on push and PR; `scripts/check.sh` runs the identical sequence locally
All checks pass locally: lint and format clean, 3 unit tests and 2 integration tests green.
Note: the workflow expects a runner with the `ubuntu-latest` label and network access to astral.sh (for the uv installer).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
- uv workspace tying nisse-core, nisse-dev, nisse-ops together
(src layouts, workspace-sourced nisse-core dependency)
- Placeholder hello-world entry points for both agents, calling
through nisse-core to exercise the package boundary
- pytest unit tests per package; integration tests (marker-gated)
running the installed console scripts as subprocesses
- ruff lint + format, nisse_* declared first-party
- Gitea Actions workflow running lint, format check, unit and
integration tests; scripts/check.sh mirrors it locally
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Sets up the initial project skeleton so real work has rails to run on:
nisse-core,nisse-dev,nisse-opstogether (src layouts; agents depend onnisse-corevia workspace source)nisse-dev/nisse-opsconsole entry points calling throughnisse-core, exercising the package boundary from day onetests/tests/integration/runs the installed console scripts as real subprocesses, gated behind a strictintegrationmarker (pytest -m integration).gitea/workflows/ci.ymlruns lint, format check, unit and integration tests on push and PR;scripts/check.shruns the identical sequence locallyAll checks pass locally: lint and format clean, 3 unit tests and 2 integration tests green.
Note: the workflow expects a runner with the
ubuntu-latestlabel and network access to astral.sh (for the uv installer).🤖 Generated with Claude Code