lantern

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):


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 stats

Why 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_type and data_path from paths like .yaml.key
  • write_path() now uses parsed values when caller doesn't provide explicit overrides
  • Migrated from deprecated content.fences to unified node.fences API
  • Added get_base_type() helper to strip [attributes] from fence.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 records
  • ana context summary -p <pipeline> - Build summary
  • ana context state -p <pipeline> - Current state snapshot
  • ana context state-at -p <pipeline> --at <idx> - Time-travel to activity index
  • ana 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-deployment

Related

  • 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-index

North

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-deployment

West

slots:
- slug: wanderland-deployment-2025-12-22
  context:
  - Linking to previous deployment chronologically

Provenance

Document

  • Status: πŸ”΄ Unverified

Changelog

  • 2026-01-15 03:24: Node created by mcp - Creating deployment tracking node for 2026-01-15
↑ northwanderland-ecs-deployment