.NET / SQL / Enterprise Engineering

Recursive Continuation Prompt — v8.8.37

Report summary

If the v8.8.36 pass is incomplete, validation failed, or any v8.8.36 deliverable is missing, first finish v8.8.36 from the current work-in-progress directory. Do not start v8.8.37 until these files exist and validate:

Status
Research archive item
Category
.NET / SQL / Enterprise Engineering
Length
2,204 words
Reading time
11 minutes
Report type
evaluation

Key topics

  • .NET / SQL / Enterprise Engineering
  • .NET
  • SQL
  • Enterprise Engineering
  • AI
  • UAI
  • WordPress
  • TypeScript
  • Angular

Research provenance

Archive status
Research archive item
Content identity
sha256:bbc77b9830e24a940dde29f85309f0f8b4f66c2b9348200e1fca5d51a84ff0b6

For citation, use the report title and canonical URL. Archival presence does not establish authorship or promote report statements into portfolio evidence.

This page renders the archived Markdown as safe, formatted HTML. It is background research and does not become a portfolio claim without evidence review.

Full report

On this page

You are continuing the MikeKappel.com improvement loop.

Current work-in-progress rule

If the v8.8.36 pass is incomplete, validation failed, or any v8.8.36 deliverable is missing, first finish v8.8.36 from the current work-in-progress directory. Do not start v8.8.37 until these files exist and validate:

  • mikekappel-enterprise-ai-prod-theme-v8.8.36.zip
  • mk-v8.8.36-change-summary.md
  • mk-v8.8.36-validation-report.md
  • mk-v8.8.36-live-render-qa.md
  • mk-v8.8.37-next-prompt.md

If v8.8.36 is complete, start v8.8.37 from:

  • Baseline package: /mnt/data/mikekappel-enterprise-ai-prod-theme-v8.8.36.zip
  • Output package: /mnt/data/mikekappel-enterprise-ai-prod-theme-v8.8.37.zip

Read before changing code:

  • /mnt/data/mk-v8.8.36-change-summary.md
  • /mnt/data/mk-v8.8.36-validation-report.md
  • /mnt/data/mk-v8.8.36-live-render-qa.md
  • /mnt/data/mk-v8.8.37-next-prompt.md

Mission for v8.8.37

Audit v8.8.36 after compact navigation focus-state hardening, visible-toggle focus-return guard preservation, compact navigation aria-hidden/inert/descendant tab-stop fallback synchronization, document focusin fallback, grouped disclosure aria-expanded/panel aria-hidden/panel inert/data-state/panel tab-stop fallback synchronization, phone/tablet header stacking guard, route QA/runtime-health parity, clean ZIP extraction, static Chromium component QA, and public/private research data separation. Prioritize deployed or local WordPress route QA when a runtime is available. If no WordPress runtime is available, perform static/package validation, route-contract/source inspection, and local browser/component QA if a stable browser runner is available.

Primary objectives:

  1. Verify /route-qa-contract.json and /wp-json/mk/v1/route-qa-contract against actual package contents.
  2. Verify /wp-json/mk/v1/runtime-health reports the same static artifact count and REST endpoint count as the route QA contract.
  3. Verify /docs/, /reports/, /report-reader/, /research-search/, /research-dashboard/, /career/, /experience/, /resume/, /portfolio-review-guide/, /evidence-map/, /robots.txt, and the header menu behavior.
  4. Confirm compact navigation works at phone and tablet widths, especially 761px through 980px.
  5. Confirm compact navigation aria-hidden, inert, descendant tab-stop fallback, focus-state, aria-expanded, data-compact-nav-state, data-compact-toggle-active, data-compact-toggle-focusable, Escape-close, outside-click-close, link-click-close, focusin fallback, and desktop-resize-reset behavior.
  6. Confirm grouped menu disclosure aria-expanded, panel aria-hidden, panel inert, data-nav-disclosure-state, data-nav-panel-state, panel focus-state, and panel descendant tab-stop fallback stay synchronized.
  7. Confirm phone/tablet header stacking keeps open compact menu panels above route cards and does not degrade desktop layout.
  8. Confirm responsive hardening prevents narrow cards, long-code overflow, search-sidebar overflow, menu-panel overflow, route QA card overflow, and dashboard card overflow without degrading desktop layouts.
  9. Preserve default-visible public report/research indexes and PHP-guarded helper index behavior.
  10. Preserve accepted exact-query retrieval on the server side while keeping topic-specific matching out of public JavaScript, CSS, public static JSON, and public UI copy.
  11. Keep .uai/totem.uai and .uai/taboo.uai as generated-needs-review unless Mike gives exact approval wording.
  12. Keep /reports/ raw Markdown retained for traceability unless Mike explicitly requests deletion of raw research history.
  13. Confirm the ZIP extracts cleanly with standard command-line unzip and has exactly one top-level theme directory.

Hard runtime and architecture constraints

  • Preserve WordPress as the server-rendered production runtime.
  • Do not convert the site into a client-only Angular SPA.
  • Keep JavaScript as progressive enhancement over server-rendered markup.
  • Maintain PHP 7.4+ compatibility unless package validation proves the theme already requires a higher runtime.
  • Do not add Composer, npm, build-pipeline, or package-manager runtime dependencies.
  • Do not require admin-only operations for public route rendering.
  • Do not introduce database migrations.
  • Do not store credentials, tokens, private client data, or deployment secrets in the package.
  • Preserve primary stack positioning: AI / .NET / SQL / TypeScript.
  • Preserve user-confirmed Angular experience at Info724 and LongTerm Software.
  • Preserve the clean two-page resume PDF/DOCX as the public download assets.
  • Preserve .uai/totem.uai, .uai/taboo.uai, .uai/short-term-memory.uai, and .uai/coding-standards.uai as front-door files.
  • Preserve PHP-guarded private helper data under inc/private-data/; do not mirror private helper indexes to public assets/data JSON.
  • Keep /reports/, /report-reader/, /research-search/, /research-dashboard/, and route QA utilities noindex/noarchive/nosnippet where already specified.

Route requirements

Validate or improve these routes without inventing claims:

  • /
  • /career/
  • /experience/
  • /docs/
  • /reports/
  • /report-reader/
  • /research-search/
  • /research-dashboard/
  • /route-qa-contract.json
  • /resume/
  • /portfolio-review-guide/
  • /evidence-map/
  • /sitemap.xml
  • /robots.txt

Expected behavior:

  • /docs/ shows curated active Architecture Notes only.
  • /reports/ remains a noindex research archive, not a public claim source.
  • /report-reader/ uses default-visible records unless server query context allows otherwise.
  • /research-search/ shows clearly labeled default-visible cross-source results.
  • /research-dashboard/ remains admin-free and noindex.
  • /route-qa-contract.json remains static, noindex, and aligned to actual counts/routes.
  • /robots.txt disallows research/utility surfaces and does not expose private helper data.
  • /career/ and /experience/ preserve verified professional context and do not add unapproved claims.
  • Header menus remain keyboard-accessible and usable at desktop, tablet, and phone widths.
  • Compact navigation remains accessible from 761px through 980px.
  • Compact navigation and grouped disclosures keep aria-hidden, inert, aria-expanded, tab-stop fallback, focus-state, and data-state values synchronized with viewport and menu state.
  • Open phone/tablet compact navigation remains stacked above content cards.

API requirements

Validate these REST endpoints where a WordPress runtime is available. If no runtime is available, statically inspect registration and generated data shape.

  • /wp-json/mk/v1/runtime-health
  • /wp-json/mk/v1/route-qa-contract
  • /wp-json/mk/v1/report-search
  • /wp-json/mk/v1/reports-search
  • /wp-json/mk/v1/reports
  • /wp-json/mk/v1/report-reader-index
  • /wp-json/mk/v1/report-stale-index
  • /wp-json/mk/v1/research-search
  • /wp-json/mk/v1/research-dashboard
  • /wp-json/mk/v1/research-search-performance
  • /wp-json/mk/v1/research-search-shards
  • /wp-json/mk/v1/profile
  • /wp-json/mk/v1/resume
  • /wp-json/mk/v1/evidence-map

Expected API behavior:

  • Responses are valid JSON.
  • Route registrations match the route QA contract.
  • Runtime-health static artifact count equals the route QA contract static artifact count.
  • Runtime-health REST endpoint count equals the route QA contract REST endpoint count.
  • Query strings are normalized, bounded, and sanitized.
  • source, type, and mode parameters accept only documented values.
  • mode=all and mode=any produce predictable scoring/filter behavior.
  • Active research-search responses do not return stale candidate rows.
  • Default public responses do not return default-hidden rows.
  • Accepted exact-query retrieval remains server-side and does not move into public JavaScript or public static indexes.
  • REST failure degrades to static JSON without breaking the UI.

Static artifact requirements

Validate, refresh, and mirror these artifacts where applicable:

  • /docs/index.json
  • /reports/index.json
  • /reports/search-index.json
  • /reports/reader-index.json
  • /reports/related-index.json
  • /reports/stale-index.json
  • /research-search-index.json
  • /research-search.json
  • /research-search-metadata.json
  • /research-search-performance.json
  • /research-search-shards/*.json
  • /research-dashboard.json
  • /assets/data/research-dashboard.json
  • /route-qa-contract.json
  • /assets/data/route-qa-contract.json
  • /sitemap.xml
  • /sitemap-routes.json
  • /runtime-health.json
  • /deployment-error-recovery.json
  • PHP-guarded helper data under /inc/private-data/*.json.php

Expected baseline counts from v8.8.36 unless intentionally and correctly changed:

  • PHP files: 44 or more
  • JSON files: 203 unless a deliberate artifact change is documented
  • ZIP entries: 1182 unless a deliberate package change is documented
  • Route QA contract routes: 14
  • Route QA contract API routes: 14
  • Route QA contract REST endpoints: 14
  • Route QA contract static artifacts: 19
  • Route QA contract private helper artifacts: 4
  • Runtime-health static artifact count: 19
  • Runtime-health REST endpoint count: 14
  • Responsive QA breakpoints: 390, 761, 820, 980, 1366
  • Active docs: 59
  • Retired docs: 121
  • Raw Markdown reports excluding README: 526
  • Raw Markdown files including README: 527
  • Default report/search/reader/related records: 458
  • Private helper report records: 526
  • Private helper reader records: 526
  • Default research-search records: 653
  • Default research alias records: 653
  • Default research metadata records: 653
  • Private helper research records: 721
  • Stale/recheck reports: 9
  • Active docs retired references: 0
  • Research-search stale records present: 0
  • Public generated/default-visible rows with default-hidden matches: 0
  • Public generated files with default-hidden topic matches: 0
  • Public JS/CSS files with default-hidden topic matches: 0
  • Old public helper JSON files: 0
  • Server-retained matching report rows: 68
  • Server-retained matching reader rows: 56
  • Server-retained matching research rows: 68

Docs requirements

  • Keep /docs/ curated and current.
  • Keep active Architecture Notes separate from raw /reports/ history.
  • Keep retired docs out of active docs cards, active docs indexes, and active navigation.
  • Keep stale/recheck report candidates out of active docs and default research-search results.
  • Preserve useful internal links between docs, evidence, portfolio guide, reports, career pages, and resume surfaces.
  • Do not promote raw report claims into docs, resume, project cards, or evidence maps without evidence review.
  • Do not add public copy explaining private/default-hidden retrieval boundaries.

Discovery and indexing requirements

  • Keep /reports/, /report-reader/, /research-search/, /research-dashboard/, and route QA utilities out of the public sitemap.
  • Keep noindex/noarchive/nosnippet handling for research and utility surfaces.
  • Keep robots.txt disallow entries for research and utility routes.
  • Keep direct raw Markdown report access guarded through WordPress route logic and .htaccess.
  • Keep inc/private-data/.htaccess denying direct browsing.
  • Keep public static indexes default-visible only.
  • Keep private helper data PHP-guarded or otherwise non-public.

.uai requirements

  • Keep .uai/totem.uai and .uai/taboo.uai as generated-needs-review unless Mike gives exact approval wording.
  • Keep .uai/short-term-memory.uai and .uai/coding-standards.uai as front-door files.
  • Preserve .uai organization from v8.8.26 and later passes.
  • Keep .uai manifests and mirrored asset data consistent.
  • Do not let retired .uai files or superseded memory files steer public copy.
  • Do not promote generated .uai files to user-confirmed without explicit approval.

Test requirements

Run these checks at minimum from the extracted theme directory:

find . -name '*.php' -print0 | sort -z | xargs -0 -n1 php -l
node --check assets/js/site.js
python3 - <<'EOFJSON'
import json
from pathlib import Path
for path in sorted(Path('.').rglob('*.json')):
    json.loads(path.read_text(encoding='utf-8'))
print('JSON parse passed')
EOFJSON
cmp -s route-qa-contract.json assets/data/route-qa-contract.json
cmp -s research-dashboard.json assets/data/research-dashboard.json

Run a validation collector that checks:

  • theme version and style version are 8.8.37
  • PHP file count and lint success
  • JSON parse count and success
  • route QA contract exists at root and asset mirror
  • route QA contract versions match 8.8.37
  • route QA contract has no default-hidden topic matches
  • route/API/static artifact/private helper counts match package contents
  • runtime-health static artifact count equals 19 and equals the route QA contract count
  • runtime-health REST endpoint count equals 14 and equals the route QA contract count
  • responsive QA breakpoints include 390, 761, 820, 980, and 1366
  • compact navigation aria-hidden, inert, descendant tab-stop fallback, focus-state, aria-expanded, data-compact-nav-state, data-compact-toggle-active, and data-compact-toggle-focusable synchronization is present
  • compact navigation document focusin fallback is present
  • compact navigation visible-toggle focus-return guard is present
  • grouped disclosure summary aria-expanded, panel aria-hidden, panel inert, data-nav-disclosure-state, data-nav-panel-state, panel focus-state, and panel tab-stop fallback synchronization is present
  • phone/tablet header stacking guard is present
  • report/research/default/private counts match expected values or documented intentional deltas
  • public generated/default-visible rows contain zero default-hidden matches
  • public generated files contain zero default-hidden topic matches
  • public JavaScript and CSS contain zero default-hidden topic matches
  • old public helper JSON mirrors are absent
  • active docs count and retired-reference exclusion
  • stale/recheck report count and research-search stale exclusion
  • server-retained matching rows remain available only through private/server-side logic
  • resume PDF/DOCX presence
  • .uai front-door files and generated-needs-review state
  • sitemap exclusions
  • robots.txt disallow entries
  • noindex handling in functions/static routes
  • direct Markdown and private-data .htaccess safeguards
  • route QA and research dashboard root/asset mirrors are byte-aligned
  • ZIP integrity and clean command-line extraction

Use this pattern for the default-hidden topic scan so the matching rules remain driven by the PHP-guarded private config instead of being copied into public files or prompts:

python3 - <<'EOFSCAN'
import base64, json, re
from pathlib import Path
root = Path('.')
config_path = root / 'inc/private-data/research-boundary-config.json.php'
text = config_path.read_text(encoding='utf-8')
payload = text.split('__halt_compiler();', 1)[1].strip()
config = json.loads(payload)
patterns = [re.compile(base64.b64decode(value).decode('utf-8'), re.I) for value in config.get('matchPatternsB64', [])]

def scan_text(value):
    return any(pattern.search(value) for pattern in patterns)

public_hits = []
for path in root.rglob('*'):
    if not path.is_file():
        continue
    rel = path.relative_to(root)
    if rel.parts[:2] == ('inc', 'private-data'):
        continue
    if rel.parts[:1] == ('reports',) and path.suffix.lower() == '.md':
        continue
    if str(rel) == 'functions.php':
        continue
    if path.suffix.lower() not in {'.json', '.js', '.css', '.md', '.uai', '.human', '.txt', '.xml'}:
        continue
    if scan_text(path.read_text(encoding='utf-8', errors='ignore')):
        public_hits.append(str(rel))
print(json.dumps({'publicDefaultHiddenTopicHits': public_hits}, indent=2))
if public_hits:
    raise SystemExit(1)
EOFSCAN

Run browser QA where possible:

  • Preferred: deployed WordPress or local WordPress runtime with /, /docs/, /reports/, /report-reader/, /research-search/, /research-dashboard/, /career/, /experience/, /resume/, /portfolio-review-guide/, /evidence-map/, /route-qa-contract.json, and /robots.txt.
  • If WordPress runtime is unavailable: local static Chromium component fixture using the theme header markup, compact navigation JavaScript, and representative route/research/dashboard/card markup.
  • Test desktop, tablet upper boundary, tablet, tablet lower boundary, and phone widths.
  • Include 390, 761, 820, 980, and 1366 widths.
  • Record horizontal overflow, sidebar collapse behavior, docs category card readability, report/research result card wrapping, dashboard card wrapping, route QA card wrapping, header menu behavior, Escape-key close behavior, outside-click close behavior, link-click close behavior, desktop-resize close behavior, focusin fallback behavior, aria-hidden synchronization, inert synchronization, descendant tab-stop fallback behavior, grouped disclosure data-state synchronization, grouped panel tab-stop fallback behavior, phone/tablet header stacking, and mobile/tablet menu state reset.

Validation commands

Use this release workflow unless a current work-in-progress directory already exists and must be finished:

set -euo pipefail
BASE_ZIP=/mnt/data/mikekappel-enterprise-ai-prod-theme-v8.8.36.zip
WORK=/mnt/data/work_v8837
THEME=$WORK/mikekappel-enterprise-ai-prod-theme
OUT=/mnt/data
rm -rf "$WORK"
mkdir -p "$WORK"
unzip -q "$BASE_ZIP" -d "$WORK"
cd "$THEME"

# After changes are made and version is bumped to 8.8.37:
find . -name '*.php' -print0 | sort -z | xargs -0 -n1 php -l > "$OUT/v8837_php_lint.txt" 2>&1
node --check assets/js/site.js > "$OUT/v8837_node_check.txt" 2>&1
python3 - <<'EOFJSON' > /mnt/data/v8837_json_parse.txt
import json
from pathlib import Path
count = 0
for path in sorted(Path('.').rglob('*.json')):
    json.loads(path.read_text(encoding='utf-8'))
    count += 1
print('json_files', count)
EOFJSON
cmp -s route-qa-contract.json assets/data/route-qa-contract.json
cmp -s research-dashboard.json assets/data/research-dashboard.json
python3 /mnt/data/v8837_validation_collect.py > /mnt/data/v8837_validation_metrics.json
cd "$WORK"
TMP=/mnt/data/mikekappel-enterprise-ai-prod-theme-v8.8.37.tmp.zip
FINAL=/mnt/data/mikekappel-enterprise-ai-prod-theme-v8.8.37.zip
rm -f "$TMP" "$FINAL"
zip -qr "$TMP" mikekappel-enterprise-ai-prod-theme
unzip -t "$TMP" > /mnt/data/v8837_zip_test.txt
mv "$TMP" "$FINAL"
sha256sum "$FINAL" > /mnt/data/v8837_zip_sha256.txt
rm -rf /mnt/data/work_v8837_extract_smoke
mkdir -p /mnt/data/work_v8837_extract_smoke
unzip -q "$FINAL" -d /mnt/data/work_v8837_extract_smoke
find /mnt/data/work_v8837_extract_smoke -maxdepth 1 -mindepth 1 -type d -printf '%f\n' > /mnt/data/v8837_extract_smoke.txt

If compression is slow in the environment, build to a temporary ZIP first, validate the temporary ZIP, then move it to the final filename only after unzip -t passes.

If Playwright or another browser runner is available, run route-level or component-level browser checks for desktop, tablet upper boundary, tablet, tablet lower boundary, and phone widths. At minimum cover /, /docs/, /reports/, /report-reader/, /research-search/, /research-dashboard/, /career/, /experience/, /resume/, /portfolio-review-guide/, /evidence-map/, /route-qa-contract.json, /robots.txt, and the three-menu header. Capture pass/fail notes in mk-v8.8.37-live-render-qa.md.

Package integrity checks

  • The ZIP must contain exactly one top-level theme directory: mikekappel-enterprise-ai-prod-theme/.
  • The ZIP must pass unzip -t.
  • The ZIP must extract cleanly with standard command-line unzip into a fresh directory.
  • The package must not include temporary work directories, cache folders, node_modules, debug screenshots, unrelated archives, or local validation scripts unless they are intentional theme assets.
  • The package filename must be mikekappel-enterprise-ai-prod-theme-v8.8.37.zip.
  • Record the SHA-256 hash in mk-v8.8.37-validation-report.md.

Safety boundaries

  • Do not disclose private/default-hidden retrieval boundaries in public UI copy.
  • Do not move private helper data into public static JSON.
  • Do not add public topic-specific filtering text.
  • Do not remove raw reports unless explicitly instructed.
  • Do not fabricate biography, production status, client claims, certifications, runtime architecture, deployment details, job history, metrics, or endorsements.
  • Do not restore recruiter-risk public caveats or speculative copy.
  • Do not add secrets, deployment credentials, or private client data.
  • Do not degrade accessibility, keyboard navigation, no-JavaScript fallback, or mobile/tablet layout.
  • Do not regress v8.8.36 route QA contract coverage, runtime health count alignment, responsive QA matrix, clean package extraction, header keyboard/outside-click/link/resize behavior, compact navigation focus-state/inert/tab-stop/focusin synchronization, visible-toggle focus return, grouped disclosure aria/inert/data-state/panel-tab-stop synchronization, phone/tablet header stacking, tablet navigation visibility, server-side accepted exact-query retrieval, stale filtering, or private helper data separation.

Expected deliverables

Return links to:

  • mikekappel-enterprise-ai-prod-theme-v8.8.37.zip
  • mk-v8.8.37-change-summary.md
  • mk-v8.8.37-validation-report.md
  • mk-v8.8.37-live-render-qa.md
  • mk-v8.8.38-next-prompt.md

Required final response format

The final response must include:

  1. A concise status summary for v8.8.37.
  2. Artifact links.
  3. Validation status bullets, including what was and was not run.
  4. A section titled exactly # Full recursive next prompt.
  5. A complete recursive next prompt for v8.8.38, following this same structure.

If the v8.8.37 pass fails or is incomplete, the # Full recursive next prompt section must first instruct the next run to finish v8.8.37 before starting v8.8.38.