feat: migrate state and complete live systems

- replace the Haskell bridge with transactional SQLite state and validation

- centralize versions and harden resource, capture, and release tooling

- complete active gacha schedules, point exchange, and mail grants

- add equipment refinement, presets, and ordinary formation workflows

- improve client plugins, request timing, and normalized persistence
This commit is contained in:
2026-09-24 22:43:03 +08:00
parent 113e941bef
commit f94cfa1cf3
162 changed files with 13714 additions and 12632 deletions
+6 -3
View File
@@ -15,10 +15,14 @@ import json
from pathlib import Path, PurePosixPath
import re
import shutil
import tempfile
from google.protobuf import descriptor_pb2
try:
from .inherited_stage import create_inherited_stage
except ImportError: # Direct script execution.
from inherited_stage import create_inherited_stage
TOOL = "bd2.extract_client_proto"
MANIFEST = ".bd2-proto-extract-manifest.json"
@@ -83,8 +87,7 @@ def is_managed(output: Path) -> bool:
def stage_for(output: Path) -> Path:
if output.exists() and not is_managed(output):
raise FileExistsError(f"refusing to overwrite non-managed output directory: {output}")
output.parent.mkdir(parents=True, exist_ok=True)
return Path(tempfile.mkdtemp(prefix=f".{output.name}.", dir=output.parent))
return create_inherited_stage(output)
def extract_descriptor(path: Path) -> descriptor_pb2.FileDescriptorProto | None: