Use when building systems designed to last 100+ years.
Scanned 9/10/2026
Install to Claude Code
npx -y skills add LoopyLuci/Skills --skill century-architecture-patterns --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Century Architecture Patterns?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/loopyluci-century-architecture-patterns)More formats (shields.io, HTML) on the badges page.
---
name: century-architecture-patterns
description: "Use when building systems designed to last 100+ years."
version: 1.0.0
author: Hermes Agent
license: MIT
metadata:
hermes:
tags: [architecture, longevity, schema-versioning, self-healing, plugin-systems, atomic-writes, forward-compat]
related_skills: [system-design-patterns, software-design-patterns, hexagonal-architecture, domain-driven-design-tactical]
---
# Century Architecture Patterns
Building systems designed to operate without code changes for 100+ years.
Not a metaphor — concrete architectural patterns that survive technology
churn, schema evolution, platform migration, and developer turnover.
## When to Use
- Designing systems that must outlive their original framework
- Building tool platforms intended for external contribution
- Creating stateful systems where data longevity matters
- Architecting agent tool systems meant for multi-framework consumption
- Any system where the cost of migration exceeds the cost of foresight
## Core Principles
### 1. Zero Hardcoded Values
Every configurable value loads from external config files — never embedded in code.
New plugins, ecosystems, or patterns = new config file, not new code.
```python
# ❌ Brittle: hardcoded patterns
ECOSYSTEMS = {"kubernetes": {"patterns": ["pod", "deployment"]}}
# ✅ 100-year: loaded from config/ JSON files
config_dir = os.path.join(APP_DIR, 'config')
for fname in os.listdir(config_dir):
if fname.endswith('.json'):
ecosystems[fname.replace('.json','')] = json.load(open(os.path.join(config_dir, fname)))
```
**Why:** In year 47 when quantum kubernetes replaces container kubernetes, adding a new config file requires zero code changes.
### 2. Schema Versioning
Every state file carries a `schema_version` field. On load, auto-migrate from any older version. Unknown fields preserved — never dropped.
```python
STATE_SCHEMA = {"schema_version": "2.0.0", "created_at": None}
def load_state(path):
try:
data = json.load(open(path))
v = data.get("schema_version", "1.0.0")
if v != CURRENT_VERSION:
data = migrate(data, v, CURRENT_VERSION)
# Forward compat: preserve unknown keys
for k, default in STATE_SCHEMA.items():
data.setdefault(k, default)
return data
except (json.JSONDecodeError, FileNotFoundError):
return repair_from_backup(path)
def migrate(data, from_v, to_v):
chain = {
"1.0.0": lambda d: {**d, "schema_version": "2.0.0", "errors_recovered": 0},
"2.0.0": lambda d: {**d, "schema_version": "3.0.0", "tools_used": {}},
}
cursor = from_v
while cursor in chain:
data = chain[cursor](data)
cursor = data.get("schema_version", cursor)
return data
```
**Why:** In year 23 when someone upgrades the schema format, all existing state files automatically migrate. Old data is never lost — every migration is a function in the chain.
### 3. Self-Healing State
Detect corruption, repair from backup, or recreate from defaults automatically.
Never crash with a corrupt state file — always heal.
```python
def load_or_repair(path):
if not os.path.exists(path):
return create_fresh_state()
try:
return json.load(open(path))
except (json.JSONDecodeError, KeyError):
backup = path + ".bak"
if os.path.exists(backup):
try: return json.load(open(backup))
except: pass
return create_fresh_state()
```
**Why:** In year 14 when a cosmic ray flips a bit in the state file, the system doesn't die — it heals and logs the event.
### 4. Atomic Writes
Write to `.tmp`, then `os.replace()` — never half-written state, even on power failure.
```python
def save_state(path, data):
tmp = path + ".tmp"
with open(tmp, 'w') as f:
json.dump(data, f)
if os.path.exists(path):
shutil.copy2(path, path + ".bak") # Keep previous backup
os.replace(tmp, path) # Atomic on same filesystem
```
**Why:** In year 62 when the datacenter loses power mid-write, the state file is either the complete previous version or the complete new version — never a corrupted partial write.
### 5. Plugin-Based Architecture
New capabilities come as plugins (config files, scripts, modules) — not code changes to the core.
```
plugin-based-ecosystem/
├── core/ # Never changes
├── plugins/
│ ├── ecosystem-a/ # Added in year 3
│ ├── ecosystem-b/ # Added in year 15
│ └── quantum-x/ # Added in year 47 — no core changes
└── config/
├── ecosystems/
│ ├── default.json # Shipped with v1.0
│ └── custom.json # User added in year 22
```
### 6. Forward Compatibility
Never drop unknown fields. Preserve everything you don't understand.
A system from year 1 must still work with data written by year 50's version.
```python
class ForwardCompatibleConfig:
def __init__(self, data):
self.known = self._extract_known(data)
self.unknown = {k: v for k, v in data.items()
if k not in self.known}
def serialize(self):
return {**self.known, **self.unknown}
```
### 7. Graceful Degradation
Each subsystem fails independently. If one component is corrupt, others still work.
```python
class SkillGenesisModel:
def discover(self, ecosystems):
try:
return self.gap_detector.find_gaps(ecosystems)
except Exception as e:
self.memory.record_error("discover", str(e))
return [] # Return empty, don't crash
```
## Reference Implementation
See `references/genesis-model-architecture.md` for the complete reference
implementation — the Skill Genesis Model v3.0 built entirely on these principles.
## Common Pitfalls
1. **Over-engineering** — not every system needs 100-year architecture. Apply where data longevity matters (state files, user data, configuration registries). Don't use for ephemeral computation.
2. **Migration chain breaks** — if a migration function has a bug, all subsequent migrations fail. Test every migration path. Keep old migration functions even after they're superseded.
3. **No rollback plan** — migration should have a rollback path. Keep the `.bak` file from before migration. Test rollback as rigorously as migration.
4. **Silent data loss** — preserving unknown fields means bugs in unknown fields persist. Log the presence of unknown fields during migration so operators know they exist.
5. **Backup pollution** — every atomic write creates a `.bak` file. Implement retention policy (keep last 3-5 backups, oldest weekly backup).
## Verification Checklist
- [ ] Every configurable value loads from external files, not code
- [ ] State files carry schema_version with auto-migration chain
- [ ] Corrupt state self-heals from backup or defaults
- [ ] All state writes use atomic .tmp + replace pattern
- [ ] New capabilities require config changes, not code changes
- [ ] Unknown fields preserved during load/save cycles
- [ ] Subsystems fail independently (try/except each component)
- [ ] Migration chain tested for every version jump
- [ ] Backup retention policy implemented
- [ ] Graceful degradation: partial results > no results
## See Also
- `system-design-patterns` — general distributed system patterns
- `software-design-patterns` — classic GoF patterns
- `hexagonal-architecture` — port/adapter separation
- `domain-driven-design-tactical` — bounded contexts and aggregates
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!