= Template Placeholders
# Template Placeholders

All placeholders in this template follow the `{{PLACEHOLDER}}` pattern.
After cloning, replace them with your project-specific values.

## Recommended: Interactive Bootstrap

```bash
just init
```

This interactively prompts for all values, replaces every placeholder,
validates the result, and runs k9-svc checks if available.

## Manual Replace

```bash
# If you prefer manual replacement (run from repo root)

sed -i 's/{{AUTHOR}}/Jane Doe/g' $(grep -rl '{{AUTHOR}}' .)
sed -i 's/{{AUTHOR_EMAIL}}/jane@example.org/g' $(grep -rl '{{AUTHOR_EMAIL}}' .)
sed -i 's/{{OWNER}}/my-org/g' $(grep -rl '{{OWNER}}' .)
sed -i 's/{{PROJECT_NAME}}/my-project/g' $(grep -rl '{{PROJECT_NAME}}' .)
sed -i 's/{{PROJECT}}/MY_PROJECT/g' $(grep -rl '{{PROJECT}}' .)
sed -i 's/{{project}}/my_project/g' $(grep -rl '{{project}}' .)
sed -i 's/{{REPO}}/my-project/g' $(grep -rl '{{REPO}}' .)
sed -i 's/{{FORGE}}/github.com/g' $(grep -rl '{{FORGE}}' .)
sed -i "s/{{CURRENT_YEAR}}/$(date +%Y)/g" $(grep -rl '{{CURRENT_YEAR}}' .)
sed -i "s/{{CURRENT_DATE}}/$(date +%Y-%m-%d)/g" $(grep -rl '{{CURRENT_DATE}}' .)
```

## Placeholder Reference

### Author & Copyright

| Placeholder | Description | Example | Files |
|---|---|---|---|
| `{{AUTHOR}}` | Full legal name | `Jane Doe` | SPDX headers (all files), MAINTAINERS.md, .mailmap, .reuse/dep5, docs/AI-CONVENTIONS.md |
| `{{AUTHOR_EMAIL}}` | Primary contact email | `jane@example.org` | SPDX headers (all files), .mailmap, .reuse/dep5, .well-known/humans.txt |
| `{{AUTHOR_EMAIL_ALT}}` | Previous/secondary email (for .mailmap) | `old@example.com` | .mailmap |
| `{{AUTHOR_ORG}}` | Author's organization/affiliation | `Acme University` | project-metadata.k9.ncl |
| `{{AUTHOR_LAST}}` | Author surname (for citations) | `Doe` | docs/CITATIONS.adoc |
| `{{AUTHOR_FIRST}}` | Author first name (for citations) | `Jane` | docs/CITATIONS.adoc |
| `{{AUTHOR_INITIALS}}` | Author initials (for citations) | `J.` | docs/CITATIONS.adoc |

### Project Identity

| Placeholder | Description | Example | Files |
|---|---|---|---|
| `{{PROJECT_NAME}}` | Human-readable project name | `My Project` | SECURITY.md, CODE_OF_CONDUCT.md, TOPOLOGY.md, STATE.a2ml, Justfile, GOVERNANCE.md, MAINTAINERS.md, flake.nix, devcontainer.json |
| `{{PROJECT_DESCRIPTION}}` | One-line description | `A tool for X` | flake.nix |
| `{{PROJECT}}` | Uppercase identifier (for Idris2 modules, C macros) | `MY_PROJECT` | ABI-FFI-README.md, src/interface/abi/*.idr, src/interface/ffi/*.zig |
| `{{project}}` | Lowercase identifier (for C symbols, filenames) | `my_project` | ABI-FFI-README.md, src/interface/ffi/*.zig |
| `{{REPO}}` | Repository name (slug) | `my-project` | CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md, cliff.toml |
| `{{OWNER}}` | GitHub/GitLab org or username | `my-org` | SPDX headers, CONTRIBUTING.md, SECURITY.md, GOVERNANCE.md, MAINTAINERS.md, CODEOWNERS, mirror.yml, cliff.toml |
| `{{FORGE}}` | Git forge domain | `github.com` | CONTRIBUTING.md |

### Dates

| Placeholder | Description | Example | Files |
|---|---|---|---|
| `{{CURRENT_YEAR}}` | Current year | `2026` | SPDX headers (all files), GOVERNANCE.md, MAINTAINERS.md |
| `{{CURRENT_DATE}}` | Current date (ISO) | `2026-02-14` | STATE.a2ml, MAINTAINERS.md |
| `{{DATE}}` | Last updated date | `2026-02-14` | TOPOLOGY.md, THREAT-MODEL.md |

### Contact & Security

| Placeholder | Description | Example | Files |
|---|---|---|---|
| `{{SECURITY_EMAIL}}` | Security contact email | `security@example.org` | SECURITY.md |
| `{{PGP_FINGERPRINT}}` | 40-char PGP fingerprint | `ABCD 1234 ...` | SECURITY.md |
| `{{PGP_KEY_URL}}` | URL to public PGP key | `https://keys.openpgp.org/...` | SECURITY.md |
| `{{WEBSITE}}` | Project website | `https://example.org` | SECURITY.md |
| `{{CONDUCT_EMAIL}}` | Conduct reports email | `conduct@example.org` | CODE_OF_CONDUCT.md |
| `{{CONDUCT_TEAM}}` | Conduct committee name | `Code of Conduct Committee` | CODE_OF_CONDUCT.md |
| `{{RESPONSE_TIME}}` | SLA for initial response | `48 hours` | CODE_OF_CONDUCT.md |

### Git

| Placeholder | Description | Example | Files |
|---|---|---|---|
| `{{MAIN_BRANCH}}` | Main branch name | `main` | CONTRIBUTING.md |

### Build

| Placeholder | Description | Example | Files |
|---|---|---|---|
| `{{LICENSE}}` | License name | `PMPL-1.0-or-later` | ABI-FFI-README.md |
| `{{PROJECT_PURPOSE}}` | One-line project description | `FFI bridges between languages` | STATE.a2ml |

### AI Manifest

| Placeholder | Description | Example | Files |
|---|---|---|---|
| `[YOUR-REPO-NAME]` | Repository name | `my-project` | 0-AI-MANIFEST.a2ml |
| `[DATE]` | Creation date | `2026-02-14` | 0-AI-MANIFEST.a2ml |
| `[YOUR-NAME/ORG]` | Maintainer name | `hyperpolymath` | 0-AI-MANIFEST.a2ml |

### AI Installation Guide

| Marker | Description | Files |
|---|---|---|
| `[TODO-AI-INSTALL]` | Unfilled section in AI installation guide | `docs/AI_INSTALLATION_GUIDE.adoc`, `docs/AI-INSTALL-README-SECTION.adoc`, `README.adoc` |

These are **not** standard `{{PLACEHOLDER}}` markers -- they are TODO markers
that must be replaced with project-specific content before release. They mark
sections where the developer (or AI) must fill in:

- What questions the AI should ask the user
- Exact prerequisite check and install commands
- Privacy notice specific to this project
- Complete installation command block
- Credential setup instructions (URLs, scopes, env vars)
- Verification commands and expected output
- Error handling table
- Example conversation

**finishbot checks:** `just validate-ai-install` verifies no `[TODO-AI-INSTALL]` markers remain.

## Deletion Markers

Some files contain deletion instructions:

| Marker | Meaning | File |
|---|---|---|
| `{{~ ... ~}}` | Delete this entire line after reading | ABI-FFI-README.md (line 1) |

## Verification

After replacing all placeholders, verify none remain:

```bash
grep -rn '{{' . --include='*.md' --include='*.adoc' --include='*.a2ml' \
  --include='*.scm' --include='*.idr' --include='*.zig' --include='*.res' \
  --include='Justfile' --include='*.nix' --include='*.toml' --include='*.yml' \
  --include='*.yaml' --include='*.hs' --include='*.ncl' --include='*.txt' \
  --include='*.json' --include='Containerfile' --include='dep5' \
  | grep -v 'PLACEHOLDERS.md' | grep -v 'node_modules'
```

If the above command produces no output, all placeholders have been replaced.
