aboutsummaryrefslogtreecommitdiff
path: root/docs/POLICY.txt
diff options
context:
space:
mode:
Diffstat (limited to 'docs/POLICY.txt')
-rw-r--r--docs/POLICY.txt74
1 files changed, 74 insertions, 0 deletions
diff --git a/docs/POLICY.txt b/docs/POLICY.txt
new file mode 100644
index 0000000..f9e3614
--- /dev/null
+++ b/docs/POLICY.txt
@@ -0,0 +1,74 @@
+Copyright (C) 2026 Doan Luu Duc Tai <doan@luuduct.ai>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+PROJECT CONVENTIONS
+
+ License: GNU Affero General Public License, version 3 or later.
+ SPDX identifier: AGPL-3.0-or-later.
+ Copyright holder: Doan Luu Duc Tai <doan@luuduct.ai>, 2026.
+
+ Every nontrivial first-party source, configuration, template, and prose
+ file carries the AGPL copyright and permission header. LICENSE is the
+ unmodified license text. Binary public keys and empty WKD policy files
+ retain their protocol format. Generated Cargo.lock retains Cargo's own
+ metadata as well as the project notice.
+
+ Do not add explanatory source comments. Express intent through structure
+ and names. Legal headers are the required exception. Use .txt for prose
+ documentation. The generated HTML license page is an explicit exception.
+ Rust documentation attributes provide crate metadata without comments.
+
+ Keep configured secrets only in the root .env. Never commit .env or var/.
+ .env.example lists required keys with placeholders. Public hostnames,
+ public GPG keys, paths, configuration, and source belong in Git.
+ TLS account/certificate private keys, databases, and other generated
+ private state are persistent data in var/data, not .env configuration.
+ The GPG secret key and revocation certificate remain outside this project.
+
+STRICTNESS
+
+ Preserve the requested Rust and Clippy deny groups, including pedantic
+ and nursery. The one additional exception is redundant_pub_crate: its
+ advice to make internal binary items public conflicts with unreachable_pub,
+ which remains denied. Internal interfaces remain explicitly crate-private.
+ No unsafe code, unwrap, expect, todo, debug output, arithmetic shortcuts,
+ or broad warning suppression is introduced.
+
+ cargo-deny rejects duplicate crate versions, wildcard requirements, unknown
+ registries, unknown Git sources, and yanked versions. There are no duplicate
+ version skip exceptions. Its AGPL allowance is scoped to this package.
+ The dependency allowlist retains the requested permissive licenses and
+ Zlib; an unused allowance may produce an informational audit warning.
+
+ Human license names follow https://www.gnu.org/licenses/license-list.html.
+ In particular, display Expat License for SPDX MIT. Do not alter original
+ copyright notices, legal texts, crate metadata, or machine SPDX identifiers.
+ cargo-about covers Rust dependencies. Supporting container applications
+ and their operating-system packages carry additional upstream licenses.
+
+PORTABILITY
+
+ All first-party project files and state live below stack/. Standard host
+ integration consists of packages, subordinate UID/GID allocations, one
+ low-port sysctl setting, user linger, and a systemd user-service link.
+ Host SSH keys, firewall policy, accounts, and disks are host administration,
+ not application export contents.
+
+ Releases currently contain a static x86_64 Linux command and native
+ linux/amd64 container images. They are portable across compatible x86_64
+ Linux machines. An ARM machine needs a native release build; the command
+ rejects mismatched production images. Development mode may fetch/build
+ native images on an architecture mismatch. Container source and Rust
+ source are public so new targets can be added without restoring an OS.