Skip to content

feat(page-26): add Type column — observation vs production#137

Merged
cipher813 merged 1 commit into
mainfrom
feat/page26-type-column
May 28, 2026
Merged

feat(page-26): add Type column — observation vs production#137
cipher813 merged 1 commit into
mainfrom
feat/page26-type-column

Conversation

@cipher813
Copy link
Copy Markdown
Owner

Summary

Closes the cross-registry-visibility gap: operator can now see at a glance which artifacts on page 26 are observe-mode rollouts vs which are load-bearing for production. Single new "Type" column with binary values observation / production, derived from data already in ARTIFACT_REGISTRY + OBSERVATION_REGISTRY.

Derivation rule

Condition Result
severity == critical production (always load-bearing)
severity == warning AND in active observation's composes_with observation
severity == warning AND not referenced production (secondary observability of production run)

Live verification

51 artifacts → 3 observation + 48 production:

  • observation: scanner_candidates_json, factor_profiles_latest, research_scorecard_latest
  • production: includes critical entries (signals.json, predictor_predictions, weekly_collector_manifest) AND warning-severity secondary-observability artifacts (macro_snapshot, research_consolidated_morning)
  • Boundary case: signals.json is severity=critical AND observed by attractiveness_pillars_phase_4_composite → classified production (critical wins; the cross-link doesn't override load-bearing status)

Changes

Deploy

ae-dashboard "sudo systemctl start boot-pull && sudo systemctl restart dashboard"

Composes with

🤖 Generated with Claude Code

…on artifacts

Closes the cross-registry-visibility gap surfaced by the operator
question "are the observation-only artifacts marked as such in the
artifact freshness page?" Severity (warning/critical) was overloaded
and there was no way to tell which warning entries were observe-mode
rollouts vs which were secondary observability for production runs.

Derivation rule (single SoT, no new data — uses cross-link in
OBSERVATION_REGISTRY.yaml + severity in ARTIFACT_REGISTRY.yaml):

  - production: severity == critical OR no active observation entry's
    composes_with references this artifact
  - observation: severity == warning AND at least one active
    (state in {always-on, gated-on}) observation references this id

Live verification: 51 entries → 3 observation + 48 production.
- observation: scanner_candidates_json, factor_profiles_latest,
  research_scorecard_latest
- production: includes critical entries (signals.json,
  predictor_predictions, weekly_collector_manifest) AND warning-
  severity secondary-observability (macro_snapshot,
  research_consolidated_morning)
- Boundary case: signals.json is severity=critical AND observed by
  attractiveness_pillars_phase_4 → classified production (critical
  wins; cross-link doesn't override load-bearing status)

Changes:
- Imports observation_registry_loader (shipped in #135)
- New _load_active_observation_artifact_refs helper (TTL 60s cache)
- _derive_type applies the rule per-row
- df.apply builds a type column
- New "Type" filter (5th multiselect)
- New "Type" column inserted between State and Artifact in display table

Deploy after merge:
  ae-dashboard "sudo systemctl start boot-pull && sudo systemctl restart dashboard"

Composes with alpha-engine-config #349/#351/#352/#355 (registry arc)
+ alpha-engine-dashboard #135 (page 27) + #136 (format_age fix) +
[[feedback_observe_mode_unconditional_gates_govern_cutover]].

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages
Copy link
Copy Markdown

Deploying nousergon-marketing with  Cloudflare Pages  Cloudflare Pages

Latest commit: f895dd3
Status: ✅  Deploy successful!
Preview URL: https://4039083b.nousergon-marketing.pages.dev
Branch Preview URL: https://feat-page26-type-column.nousergon-marketing.pages.dev

View logs

@cipher813 cipher813 merged commit 1192d4b into main May 28, 2026
2 checks passed
@cipher813 cipher813 deleted the feat/page26-type-column branch May 28, 2026 14:58
cipher813 added a commit that referenced this pull request May 28, 2026
Surfaces the per-cycle history for each artifact, reading the new
_freshness_monitor/history.json written daily at 04:00 UTC by the
freshness-monitor Lambda's historical mode (alpha-engine-data PR #339).

Closes the gap surfaced 2026-05-28: 'are there gaps in the producer's
history?' — operators want to know not just current-cycle state but
whether last weekend / last month had silent absences.

Changes:

- _load_history loader (TTL 300s — refreshes once/day, not 15min)
- New History (12wk) column on the main table:
    ✅ N/N continuous   — clean history
    ⚠️ G/N gaps        — gappy producer
    ✅ exists (latest)  — latest-pointer present
    ❌ absent (latest)  — latest-pointer missing
    —                   — historical probe hasn't covered this id yet
      (continuous-cadence artifacts skip historical mode)
- New 'Per-artifact history drill-down' section below the main
  table. Each artifact in the filtered view gets an expander
  showing the per-cycle sequence (date / present / size /
  last_modified / error_code). Sort: gappy first, continuous last;
  latest-pointer absent at top, latest-pointer present at bottom.
  First 3 worst-offender entries auto-expand.
- Graceful-degrade: if history.json doesn't exist yet, page shows
  a single info box explaining the daily cron + manual-invoke
  instructions.

Operator caveat: calendar-naive. NYSE holidays may render as
false-positive ❌ absent cells. Calendar-aware probe is a future
enhancement (P3 in the Lambda PR).

Composes with alpha-engine-data PR #339 (historical-mode Lambda)
+ the prior page 26/27 work in #134/#135/#136/#137.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant