wanderland-deployment-2026-01-15
Wanderland Deployment 2026-01-15
Date: January 15, 2026
Environment: devl β preprod β prod
Status: In Progress π
Overview
DynamoDB fence index deployment and unified poke/peek path resolution fix.
Components:
| Service | Image | Port |
|---|---|---|
| Stuffy (Nightingale) | devops/stuffy |
8080 |
| Oculus API | devops/oculus-api |
7778 |
URLs (devl):
- Nightingale: https://nightingale.dev.int.proquest.com
- Lantern (Oculus API): https://lantern.dev.int.proquest.com
Changes in This Release
π― DynamoDB Fence Index (ECS Horizontal Scaling)
The Big Feature - Fence index now stored in DynamoDB for production-ready ECS deployment:
| Aspect | Detail |
|---|---|
| Table Name | wanderland-fence-index-devl |
| Backend Switch | Environment var FENCE_INDEX_BACKEND=dynamodb |
| Atomic Updates | TransactWriteItems for node-level consistency |
| GSI | slug-index for per-node fence queries |
Data Model:
FENCE#{fence_id} SK=META β fence metadata
LABEL#{label} SK=ALIAS β label β fence_id mapping
NODE#{slug} SK=SUMMARY β per-node summary (count, hash, mtime)
STATS SK=GLOBAL β global index statsWhy It Matters:
- Index survives container restarts (no more cold-start reindexing)
- Multiple Oculus API instances share the same index
- Stats tracked atomically across deletes/updates
- Ready for multi-container ECS scaling
π§ Unified Path Resolution (The Asymmetric Path Fix)
Peek and poke now share the same path parsing logic:
| Before | After |
|---|---|
peek ana character-data.yaml.todays-gender β
|
Same |
poke ana character-data.yaml.todays-gender her β |
β Works! |
Technical Changes:
- Path parser extracts
fence_typeanddata_pathfrom paths like.yaml.key write_path()now uses parsed values when caller doesn't provide explicit overrides- Migrated from deprecated
content.fencesto unifiednode.fencesAPI - Added
get_base_type()helper to strip[attributes]fromfence.info
ποΈ Fence Infrastructure Improvements
| Commit | Description |
|---|---|
f5f1e27 |
fix(poke): Unified path resolution for peek and poke |
89cb335 |
feat(oculus): Unified fence API - code + virtual fences in one endpoint |
10e0c87 |
fix(fence): Store precise, query fuzzy - include position in fence IDs |
e7711df |
fix(fence): Use parse_fence_info in unified_fence poke method |
808919b |
fix(fence): Strip attributes from fence info for type classification |
a27fd7a |
feat(fence): Unified fence execution with virtual fence routing |
de684ee |
feat(fence): Enhance fence addressing with slug:label format |
bc57caa |
feat(oculus): Unify virtual fences into Fence model with atomic addressing |
3d2a438 |
feat(fence): Add FenceType.VIRTUAL and unified virtual fence model |
π Provenance & Documentation
| Commit | Description |
|---|---|
1bb0912 |
feat(provenance): Auto-generate provenance on create, drift checking on save |
a416cf8 |
feat(hooks): Add pre-commit guards for provenance protection |
π¬ New Features
| Commit | Description |
|---|---|
7cabca7 |
feat(experiments): Add TTL constraint and Born rule simulations |
4b67883 |
feat(transpiler): Add web transpiler target with Nord theme support |
eebeac1 |
feat(archaeology): Add Wispr Flow voice dictation export |
2d69593 |
feat(cli): Add reload command for registry sync from disk |
65d317a |
feat(api): Add gentle 404 pattern with route suggestions and AI onboarding |
π Bug Fixes
| Commit | Description |
|---|---|
aebe933 |
fix(cli): Use correct fence execute API endpoint format |
8e64312 |
fix(graph): Handle duplicate heading slugs, add papers archive |
ac124e3 |
fix(poke): Parse YAML strings before dumping to prevent escaped newlines |
963ad09 |
fix(api): Return 400 for PathResolutionError and add DWIM fence execution |
adb96c4 |
fix(peek): Resolve virtual fence peek with path suffix (e.g., .todo) |
π DevOps Jenkins Utilities (Anatole)
| Commit | Description |
|---|---|
0d453c03 |
fix(PipelineContext): Use DynamoDB typed JSON format for put-item |
2390d022 |
fix(PipelineContext): Add @NonCPS to pure computation methods |
4947a3dd |
fix(PipelineContext): Pass buildNumber to avoid CPS env() conflicts |
5202edaa |
feat(PipelineContext): Add event sourcing for pipeline state |
Anatole CLI Context Commands:
ana context list- List all pipelines with context recordsana context summary -p <pipeline>- Build summaryana context state -p <pipeline>- Current state snapshotana context state-at -p <pipeline> --at <idx>- Time-travel to activity indexana context diff -p <pipeline> --from <a> --to <b>- Diff state between points
Pre-Flight Checklist
- Wanderland repo committed and pushed to GitLab
- Nightingale repo merged from upstream and pushed to GitHub
- Jenkins build triggered (via
ana pipeline run) - Images built and pushed to ECR
- Services deployed
- Health checks passing
- DynamoDB fence index verified
Deployment Stages
Stage 1: Image Build
Status: Pending β³
Pipeline: pqis-devops-wanderland-devl-main-pipeline
Build: TBD- Stuffy Docker image built (ARM64)
- Oculus API Docker image built (ARM64)
- Images pushed to ECR
Stage 2: Service Deployment
Status: Pending β³
- Stuffy ECS task updated
- Stuffy ECS service deployed
- Oculus API ECS task updated
- Oculus API ECS service deployed
Stage 3: Validation
Status: Pending β³
- Stuffy health check passing (
/api/health) - Oculus API health check passing (
/health) - Target groups healthy
- DynamoDB fence index populated
Execution Log
2026-01-15 03:45 UTC
- Wanderland upstream merged into nightingale (commit
d74bbfb) - Resolved merge conflict in
registry_backend.py(kept upstream) - Pushed to GitHub:
c29e648..d74bbfb main -> main - Pipeline triggered via Anatole CLI:
ana pipeline run -p pqis-devops-wanderland-devl-main-pipeline -d - Build submitted (waiting for build number)
- Known Issue: Pipeline may fail at DMS cleanup stage (ongoing issue)
2026-01-15 ~current
- Creating deployment tracking node
- Preparing to merge wanderland into nightingale
- Pipeline trigger pending
Verification Commands
# Check ECS service status
aws ecs describe-services --cluster devops-utilities-arm64 \
--services wanderland-stuffy-devl wanderland-oculus-api-devl
# Check DynamoDB fence index
aws dynamodb scan --table-name wanderland-fence-index-devl --select COUNT
# Force new deployment if needed
aws ecs update-service --cluster devops-utilities-arm64 \
--service wanderland-oculus-api-devl --force-new-deploymentRelated
- Platform Architecture: [[wanderland-ecs-deployment]]
- Previous Deployment: [[wanderland-deployment-2025-12-22]]
- Case: The Asymmetric Path (task-0e0bbec1-c025-46dd-a83d-76b279b91440)
Tags
tags:
- deployment
- wanderland
- ecs
- devl
- 2026-01
- dynamodb
- fence-indexNorth
slots:
- context:
- Linking deployment to parent ECS deployment architecture node
slug: wanderland-ecs-deployment
- context:
- Linking new deployment to parent architecture node
slug: wanderland-ecs-deploymentWest
slots:
- slug: wanderland-deployment-2025-12-22
context:
- Linking to previous deployment chronologicallyProvenance
Document
- Status: π΄ Unverified
Changelog
- 2026-01-15 03:24: Node created by mcp - Creating deployment tracking node for 2026-01-15
β northwanderland-ecs-deployment
β westwanderland-deployment-2025-12-22