Project structure
This document is the authority for organizing the aslice repository. It defines where contributors place durable project material and how the C++ implementation is organized. Paths marked planned below do not yet exist in the tracked tree.
Directory responsibilities
| Path | Status | Responsibility |
|---|---|---|
docs/ |
Existing | Durable aslice specifications, guides, policies, and operational documentation. |
docs/sqlite/ |
Existing | Executable SQLite schema companions owned by DATABASE; these are specification assets, not runtime services. |
docs/runbooks/ |
Existing | Standalone operational runbooks for project bring-up, signing, and recovery. See the runbooks index. |
docs/refs/ |
Existing | Supporting source archive, with captured references, provenance, licenses, and checksums. See the archive guide. |
docs/library/ |
Existing | Captured documentation sites with original resources, provenance, checksums, and local replay. See the library guide. |
man/ |
Existing | Command manuals. See the manual index. |
schematics/ |
Existing | Machine-readable contracts for project formats and build interfaces. See the schematics guide. |
tests/ |
Existing | Validation code, regression tests, and fixtures. |
.agents/skills/ |
Existing | Repository automation skills and their supporting instructions and scripts. |
src/ |
Existing | C++ implementation and private headers, grouped by the subsystem responsibilities below. |
include/aslice/ |
Planned | Headers deliberately exposed to consumers outside the implementation. |
.github/workflows/ |
Existing | Required Linux quality/sanitizer, native Windows analysis/test, and documentation CI gates. |
tools/ |
Existing | Reusable developer utilities, including Windows dependency bootstrap; the Homebrew formula importer remains planned. |
tools/dev/ |
Existing | Recipes behind the root dev.py entrypoint and optional Makefile: builds, tests, quality tools, packaging, and read-only build audits. |
tools/simulator/ |
Existing | Modeled-platform services, Darwin compatibility runtime, and simulator application; these are development infrastructure, not package-manager implementation. |
tools/simulator/web/ |
Existing | Feature-based TypeScript console and browser compatibility build. |
tests/dev/ |
Existing | Developer entrypoint, packaging, and application lifecycle tests. |
Durable documentation and work records
Reserve docs/ for documentation that continues to describe aslice after a task
ends. Keep task plans, documentation audits, coverage reports, remediation
tracking, and scratch output outside the tracked tree. Use issues, pull requests,
or external temporary storage for these work records. Record lasting decisions
in the relevant specification, guide, or policy so readers can find the current
rules without reconstructing a task's history.
Place standalone operational runbooks under docs/runbooks/. Keep procedures
embedded in specifications with the contracts they explain. The source archive under
docs/refs/ supports that documentation and retains its own preservation rules.
Writing conventions and checker instructions are maintained in
CONTRIBUTING.md.
Implementation layout
| Path | Responsibility |
|---|---|
src/cli/ |
Command registry, generated help, argument validation, exit statuses, and JSON output. |
src/core/ |
Bounded JSON/file reads, shared errors, and SHA-256 support. |
src/package/ |
Validated identities, targets, candidates, versions, constraints, artifact manifests, and slice containers. |
src/adapters/ |
Unsigned fixture catalog, inline payload, and retained-generation JSON translation. |
src/resolver/ |
Candidate selection, dependency consistency, and profile collision checks. |
src/store/ |
Immutable fixture payload import and verification. |
src/profile/ |
Generation construction, activation, inspection, and rollback checks. |
src/platform/ |
Native file creation and POSIX directory synchronization, ownership, and locking. |
src/db/ |
Bounded read-only database snapshot queries. |
Portable package, resolver, store, and profile sources compile on both Windows and POSIX hosts. Platform operations live in separate translation units selected by CMake. Windows supports exclusive archive output; installation prefix locking and activation currently require POSIX. These are internal interfaces, not a public SDK or completed production installer. CMake follows those dependencies: core package and resolver libraries do not link the fixture adapter; store and profile libraries use it explicitly.
The src/platform/*simulator* implementations link only into modeled executables
and test peers. They share production-directed subsystem code through explicit
platform interfaces. CTest labels distinguish core, modeled, runtime, requirements,
library, and developer tests. The developer guide maps the
current boundaries, application entrypoints, and persistent state locations.
Organize src/ by subsystem, keeping implementation files and private headers
together. Place a header under include/aslice/ only when it is deliberately
exposed beyond the implementation; this reserved path does not establish a public
C++ API. Keep tests and fixtures in tests/, and reusable developer utilities in
tools/.
Create planned directories when they contain real implementation. Do not add
placeholder folders to reproduce this layout. Generated build output belongs in
ignored build directories, such as build/, out/, or cmake-build-*/, already
covered by .gitignore. These guidelines do not select a build
system or define a dependency-management policy.
Root-level files and new directories
Keep root-level files limited to project entry points, contributor policies,
licensing, and repository or build configuration. The existing README.md,
CONTRIBUTING.md, SECURITY.md, LICENSE, and Git configuration files serve
those purposes; this document supplies the repository organization policy.
Every new top-level directory must have a distinct purpose documented here when it is introduced. Extend an existing directory when its responsibility already covers the new material.