brain backup 2026-09-14

This commit is contained in:
Adolfo Reyna
2026-09-14 22:38:47 -04:00
parent ca346cc6e7
commit f0ead4f6fa
147 changed files with 73451 additions and 8 deletions
+49
View File
@@ -0,0 +1,49 @@
# Factory Project Operations Context
## Purpose and scope
This file is the authoritative operating context for AI agents that manage **our projects**. It does not replace repository-level `AGENTS.md`, source control, service documentation, or Paseo agent/workspace records.
An **our project** is a cross-server product or system. Its definition file lives at `factory/<project-key>.md`. A native Paseo project is a local execution unit: one repository or directory on one daemon host.
```text
Our project → server-local Paseo project → workspace → agent → active session
```
## Start every task with the project definition
1. Identify the project key and read `factory/<project-key>.md`.
2. Identify affected servers, repositories, services, and target devices.
3. Read the repository's nearest `AGENTS.md` before inspecting or changing source.
4. Check the target host's actual Paseo/provider/workspace state; do not infer it from this brain record.
5. Create a concise task record: goal, acceptance criteria, allowed paths/commands, required checks, forbidden effects, evidence, and approval gate.
## Operating policy
- **Bounded goal loops.** After discovery and an approved plan, the factory may iterate isolated implementation → deterministic verification → independent review → targeted repair until the named acceptance criteria pass. Every loop must have an iteration cap, wall-clock/resource cap, and clear stop conditions. It must stop and report at approval boundaries or when blocked; it may never self-approve merge, push, deployment, restart, publishing, credentials, migrations, or production configuration.
- **Exclusive factory ownership.** For every factory-managed project task, the `factory` profile alone performs repository/server inspection, Paseo dispatch/monitoring, edits, commits, pushes, deployments, and verification. The default/personal profile is the human-facing control surface only: it relays instructions and reports factory evidence but never executes project work directly.
- **Coordinator dispatch-and-follow-through.** For multi-step work, do not call the factory profile as a one-shot `-z` process. Keep the named coordinator session interactive/resumable; record every dispatched Paseo agent/workspace ID, monitor its state, then resume that same coordinator session with the observed result. A pinned session is historical continuity only, not a background supervisor. Use an explicit bounded monitor/continuation when work must outlive the coordinator turn.
- **Paseo session permission mode.** Every new coding or release Paseo agent must be started explicitly in the provider's `auto-review` mode; for Codex, pass `--mode auto-review`. Do not rely on defaults, fall back to full-access/unreviewed modes, or continue if the requested mode is unavailable.
- **One durable coordinator session per feature or incident.** Resume the same factory-profile session for all follow-ups to a project feature, release, reconciliation, or incident. Do not create a new one-shot coordinator session for every request. Name it `<project-key>: <feature-or-incident>` and record its ID in the project definition when continuity matters.
- Our project files are the cross-server project-manager record; Paseo Desktop/Web are execution views, not the project authority.
- One source-changing task uses one isolated worktree workspace. Do not have independent agents edit a shared checkout.
- Planner and reviewer are read-only. Implementers may edit only their assigned worktree.
- Verifiers report exact command outcomes; they do not silently repair source.
- Merge, deploy, restart, publish, external sends, credentials, production configuration, and migrations require explicit human approval.
- A Paseo status change may create a notification or review task; it never authorizes a production action.
- Never place credentials, pairing offers, raw private audio, or user data in these project files.
## Durable evidence to record
Record stable decision and handoff data only: repository/host mapping, workspace/agent IDs when needed for continuation, verification outcomes, approval decisions, rollout/rollback notes, and open blockers. Keep raw logs and transient agent conversation out of the brain.
## Project-definition standard
Each `factory/<project-key>.md` includes purpose, server/repository/service mapping, factory readiness, persona roles, special constraints, current open work, and human approval boundaries.
## Updating this directory
- Create a new definition before treating a system as a factory-managed project.
- Update an existing definition when its server/repository/service mapping or safety boundary changes.
- Do not claim a remote host is enrolled or a deployment works without current host evidence.
- Keep definitions concise and link to detailed project notes instead of duplicating them.
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 460" role="img" aria-labelledby="title desc">
<title id="title">The covenant parenting pathway</title><desc id="desc">A gentle visual pathway from rooted love through daily formation to a generational legacy.</desc>
<defs><linearGradient id="bg" x1="0" x2="1"><stop stop-color="#eef3ef"/><stop offset="1" stop-color="#f7f0e4"/></linearGradient></defs>
<rect width="1200" height="460" rx="28" fill="url(#bg)"/>
<path d="M88 337 C235 311 290 161 424 210 S600 380 702 256 S875 126 1110 145" fill="none" stroke="#b39057" stroke-width="8" stroke-linecap="round"/>
<g font-family="Georgia, serif" fill="#263d4a" text-anchor="middle"><text x="600" y="72" font-size="38" font-weight="bold">The Covenant Parenting Pathway</text><text x="600" y="108" font-size="21" fill="#6b5d4d">A life of faithful presence, practiced one day at a time</text></g>
<g font-family="Arial, sans-serif" text-anchor="middle"><g><circle cx="140" cy="327" r="45" fill="#486372"/><text x="140" y="335" fill="white" font-size="21" font-weight="bold">ROOTED</text><text x="140" y="397" fill="#263d4a" font-size="22">Love &amp; refuge</text></g><g><circle cx="410" cy="214" r="45" fill="#6b8b7a"/><text x="410" y="222" fill="white" font-size="21" font-weight="bold">PRESENT</text><text x="410" y="286" fill="#263d4a" font-size="22">Modeling</text></g><g><circle cx="700" cy="258" r="45" fill="#b39057"/><text x="700" y="266" fill="white" font-size="21" font-weight="bold">FORMED</text><text x="700" y="330" fill="#263d4a" font-size="22">Daily practice</text></g><g><circle cx="1060" cy="148" r="45" fill="#a36b53"/><text x="1060" y="156" fill="white" font-size="21" font-weight="bold">GROWING</text><text x="1060" y="220" fill="#263d4a" font-size="22">Generational hope</text></g></g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 430" role="img" aria-labelledby="title desc">
<title id="title">A family rhythm of repair</title><desc id="desc">Four connected steps: pause, listen, repair, and return to peace.</desc>
<rect width="1200" height="430" rx="28" fill="#f8f4ec"/><text x="600" y="67" text-anchor="middle" font-family="Georgia,serif" font-size="38" font-weight="bold" fill="#263d4a">A Family Rhythm of Repair</text><text x="600" y="102" text-anchor="middle" font-family="Georgia,serif" font-size="21" fill="#6b5d4d">Humility makes room for safety, truth, and restoration</text>
<g fill="none" stroke="#b39057" stroke-width="7" stroke-linecap="round"><path d="M250 214 H390"/><path d="M530 214 H670"/><path d="M810 214 H950"/></g>
<g font-family="Arial,sans-serif" text-anchor="middle"><g><circle cx="180" cy="214" r="68" fill="#486372"/><text x="180" y="207" font-size="24" font-weight="bold" fill="white">PAUSE</text><text x="180" y="236" font-size="16" fill="white">make room</text><text x="180" y="324" font-size="21" fill="#263d4a">Choose calm</text></g><g><circle cx="460" cy="214" r="68" fill="#6b8b7a"/><text x="460" y="207" font-size="24" font-weight="bold" fill="white">LISTEN</text><text x="460" y="236" font-size="16" fill="white">with care</text><text x="460" y="324" font-size="21" fill="#263d4a">Hear the heart</text></g><g><circle cx="740" cy="214" r="68" fill="#b39057"/><text x="740" y="207" font-size="24" font-weight="bold" fill="white">REPAIR</text><text x="740" y="236" font-size="16" fill="white">speak truth</text><text x="740" y="324" font-size="21" fill="#263d4a">Own what happened</text></g><g><circle cx="1020" cy="214" r="68" fill="#a36b53"/><text x="1020" y="207" font-size="24" font-weight="bold" fill="white">RETURN</text><text x="1020" y="236" font-size="16" fill="white">together</text><text x="1020" y="324" font-size="21" fill="#263d4a">Restore peace</text></g></g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

+29
View File
@@ -0,0 +1,29 @@
# Grade 3 Learning Studio Demo
## Start it tomorrow
```bash
cd ~/brain/projects/ckmath-interactive-pilot
python3 server.py --port 8899
```
Open `http://127.0.0.1:8899` on the Mac mini. This is intentionally loopback-only: it is a private demo, not a LAN service.
## A 3-minute walkthrough for Alicia
1. **Start at the landing page.** Explain that the library is derived from the downloaded Grade 3 curriculum, not a separate subscription or AI-generated scope-and-sequence.
2. **Use a subject filter.** Choose **Math** to show the nine Grade 3 math entries, then point out the “Open Teacher Guide” and “Open Student Reader” links.
3. **Open CKMath Unit 1’s Teacher Guide.** It opens the original 285-page guide from inside the verified ZIP—no duplicate PDF copy is created. Explain that this is where the teacher’s learning goals, timing, prompts, materials, expected responses, and support notes live.
4. **Return to the site and open the Interactive lesson.** Demonstrate building seven pairs of shoes, writing `7 × 2 = 14`, and giving a one-sentence explanation.
5. **Frame the next decision.** The library and teacher-plan access can cover the whole Grade 3 collection now; we should next choose which curriculum areas deserve human-reviewed interactive sessions first.
## Current scope
- 51 downloaded Grade 3 units indexed.
- 37 teacher-guide PDFs and 25 student-resource PDFs available on demand from their original archives.
- One completed interactive math lesson: Unit 1, equal groups.
- No account, analytics, AI, or learner-record storage.
## Not yet claimed
This is not yet a complete digitization of every Grade 3 lesson. It is a full source library plus a working interactive pattern. Every additional interactive lesson should be selected, authored/reviewed against its teacher guide, and checked for its individual license notice.
@@ -0,0 +1,24 @@
# Grade 3 Learning Studio
A private, browser-only Grade 3 curriculum showcase built from the verified local Core Knowledge collection. It catalogs every downloaded Grade 3 archive, exposes original teacher-guide/student PDFs without duplicating them, and includes a 10-minute interactive equal-groups math session.
## Run locally
```bash
cd ~/brain/projects/ckmath-interactive-pilot
python3 server.py --port 8899
```
Open `http://127.0.0.1:8899`. The server is deliberately loopback-only and does not expose the curriculum on the home network.
See `DEMO.md` for Alicia’s short walkthrough.
## Privacy
This showcase uses no login, AI service, analytics, or learner-data storage. The original curriculum assets remain inside `/Users/adolforeyna/Downloads/CoreKnowledge_Grades_1-5_EN_ES`; the server streams a selected original PDF only after a locally generated, catalog-known material ID is requested.
## Source and license
The catalog is derived from the verified downloaded Core Knowledge Grade 3 archive set. The interactive session is adapted from *CKMath Grade 3, Unit 1: Introducing Multiplication*, Core Knowledge Foundation, Lesson 9 (“Equal Group Situations”), downloaded from [Core Knowledge](https://www.coreknowledge.org/download-free-curriculum/).
The sampled math source PDF carries a Creative Commons **Attribution–NonCommercial–ShareAlike 4.0 International** notice. This pilot is private and non-commercial. Any future sharing must retain attribution, the license notice, and the same ShareAlike terms. Confirm the license embedded in every additional unit before adapting it.
+81
View File
@@ -0,0 +1,81 @@
import { isCorrectTotal, isCorrectEquation, hasReasoningEvidence } from './src/session.mjs';
const groups = document.querySelector('#groups');
const addPair = document.querySelector('#add-pair');
const buildFeedback = document.querySelector('#build-feedback');
const totalRow = document.querySelector('#total-row');
const total = document.querySelector('#total');
const totalFeedback = document.querySelector('#total-feedback');
const activity2 = document.querySelector('#activity-2');
const activity3 = document.querySelector('#activity-3');
const equation = document.querySelector('#equation');
const equationFeedback = document.querySelector('#equation-feedback');
const reasoning = document.querySelector('#reasoning');
const reasoningFeedback = document.querySelector('#reasoning-feedback');
let pairsAdded = 0;
function feedback(element, message, kind = '') {
element.textContent = message;
element.className = `feedback ${kind}`;
}
function renderGroups() {
groups.innerHTML = '';
for (let i = 1; i <= 7; i += 1) {
const group = document.createElement('div');
group.className = 'group';
group.innerHTML = `<span>Person ${i}</span><div class="shoes">${i <= pairsAdded ? '👟 👟' : '· ·'}</div>`;
groups.append(group);
}
}
function reveal(activity, progressId) {
activity.hidden = false;
document.querySelector(progressId).classList.add('active');
activity.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
renderGroups();
addPair.addEventListener('click', () => {
if (pairsAdded < 7) pairsAdded += 1;
renderGroups();
if (pairsAdded === 7) {
addPair.disabled = true;
addPair.textContent = 'All 7 pairs are built';
feedback(buildFeedback, 'Nice work. You built 7 equal groups of 2 shoes.', 'good');
totalRow.hidden = false;
total.focus();
} else {
feedback(buildFeedback, `${pairsAdded} of 7 pairs built. Keep going.`);
}
});
document.querySelector('#check-total').addEventListener('click', () => {
if (isCorrectTotal(total.value)) {
feedback(totalFeedback, 'Yes—7 groups of 2 make 14 shoes.', 'good');
reveal(activity2, '#progress-2');
equation.focus();
} else {
feedback(totalFeedback, 'Try counting by twos: 2, 4, 6…', 'bad');
}
});
document.querySelector('#check-equation').addEventListener('click', () => {
if (isCorrectEquation(equation.value)) {
feedback(equationFeedback, 'Correct. Multiplication is a quick way to name equal groups.', 'good');
reveal(activity3, '#progress-3');
reasoning.focus();
} else {
feedback(equationFeedback, 'Use the numbers 7, 2, and 14. Either order for the factors works.', 'bad');
}
});
document.querySelector('#check-reasoning').addEventListener('click', () => {
if (hasReasoningEvidence(reasoning.value)) {
feedback(reasoningFeedback, 'Session complete! You used equal groups and multiplication to explain your answer.', 'good');
} else {
feedback(reasoningFeedback, 'Add how many groups there were, how many were in each group, and the total of 14.', 'bad');
}
});
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,31 @@
# Grade 3 Curriculum Showcase Implementation Plan
> **For Hermes:** Build the showable local demo task-by-task with test-first checks.
**Goal:** Turn the downloaded Grade 3 Core Knowledge collection into a private local library that exposes every available unit, its student resources, and its teacher-guide PDFs, while keeping the interactive equal-groups session as a concrete lesson example for Alicia.
**Architecture:** A local Python server serves the existing static interactive session and a generated Grade 3 catalog. The catalog is derived directly from the verified download manifest and ZIP contents; teacher/student PDFs stay inside their original ZIP archives and are streamed only on demand, avoiding copied curriculum files. The interface uses browser-only state and no accounts or learner-data storage.
**Tech stack:** Python stdlib (`http.server`, `zipfile`, `json`), PyMuPDF for PDF page metadata, vanilla HTML/CSS/JavaScript, Node’s built-in test runner.
---
### Task 1: Derive a Grade 3 catalog from verified downloads
- Add a failing test for grade filtering, subject classification, and teacher-guide detection.
- Implement `src/catalog.mjs` pure helpers.
- Implement `scripts/build_grade3_catalog.py` to inspect every Grade 3 archive from `download-manifest.json`, recording unit title, source archive, internal PDFs, material roles, and PDF page counts.
- Generate `data/grade3_catalog.json`.
### Task 2: Stream original PDFs without copying curriculum
- Add a failing server test for a manifest-known PDF route and an unknown/traversal-style route.
- Implement `server.py` with static-file serving, a catalog endpoint, and a constrained ZIP-PDF route based only on IDs present in `data/grade3_catalog.json`.
### Task 3: Add a Grade 3 library and teacher-plan view
- Add a failing browser-independent test for filtering by subject and selection state.
- Extend the local UI with a Grade 3 library showing every catalogued unit, student resources, teacher guides, source/licensing notice, and one selected teacher-plan preview.
- Link teacher guides to the constrained streaming route and retain the first interactive math session as an explicit classroom activity.
### Task 4: Verify the demo
- Run catalog generation, all tests, server route checks, browser learner flow, and accessibility audit.
- Demonstrate responsive library browsing and a teacher guide opening in the browser.
- Stop the temporary local server after the demonstration; do not bind to the LAN or store learner data.
@@ -0,0 +1,70 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="A private local Grade 3 Core Knowledge curriculum library and interactive lesson pilot.">
<title>Grade 3 Learning Studio</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<a class="brand" href="#top" aria-label="Grade 3 Learning Studio home">Grade 3 <span>Learning Studio</span></a>
<nav aria-label="Primary navigation"><a href="#library">Library</a><a href="#interactive-session">Interactive lesson</a></nav>
</header>
<main id="top">
<section class="hero" aria-labelledby="hero-title">
<div>
<p class="eyebrow">Private family curriculum pilot</p>
<h1 id="hero-title">A whole Grade 3 year—organized around real teaching.</h1>
<p class="lede">Browse the downloaded Core Knowledge units, open their original teacher plans and student materials, then use interactive sessions for the moments where practice benefits from response and feedback.</p>
<div class="hero-actions"><a class="button" href="#library">Explore Grade 3</a><a class="button quiet" href="#interactive-session">Try the math session</a></div>
</div>
<aside class="hero-note" aria-label="What this demo includes">
<p class="note-label">Tonight’s working demo</p>
<p><strong id="unit-count">…</strong> Grade 3 units indexed</p>
<p><strong id="guide-count">…</strong> teacher-guide PDFs ready to open</p>
<p><strong id="student-count">…</strong> student resources indexed</p>
<hr>
<p class="small">No account, AI, analytics, or learner records. The source files stay in the verified local curriculum archive.</p>
</aside>
</section>
<section class="teacher-bridge" aria-labelledby="teacher-bridge-title">
<div><p class="eyebrow">Teacher-led by design</p><h2 id="teacher-bridge-title">The lesson plan stays in charge.</h2></div>
<p>Each unit keeps its original teacher guide—learning goals, materials, talk moves, expected responses, and support for misunderstandings. Interactive activities are a layer on top, not a replacement for the teacher.</p>
</section>
<section id="library" class="library-section" aria-labelledby="library-title">
<div class="section-head"><div><p class="eyebrow">The downloaded collection</p><h2 id="library-title">Grade 3 curriculum library</h2></div><p id="library-status" class="small" aria-live="polite">Loading the verified local catalog…</p></div>
<div id="subject-filters" class="filters" role="group" aria-label="Filter units by subject"></div>
<div id="unit-grid" class="unit-grid"></div>
</section>
<section id="interactive-session" class="interactive-wrap" aria-labelledby="interactive-title">
<div class="section-head"><div><p class="eyebrow">Interactive lesson example</p><h2 id="interactive-title">Math · Unit 1 · Equal groups</h2></div><p class="small">Based on the Unit 1 teacher-plan activity: represent equal-group situations with concrete objects or drawings.</p></div>
<div class="progress" role="group" aria-label="Session progress"><span class="active" id="progress-1"></span><span id="progress-2"></span><span id="progress-3"></span></div>
<section class="session" id="activity-1" aria-labelledby="activity-1-title">
<h3 id="activity-1-title">1. Build the situation</h3>
<p class="prompt">There are <strong>7 people</strong> wearing shoes. Each person is wearing <strong>2 shoes</strong>. Build the equal groups.</p>
<div class="groups" id="groups" role="group" aria-label="Seven groups of shoes"></div>
<button id="add-pair" type="button">Add a pair of shoes</button>
<p class="feedback" id="build-feedback" aria-live="polite">Add one pair for each person.</p>
<div class="answer-row" id="total-row" hidden><label for="total">How many shoes altogether?</label><input id="total" inputmode="numeric" autocomplete="off" aria-describedby="total-help"><button id="check-total" type="button">Check total</button></div>
<p class="tip" id="total-help">Count by twos or add 2 seven times.</p><p class="feedback" id="total-feedback" aria-live="polite"></p>
</section>
<section class="session" id="activity-2" aria-labelledby="activity-2-title" hidden>
<h3 id="activity-2-title">2. Name it with multiplication</h3><p class="prompt">Write an equation for the groups you built. You can use <strong>×</strong> or <strong>x</strong>.</p>
<div class="answer-row"><label for="equation">Equation</label><input id="equation" autocomplete="off" placeholder="7 × 2 = 14"><button id="check-equation" type="button">Check equation</button></div><p class="feedback" id="equation-feedback" aria-live="polite"></p><p class="tip">Both 7 × 2 = 14 and 2 × 7 = 14 describe the same total.</p>
</section>
<section class="session" id="activity-3" aria-labelledby="activity-3-title" hidden>
<h3 id="activity-3-title">3. Show your thinking</h3><p class="prompt">How did the groups help you know there are 14 shoes?</p><label for="reasoning">Your explanation</label><textarea id="reasoning" placeholder="I saw 7 groups of 2. I added…"></textarea><div class="answer-row"><button id="check-reasoning" type="button">Finish session</button></div><p class="feedback" id="reasoning-feedback" aria-live="polite"></p>
</section>
</section>
<p class="source">Curriculum source: Core Knowledge Foundation, downloaded from <a href="https://www.coreknowledge.org/download-free-curriculum/">Core Knowledge</a>. This private, non-commercial pilot links to the original local curriculum materials and retains each source unit’s embedded license and attribution notice. Confirm the embedded license before adapting or sharing any additional unit.</p>
</main>
<script type="module" src="app.mjs"></script>
<script type="module" src="library-app.mjs"></script>
</body>
</html>
@@ -0,0 +1,49 @@
import { filterUnits, subjectsFor, teacherGuidesFor } from './src/library.mjs';
const filters = document.querySelector('#subject-filters');
const grid = document.querySelector('#unit-grid');
const status = document.querySelector('#library-status');
let units = [];
let selectedSubject = 'All';
function resourceLink(material) {
return `<a class="resource-link" href="/api/pdf/${material.id}" target="_blank" rel="noopener">Open ${material.role}<span aria-hidden="true"> ↗</span></a>`;
}
function renderFilters() {
filters.innerHTML = subjectsFor(units).map((subject) => `<button class="filter ${subject === selectedSubject ? 'selected' : ''}" type="button" data-subject="${subject}">${subject}</button>`).join('');
filters.querySelectorAll('button').forEach((button) => button.addEventListener('click', () => {
selectedSubject = button.dataset.subject;
renderFilters();
renderUnits();
}));
}
function renderUnits() {
const filtered = filterUnits(units, selectedSubject);
status.textContent = `${filtered.length} ${selectedSubject === 'All' ? 'units' : selectedSubject + ' units'} shown`;
grid.innerHTML = filtered.map((unit) => {
const guides = teacherGuidesFor(unit);
const student = unit.materials.filter((material) => material.role === 'Student Reader');
const resources = [...guides, ...student].slice(0, 3).map(resourceLink).join('');
return `<article class="unit-card"><p class="unit-subject">${unit.subject}</p><h3>${unit.title.replace(/^Grade 3\s*/, '')}</h3><p class="material-count">${guides.length ? `${guides.length} teacher plan${guides.length === 1 ? '' : 's'}` : 'Teacher plan not identified'} · ${student.length} student resource${student.length === 1 ? '' : 's'}</p>${resources ? `<div class="resource-links">${resources}</div>` : '<p class="small">Open the original archive source for supporting materials.</p>'}<a class="source-link" href="${unit.source_url}" target="_blank" rel="noopener">Core Knowledge source ↗</a></article>`;
}).join('');
}
async function loadLibrary() {
try {
const response = await fetch('/api/catalog', { cache: 'no-store' });
if (!response.ok) throw new Error('catalog unavailable');
const catalog = await response.json();
units = catalog.units;
document.querySelector('#unit-count').textContent = catalog.unit_count;
document.querySelector('#guide-count').textContent = catalog.teacher_guide_count;
document.querySelector('#student-count').textContent = catalog.student_material_count;
renderFilters();
renderUnits();
} catch {
status.textContent = 'The local catalog could not load. Start the private Grade 3 demo server.';
}
}
loadLibrary();
@@ -0,0 +1,9 @@
{
"name": "ckmath-interactive-pilot",
"private": true,
"version": "0.1.0",
"type": "module",
"scripts": {
"test": "node --test"
}
}
@@ -0,0 +1,129 @@
#!/usr/bin/env python3
"""Build a local-only Grade 3 catalog from verified Core Knowledge archives."""
import argparse
import hashlib
import json
import re
import zipfile
from pathlib import Path
ROLE_ORDER = {'Student Reader': 0, 'Teacher Guide': 1, 'Reference': 2}
def is_grade_three_source(item):
title = str(item.get('title', ''))
filename = str(item.get('filename', ''))
return bool(re.search(r'\bGrade 3\b', title, re.I) or re.search(r'(?:^|[_-])G3(?:[_-]|$)', filename, re.I))
def classify_unit(filename):
if re.search(r'CKMath', filename, re.I):
return 'Math'
if re.search(r'CKSci', filename, re.I):
return 'Science'
if re.search(r'CKLA', filename, re.I):
return 'Language Arts'
if re.search(r'CKHG|CKIYS|LABB_CKHG', filename, re.I):
return 'History & Geography'
if re.search(r'CKMusic|CKVA', filename, re.I):
return 'Arts'
return 'Other'
def role_for_pdf(filename):
if re.search(r'(?:^|[_-])(TG|TeacherGuide|Teacher[_ -]?Guide)(?:[_-]|\.)', filename, re.I):
return 'Teacher Guide'
if re.search(r'(?:^|[_-])(SR|StudentReader|Student[_ -]?Reader|ActivityBook)(?:[_-]|\.)', filename, re.I):
return 'Student Reader'
return 'Reference'
def material_id(archive_name, internal_path):
raw = '%s\0%s' % (archive_name, internal_path)
return hashlib.sha256(raw.encode('utf-8')).hexdigest()[:20]
def pdf_page_count(archive_path, internal_path):
try:
import fitz
with zipfile.ZipFile(archive_path) as archive:
document = fitz.open(stream=archive.read(internal_path), filetype='pdf')
count = document.page_count
document.close()
return count
except Exception:
return None
def inspect_archive(archive_path, include_page_counts=False):
materials = []
with zipfile.ZipFile(archive_path) as archive:
for info in archive.infolist():
internal_path = info.filename
if internal_path.startswith('__MACOSX/') or not internal_path.lower().endswith('.pdf'):
continue
filename = Path(internal_path).name
material = {
'id': material_id(archive_path.name, internal_path),
'filename': filename,
'internal_path': internal_path,
'role': role_for_pdf(filename),
}
if include_page_counts:
material['pages'] = pdf_page_count(archive_path, internal_path)
materials.append(material)
materials.sort(key=lambda item: (ROLE_ORDER[item['role']], item['filename'].lower()))
return materials
def build_catalog(manifest_path, downloads_dir, include_page_counts=False):
entries = json.loads(Path(manifest_path).read_text())
units = []
for item in entries:
if item.get('type') != 'zip' or not is_grade_three_source(item):
continue
archive_path = Path(downloads_dir) / item['filename']
if not archive_path.is_file():
continue
materials = inspect_archive(archive_path, include_page_counts)
units.append({
'id': hashlib.sha256(item['filename'].encode('utf-8')).hexdigest()[:16],
'title': item['title'],
'filename': item['filename'],
'source_url': item['source'],
'subject': classify_unit(item['filename']),
'materials': materials,
'teacher_guide_count': sum(material['role'] == 'Teacher Guide' for material in materials),
'student_material_count': sum(material['role'] == 'Student Reader' for material in materials),
})
units.sort(key=lambda item: (item['subject'], item['title'].lower()))
return {
'grade': 3,
'unit_count': len(units),
'teacher_guide_count': sum(unit['teacher_guide_count'] for unit in units),
'student_material_count': sum(unit['student_material_count'] for unit in units),
'units': units,
}
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--manifest', type=Path, required=True)
parser.add_argument('--downloads-dir', type=Path, required=True)
parser.add_argument('--output', type=Path, required=True)
parser.add_argument('--page-counts', action='store_true')
args = parser.parse_args()
catalog = build_catalog(args.manifest, args.downloads_dir, args.page_counts)
args.output.parent.mkdir(parents=True, exist_ok=True)
args.output.write_text(json.dumps(catalog, indent=2) + '\n')
print(json.dumps({
'output': str(args.output),
'units': catalog['unit_count'],
'teacher_guides': catalog['teacher_guide_count'],
'student_materials': catalog['student_material_count'],
}))
if __name__ == '__main__':
main()
@@ -0,0 +1,91 @@
#!/usr/bin/env python3
"""Private loopback demo server for the Grade 3 curriculum showcase."""
import argparse
import json
import mimetypes
import os
import re
import sys
import zipfile
from http import HTTPStatus
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path
from urllib.parse import unquote, urlparse
ROOT = Path(__file__).resolve().parent
DEFAULT_DOWNLOADS = Path.home() / 'Downloads' / 'CoreKnowledge_Grades_1-5_EN_ES'
sys.path.insert(0, str(ROOT / 'src'))
from server_catalog import lookup_material, material_index
class ShowcaseHandler(SimpleHTTPRequestHandler):
def __init__(self, *args, downloads_dir=None, **kwargs):
self.downloads_dir = Path(downloads_dir or DEFAULT_DOWNLOADS).resolve()
super().__init__(*args, directory=str(ROOT), **kwargs)
def catalog(self):
return json.loads((ROOT / 'data' / 'grade3_catalog.json').read_text())
def send_json(self, data):
body = json.dumps(data).encode('utf-8')
self.send_response(HTTPStatus.OK)
self.send_header('Content-Type', 'application/json; charset=utf-8')
self.send_header('Content-Length', str(len(body)))
self.send_header('Cache-Control', 'no-store')
self.end_headers()
self.wfile.write(body)
def send_pdf(self, material_id):
if not re.fullmatch(r'[0-9a-f]{20}', material_id):
self.send_error(HTTPStatus.NOT_FOUND)
return
pair = lookup_material(material_index(self.catalog()), material_id)
if pair is None:
self.send_error(HTTPStatus.NOT_FOUND)
return
archive_name, internal_path = pair
archive_path = (self.downloads_dir / archive_name).resolve()
if archive_path.parent != self.downloads_dir:
self.send_error(HTTPStatus.NOT_FOUND)
return
try:
with zipfile.ZipFile(archive_path) as archive:
content = archive.read(internal_path)
except (FileNotFoundError, KeyError, zipfile.BadZipFile):
self.send_error(HTTPStatus.NOT_FOUND)
return
filename = Path(internal_path).name
self.send_response(HTTPStatus.OK)
self.send_header('Content-Type', mimetypes.guess_type(filename)[0] or 'application/pdf')
self.send_header('Content-Length', str(len(content)))
self.send_header('Content-Disposition', 'inline; filename="%s"' % filename.replace('"', ''))
self.send_header('Cache-Control', 'private, no-store')
self.end_headers()
self.wfile.write(content)
def do_GET(self):
path = urlparse(self.path).path
if path == '/api/catalog':
self.send_json(self.catalog())
return
if path.startswith('/api/pdf/'):
self.send_pdf(unquote(path[len('/api/pdf/'):]))
return
super().do_GET()
def run(port, downloads_dir):
def handler(*args, **kwargs):
return ShowcaseHandler(*args, downloads_dir=downloads_dir, **kwargs)
server = ThreadingHTTPServer(('127.0.0.1', port), handler)
print('Serving Grade 3 showcase at http://127.0.0.1:%s' % port)
server.serve_forever()
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--port', type=int, default=8899)
parser.add_argument('--downloads-dir', type=Path, default=DEFAULT_DOWNLOADS)
args = parser.parse_args()
run(args.port, args.downloads_dir)
@@ -0,0 +1,20 @@
export function isGradeThreeSource(source) {
return /\bGrade 3\b/i.test(source.title ?? '') || /(?:^|[_-])G3(?:[_-]|$)/i.test(source.filename ?? '');
}
export function classifyUnit(filename) {
const name = String(filename);
if (/CKMath/i.test(name)) return 'Math';
if (/CKSci/i.test(name)) return 'Science';
if (/CKLA/i.test(name)) return 'Language Arts';
if (/CKHG|CKIYS|LABB_CKHG/i.test(name)) return 'History & Geography';
if (/CKMusic|CKVA/i.test(name)) return 'Arts';
return 'Other';
}
export function roleForPdf(filename) {
const name = String(filename);
if (/(?:^|[_-])(TG|TeacherGuide|Teacher[_ -]?Guide)(?:[_-]|\.)/i.test(name)) return 'Teacher Guide';
if (/(?:^|[_-])(SR|StudentReader|Student[_ -]?Reader|ActivityBook)(?:[_-]|\.)/i.test(name)) return 'Student Reader';
return 'Reference';
}
@@ -0,0 +1,15 @@
export function subjectsFor(units) {
return ['All', ...new Set(units.map((unit) => unit.subject).filter(Boolean))].sort((a, b) => {
if (a === 'All') return -1;
if (b === 'All') return 1;
return a.localeCompare(b);
});
}
export function filterUnits(units, subject) {
return subject === 'All' ? units : units.filter((unit) => unit.subject === subject);
}
export function teacherGuidesFor(unit) {
return (unit.materials ?? []).filter((material) => material.role === 'Teacher Guide');
}
@@ -0,0 +1,18 @@
def material_index(catalog):
"""Map only generated catalog IDs to their exact archive member paths."""
index = {}
for unit in catalog.get('units', []):
archive_name = unit.get('filename')
if not archive_name:
continue
for material in unit.get('materials', []):
material_id = material.get('id')
internal_path = material.get('internal_path')
if material_id and internal_path:
index[material_id] = (archive_name, internal_path)
return index
def lookup_material(index, material_id):
"""Return a declared pair or None; request input is never a filesystem path."""
return index.get(material_id)
@@ -0,0 +1,16 @@
export function isCorrectTotal(value) {
return Number(String(value).trim()) === 14;
}
export function isCorrectEquation(value) {
const numbers = String(value).match(/\d+/g)?.map(Number) ?? [];
if (numbers.length !== 3) return false;
const [first, second, product] = numbers;
return product === 14 && ((first === 7 && second === 2) || (first === 2 && second === 7));
}
export function hasReasoningEvidence(value) {
const text = String(value).toLowerCase();
const strategy = /group|each|repeated|add|plus/.test(text);
return strategy && /\b14\b/.test(text);
}
@@ -0,0 +1,9 @@
:root { --ink:#142737; --muted:#576a75; --paper:#f7f4ed; --card:#fffdfa; --line:#ded7c7; --blue:#156d92; --blue-deep:#0e526f; --mint:#dceee9; --gold:#edb950; --good:#13765a; --bad:#a13d34; }
* { box-sizing:border-box; } html { scroll-behavior:smooth; } body { margin:0; min-height:100vh; color:var(--ink); background:var(--paper); font-family:"Avenir Next",Avenir,ui-rounded,system-ui,sans-serif; }
a { color:var(--blue-deep); } .site-header { width:min(100% - 2rem,1160px); margin:auto; padding:1.15rem 0; display:flex; align-items:center; justify-content:space-between; gap:1rem; } .brand { color:var(--ink); text-decoration:none; font-weight:850; letter-spacing:-.04em; font-size:1.17rem; } .brand span { color:var(--blue); } nav { display:flex; gap:1.2rem; } nav a { color:var(--muted); text-decoration:none; font-size:.92rem; font-weight:700; }
main { width:min(100% - 2rem,1160px); margin:auto; } .hero { display:grid; grid-template-columns:1.5fr .78fr; gap:clamp(1.5rem,6vw,6rem); align-items:end; padding:clamp(3rem,8vw,7rem) 0 4rem; border-bottom:1px solid var(--line); } .eyebrow { margin:0 0 .6rem; color:var(--blue-deep); font-size:.73rem; font-weight:850; letter-spacing:.12em; text-transform:uppercase; } h1,h2,h3 { font-family:Georgia,"Times New Roman",serif; letter-spacing:-.045em; } h1 { max-width:13ch; margin:0; font-size:clamp(3.1rem,7vw,6.3rem); line-height:.92; } h2 { margin:0; font-size:clamp(2rem,4vw,3rem); line-height:1; } h3 { margin:.2rem 0 .8rem; font-size:1.45rem; line-height:1.05; } .lede { max-width:58ch; color:var(--muted); font-size:1.08rem; line-height:1.6; } .hero-actions { display:flex; flex-wrap:wrap; gap:.65rem; margin-top:1.5rem; } .button,button { appearance:none; border:0; border-radius:.68rem; padding:.8rem 1rem; color:white; background:var(--blue); cursor:pointer; text-decoration:none; font:inherit; font-weight:800; } .button:hover,button:hover { background:var(--blue-deep); } .button.quiet { color:var(--blue-deep); background:#dceef3; } .hero-note { border:1px solid var(--line); border-radius:1rem; padding:1.2rem 1.3rem; background:var(--card); box-shadow:0 1rem 2.4rem #283d4012; } .hero-note p { margin:.55rem 0; } .hero-note strong { font-family:Georgia,serif; color:var(--blue-deep); font-size:1.5rem; } .note-label { color:var(--muted); font-size:.8rem; font-weight:800; text-transform:uppercase; letter-spacing:.09em; } hr { border:0; border-top:1px solid var(--line); margin:1rem 0; }
.teacher-bridge { display:grid; grid-template-columns:.8fr 1.2fr; gap:2rem; padding:4rem 0; } .teacher-bridge>p { margin:0; color:var(--muted); font-size:1.06rem; line-height:1.65; } .library-section,.interactive-wrap { padding:4rem 0; border-top:1px solid var(--line); } .section-head { display:flex; justify-content:space-between; align-items:end; gap:1.5rem; margin-bottom:1.5rem; } .small { color:var(--muted); font-size:.88rem; line-height:1.5; } .filters { display:flex; flex-wrap:wrap; gap:.45rem; margin:1.25rem 0 1.5rem; } .filter { padding:.52rem .75rem; border:1px solid #cbd7d9; color:var(--blue-deep); background:transparent; font-size:.88rem; } .filter.selected { color:white; background:var(--blue-deep); border-color:var(--blue-deep); }
.unit-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:.85rem; } .unit-card { display:flex; min-height:235px; flex-direction:column; padding:1.15rem; border:1px solid var(--line); border-radius:.95rem; background:var(--card); } .unit-subject { margin:0; color:var(--blue-deep); font-size:.75rem; font-weight:850; letter-spacing:.08em; text-transform:uppercase; } .material-count { margin:0 0 .9rem; color:var(--muted); font-size:.86rem; line-height:1.4; } .resource-links { display:grid; gap:.35rem; margin-top:auto; } .resource-link { width:fit-content; color:var(--blue-deep); font-size:.9rem; font-weight:800; } .source-link { margin-top:.85rem; color:var(--muted); font-size:.76rem; }
.interactive-wrap { padding-bottom:2rem; max-width:790px; } .progress { display:flex; gap:.45rem; margin:2rem 0 1.2rem; } .progress span { height:.4rem; flex:1; border-radius:2rem; background:#d8e0e2; } .progress span.active { background:var(--blue); } .session { border:1px solid var(--line); border-radius:1.1rem; background:var(--card); box-shadow:0 1.2rem 3rem #42381610; padding:clamp(1.25rem,4vw,2rem); } .session + .session { margin-top:1rem; } .session h3 { font-size:1.75rem; } .prompt { margin:.9rem 0 1.25rem; font-size:1.1rem; line-height:1.5; } .groups { display:grid; grid-template-columns:repeat(auto-fit,minmax(105px,1fr)); gap:.65rem; margin:1.1rem 0; } .group { min-height:88px; border:2px dashed #b7d0dc; border-radius:.85rem; padding:.65rem; background:#f3fbfd; text-align:center; } .group span { display:block; color:var(--muted); font-size:.78rem; font-weight:700; } .shoes { min-height:42px; padding-top:.45rem; font-size:1.45rem; letter-spacing:.08em; } .answer-row { display:flex; gap:.65rem; flex-wrap:wrap; align-items:center; margin-top:1.15rem; } input,textarea { width:min(100%,320px); border:1px solid #afbac1; border-radius:.65rem; background:white; color:var(--ink); font:inherit; padding:.78rem; } textarea { min-height:112px; width:100%; resize:vertical; } button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible { outline:3px solid var(--gold); outline-offset:3px; } .feedback { min-height:1.5rem; margin:.8rem 0 0; font-weight:700; } .feedback.good { color:var(--good); } .feedback.bad { color:var(--bad); } .tip { color:var(--muted); font-size:.94rem; line-height:1.45; } [hidden] { display:none!important; } .source { max-width:850px; margin:2rem 0 3.5rem; color:var(--muted); font-size:.8rem; line-height:1.5; }
@media (max-width:800px) { .hero,.teacher-bridge { grid-template-columns:1fr; } .hero { padding-top:3.5rem; } .unit-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:520px) { .site-header,main { width:min(100% - 1.2rem,1160px); } nav { gap:.8rem; } .unit-grid { grid-template-columns:1fr; } .section-head { display:block; } .section-head .small { margin-top:.8rem; } h1 { font-size:3.35rem; } .session { padding:1.15rem; } .answer-row input { width:100%; } }
@@ -0,0 +1,21 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import { classifyUnit, roleForPdf, isGradeThreeSource } from '../src/catalog.mjs';
test('keeps a Grade 3 unit from the verified source list', () => {
assert.equal(isGradeThreeSource({ title: 'Grade 3 CK Math: Unit 1', filename: 'CKMath_G3U1.zip' }), true);
assert.equal(isGradeThreeSource({ title: 'Grade 2 CK Math: Unit 1', filename: 'CKMath_G2U1.zip' }), false);
});
test('classifies major Grade 3 curriculum families', () => {
assert.equal(classifyUnit('CKMath_G3U1_IntroducingMultiplication.zip'), 'Math');
assert.equal(classifyUnit('CKSci_G3_U1_InvestigatingForces.zip'), 'Science');
assert.equal(classifyUnit('CKLA_G3_Unit-1.zip'), 'Language Arts');
assert.equal(classifyUnit('CKHG_G3_U1_WorldRivers.zip'), 'History & Geography');
});
test('labels teacher guides and student resources without exposing arbitrary paths', () => {
assert.equal(roleForPdf('CKMath_G3U1_IntroducingMultiplication_TG_W2.pdf'), 'Teacher Guide');
assert.equal(roleForPdf('CKMath_G3U1_IntroducingMultiplication_SR_W2.pdf'), 'Student Reader');
assert.equal(roleForPdf('CoreKnowledge_CurriculumSeries_CCL_TermsOfUse_2024_W1.pdf'), 'Reference');
});
@@ -0,0 +1,23 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import { filterUnits, subjectsFor, teacherGuidesFor } from '../src/library.mjs';
const units = [
{ subject: 'Math', title: 'Grade 3 Math', materials: [{ role: 'Teacher Guide', id: 'math-guide' }] },
{ subject: 'Science', title: 'Grade 3 Science', materials: [{ role: 'Student Reader', id: 'science-reader' }] },
{ subject: 'Math', title: 'Math Literature', materials: [] },
];
test('lists available subjects with All first', () => {
assert.deepEqual(subjectsFor(units), ['All', 'Math', 'Science']);
});
test('filters units by selected subject', () => {
assert.deepEqual(filterUnits(units, 'Math').map((unit) => unit.title), ['Grade 3 Math', 'Math Literature']);
assert.equal(filterUnits(units, 'All').length, 3);
});
test('selects only a unit’s teacher-plan PDFs', () => {
assert.deepEqual(teacherGuidesFor(units[0]), [{ role: 'Teacher Guide', id: 'math-guide' }]);
assert.deepEqual(teacherGuidesFor(units[1]), []);
});
@@ -0,0 +1,24 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import {
isCorrectTotal,
isCorrectEquation,
hasReasoningEvidence,
} from '../src/session.mjs';
test('accepts the total for seven groups of two', () => {
assert.equal(isCorrectTotal('14'), true);
});
test('rejects an incorrect total for seven groups of two', () => {
assert.equal(isCorrectTotal('13'), false);
});
test('accepts an equivalent multiplication equation', () => {
assert.equal(isCorrectEquation('2 × 7 = 14'), true);
});
test('requires a learner explanation to name groups or repeated addition and the total', () => {
assert.equal(hasReasoningEvidence('There are 7 groups of 2, so there are 14 shoes.'), true);
assert.equal(hasReasoningEvidence('It is 14.'), false);
});
@@ -0,0 +1,40 @@
import importlib.util
import json
import tempfile
import unittest
import zipfile
from pathlib import Path
MODULE_PATH = Path(__file__).parents[1] / 'scripts' / 'build_grade3_catalog.py'
spec = importlib.util.spec_from_file_location('catalog_builder', MODULE_PATH)
builder = importlib.util.module_from_spec(spec)
spec.loader.exec_module(builder)
class GradeThreeCatalogTest(unittest.TestCase):
def test_build_catalog_keeps_grade_three_archives_and_labels_pdfs(self):
with tempfile.TemporaryDirectory() as temp_dir:
root = Path(temp_dir)
archive = root / 'CKMath_G3U1.zip'
with zipfile.ZipFile(archive, 'w') as zf:
zf.writestr('unit/CKMath_G3U1_TG.pdf', b'not-a-real-pdf')
zf.writestr('unit/CKMath_G3U1_SR.pdf', b'not-a-real-pdf')
zf.writestr('__MACOSX/unit/._ignored.pdf', b'ignored')
manifest = root / 'download-manifest.json'
manifest.write_text(json.dumps([
{'title': 'Grade 3 CKMath: Unit 1', 'filename': archive.name, 'source': 'https://example.test/g3.zip', 'type': 'zip'},
{'title': 'Grade 2 CKMath: Unit 1', 'filename': 'CKMath_G2U1.zip', 'source': 'https://example.test/g2.zip', 'type': 'zip'},
]))
catalog = builder.build_catalog(manifest, root)
self.assertEqual(catalog['unit_count'], 1)
unit = catalog['units'][0]
self.assertEqual(unit['subject'], 'Math')
self.assertEqual([material['role'] for material in unit['materials']], ['Student Reader', 'Teacher Guide'])
self.assertEqual(unit['teacher_guide_count'], 1)
self.assertEqual(unit['student_material_count'], 1)
if __name__ == '__main__':
unittest.main()
@@ -0,0 +1,31 @@
import importlib.util
import unittest
from pathlib import Path
MODULE_PATH = Path(__file__).parents[1] / 'src' / 'server_catalog.py'
spec = importlib.util.spec_from_file_location('server_catalog', MODULE_PATH)
server_catalog = importlib.util.module_from_spec(spec)
spec.loader.exec_module(server_catalog)
class ServerCatalogTest(unittest.TestCase):
def setUp(self):
self.catalog = {
'units': [{
'filename': 'CKMath_G3U1.zip',
'materials': [{'id': 'guide-1', 'internal_path': 'unit/guide.pdf', 'filename': 'guide.pdf'}],
}]
}
def test_known_material_id_resolves_to_its_declared_zip_member(self):
index = server_catalog.material_index(self.catalog)
self.assertEqual(server_catalog.lookup_material(index, 'guide-1'), ('CKMath_G3U1.zip', 'unit/guide.pdf'))
def test_unknown_or_path_like_id_is_not_resolved(self):
index = server_catalog.material_index(self.catalog)
self.assertIsNone(server_catalog.lookup_material(index, '../../etc/passwd'))
self.assertIsNone(server_catalog.lookup_material(index, 'not-in-the-catalog'))
if __name__ == '__main__':
unittest.main()
@@ -0,0 +1,10 @@
COLANODE_BASE_URL=https://colanode.reynafamily.com/client
COLANODE_SOCKET_BASE_URL=wss://colanode.reynafamily.com/client
COLANODE_WORKSPACE_NAME=FamReynaWorkspace
COLANODE_TOKEN=
COLANODE_EMAIL=
COLANODE_PASSWORD=
STATE_FILE=
HERMES_BIN=hermes
HERMES_TIMEOUT_MS=60000
HERMES_MAX_OUTPUT_BYTES=12000
@@ -0,0 +1,3 @@
dist/
node_modules/
*.log
+39
View File
@@ -0,0 +1,39 @@
# Colanode Hermes Bridge
Standalone Node 22 TypeScript service that listens to Colanode synchronizer events and replies through Hermes only when a new Colanode `message` node explicitly mentions the bot user.
## Safety
- Reads secrets from `$HOME/.hermes/secrets/colanode-family-bot.env`.
- Requires that secret file to be mode `0600`.
- Uses Colanode client HTTP/WebSocket APIs only.
- Does not write to Postgres, Hermes config, Caddy, Colanode deployment files, or Colanode data outside the documented mutation API.
- Tests never send Colanode replies.
## Secret File
Expected variables:
```sh
COLANODE_TOKEN=...
# Optional fallback only if a stored token is unavailable:
COLANODE_EMAIL=bot@example.com
COLANODE_PASSWORD=...
```
Optional overrides are shown in `.env.example`.
## Commands
```sh
npm install
npm run build
npm test
```
Run foreground service after build:
```sh
npm start
```
+141
View File
@@ -0,0 +1,141 @@
{
"name": "colanode-hermes-bridge",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "colanode-hermes-bridge",
"version": "0.1.0",
"dependencies": {
"js-base64": "^3.7.7",
"ws": "^8.18.0",
"yjs": "^13.6.21"
},
"devDependencies": {
"@types/node": "^22.10.2",
"@types/ws": "^8.5.13",
"typescript": "^5.7.2"
},
"engines": {
"node": ">=22"
}
},
"node_modules/@types/node": {
"version": "22.20.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz",
"integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
}
},
"node_modules/@types/ws": {
"version": "8.18.1",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
"integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/isomorphic.js": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz",
"integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==",
"license": "MIT",
"funding": {
"type": "GitHub Sponsors ❤",
"url": "https://github.com/sponsors/dmonad"
}
},
"node_modules/js-base64": {
"version": "3.9.3",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.9.3.tgz",
"integrity": "sha512-uwYQp+VJ38FVvtim6qNbit6e9uT6dwWQ4Y1+H9TxhW5hcHjpHwoxlR0nMpqUmIFOmu4VqMxwdJA88gIVuZJQ/g==",
"license": "BSD-3-Clause"
},
"node_modules/lib0": {
"version": "0.2.117",
"resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.117.tgz",
"integrity": "sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==",
"license": "MIT",
"dependencies": {
"isomorphic.js": "^0.2.4"
},
"bin": {
"0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js",
"0gentesthtml": "bin/gentesthtml.js",
"0serve": "bin/0serve.js"
},
"engines": {
"node": ">=16"
},
"funding": {
"type": "GitHub Sponsors ❤",
"url": "https://github.com/sponsors/dmonad"
}
},
"node_modules/typescript": {
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"node_modules/undici-types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"dev": true,
"license": "MIT"
},
"node_modules/ws": {
"version": "8.21.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz",
"integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==",
"license": "MIT",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/yjs": {
"version": "13.6.32",
"resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.32.tgz",
"integrity": "sha512-lfiJIIC4Xayt5ItynE407ehlE03pCjeOc4hkR4yxxvvNJ4kuiN25B0g+Qp8XagYz361LLL7DCzR5bvFJ81QKtQ==",
"license": "MIT",
"dependencies": {
"lib0": "^0.2.99"
},
"engines": {
"node": ">=16.0.0",
"npm": ">=8.0.0"
},
"funding": {
"type": "GitHub Sponsors ❤",
"url": "https://github.com/sponsors/dmonad"
}
}
}
}
@@ -0,0 +1,25 @@
{
"name": "colanode-hermes-bridge",
"version": "0.1.0",
"private": true,
"type": "module",
"engines": {
"node": ">=22"
},
"scripts": {
"build": "tsc -p tsconfig.json",
"test": "npm run build && node --test dist/test/*.test.js",
"start": "node dist/index.js",
"dev": "tsx src/index.ts"
},
"dependencies": {
"js-base64": "^3.7.7",
"ws": "^8.18.0",
"yjs": "^13.6.21"
},
"devDependencies": {
"@types/node": "^22.10.2",
"@types/ws": "^8.5.13",
"typescript": "^5.7.2"
}
}
@@ -0,0 +1,82 @@
import { createHash } from 'node:crypto';
import WebSocket from 'ws';
import type { AccountSyncOutput, SynchronizerInput, SynchronizerInputMessage, WorkspaceOutput } from './types.js';
export class ColanodeClient {
private token: string | undefined;
constructor(
private readonly httpBaseUrl: string,
private readonly socketBaseUrl: string,
token?: string
) {
this.token = token;
}
async authenticate(email?: string, password?: string): Promise<AccountSyncOutput> {
if (!this.token) {
if (!email || !password) throw new Error('COLANODE_TOKEN is required unless COLANODE_EMAIL and COLANODE_PASSWORD are provided');
const login = await this.postJson<{ type: string; token?: string }>('v1/auth/email/login', { email, password }, false);
if (login.type !== 'success' || !login.token) throw new Error('Email login did not return a usable token');
this.token = login.token;
}
const sync = await this.postJson<AccountSyncOutput>('v1/accounts/sync', {});
if (sync.token) this.token = sync.token;
return sync;
}
async createSocket(): Promise<WebSocket> {
const output = await this.postJson<{ id: string }>('v1/sockets', {});
return new WebSocket(`${this.socketBaseUrl}/v1/sockets/${output.id}`, {
headers: this.authHeader()
});
}
async createMessage(workspaceId: string, mutation: unknown): Promise<void> {
const output = await this.postJson<{ results: { id: string; status: number }[] }>(
`v1/workspaces/${workspaceId}/mutations`,
{ mutations: [mutation] }
);
const result = output.results[0];
if (!result || (result.status !== 200 && result.status !== 201)) {
throw new Error(`Colanode mutation failed with status ${result?.status ?? 'missing'}`);
}
}
sendSynchronizer(socket: WebSocket, userId: string, input: SynchronizerInput, cursor: string): string {
const id = synchronizerId(userId, input);
const message: SynchronizerInputMessage = { type: 'synchronizer.input', id, userId, input, cursor };
socket.send(JSON.stringify(message));
return id;
}
private async postJson<T>(path: string, body: unknown, useAuth = true): Promise<T> {
const headers: Record<string, string> = { 'content-type': 'application/json' };
if (useAuth) Object.assign(headers, this.authHeader());
const response = await fetch(`${this.httpBaseUrl}/${path}`, {
method: 'POST',
headers,
body: JSON.stringify(body)
});
if (!response.ok) throw new Error(`Colanode ${path} returned HTTP ${response.status}`);
return (await response.json()) as T;
}
private authHeader(): Record<string, string> {
if (!this.token) throw new Error('Missing Colanode token');
return { authorization: `Bearer ${this.token}` };
}
}
export function requireWorkspace(sync: AccountSyncOutput, name: string): WorkspaceOutput {
const workspace = sync.workspaces.find((item) => item.name === name);
if (!workspace) throw new Error(`Required workspace membership not found: ${name}`);
console.log(`Colanode account: ${sync.account.name}`);
console.log(`Workspace: ${workspace.name}`);
console.log(`Role: ${workspace.user.role}`);
return workspace;
}
export function synchronizerId(userId: string, input: SynchronizerInput): string {
return createHash('sha256').update(JSON.stringify({ userId, input })).digest('hex');
}
@@ -0,0 +1,65 @@
import { readFile, stat } from 'node:fs/promises';
import { homedir } from 'node:os';
import { join } from 'node:path';
export type Config = {
httpBaseUrl: string;
socketBaseUrl: string;
workspaceName: string;
token?: string;
email?: string;
password?: string;
stateFile: string;
hermesBin: string;
hermesTimeoutMs: number;
hermesMaxOutputBytes: number;
};
const SECRET_PATH = join(homedir(), '.hermes/secrets/colanode-family-bot.env');
export async function loadConfig(): Promise<Config> {
const secrets = await readSecretEnv(SECRET_PATH);
const env = { ...process.env, ...secrets };
return {
httpBaseUrl: stripTrailingSlash(env.COLANODE_BASE_URL ?? 'https://colanode.reynafamily.com/client'),
socketBaseUrl: stripTrailingSlash(env.COLANODE_SOCKET_BASE_URL ?? 'wss://colanode.reynafamily.com/client'),
workspaceName: env.COLANODE_WORKSPACE_NAME ?? 'FamReynaWorkspace',
token: emptyToUndefined(env.COLANODE_TOKEN ?? env.COLANODE_BOT_TOKEN),
email: emptyToUndefined(env.COLANODE_EMAIL ?? env.COLANODE_BOT_EMAIL),
password: emptyToUndefined(env.COLANODE_PASSWORD ?? env.COLANODE_BOT_PASSWORD),
stateFile: env.STATE_FILE ?? join(homedir(), '.hermes/colanode-family-bot-state.json'),
hermesBin: env.HERMES_BIN ?? 'hermes',
hermesTimeoutMs: Number(env.HERMES_TIMEOUT_MS ?? 60_000),
hermesMaxOutputBytes: Number(env.HERMES_MAX_OUTPUT_BYTES ?? 12_000)
};
}
async function readSecretEnv(path: string): Promise<Record<string, string>> {
const info = await stat(path);
if ((info.mode & 0o777) !== 0o600) {
throw new Error(`Secret file must be mode 0600: ${path}`);
}
const text = await readFile(path, 'utf8');
const result: Record<string, string> = {};
for (const rawLine of text.split(/\r?\n/)) {
const line = rawLine.trim();
if (!line || line.startsWith('#')) continue;
const eq = line.indexOf('=');
if (eq <= 0) continue;
const key = line.slice(0, eq).trim();
let value = line.slice(eq + 1).trim();
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
value = value.slice(1, -1);
}
result[key] = value;
}
return result;
}
function stripTrailingSlash(value: string): string {
return value.replace(/\/+$/, '');
}
function emptyToUndefined(value: string | undefined): string | undefined {
return value && value.length > 0 ? value : undefined;
}
@@ -0,0 +1,52 @@
import { fromUint8Array, toUint8Array } from 'js-base64';
import * as Y from 'yjs';
export function decodeAttributes<T>(encoded: string): T {
const doc = new Y.Doc();
Y.applyUpdate(doc, toUint8Array(encoded));
return doc.getMap('object').toJSON() as T;
}
export function encodeAttributes(attributes: Record<string, unknown>): string {
const doc = new Y.Doc();
const updates: Uint8Array[] = [];
doc.on('update', (update) => updates.push(update));
doc.transact(() => applyObject(doc.getMap('object'), attributes));
if (updates.length !== 1) throw new Error('Expected one Yjs update');
return fromUint8Array(Y.encodeStateAsUpdate(doc));
}
function applyObject(map: Y.Map<unknown>, object: Record<string, unknown>): void {
for (const [key, value] of Object.entries(object)) {
if (value === null || value === undefined) continue;
if (Array.isArray(value)) {
const arr = new Y.Array<unknown>();
arr.insert(0, value.map(convertValue));
map.set(key, arr);
} else if (isRecord(value)) {
const child = new Y.Map<unknown>();
applyObject(child, value);
map.set(key, child);
} else {
map.set(key, value);
}
}
}
function convertValue(value: unknown): unknown {
if (Array.isArray(value)) {
const arr = new Y.Array<unknown>();
arr.insert(0, value.map(convertValue));
return arr;
}
if (isRecord(value)) {
const map = new Y.Map<unknown>();
applyObject(map, value);
return map;
}
return value;
}
function isRecord(value: unknown): value is Record<string, unknown> {
return typeof value === 'object' && value !== null && !Array.isArray(value);
}
@@ -0,0 +1,59 @@
import { spawn } from 'node:child_process';
export type HermesOptions = {
bin: string;
timeoutMs: number;
maxOutputBytes: number;
};
export type PromptContext = {
messageText: string;
parentText?: string | null;
};
export function buildHermesPrompt(context: PromptContext): string {
return [
'You are Reyna Family Bot replying to a Colanode family message.',
'Answer helpfully and concisely.',
'Do not claim you performed actions you did not perform.',
'Do not reveal secrets, tokens, credentials, file contents marked secret, or system configuration.',
'',
`Mentioned message:\n${context.messageText}`,
'',
`Parent/thread context:\n${context.parentText?.trim() || '(not available)'}`
].join('\n');
}
export async function runHermes(prompt: string, options: HermesOptions): Promise<string> {
return new Promise((resolve, reject) => {
const child = spawn(options.bin, ['chat', '-q', prompt], {
stdio: ['ignore', 'pipe', 'pipe'],
env: process.env
});
let stdout = Buffer.alloc(0);
let stderr = Buffer.alloc(0);
const timer = setTimeout(() => {
child.kill('SIGTERM');
reject(new Error('Hermes timed out'));
}, options.timeoutMs);
child.stdout.on('data', (chunk: Buffer) => {
stdout = Buffer.concat([stdout, chunk]).subarray(0, options.maxOutputBytes);
});
child.stderr.on('data', (chunk: Buffer) => {
stderr = Buffer.concat([stderr, chunk]).subarray(0, 2048);
});
child.on('error', (error) => {
clearTimeout(timer);
reject(error);
});
child.on('close', (code) => {
clearTimeout(timer);
if (code !== 0) {
reject(new Error(`Hermes exited with code ${code}: ${stderr.toString('utf8').trim()}`));
return;
}
resolve(stdout.toString('utf8').trim().slice(0, options.maxOutputBytes));
});
});
}
@@ -0,0 +1,30 @@
import { randomBytes } from 'node:crypto';
const ENCODING = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
export function generateId(): string {
const now = Date.now();
const time = encodeBase32(now, 10);
let random = '';
const bytes = randomBytes(16);
let value = 0;
let bits = 0;
for (const byte of bytes) {
value = (value << 8) | byte;
bits += 8;
while (bits >= 5 && random.length < 16) {
random += ENCODING[(value >>> (bits - 5)) & 31];
bits -= 5;
}
}
return time + random.padEnd(16, '0');
}
function encodeBase32(num: number, length: number): string {
let out = '';
for (let i = length - 1; i >= 0; i--) {
out = ENCODING[num % 32] + out;
num = Math.floor(num / 32);
}
return out;
}
@@ -0,0 +1,123 @@
import { setTimeout as delay } from 'node:timers/promises';
import { loadConfig } from './config.js';
import { ColanodeClient, requireWorkspace, synchronizerId } from './colanode.js';
import { StateStore } from './state.js';
import { processNodeUpdate, type NodeCache } from './processor.js';
import type { SyncCollaborationData, SyncNodeUpdateData, SynchronizerInput } from './types.js';
const config = await loadConfig();
const state = new StateStore(config.stateFile);
await state.load();
let stopping = false;
process.on('SIGTERM', () => {
stopping = true;
});
process.on('SIGINT', () => {
stopping = true;
});
const colanode = new ColanodeClient(config.httpBaseUrl, config.socketBaseUrl, config.token);
const sync = await colanode.authenticate(config.email, config.password);
const workspace = requireWorkspace(sync, config.workspaceName);
const botUserId = workspace.user.id;
const activeRoots = new Set<string>();
const cache: NodeCache = new Map();
let backoff = 1000;
while (!stopping) {
try {
await runSocketLoop();
backoff = 1000;
} catch (error) {
if (!stopping) {
console.error(`Bridge loop error: ${(error as Error).message}`);
await delay(backoff);
backoff = Math.min(backoff * 2, 30_000);
}
}
}
async function runSocketLoop(): Promise<void> {
const socket = await colanode.createSocket();
const ids = new Map<string, { key: string; input: SynchronizerInput }>();
const subscribe = (input: SynchronizerInput) => {
const key = cursorKey(input);
const id = colanode.sendSynchronizer(socket, botUserId, input, state.getCursor(key));
ids.set(id, { key, input });
};
await new Promise<void>((resolve, reject) => {
const ping = setInterval(() => {
if (socket.readyState !== socket.OPEN) return;
for (const item of ids.values()) colanode.sendSynchronizer(socket, botUserId, item.input, state.getCursor(item.key));
}, 60_000);
socket.on('open', () => {
subscribe({ type: 'users' });
subscribe({ type: 'collaborations' });
for (const rootId of activeRoots) subscribe({ type: 'node.updates', rootId });
});
socket.on('message', (raw) => {
void handleMessage(raw.toString(), ids, subscribe).catch((error) => console.error(`Event handling error: ${error.message}`));
});
socket.on('close', () => {
clearInterval(ping);
resolve();
});
socket.on('error', (error) => {
clearInterval(ping);
reject(error);
});
const stopTimer = setInterval(() => {
if (stopping) {
clearInterval(stopTimer);
socket.close();
}
}, 500);
});
}
async function handleMessage(
raw: string,
ids: Map<string, { key: string; input: SynchronizerInput }>,
subscribe: (input: SynchronizerInput) => void
): Promise<void> {
let message: { type?: string; id?: string; items?: { cursor: string; data: unknown }[] };
try {
message = JSON.parse(raw) as typeof message;
} catch {
return;
}
if (message.type !== 'synchronizer.output' || !message.id || !Array.isArray(message.items)) return;
const registration = ids.get(message.id);
if (!registration) return;
let lastCursor: string | null = null;
for (const item of message.items) {
if (registration.input.type === 'collaborations') {
const data = item.data as SyncCollaborationData;
if (!data.deletedAt && !activeRoots.has(data.nodeId)) {
activeRoots.add(data.nodeId);
subscribe({ type: 'node.updates', rootId: data.nodeId });
}
} else if (registration.input.type === 'node.updates') {
await processNodeUpdate({
update: item.data as SyncNodeUpdateData,
botUserId,
workspaceId: workspace.id,
cache,
state,
hermes: { bin: config.hermesBin, timeoutMs: config.hermesTimeoutMs, maxOutputBytes: config.hermesMaxOutputBytes },
colanode
});
}
lastCursor = item.cursor;
}
if (lastCursor) await state.setCursor(registration.key, lastCursor);
}
function cursorKey(input: SynchronizerInput): string {
return input.type === 'node.updates' ? `${input.rootId}.node.updates` : input.type;
}
void synchronizerId;
@@ -0,0 +1,24 @@
import { encodeAttributes } from './crdt.js';
import { generateId } from './ids.js';
import { makePlainMessageAttributes } from './text.js';
export function createReplyMutation(parentId: string, text: string, now = new Date()): { mutation: unknown; nodeId: string } {
const nodeId = generateId();
const updateId = generateId();
const createdAt = now.toISOString();
const attributes = makePlainMessageAttributes(nodeId, parentId, text);
return {
nodeId,
mutation: {
id: generateId(),
type: 'node.create',
createdAt,
data: {
nodeId,
updateId,
createdAt,
data: encodeAttributes(attributes as unknown as Record<string, unknown>)
}
}
};
}
@@ -0,0 +1,41 @@
import type { MessageAttributes, SyncNodeUpdateData } from './types.js';
import { decodeAttributes } from './crdt.js';
import { extractMentionTargets, plainTextFromMessage } from './text.js';
import { buildHermesPrompt, runHermes, type HermesOptions } from './hermes.js';
import { createReplyMutation } from './mutations.js';
import type { ColanodeClient } from './colanode.js';
import type { StateStore } from './state.js';
export type NodeCache = Map<string, { id: string; attrs: MessageAttributes; createdBy: string }>;
export type HermesRunner = (prompt: string, options: HermesOptions) => Promise<string>;
export async function processNodeUpdate(input: {
update: SyncNodeUpdateData;
botUserId: string;
workspaceId: string;
cache: NodeCache;
state: StateStore;
hermes: HermesOptions;
colanode: ColanodeClient;
runHermesFn?: HermesRunner;
}): Promise<void> {
const attrs = decodeAttributes<Partial<MessageAttributes>>(input.update.data);
if (attrs.type !== 'message' || !attrs.parentId) return;
const messageAttrs = attrs as MessageAttributes;
input.cache.set(input.update.nodeId, { id: input.update.nodeId, attrs: messageAttrs, createdBy: input.update.createdBy });
if (input.update.createdBy === input.botUserId) return;
if (input.state.hasProcessed(input.update.nodeId)) return;
if (!extractMentionTargets(input.update.nodeId, messageAttrs.content).includes(input.botUserId)) return;
const messageText = plainTextFromMessage(input.update.nodeId, messageAttrs);
const parentText = input.cache.get(messageAttrs.parentId)?.attrs
? plainTextFromMessage(messageAttrs.parentId, input.cache.get(messageAttrs.parentId)!.attrs)
: null;
const prompt = buildHermesPrompt({ messageText, parentText });
const reply = await (input.runHermesFn ?? runHermes)(prompt, input.hermes);
if (!reply) throw new Error('Hermes returned an empty reply');
const { mutation, nodeId } = createReplyMutation(messageAttrs.parentId, reply);
await input.colanode.createMessage(input.workspaceId, mutation);
await input.state.markProcessed(input.update.nodeId, nodeId);
}
@@ -0,0 +1,53 @@
import { mkdir, open, readFile, writeFile } from 'node:fs/promises';
import { dirname } from 'node:path';
export type BridgeState = {
cursors: Record<string, string>;
processedMessages: Record<string, { repliedNodeId: string; at: string }>;
};
const EMPTY_STATE: BridgeState = { cursors: {}, processedMessages: {} };
export class StateStore {
private state: BridgeState = structuredClone(EMPTY_STATE);
constructor(private readonly path: string) {}
async load(): Promise<void> {
await mkdir(dirname(this.path), { recursive: true, mode: 0o700 });
try {
const text = await readFile(this.path, 'utf8');
this.state = { ...structuredClone(EMPTY_STATE), ...JSON.parse(text) };
} catch (error) {
if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error;
await this.save();
}
}
getCursor(key: string): string {
return this.state.cursors[key] ?? '0';
}
async setCursor(key: string, cursor: string): Promise<void> {
this.state.cursors[key] = cursor;
await this.save();
}
hasProcessed(messageId: string): boolean {
return Boolean(this.state.processedMessages[messageId]);
}
async markProcessed(messageId: string, repliedNodeId: string): Promise<void> {
this.state.processedMessages[messageId] = { repliedNodeId, at: new Date().toISOString() };
await this.save();
}
private async save(): Promise<void> {
const handle = await open(this.path, 'w', 0o600);
try {
await handle.writeFile(`${JSON.stringify(this.state, null, 2)}\n`, 'utf8');
await handle.chmod(0o600);
} finally {
await handle.close();
}
}
}
@@ -0,0 +1,64 @@
import type { Block, MessageAttributes } from './types.js';
import { generateId } from './ids.js';
export function extractBlockText(nodeId: string, blocks: Record<string, Block> | null | undefined): string | null {
if (!blocks) return null;
const text = collectText(nodeId, blocks).trim();
return text.length > 0 ? text : null;
}
export function extractMentionTargets(nodeId: string, blocks: Record<string, Block> | null | undefined): string[] {
if (!blocks) return [];
return collectMentions(nodeId, blocks);
}
export function plainTextFromMessage(id: string, attrs: MessageAttributes): string {
return extractBlockText(id, attrs.content) ?? '';
}
export function makePlainMessageAttributes(nodeId: string, parentId: string, text: string): MessageAttributes {
const blockId = generateId();
return {
type: 'message',
subtype: 'standard',
name: 'Reyna Family Bot',
parentId,
content: {
[blockId]: {
id: blockId,
type: 'paragraph',
parentId: nodeId,
index: 'a0',
content: [{ type: 'text', text }]
}
}
};
}
function collectText(blockId: string, blocks: Record<string, Block>): string {
const texts: string[] = [];
const block = blocks[blockId];
if (block?.content) {
texts.push(block.content.map((leaf) => leaf.text ?? '').join(''));
}
for (const child of children(blockId, blocks)) texts.push(collectText(child.id, blocks));
return texts.join('\n');
}
function collectMentions(blockId: string, blocks: Record<string, Block>): string[] {
const mentions: string[] = [];
const block = blocks[blockId];
if (block?.content) {
for (const leaf of block.content) {
if (leaf.type === 'mention' && typeof leaf.attrs?.target === 'string') mentions.push(leaf.attrs.target);
}
}
for (const child of children(blockId, blocks)) mentions.push(...collectMentions(child.id, blocks));
return mentions;
}
function children(blockId: string, blocks: Record<string, Block>): Block[] {
return Object.values(blocks)
.filter((child) => child.parentId === blockId)
.sort((a, b) => a.index.localeCompare(b.index));
}
@@ -0,0 +1,81 @@
export type WorkspaceRole = 'owner' | 'admin' | 'collaborator' | 'guest' | 'none';
export type WorkspaceOutput = {
id: string;
name: string;
user: { id: string; accountId: string; role: WorkspaceRole };
status: number;
};
export type AccountSyncOutput = {
account: { id: string; email: string; name: string; avatar?: string | null };
workspaces: WorkspaceOutput[];
token?: string;
};
export type SynchronizerInput =
| { type: 'users' }
| { type: 'collaborations' }
| { type: 'node.updates'; rootId: string };
export type SynchronizerInputMessage = {
type: 'synchronizer.input';
id: string;
userId: string;
input: SynchronizerInput;
cursor: string;
};
export type SyncItem<T> = { cursor: string; data: T };
export type SynchronizerOutputMessage<T = unknown> = {
type: 'synchronizer.output';
userId: string;
id: string;
items: SyncItem<T>[];
};
export type SyncCollaborationData = {
collaboratorId: string;
nodeId: string;
workspaceId: string;
role: string;
deletedAt?: string | null;
};
export type SyncNodeUpdateData = {
id: string;
nodeId: string;
rootId: string;
workspaceId: string;
revision: string;
data: string;
createdAt: string;
createdBy: string;
};
export type BlockLeaf = {
type: string;
text?: string | null;
attrs?: Record<string, unknown> | null;
marks?: unknown[] | null;
};
export type Block = {
id: string;
type: string;
parentId: string;
content?: BlockLeaf[] | null;
attrs?: Record<string, unknown> | null;
index: string;
};
export type MessageAttributes = {
type: 'message';
subtype: 'standard' | 'question' | 'answer';
name?: string;
parentId: string;
referenceId?: string | null;
content?: Record<string, Block> | null;
selectedContextNodeIds?: string[] | null;
};
@@ -0,0 +1,120 @@
import { mkdtemp, rm } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import assert from 'node:assert/strict';
import test from 'node:test';
import { encodeAttributes, decodeAttributes } from '../src/crdt.js';
import { buildHermesPrompt } from '../src/hermes.js';
import { createReplyMutation } from '../src/mutations.js';
import { processNodeUpdate, type NodeCache } from '../src/processor.js';
import { StateStore } from '../src/state.js';
import type { BlockLeaf, MessageAttributes, SyncNodeUpdateData } from '../src/types.js';
const botUserId = 'bot-user';
test('mention extraction gates replies and ignores non-mentioned messages', async () => {
const env = await setupProcessor();
await processNodeUpdate({
...env,
update: makeUpdate('msg1', 'human', messageAttrs('msg1', 'parent', [{ type: 'text', text: 'hello' }]))
});
assert.equal(env.created.length, 0);
});
test('mentioned messages invoke Hermes and dedupe by source message id', async () => {
const env = await setupProcessor();
const update = makeUpdate('msg2', 'human', messageAttrs('msg2', 'parent', [
{ type: 'mention', text: '@bot', attrs: { id: 'm1', target: botUserId } },
{ type: 'text', text: ' please summarize this' }
]));
await processNodeUpdate({ ...env, update });
await processNodeUpdate({ ...env, update });
assert.equal(env.prompts.length, 1);
assert.equal(env.created.length, 1);
});
test('messages created by the bot are ignored even when they mention the bot', async () => {
const env = await setupProcessor();
await processNodeUpdate({
...env,
update: makeUpdate('msg3', botUserId, messageAttrs('msg3', 'parent', [
{ type: 'mention', attrs: { id: 'm1', target: botUserId } }
]))
});
assert.equal(env.created.length, 0);
});
test('prompt includes safety instruction, mentioned message, and parent context', () => {
const prompt = buildHermesPrompt({ messageText: 'Can you help?', parentText: 'Family logistics thread' });
assert.match(prompt, /Colanode family message/);
assert.match(prompt, /Do not reveal secrets/);
assert.match(prompt, /Can you help\?/);
assert.match(prompt, /Family logistics thread/);
});
test('reply mutation encodes a decodable Colanode message attributes document', () => {
const { mutation, nodeId } = createReplyMutation('parent-id', 'A helpful reply.', new Date('2026-01-01T00:00:00.000Z'));
const data = mutationData(mutation).data;
const attrs = decodeAttributes<MessageAttributes>(data);
assert.equal(attrs.type, 'message');
assert.equal(attrs.subtype, 'standard');
assert.equal(attrs.name, 'Reyna Family Bot');
assert.equal(attrs.parentId, 'parent-id');
assert.equal(Object.values(attrs.content ?? {})[0]?.content?.[0]?.text, 'A helpful reply.');
});
async function setupProcessor() {
const dir = await mkdtemp(join(tmpdir(), 'bridge-test-'));
const state = new StateStore(join(dir, 'state.json'));
await state.load();
test.after(async () => rm(dir, { recursive: true, force: true }));
const prompts: string[] = [];
const created: unknown[] = [];
const cache: NodeCache = new Map([
['parent', { id: 'parent', createdBy: 'human', attrs: messageAttrs('parent', 'thread', [{ type: 'text', text: 'Parent context' }]) }]
]);
return {
botUserId,
workspaceId: 'workspace',
cache,
state,
hermes: { bin: 'hermes', timeoutMs: 1000, maxOutputBytes: 1000 },
colanode: { createMessage: async (_workspaceId: string, mutation: unknown) => { created.push(mutation); } } as never,
runHermesFn: async (prompt: string) => {
prompts.push(prompt);
return 'Hermes reply';
},
prompts,
created
};
}
function makeUpdate(nodeId: string, createdBy: string, attrs: MessageAttributes): SyncNodeUpdateData {
return {
id: `${nodeId}-update`,
nodeId,
rootId: 'root',
workspaceId: 'workspace',
revision: '1',
data: encodeAttributes(attrs as unknown as Record<string, unknown>),
createdAt: new Date().toISOString(),
createdBy
};
}
function messageAttrs(id: string, parentId: string, content: BlockLeaf[]): MessageAttributes {
const blockId = `${id}-block`;
return {
type: 'message',
subtype: 'standard',
parentId,
content: {
[blockId]: { id: blockId, type: 'paragraph', parentId: id, index: 'a0', content }
}
};
}
function mutationData(mutation: unknown): { data: string } {
const outer = mutation as { data: { data: string } };
return outer.data;
}
@@ -0,0 +1,15 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"lib": ["ES2022"],
"types": ["node"],
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"outDir": "dist",
"rootDir": "."
},
"include": ["src/**/*.ts", "test/**/*.ts"]
}
@@ -0,0 +1,767 @@
---
title: "The Pattern of Covenant Parenting — Bryan Hickman Teaching"
status: active
source: "NotebookLM book-style synthesis from audio recordings of Bryan Hickman's teaching sessions"
tags:
- parenting
- covenant-parenting
- church-teaching
- family
- discipleship
- Bryan-Hickman
- book-draft
---
# The Pattern of Covenant Parenting
> **Source note:** This document preserves the supplied NotebookLM chapter synthesis from audio recordings of teaching given by Bryan Hickman. The chapter is stored verbosely for later development into parent-focused book content. Scripture quotations, interpretations, terminology, and practical recommendations below are retained as source material and have not been independently fact-checked or editorially revised.
## Chapter 0: Introduction — The Pattern of Covenant Parenting
The true purpose of child training is not to construct a superficial set of behavioral modifications or to simply "tweak" outward conduct [1, 113]. It is to lay a foundational, structural establishment in the heart of a child [1]. The ultimate goal of our instruction is to raise children who can transition cleanly into their own spiritual inheritance [1], as we are exhorted in 1 Timothy 1:5:
> "The goal of our instruction is love from a pure heart, a good conscience, and a sincere faith." [1]
Our target is to have children who seamlessly step into a personal relationship with their heavenly Father, and in that secure place, find their true Kingdom identity and walk out their designated Kingdom purpose in this generation [2, 48].
To build this foundation, we must first look at our own hearts [7, 195]. Child training is, in its deepest sense, a profound process of parent training [7, 169]. Parents are called to model the Father to their children [4]. Jesus did not come to earth merely to perform miracles, but to model what a son can do when entirely dependent upon his Father [3], living by the simple standard: "I don't do anything but I see my father do it. I don't say anything but I hear my father say it." [3] In the eyes of a young child, the parent is effectively "God"—the ultimate representation of authority, love, and security [4]. This is a sobering reality [4].
The single most powerful force that will affect our children is for us to become obedient sons and daughters of God [5]. As we allow the Lord to heal our own brokenness, we grow in our reverence and fear of the Lord, gaining a strong confidence that creates a literal shield of security and a place of refuge for our households [7], as promised in Proverbs 14:26:
> "In the reverent fear of the Lord, there is strong confidence, and his children will always have a place of refuge." [8]
This model of love requires a stable, unified household [24, 182]. A peaceful home is anchored in the absolute unity between husband and wife [18]. By maintaining a completely united front, parents protect their children from division and manipulation [18, 188]. Differing views on discipline must be discussed strictly in private, behind closed doors, so that the child always sees their parents standing as one [21, 186]. This horizontal peace is nurtured through intentional daily investments in the marriage relationship—such as the specific, daily appreciation of the thirty-day breakfast covenant [26, 204]—and a firm commitment to honor the scriptural command in Ephesians 4:26:
> "...do not let the sun go down on your anger." [28]
Within this safe ecosystem, correction becomes a beautiful act of redemption [14, 15]. Biblical training requires us to "narrow up" and straighten our children's paths [10], protecting them from the broad roads of worldly conformity [11], as warned in Matthew 7:13:
> "Enter through the narrow gate, for the gate is wide and the way is broad that leads to destruction, and there are many who enter through it." [11]
When disobedience occurs, we reject anger-driven reactions, emotional isolation, or lingering punishments [15, 16, 70]. Instead, we step into a private "correction room" of calm and ultimate reassurance [17, 70]. Using a gentle, limber switch produces a harmless, quick sting that instantly captures attention and pays the spiritual debt of disobedience [14, 15]. Guilt and shame are completely removed, and the child is immediately embraced by hands that are reserved exclusively for holding, hugging, and expressing love [14, 15].
This heart-level training is woven naturally into the practical affairs of daily life [34, 169]. It begins in infancy with simple, physical boundaries—such as blanket training [30]—that teach a child to listen to and obey the parent's voice [31]. We guard our children's minds from media systems designed to "tell their vision" [32]. We recognize the high calling of a mother's nurturing presence at home [33] and a father's mandate to "own his time" and be fully present [33]. We actively integrate our children into our daily chores, showing them that work is a natural, joyful expression of family life rather than a burden [34, 169].
Ultimately, we parent with a multi-generational vision [5]. We build and train our children as if the work will span multiple generations, serving God's purposes just as King David did [6]. We must be vulnerable enough to show our children that we are not perfect, teaching them to "cut the penny in half" [36]—setting the healthy expectation that while the Father is working to remove brokenness from our lives, they too will have their own portion to deal with under His sovereign hand [36].
As we maintain strict covenant priorities of God first, family second, and ministry third [37, 38], and rely on the wisdom of the local body [39], we achieve generational advancement [35]. The spiritual victories we win become the floor upon which our children stand, letting them stand on our shoulders and leap forward into their own divine destiny [35].
## Initial themes captured for future book development
- Child training as heart-level formation rather than external behavior modification.
- The goal of instruction: love, a pure heart, a good conscience, and sincere faith.
- Parents as models of the heavenly Father and as the first representation of authority, love, and security.
- Parent training and healing as prerequisites for healthy child training.
- Reverent fear of the Lord as a source of confidence and refuge for children.
- Marital unity and a peaceful, stable household as the ecosystem for parenting.
- Correction framed as redemption, reassurance, and restoration rather than anger, shame, or emotional isolation.
- Daily household life—boundaries, media, presence, chores, and work—as the setting for discipleship.
- Multi-generational vision: children standing on the spiritual victories of their parents and advancing into their own calling.
- Covenant priorities: God first, family second, ministry third.
- Vulnerability and parental humility concerning the ongoing work of healing and brokenness.
## Editorial and pastoral review flags for later work
- Preserve the distinction between the chapter's source claims and later editorial interpretation.
- Verify all Scripture references and quotations against the intended Bible translation before publication.
- Carefully review and contextualize the chapter's physical-discipline recommendations, including the references to a "limber switch," "blanket training," and a "correction room," before sharing this material with parents or adapting it for church use.
- Consider adding age-appropriate, safety-conscious, non-violent alternatives and pastoral guidance in the final parent resource.
- Clarify the meaning and practical method of the "thirty-day breakfast covenant" when the relevant chapter or recording context is available.
- Clarify the phrase "cut the penny in half" and preserve its original illustration/context when later chapters provide it.
---
## Chapter 1: The Foundations of Modeling & Multi-Generational Vision
> **Source note:** This chapter preserves the supplied NotebookLM synthesis from audio recordings of Bryan Hickman's teaching sessions. It is stored verbosely as source material for the developing parent-focused book. Scripture quotations, interpretations, terminology, and practical recommendations have not been independently fact-checked or editorially revised.
### The Ultimate Goal of Training
The true purpose of child training is not to construct a superficial set of behavioral modifications or to simply "tweak" outward conduct. It is to lay a foundational, structural establishment. Specifically, the ultimate goal is to raise children who can transition cleanly into their own spiritual inheritance. As the scriptures state in 1 Timothy 1:5:
> "The goal of our instruction is love from a pure heart, a good conscience, and a sincere faith."
Our target is to have children who seamlessly step into a personal relationship with their heavenly Father, and in that place find their Kingdom identity and faithfully walk out their Kingdom purpose in this generation. [7]
The transition from childhood through adolescence is intended by God to be a seamless, direct journey into relationship with the Father [17, 18]. Society has largely convinced itself that teenagers must undergo a painful, mandatory phase of rebellion simply because they do not know what else to do [17]. However, this expectation is a deception that lowers our standards and shapes our actions toward failure [17]. God’s design is for children to move directly from childhood into a vibrant, personal relationship with Him [17, 18].
### Jesus as the Ultimate Model
To understand how to train children, we must first look at Jesus. Jesus did not come to earth merely to perform miracles or display His divinity; rather, He came to model what a son can do when entirely dependent upon his Father [11, 12]. He walked out His earthly life as a man, not as God, to demonstrate that obedience is fully possible for a heart surrendered to the Father [12]. He lived by a simple, profound standard:
> "I don't do anything but I see my father do it. I don't say anything but I hear my father say it." [12, 23]
Just as Jesus modeled sonship for us, parents are called to model the Father to their children [12]. In the eyes of a young child, the parent is effectively "God"—the ultimate representation of authority, love, and security in their life [15]. This is a sobering reality [13, 15]. Parents have both the privilege and the solemn responsibility to demonstrate face-to-face what a loving Father and Mother are like until the child reaches an age of spiritual understanding where that devotion is transitioned to the Lord [15].
The single most powerful force that will affect your children is for you, the parent, to become an obedient son of God [14]. Because parents are always modeling, every reaction—even after a hard day when we are on edge—sets an example [13]. We cannot expect our children to walk in instant obedience to our voice if we ourselves are not walking in instant obedience to the voice of our heavenly Father [13].
### Building for Generations
To parent effectively, we must reject short-sightedness and adopt a multi-generational vision [8, 9, 10]. We see the danger of passivity illustrated in the history of the Church. During the "Jesus movement" of the 1970s, a wave of believers dropped out of school and stopped preparing for the future under the premise that "Jesus is coming back" [9]. Because they failed to build for the next generation, the world quickly stepped in and took over every major institution [9].
Conversely, if we believe that the Kingdom will be fully established only in our lifetime, we risk failing to prepare our children for the long-term work [9]. While we must always look for the "end suddenly," we must build and train our children as if the work will span multiple generations [9, 10]. We are not going to build it all in our lifetime; our task is to raise up the little ones placed in our hands so that they will be faithful to God's purposes in their own generation [7]. As Acts 13:36 records of King David:
> "For David, after he had served God's purposes in his own generation, fell asleep and was laid among his fathers and underwent decay." [7]
### Healing the Parents First
Because children copy what we model, the child training process is, in reality, a parent training process [15, 128]. If we carry unresolved brokenness, anger, or fear, we will pass those patterns down [15, 46]. Allowing the Lord to heal us requires deep humility and submission, but it is the greatest gift we can offer our children [15]. As we grow in our reverence and fear of the Lord, we gain a strong confidence that creates a literal shield of security and a place of refuge for our households [16]. This is beautifully promised in Proverbs 14:26:
> "In the reverent fear of the Lord, there is strong confidence, and his children will always have a place of refuge." [16]
When we allow the Lord to deal with our own deep-seated insecurities, we achieve what is called "generational advancement" [46, 47, 161, 162]. Children who are raised in an atmosphere of genuine spiritual security do not have to fight the same battles, wounds, or broken family dynamics that their parents had to overcome [46, 47, 162]. Instead, they get to stand on their parents' advancements and leap forward into their own destiny [46, 162]. This establishes the foundation for the lifelong training command found in Proverbs 22:6:
> "Train up a child in the way that he should go, and even when he grows old, he will not abandon it." [16]
### Themes captured for future book development
- The intended goal of training is a child's personal relationship with the heavenly Father, Kingdom identity, and Kingdom purpose—not merely compliant behavior.
- Adolescence is presented as a potential continuation of relationship with God rather than an inevitably rebellious stage.
- Jesus is presented as the ultimate model of dependent sonship and surrendered obedience.
- Parents model constantly; their reactions under pressure are formative just as much as their deliberate instruction.
- Parent healing and obedience are central to breaking the transmission of fear, anger, insecurity, and family brokenness.
- Multi-generational parenting requires building for a future beyond the parents' own lifetime.
- "Generational advancement" describes children standing on the spiritual and relational progress of their parents.
- The chapter connects parental modeling, healing, refuge, and lifelong formation with Proverbs 22:6.
### Editorial and pastoral review flags
- Verify the Scripture quotations and references, including the intended Bible translations.
- Preserve the distinction between the teaching's theological claims and later editorial commentary.
- The historical claim concerning the 1970s Jesus movement should be sourced or qualified if included in a published edition.
- The claim that rebellion is not an inevitable feature of adolescence should be presented pastorally and carefully, acknowledging individual development, temperament, disability, trauma, and family context.
- Clarify the phrase "until the child reaches an age of spiritual understanding" and how the teaching defines that transition.
---
## Chapter 2: Redemptive Correction: Straightening the Path with Love
> **Source note:** This chapter preserves the supplied NotebookLM synthesis from audio recordings of Bryan Hickman's teaching sessions. It is stored verbosely as source material for the developing parent-focused book. Scripture quotations, interpretations, terminology, and practical recommendations have not been independently fact-checked or editorially revised. The physical-discipline material is retained for source fidelity and is not an endorsement or safety determination.
### "Narrowing Up" vs. The Demand for "Experiences"
Scripture defines training a child through the Hebrew lens of "dedicating, disciplining, narrowing up, or choking out" [18]. It means to straighten a child's path, protecting their outlook, behavior, ideals, views, and influences from being overwhelmed by the weeds of the world [18]. This directly contradicts modern humanistic reasoning, which insists children must be given broad "experiences" to discover themselves [19]. This humanistic philosophy is a widening of the way, which the Bible explicitly warns against in Matthew 7:13:
> "Enter through the narrow gate, for the gate is wide and the way is broad that leads to destruction, and there are many who enter through it." [19]
Parents are given the responsibility to shape their children's minds and protect them from worldly conformity [18, 21]. As Romans 12:2 charges us:
> "And do not be conformed to this world, but be transformed by the renewing of your mind, so that you may prove what the will of God is, that which is good and acceptable and perfect." [21]
The renewal of the child's mind is a task delegated directly to the parents [21, 22]. It requires parents to actively narrow up their child's path, choosing carefully what enters their hearts and minds rather than letting them wander broad roads of secular influence [18, 22].
### Debunking the Myth of Adolescent Rebellion
A cornerstone of modern parenting is the belief that teenagers must naturally go through a painful, dramatic season of rebellion [17]. We are told this is just a normal developmental phase [17]. However, this expectation is a deceptive lie that shapes our thoughts and actions toward failure [17].
In God's design, there is no mandatory period of rebellion [17]. The scriptural transition from childhood to maturity is intended to be a seamless progression directly into a personal relationship with the Father [17, 18]. When boundaries are clearly laid and maintained with love, teenagers do not have to wander into rebellion; they can walk straight from parental guidance into divine devotion [17, 18].
### The Mechanics of Correction: The Switch and the Loving Hand
To remove the foolishness that is naturally bound up in a young heart, God has provided specific, loving tools [23, 24]. As Proverbs 22:15 states:
> "Foolishness is bound up in the heart of a child. The rod of discipline will remove it far from him." [24]
Scripture is rich with wisdom regarding the diligent application of this rod of reproof:
- **Proverbs 13:24:** "He who withholds the rod hates his son, but he who loves him disciplines him diligently." [25]
- **Proverbs 19:18:** "Discipline while there's hope, and do not desire his death." [25]
- **Proverbs 29:15:** "The rod of reproof gives wisdom, but a child who gets his own way brings shame to his mother." [25]
- **Proverbs 29:17:** "Correct your son and he will give you comfort. He will also delight your soul." [25, 26]
While humanism rejects these commands or distorts them into abuse, biblical correction is defined by tenderness and absolute control [26, 28, 29]. In our home, we established a strict physical boundary: our hands were made exclusively for holding, hugging, and expressing love [26, 29, 31]. We never used our hands to strike a child, nor did we use heavy, rigid tools like belts or wooden spoons, which can cause physical harm or anger [26].
Instead, the biblical "rod" refers to a tender, limber shoot or reed—such as a small lilac switch (roughly a quarter of an inch or smaller) with shaved bumps [27, 117]. This tool is designed to produce a quick, harmless sting on the bottom or thigh that instantly captures the child's attention without ever causing physical damage [26, 27, 118].
Crucially, this physical correction serves a redemptive spiritual purpose: it completely removes guilt and shame [26]. When a child is corrected, the spiritual debt of their disobedience is paid instantly [26, 30]. There is no lingering condemnation, no standing in corners, and no emotional isolation [26, 29, 30]. Once corrected, the child is immediately embraced, loved, and restored to perfect right standing within the home [26, 29, 30].
### The Rule of Calmness: Correcting Without Anger
Scripture issues a vital warning to fathers in Ephesians 6:4:
> "Fathers, do not provoke your children to anger, but bring them up in the discipline and instruction of the Lord." [22]
A parent must never, under any circumstance, correct a child while feeling angry, agitated, or on edge [26, 29, 53, 54]. Correcting in anger is not biblical discipline; it is an expression of the parent's lack of self-control [54]. It models anger to the child, which violates our primary calling as models of the Father [54].
If you find yourself becoming agitated or losing your emotional composure during a correction, you must stop immediately [29, 54]. It is far better to let an act of disobedience go uncorrected in that moment than to correct your child in anger [54]. The parent must first go before the Lord, find peace, and handle the situation only when they can do so with a calm voice, a peaceful facial expression, and a tender heart [29, 52, 53, 54].
### The Correction Room: Restoring Dignity in Private
To preserve a child's security and dignity, correction must never be a public spectacle [116]. It should not be done in front of guests, siblings, or in public places [34, 116].
Instead, correction should take place in a private, designated area—such as a bedroom or bathroom [29, 116]. This private environment—the "correction room"—is a place of calm, reassurance, and ultimate security [29, 116]. By keeping correction private, we honor our children, shield them from public embarrassment, and ensure that the process remains a tender, focused interaction of restoration between parent and child [29, 116].
### Themes captured for future book development
- "Narrowing up" is presented as intentional formation and protection of a child's heart, mind, influences, ideals, and direction.
- The chapter contrasts parental formation with a philosophy of broad, unbounded experience and self-discovery.
- Adolescent rebellion is presented as neither inevitable nor divinely required.
- Correction is framed as a redemptive process intended to remove shame, restore relationship, and return the child to belonging within the household.
- The source teaching emphasizes calmness, self-control, privacy, and immediate reassurance during correction.
- The chapter distinguishes the source's preferred correction tool from striking with hands or using heavy, rigid objects.
- Private correction is connected to the preservation of a child's dignity and security.
### Editorial, safeguarding, and pastoral review flags
- Verify all Scripture references, wording, and translation choices before publication.
- The teaching's interpretation of the Hebrew concept translated as "train" and its use of terms such as "narrowing up" or "choking out" should be checked against reputable Hebrew lexicons and the original recording context.
- The claims about adolescent rebellion, humanism, and the history of parenting should be framed as the speaker's theological and cultural argument rather than presented as settled developmental or historical fact.
- The physical-discipline recommendations require careful safeguarding review before any public distribution. Do not present a thin implement, a specific body location, or a claimed "harmless" sting as universally safe; laws, professional guidance, child age, disability, trauma history, and individual circumstances vary.
- For a parent-facing publication, prioritize non-violent, developmentally appropriate correction and include clear guidance for pausing, de-escalating, seeking help, and protecting children from injury or fear.
- The phrase "spiritual debt ... paid instantly" should be examined theologically and pastorally so that children are not taught that physical pain is required to obtain forgiveness, belonging, or restored relationship.
- Clarify what safeguards make a private correction setting genuinely safe and accountable, especially when the child is isolated with an adult.
---
## Chapter 3: Parental Unity & the Atmosphere of the Home
> **Source note:** This chapter preserves the supplied NotebookLM synthesis from audio recordings of Bryan Hickman's teaching sessions. It is stored verbosely as source material for the developing parent-focused book. Scripture quotations, interpretations, terminology, marriage teaching, and practical recommendations have not been independently fact-checked or editorially revised.
### The Principle of a Unified Front
A central pillar of a peaceful home is the absolute, seamless unity between husband and wife [159]. Parents must understand that children are highly astute observers; they are experts at sensing any lack of alignment and will naturally seek to exploit any crack to sow division or pit one parent against the other [159, 164].
To prevent this, parents must maintain a completely united front [159]. In our home, we established a simple but powerful protocol. Whenever a child approached one parent asking for a treat, more television time, or a specific permission, the immediate response was always:
> "What did Dad say?" or "What did Mom say?" [168, 169]
If the other parent had already given an answer, the discussion was instantly over [169]. The parent receiving the second appeal would simply state, "Well, there is your answer," ensuring that the child’s attempt to bypass authority was met with a solid wall of parental agreement [169]. This level of consistency and predictability is not a rigid, legalistic exercise; rather, it provides children with an immense sense of security because they know exactly where the boundaries stand [47, 62, 185].
### Private Alignment over Public Disagreements
Maintaining a united front means that parents must make a covenant never to disagree, correct, or expose each other's faults in front of their children [162, 163, 164]. Doing so publicizes division and teaches children how to manipulate their parents, which ultimately tears down the spiritual authority of the home [164].
Inevitably, there will be moments when one parent observes their spouse making a decision or handling a disciplinary situation in a way they wouldn't have chosen [169, 170]. The natural temptation is to immediately step in and express "wisdom" or correct the spouse on the spot [170]. This is a critical mistake [170].
When you feel that irritation rise, you must first deal with your own internal reaction [170]. In front of the children, you must completely support your spouse's decision [162, 163]. Any adjustments, differing views, or scale of discipline must be discussed strictly in private, behind closed doors [162]. In our home, if Deanna handled a situation and I disagreed with the method, we would discuss it privately later so that we could align our hearts before the Lord, but the child always saw us standing as one [55, 162].
### Healing the Crack: Humility and Restoration
Because parents are human, there will be times when they fail to maintain this standard and inadvertently display division or disrespect in front of the child [167]. When this happens, it must be corrected immediately in the spirit of humility [164, 166].
First, the parents must align privately [164]. The offending parent should go to their spouse and say:
> "Cariño, lo siento. I realize that I made you look bad in front of the child, and I repent." [164]
Second, depending on the situation, it is often necessary to go directly to the child to model genuine repentance and restore the standard of honor [164, 165]:
> "What I said to you about your mother/father was wrong. The Lord is working in my heart, and I cannot make an excuse for what I did. I want to apologize to you for deshonrar (dishonoring) them in front of you, because they deserve honor." [165]
There is extraordinary, transformative power when a parent is willing to be authentic and humble before their children [166]. It models a soft, teachable heart and teaches children how to walk out repentance in their own lives [166].
### Atmosphere of Peace and Order
The physical environment of the home directly affects its spiritual atmosphere [157, 159]. A clean, orderly house is a powerful catalyst for a home filled with peace [159]. When a mother takes joy and satisfaction in nurturing and keeping the home, and the husband actively notices, appreciates, and verbalizes his gratitude, it weaves a beautiful bond of peace over the entire household [159, 160].
This atmosphere also requires parents to be highly sensitive to one another's limits [160]. Parenting is a demanding, daily labor, and there are times when "too much is too much" and one spouse is exhausted or on edge [143, 160]. In those moments of high stress, the other spouse must be ready to step in, "take the ball," and cover for them [48, 160]. This mutual support ensures that correction is never administered out of exhaustion or emotional agitation [48, 71, 185].
### Nurturing the Marriage: Horizontal and Vertical Communication
We must recognize that child training is not an isolated task; it is completely interwoven with every other area of family life, particularly the marriage relationship [157, 158]. If there is no peace between husband and wife, it is impossible to have lasting peace in training the children [158].
Healthy communication requires us to stop simply waiting for our turn to speak so we can make our own point, and instead learn to truly listen to one another’s hearts [171, 172]. This communication must be intentionally nurtured [173].
To build this horizontal connection, we must make constant, deliberate "positive deposits" into our spouse's emotional bank account [181, 182]. As the proverb of the household says, if you put a coin in the piggy bank every single day, it will eventually be filled [182].
A highly practical and transformative exercise for married couples is to commit to a 30-day breakfast covenant [180]. For thirty consecutive days, sit down together for breakfast, and each day, make a specific, intentional positive deposit by telling your spouse one thing you sincerely estimate and appreciate about them [180, 181].
For husbands, this requires stepping away from vague, general statements like "You know I love you" or "You look good," and instead sharing specific, particular details of appreciation [183]. For wives, it means actively finding ways to make their husbands feel proud and respected, rather than assuming they only need to receive appreciation without giving it [183, 184]. This intentional focus changes the entire climate of the home because, as Scripture principles teach:
> "Buscad y hallaréis (Seek and you will find)." [181]
If you look for faults, you will surely find them; but if you intentionally seek the good in your spouse, you will find it and multiply it [181].
### The Covenant Rule: Never Go to Bed Angry
To safeguard the home's atmosphere, couples must establish a firm covenant line that they resolve never to cross [180]. Chief among these is the scriptural command:
> "...do not let the sun go down on your anger." [180]
In our thirty-seven years of marriage, we decided we would never go to sleep angry with one another [174, 177]. If a disagreement arose, we would take a "time out" to pray individually, allowing the Lord to deal with our own hearts first [175]. Then, we would return, ask for forgiveness where we had failed, and pray together [178]. We did not always agree on the specific point of contention immediately, but we agreed on God and gave Him the place of preeminence in our marriage [178].
As a husband, the Lord taught me that I must function as the priest of my home [177]. When my wife made a mistake or did something wrong, the Lord would use it to deal with me first, instructing me to carry the burden, be silent, and go to the cross for her just as Christ did for the Church [177]. When both husband and wife surrender their right to be right and prioritize the covenant, they establish a secure spiritual foundation that their children will naturally inherit, creating a magnificent generational advancement [8, 178, 179].
### Themes captured for future book development
- Parental unity is presented as a source of security, predictability, and authority within the home.
- The chapter emphasizes checking with the other parent rather than allowing children to bypass a previously given answer.
- Disagreements about decisions or discipline are to be handled privately rather than displayed before the children.
- When parents fail publicly, immediate humility, apology, and restoration are presented as a model of repentance.
- Household order, appreciation, mutual awareness, and practical support are connected to a peaceful atmosphere.
- Marriage communication is framed as intentional listening and the repeated making of positive relational deposits.
- The 30-day breakfast covenant is presented as a concrete practice of daily appreciation.
- The command not to let the sun go down on anger is applied as a marriage covenant of prayer, forgiveness, and reconciliation.
- The chapter presents parental surrender, marital covenant, and generational advancement as closely connected.
### Editorial and pastoral review flags
- Verify all Scripture references, quotations, translations, and the Spanish phrase “Buscad y hallaréis” before publication.
- Preserve the distinction between the teaching's source claims and later editorial interpretation.
- Clarify the difference between healthy parental unity and coercive control. A united front should not require a parent to conceal abuse, unsafe conduct, serious error, or a child's legitimate disclosure.
- Children should be able to speak safely with either parent. The “What did Dad/Mom say?” practice should not be used to shut down questions, conceal a mistake, or prevent a child from reporting harm.
- The instruction to support a spouse publicly and resolve disagreements privately needs explicit safeguarding exceptions for abuse, intimidation, coercive control, threats, or unsafe discipline. In those situations, protecting the child and seeking qualified help takes priority over preserving appearances.
- The chapter's gendered descriptions of mothers nurturing the home, husbands leading as “priest,” and wives making husbands feel proud should be identified as the speaker's marital framework rather than treated as the only faithful model for every family.
- “Never go to bed angry” should be presented with room for healthy time-outs, sleep, boundaries, and professional help; immediate resolution is not always safe or wise during escalation.
- Clarify the meaning, origin, and practical structure of the 30-day breakfast covenant when the original recording context is available.
---
## Chapter 4: Guarding Influences & Practical Daily Wisdom
> **Source note:** This chapter preserves the supplied NotebookLM synthesis from audio recordings of Bryan Hickman's teaching sessions. It is stored verbosely as source material for the developing parent-focused book. Scripture references, interpretations, terminology, role descriptions, and practical recommendations have not been independently fact-checked or editorially revised. The blanket-training and physical-correction material is retained for source fidelity and is not an endorsement or safety determination.
### Textile Boundaries & Early Training
To train a child to listen to their parents' voices, training must begin in infancy with simple, knowable boundaries. Rather than overwhelming a toddler with a laundry list of hundreds of rules that they are incapable of following, parents should establish a few select, physical boundaries [72, 73].
A highly practical and successful method for this is blanket training [73]. Spreading a small blanket on the floor, the parent instructs the infant (typically starting around six to nine months of age):
> "I don't want you going off of that." [73]
Inevitably, the child's curiosity or old nature will lead them to test the boundary and attempt to crawl off [73, 79, 80]. In that moment, the parent administers a light, instant correction—such as a gentle tap on the hand—and places them back on the blanket, reinforcing the instruction [73]. Within just a few repetitions, the infant learns to associate their disobedience with the immediate correction and willingly remains within the border [73].
The goal of this training is not merely to restrict the child's movement or to protect household furniture, such as a coffee table [73]. Rather, it is to train the child to listen to and obey the parent's voice [73]. These physical boundaries provide children with immense security [74]. Just as the Lord establishes boundaries for our lives to keep us secure, clear boundaries in the home let children know exactly what is acceptable, preventing a frantic, heavily policed household and fostering an environment of deep spiritual peace [73, 74, 112].
### Guarding the Mind: "Tell-a-Vision" and Media
In a modern world saturated with technology, parents must exercise extreme vigilance regarding television, tablets, and media [115, 116]. The world's media system is highly intentional; it is designed with specific "channels" and "programming" to literally "tell your vision"—shaping the ideals, desires, and minds of children away from the Kingdom of God [116].
Allowing a television or a tablet to act as a surrogate parent is a dangerous convenience [116]. It acts as a deliberate distraction designed by the adversary to draw parents away from their greatest earthly blessing and responsibility: actively training their children [116]. While completely avoiding media in today's society is a challenge, limiting it strictly produces extraordinary, healthy fruit [115, 116]. By closing the door to secular programming, we prevent the enemy from exploiting gaps in our children's security and instead keep their minds pure and focused on the atmosphere of the home [105, 116].
### Nurturing, Presence, and Owning Your Time
Effective child training cannot be outsourced; it is a precious gift and responsibility given directly by God to the parents [114, 118]. This training requires physical and mental presence [52]. You cannot train up a child in the way they should go if you are not there to walk beside them [52, 118].
This truth carries profound implications for the roles of both the mother and the father:
#### The Mother as the Nurturer
A mother's primary calling in most circumstances is to stay home, keeping the house and nurturing the family [117, 166]. In this sacred role, she fulfills her God-given ability to multiply [117, 118]. When a husband brings home a paycheck, the wife multiplies it into food and a meal; when provided a house, she multiplies it into a warm, peaceful home [118]. The work a mother does in the home far surpasses any secular career or paycheck [117, 118, 166]. Husbands must actively celebrate, honor, and protect this role rather than allowing the diabolical wisdom of the world to demean it [117, 118, 166].
#### The Father as the Provider of Time
For a mother to stay home, the father must be willing to step outside of the conventional worldly system to prioritize his family [120]. The Lord gave a specific word of wisdom: "Own your time." [120]. Fathers must seek the Lord for creative strategies to free up their schedules so they can be available, present parents [120]. This may mean starting a simple business or adjusting financial expectations to avoid the diabolical trap of Egypt, which demands two incomes and keeps parents too busy making bricks to build the family altar [117, 119, 120].
### Integrating Children into Daily Work
A common mistake parents make is separating their daily lives into strict categories of "work" (which is treated as a burden to be done alone) and "fun" (which is treated as the only desirable activity) [157]. While it is often faster and easier for a parent to paint a wall, do the dishes, or fold the laundry by themselves, this misses a critical opportunity for training [157].
Parents should actively integrate their children into all the affairs of daily life [115, 157]. Give an eight-year-old a paint roller and teach them how to paint; let the toddlers help push the buttons on the washing machine or play in the sink while doing dishes [157]. When children are included in these tasks, they do not grow up hating work or viewing it as an awful chore [157]. Instead, they learn that work is a natural, joyful expression of family life [157]. Ultimately, children do not need constant, artificial entertainment; they simply want to be with their parents, and sharing in daily labor bonds the family together in purpose [157].
### Themes captured for future book development
- Early training is presented as the establishment of a small number of clear, physical, understandable boundaries rather than an overwhelming list of rules.
- The source teaching uses blanket training as an example of teaching an infant to respond to a parent's voice and remain within a defined boundary.
- Boundaries are framed not only as restrictions but also as sources of security, predictability, and peace.
- Media is presented as a formative influence that can shape a child's imagination, desires, ideals, and worldview.
- The chapter calls parents to intentional presence rather than allowing devices to become surrogate caregivers.
- The teaching presents a home-centered maternal role and a time-owning, financially creative paternal role as its preferred family framework.
- Children are encouraged to participate in ordinary household work so that labor becomes a joyful expression of family life rather than an isolated burden.
- Family presence and shared work are presented as more formative than constant artificial entertainment.
### Editorial, developmental, and safeguarding review flags
- Verify all Scripture references, quotations, translations, and word-study claims before publication.
- Confirm whether the chapter title “Textile Boundaries” is the intended wording or whether it refers specifically to blanket/physical boundaries; preserve the supplied title until the recording context is available.
- The blanket-training example involves an infant, physical correction, and a potentially hazardous environment. Before any parent-facing use, consult current pediatric, child-safety, and safeguarding guidance; do not reproduce the method as a universal instruction or imply that a “gentle tap” is necessary for learning obedience.
- Any early-childhood boundary practice should prioritize supervision, childproofing, developmentally appropriate expectations, non-violent redirection, and prevention of falls or access to unsafe objects. Infant behavior and repeated boundary-testing are normal developmental processes, not proof of an “old nature.”
- The language that media is designed by “the adversary,” tells a child’s vision, or necessarily displaces parental responsibility should be identified as the speaker's theological framing. A final resource should distinguish thoughtful media guidance from fear-based claims and acknowledge educational, relational, accessibility, and family-context differences.
- The claims that child training cannot be outsourced and that mothers should ordinarily stay home should be presented as the teaching's family model, not as a universal measure of faithfulness or parental love. Account for single parents, dual-income households, adoptive and foster families, disability, illness, economic necessity, education, cultural context, and families with different vocational callings.
- The language about two incomes, Egypt, and “making bricks” should be retained as source imagery but carefully contextualized so financial hardship is not treated as a moral failure and so the final book does not impose unsafe or unrealistic economic expectations.
- When children participate in household work, include age-appropriate supervision and safety precautions. Paint, appliances, hot water, sinks, tools, chemicals, ladders, and other household hazards require adult judgment.
- Clarify what “own your time” means in practical, sustainable terms and avoid presenting entrepreneurship or schedule changes as guaranteed solutions for every family.
---
## Chapter 5: Generational Advancement & the Covenant Family
> **Source note:** This chapter preserves the supplied NotebookLM synthesis from audio recordings of Bryan Hickman's teaching sessions. It is stored verbosely as source material for the developing parent-focused book. Scripture references, interpretations, terminology, family structures, and practical recommendations have not been independently fact-checked or editorially revised.
### The Principle of Generational Advancement
A primary objective of the covenant family structure is what we call "generational advancement" [8, 178, 179]. This means that the spiritual victories, emotional healing, and behavioral discipline established by the parents become the floor upon which the children stand [8, 46, 162]. Because children raised in a genuinely secure, peaceful environment do not have to fight the same battles, wounds, or broken family dynamics that their parents had to overcome, they are uniquely positioned to stand on their parents’ advancements and leap forward into their own divine destinies [8, 46, 162].
Our children still have their own struggles and areas of life that the Lord must work on [81]. This is a beautiful and necessary reality because everyone needs something in their life that forces them to cry out to the Lord and depend on Him [81]. However, generational advancement ensures that they do not start from scratch; they start from a position of inherited spiritual security [8, 46, 162].
### "Cutting the Penny in Half"
To keep our children from expecting perfection from us—while still keeping them engaged in the process of growth—we taught them a foundational concept [82]. When our daughters were around seven to nine years of age, we sat down for a teaching moment and told them [82]:
> "Girls, listen. Mom and I are going to be able to cut this penny in half. All this stuff on this half of the penny, the Father is going to work with us to remove it from our lives. But there is still going to be half of a penny left for you to deal with in your own life. And then you are going to have children, and you are going to cut that penny in half again. But you will always have half of the half that remains. Why? Because the Father needs to be sovereign to your children, and He will be." [82]
This simple, powerful teaching set a healthy expectation within our home [82]. Our daughters did not expect us to be flawless, perfect parents, but they constantly saw us leaning into the Lord, seeking His face, and working to deal with our own "half of the penny" [82]. This vulnerability and transparency created a beautiful, authentic environment where the entire family advanced together before the Lord [82].
### Covenant Priorities: God, Family, and Ministry
In establishing a stable, secure home, parents must walk in strict alignment with God's divine order of priorities [131]. We are firm believers in a covenant hierarchy that must never be compromised [131]:
1. **God First**
2. **Family Second**
3. **Ministry Third**
Tragically, when this order is inverted, the home suffers immensely [131]. We see this manifest in the lives of many "preacher's kids" who grow up bitter and distant from the Lord because their parents prioritized public ministry or the affairs of the church over the spiritual and emotional security of their own household [131]. Even for those carrying a powerful ministerial anointing, fathers must seek the Lord for the creative wisdom and divine provision necessary to protect their family time [131]. We must lift our vision higher to see that our children are our primary, most significant ministry [41, 131].
### Relying on the Greater Body
No family is designed to function as an isolated island. Part of walking in the covenant is recognizing that you are not alone when you are parenting [133]. The Lord has intentionally structured the Body of Christ so that you have older, more mature people around you who have been given pastoral or apostolic responsibility over your life to speak wisdom, correction, and guidance into your household [133].
Furthermore, parents must actively teach and model honor for others [134]. In our home, we wanted our daughters to know that they were not restricted to only receiving help from us [134]. We gave them explicit permission that if they ever felt they needed outside spiritual help or counseling, they had the freedom to reach out directly to our trusted leaders and spiritual counselors [134]. By removing the fear of being threatened by outside help, we established a network of absolute security around our daughters [132, 134]. They grew up knowing that if Mom and Dad were struggling, there was a safe, ordained place in the local headship where help, restoration, and life-giving counseling could be found [133].
### Blended Families and Late Starts: Rebuilding the Foundation
We frequently meet parents who are entering the child training journey late—whether because they have recently come to know the Lord after their children are older, or because they are navigating the unique complexities of a blended family [147, 148]. In these situations, parents often ask how they can remove old, ungodly foundations that were laid before they entered the picture [147].
In these cases, the primary strategy is to become the model of the Father's love in their presence [148]. Walk before them as a consistent, unshakeable, secure place that they can count on day in and day out [148].
If you are dealing with older children where the primary training window has passed, look backward to see if there are any broken bridges of trust [148]. Seek the Lord and ask yourself: “Have I ever made any promises to my children that I have not kept?” [148]
If the answer is yes, you must do whatever it takes—no matter how difficult or costly to your finances—to keep your word and fulfill those promises [148]. This act of sacrificial integrity sends a powerful message that you are a parent of truth, modeling the covenant-keeping nature of our heavenly Father [148]. Combine this with doing extraordinary, unexpected things to display your love, and stay closely submitted to your local spiritual headship, who can help navigate the specific nuances of your household [148]. The Lord’s grace is fully sufficient to heal, restore, and rebuild the foundations of any home that yields completely to His pattern [148].
### Themes captured for future book development
- Generational advancement is presented as children inheriting a foundation of spiritual security, emotional healing, and parental growth rather than having to begin from the same level of brokenness.
- The “cutting the penny in half” illustration gives children permission to see parental imperfection while also seeing parents actively submit their lives to God’s transforming work.
- The teaching holds together two ideas: parents can remove or reduce patterns of brokenness, while children still have their own agency, struggles, and relationship with God.
- The proposed covenant priority is God first, family second, and ministry third.
- Children are presented as a primary ministry and a responsibility that should not be sacrificed to public ministry demands.
- Parenting is framed as a communal responsibility in which mature, trusted members of the local church can provide wisdom, correction, counseling, and restoration.
- Children are encouraged, in the source account, to have access to safe outside help rather than being limited to their parents alone.
- Parents who begin later or who are navigating blended-family complexity are called to rebuild trust through consistency, integrity, fulfilled promises, demonstrated love, and patient presence.
### Editorial, theological, and safeguarding review flags
- Verify all Scripture references, quotations, translations, and the theological language surrounding “generational advancement” before publication.
- Preserve the “cutting the penny in half” illustration and its source context, but clarify that children are not responsible for repairing or carrying their parents’ unresolved wounds. Parental healing should reduce burdens on children, not assign them a quantified share of family brokenness.
- The teaching's statement that everyone needs struggles that force dependence on God should be handled carefully. Do not romanticize trauma, abuse, poverty, disability, mental-health challenges, or other suffering as divinely necessary or as evidence of spiritual deficiency.
- “God first, family second, ministry third” should be explained rather than used as a slogan that automatically resolves competing responsibilities. The final resource should address safety, marriage and parenting obligations, work, health, community, and the needs of vulnerable family members.
- The claim concerning “preacher's kids” should be qualified and supported if retained. Children’s experiences of ministry families are varied, and bitterness or distance from faith should not be attributed simplistically to parental prioritization.
- Outside spiritual leaders, pastors, counselors, and “local headship” must be safe, qualified, accountable, and subject to appropriate safeguarding standards. Children should have confidential, age-appropriate ways to disclose concerns, including access to adults outside the parents' chosen circle when needed.
- “Submission” to spiritual authorities must never mean unquestioning obedience, secrecy, isolation, surrender of parental or child safety, or protection of leaders from scrutiny. The final book should explicitly preserve the right to seek independent professional help and report abuse.
- In blended families, rebuilding trust requires consent, patience, predictable care, respect for existing parent-child bonds, and attention to grief, loyalty conflicts, trauma, and legal/custody realities. A new spouse or parent figure cannot demand instant spiritual or relational authority.
- The instruction to fulfill promises “no matter how difficult or costly” should be bounded by safety, legality, financial sustainability, and the child’s best interests. Parents should not keep an unsafe, impossible, manipulative, or harmful promise merely to preserve appearances.
- “Extraordinary, unexpected” demonstrations of love should be age-appropriate, non-coercive, and responsive to the child’s actual needs rather than used to purchase trust or compliance.
- Clarify whether “late” refers to age, conversion, remarriage, or a previous parenting approach, and avoid framing earlier family history as an “ungodly foundation” in a way that shames parents or children.
---
## Chapter 6: The Covenant Parenting Workbook — Reflection and Action
> **Source note:** This workbook chapter preserves the supplied NotebookLM synthesis from audio recordings of Bryan Hickman's teaching sessions. It is stored verbosely as source material for the developing parent-focused book. The questions, exercises, and covenant commitments below reflect the source teaching and have not been independently fact-checked, clinically reviewed, or editorially revised. Physical-discipline and infant-training exercises are retained for source fidelity only and are not an endorsement, safety determination, or instruction to implement them.
This workbook is designed to help you and your spouse move beyond information and step into active, structural transformation [119]. Covenant parenting is not a formula to be checked off; it is a living relationship that must be intentionally walked out before the Lord and before your children [51, 52]. Use these reflective questions, practical exercises, and covenant commitments to build a secure sanctuary of peace in your home [14, 130].
---
### Section 1: Modeling & Generational Vision (Chapter 1)
#### I. Heart-Level Reflections
**Dependent Sonship:** Jesus modeled a life of complete dependence on His Father ("I don't do anything but I see my father do it" [9]). In what areas of your daily life are you struggling to walk in instant obedience to your Heavenly Father? How might this struggle affect your children's ability to obey your voice [11]?
**The Power of the Model:** In the eyes of a young child, you represent God—His authority, His love, and His safety [10, 62]. When you come home on edge or exhausted, what kind of father or mother are you modeling [11, 60]?
**Multi-Generational Legacy:** Are there areas where you have fallen into passive parenting or short-sightedness [11, 12]? If you parented with a vision that extended three generations deep, what would you change about your household today [12, 55]?
#### II. Action Steps
**The Refuge Audit:** Identify one major source of fear, anger, or insecurity in your own heart [13]. Set aside a specific time to bring this before the Lord, asking Him to deal with the root of this brokenness [13]. Re-read Proverbs 14:26:
> "In the reverent fear of the Lord, there is strong confidence, and his children will always have a place of refuge." [13]
Write down how you will yield to His healing hand this week to make your home a stronger refuge [13, 62].
---
### Section 2: Redemptive Correction (Chapter 2)
#### I. Heart-Level Reflections
**The Rule of Calmness:** Do you ever correct your children out of irritation, frustration, or a desire for convenience [22, 101]? What is the difference between biblical discipline (which restores) and humanistic punishment (which lingers) [21, 76]?
**Removing Shame:** Does correction in your home leave a lingering shadow of guilt or emotional distance, or does it result in immediate restoration, hugs, and perfect right standing [21, 76, 79]?
#### II. Action Steps
**The Hand Consecration:** Make a solemn covenant with your spouse today that your hands are strictly reserved for holding, hugging, and expressing love [20, 73]. Remove all wooden spoons, belts, and other rigid implements from your parenting toolbox [20, 73].
**Setting Up the “Correction Room”:** Identify a private room in your house (a bedroom or bathroom) that will serve as the private place of correction [23, 163]. Place a tender, limber lilac switch (smooth, with bumps shaved off) in that designated room [20, 164]. Agree to never correct your child in front of guests, siblings, or in public [23, 163].
**Practice Stopping:** If you feel your blood pressure rising during a correction, commit to saying: "I am not in a position to handle this right now." Ask your spouse to cover for you, or find a controlled situation before the Lord until you can speak in a calm, tender voice [22, 78, 101].
---
### Section 3: Parental Unity & Atmosphere (Chapter 3)
#### I. Heart-Level Reflections
**The Cracks of Division:** Children are astute observers who look for alignment [24]. Can your children find any "cracks" between you and your spouse to get a different answer [24, 189]?
**Private Alignment:** Have you fallen into the trap of correcting, undermining, or arguing with your spouse in front of the kids [26, 193]? How can you build a stronger habit of waiting until you are behind closed doors to resolve parenting differences [26, 27, 192]?
#### II. Action Steps
**The "What Did They Say?" Protocol:** Practice the immediate gatekeeping response. Whenever a child asks for permission or a treat, always ask: "What did Dad say?" or "What did Mom say?" [24, 25, 198]. If the other spouse has given an answer, the discussion is permanently closed [25, 199].
**The 30-Day Breakfast Covenant:** Set your alarm 30 minutes earlier. Sit down together for breakfast every day for the next 30 days [32, 210]. Each morning, share one specific, particular detail that you sincerely estimate and appreciate about your spouse [32, 33, 211, 213]. Focus on finding the good, and watch the atmosphere of your marriage and home transform [34, 211].
**The Sunset Covenant:** Commit to the rule of Ephesians 4:26:
> "...do not let the sun go down on your anger." [34, 210]
Agree that no matter the disagreement, you will pray individually, come together, ask for forgiveness, and pray together before sleeping [34, 208].
---
### Section 4: Guarding Influences & Daily Wisdom (Chapter 4)
#### I. Heart-Level Reflections
**Surrogate Parenting:** Is television or digital media acting as a surrogate parent or a distraction from your training responsibilities [38, 134]? How is "tell-a-vision" programming shaping the minds and desires of your children away from the Kingdom [38, 134]?
**Owning Your Time:** Fathers, are you caught in the "Egyptian" bricks-and-mortar trap of overworking at the expense of being present to train your children [39, 137]? What adjustments do you need to make to own your time [39, 138]?
#### II. Action Steps
**The Blanket Training Trial:** For infants (6–9 months), lay down a small blanket on the floor [36, 91]. Practice giving the quiet command: "I don't want you going off of that." [37, 91] Gently correct their hand when they test the boundary, and place them back on [37, 91]. Use this tool to train their ears to listen to your voice [37, 91].
**Integrating vs. Separating:** Stop treating household chores as a solo burden. This week, give your child a paint roller, have them help push buttons on the washing machine, or pull up a chair to help wash dishes [40, 175]. Let them participate in your daily life, reinforcing that the family works together with joy [40, 175].
---
### Section 5: Generational Advancement & Covenant Priorities (Chapter 5)
#### I. Heart-Level Reflections
**The Penny in Half:** Do your children carry the heavy burden of expecting you to be perfect [42, 43]? How can you model humility and the pursuit of growth rather than a false image of perfection [43, 95]?
**The Priority Order:** Honestly assess your calendar and energy. Are you living according to the covenant order: God First, Family Second, Ministry/Work Third [43, 44, 144]?
#### II. Action Steps
**The "Half-Penny" Conversation:** Gather your children (especially those ages 7–9 or older) [42, 95]. Share the "half-penny" teaching with them:
> "Mom and I are not perfect parents, but we are working with the Lord to clear away old battles so you don't have to fight them [41, 42, 95]. There will still be a portion left for you to deal with, but you will stand on our shoulders." [41, 42, 95]
**Rebuilding Broken Bridges (Late Starts / Blended Families):** Seek the Holy Spirit and ask: "Have I ever made any promises to my children that I have not kept?" [47, 161] If a promise comes to mind—no matter how small or how financially challenging—make a concrete plan to keep your word and fulfill that promise this month [47, 161].
### Themes captured for future workbook development
- The material moves from teaching content into self-examination, shared marital practices, and concrete household commitments.
- The workbook treats parental transformation and modeling as the starting point for changes in the home.
- The questions invite parents to examine obedience, emotional regulation, presence, priorities, division, media use, and generational vision.
- The proposed exercises include a refuge audit, a calmness practice, parental-unity protocols, a 30-day appreciation covenant, media and time audits, shared household work, a half-penny conversation, and promise-repair work.
- The source workbook is intended to be used by spouses together, not merely read individually.
- Each chapter's practical section mirrors the book's larger sequence: model first, correct redemptively, build unity, guard influences, and advance the covenant family.
### Editorial, pastoral, developmental, and safeguarding review flags
- Verify all Scripture references, quotations, translations, page/source-number citations, and the relationship between the workbook citations and the original audio/NotebookLM source.
- The physical-discipline exercises in Sections 2 and 4 should not be presented as ready-to-use instructions in a parent-facing workbook. Replace or substantially revise them after professional safeguarding review, with non-violent, age-appropriate alternatives centered on supervision, redirection, natural/logical consequences, repair, and emotional regulation.
- The “correction room” exercise should not encourage isolating a child with an adult or imply that privacy overrides safety, accountability, or a child’s right to disclose harm. Any final version should include clear safeguarding boundaries and appropriate access to trusted, independent help.
- The suggestion to place a switch in the home should be removed from a practical action checklist unless the final theological and safeguarding review explicitly justifies its inclusion; the current source note must not be mistaken for an endorsement.
- “Perfect right standing” and the idea that correction removes a spiritual debt require theological review so that children are not taught that physical pain is required for forgiveness, belonging, or restoration.
- “If the other spouse has given an answer, the discussion is permanently closed” should be softened to allow clarification, correction of mistakes, accessibility needs, changing circumstances, and safe disclosure. Children must not be trained to stop asking questions or reporting concerns.
- The 30-day breakfast and sunset covenants should allow for work schedules, illness, disability, conflict de-escalation, sleep, safety, and circumstances in which immediate reconciliation is not appropriate.
- The blanket-training trial should not be reproduced without current pediatric and child-safety review. Infant crawling and boundary-testing are normal development; safe supervision and childproofing should come before obedience training.
- The “Egyptian” overwork metaphor and “own your time” exercise should not shame parents who must work, rely on childcare, or manage financial hardship. Include varied family structures and realistic economic constraints.
- Household-work activities require age-appropriate supervision around paint, appliances, water, heat, tools, chemicals, and other hazards.
- The half-penny conversation should be adapted so children are not assigned responsibility for parental wounds or told they must inherit a predetermined portion of brokenness. Emphasize parental accountability, the child’s agency, and freedom to seek help.
- Promise-repair exercises should be bounded by safety, legality, financial sustainability, custody arrangements, and the child’s best interests; a parent should not fulfill a harmful or impossible promise.
- The workbook should include an explicit “when to seek help” page covering trusted pastoral care, licensed counseling, child-protection concerns, domestic abuse, mental-health crises, and situations in which a parent cannot stay calm or keep a child safe.
---
## The 30-Day Covenant Parenting Challenge Calendar
> **Source note:** This practical, day-by-day companion calendar preserves the supplied NotebookLM synthesis from audio recordings of Bryan Hickman's teaching sessions. It is stored verbosely as source material for the developing parent-focused book. The schedule, Scripture references, exercises, theological claims, and practical recommendations have not been independently fact-checked, clinically reviewed, or editorially revised. Physical-discipline and infant-training exercises are retained for source fidelity only and are not an endorsement, safety determination, or instruction to implement them.
This practical, day-by-day companion calendar is designed to help you and your spouse actively move from information to structural, heart-level transformation in your home [48]. Covenant parenting is a living relationship that must be intentionally walked out before the Lord and before your children [48, 62]. Use this daily tracker to build a secure sanctuary of peace in your household [48, 141].
---
### Week 1: Laying the Marital Foundation
The spiritual atmosphere of the home is anchored in the absolute unity of husband and wife [3, 199]. This week, we focus entirely on sealing the "cracks" of division, aligning our hearts privately, and nurturing horizontal communication [3, 24, 31, 200].
#### Day 1: The Sunset Covenant (Ephesians 4:26)
**Action:** Sit down with your spouse tonight and make a solemn covenant that you will never go to sleep angry [34, 218]. If a disagreement arises, commit to taking a private "time out" to pray individually, then come together to ask for forgiveness and pray together before sleeping [34, 216, 219].
**Scripture:** "...do not let the sun go down on your anger." [34, 54, 218, 221]
#### Day 2: Launching the 30-Day Breakfast Covenant
**Action:** Set your alarm 30 minutes earlier [54, 221]. Sit down for breakfast together (just the two of you) and share one specific, particular detail you sincerely appreciate and estimate about your spouse [32, 33, 54, 221, 224]. **Rule for Husbands:** Avoid generalities like "you look good"—find a particular, concrete action to celebrate [33, 224].
**Scripture:** "Seek, and you will find." [33, 222]
#### Day 3: The "What Did Dad/Mom Say?" Gatekeeping Protocol
**Action:** Align on the gatekeeping protocol [54, 210]. Whenever a child approaches you asking for a treat, permission, or a change in rules, your immediate, unthinking response must be: "What did Dad say?" or "What did Mom say?" [24, 25, 54, 210]. If the other spouse has given an answer, the discussion is permanently closed [25, 54, 210].
#### Day 4: Day 3 of the Breakfast Covenant
**Action:** Share your daily specific deposit [32, 33]. Today, focus on celebrating how your spouse handles pressure or exhaustion [30, 143, 201].
#### Day 5: Private Discipline Alignment Check
**Action:** Covenant together that you will never correct, undermine, or disagree with each other's disciplinary actions in front of the children [26, 204, 205]. If you disagree with how a situation was handled, deal with your own irritation privately and discuss it strictly behind closed doors later [27, 211].
#### Day 6: Modeling Humility & Repentance
**Action:** If you slipped up this week and displayed division or disrespect in front of your children, execute the restoration protocol [28, 205]. First, apologize to your spouse privately:
> "My love, I am sorry. I realize that I made you look bad in front of the child, and I repent." [28, 205]
Second, go to the child:
> "What I said to you about your mother/father was wrong. I want to apologize to you for dishonoring them in front of you." [29, 206]
#### Day 7: Weekly Reflection & Rest
**Action:** During your breakfast covenant today, evaluate the atmosphere of the home [32, 221]. Has the spirit of peace and security increased? Ask: "Are we taking time to truly listen to one another’s hearts, or are we just waiting for our turn to speak?" [31, 213].
---
### Week 2: Establishing Heart-Level Security & Early Boundaries
This week, we transition into early training boundaries and emotional security. We examine how our physical actions, voice tone, and early limits build a protective shield around our children [3, 20, 37, 103].
#### Day 8: Consecrating the Hands & the Voice
**Action:** Consecrate your hands and voice today [20, 226]. Declare that your hands are made exclusively for hugging, holding, and expressing love and tenderness [20, 84, 226]. Agree that your voice will never be the vehicle of correction, but only of instruction, praise, and love [226]. Remove all rigid correction implements (belts, heavy spoons) from the home [20, 84, 52].
#### Day 9: Establishing the "Correction Room"
**Action:** Identify a private, designated area in your house (a bedroom or bathroom) that will serve as the private place of correction [23, 174]. Place a tender, limber lilac switch (smooth, with bumps shaved off) in that room [20, 175]. Commit to never correcting your children publicly or in front of siblings [23, 174].
#### Day 10: Expressive Love Deposits
**Action:** Be intentionally expressive today [139, 140]. Hug your children unexpectedly, write them a sweet note, or tell them specific reasons why you love them and estimate who they are [139, 140]. Ensure they know their security is unshakeable [87, 103].
#### Day 11: Blanket Training Setup (For Infants 6–9 Months)
**Action:** Spread a small blanket on the floor [36, 102]. Place the infant on it and say quietly: "I don't want you going off of that." [37, 102] When they attempt to crawl off, gently tap their hand to associate disobedience with instant correction, and place them back on the blanket [37, 102]. Repeat this several times in a focused, calm session [37, 102]. **(For older children, choose a single, clear boundary—like not touching the coffee table—to train their ears to listen to your voice [102].)**
#### Day 12: The Rule of Calmness Practice
**Action:** If you feel your blood pressure rising or feel on edge during a disciplinary moment today, practice stopping immediately [22, 112]. Say to your spouse: "I am not in a position to handle this right now," and let them step in and cover for you, or find a calm place before the Lord before addressing the situation [22, 30, 52, 112, 185].
#### Day 13: Instant Obedience Check
**Action:** Evaluate if you have fallen into the trap of counting to three or repeating commands multiple times [227]. Commit today to expecting instant obedience to your voice [141, 227]. Give clear, loving instruction once, and address any delay as disobedience [140, 141, 227].
#### Day 14: Mid-Point Reflection
**Action:** Reflect on Proverbs 14:26 [3, 74]. Write down how growing in your own reverent fear and instant obedience to the Heavenly Father has created a physical and spiritual "shield of refuge" for your children this week [3, 13, 74].
---
### Week 3: Integrating Work, Joy, and Presence
We are called to own our time, stay present, and include our children in the everyday affairs of life so they learn that labor is a joyful, natural expression of the family [5, 39, 40].
#### Day 15: Media Audit ("Tell-a-Vision")
**Action:** Walk through your home and evaluate the media intake [38, 145]. Identify where tablets, phones, or television are acting as "surrogate parents" or distractions [38, 145]. Agree to strictly limit or close the door to secular programming to keep the atmosphere of the home pure [38, 145].
#### Day 16: Erasing the Work vs. Fun Boundary
**Action:** Stop treating household chores as a solo burden [40, 186]. Today, pull up a chair and let your toddler help wash dishes, push the buttons on the washing machine, fold laundry, or give your older child a paint roller to help paint [40, 186]. Make work a shared, joyful experience of living life together [40, 186].
#### Day 17: Father’s Covenant: Owning Your Time
**Action:** Fathers, spend time before the Lord today asking for creative, Kingdom strategies to "own your time" [39, 149]. Examine your schedule to ensure you are physically and mentally present for your family rather than caught in the "Egyptian brick-making trap" of excessive work [39, 148, 149].
#### Day 18: Celebrating the Mother’s Role
**Action:** Husbands, take time today to actively celebrate, verbalize, and honor the sacred work your wife does in nurturing the home and multiplying your family's resources [30, 39, 147]. Let her know that her presence far surpasses any secular career or paycheck [39, 146, 147].
#### Day 19: The "I Will Say Yes" Promise
**Action:** Look for opportunities to say "Yes!" to your children today [151]. Tell them: "There are times I have to say no to protect you, but I am looking for every opportunity to say yes to you." [151, 152] Plan a family-appropriate trip, surprise outing, or special treat to fulfill this promise [151, 153].
#### Day 20: Outdoor Activity Shift
**Action:** If the atmosphere of the home feels pent up or stressful today, physically shift locations [179, 180]. Take the children outside to build a fort, play in the yard, go to the park, or take a simple drive [179, 180]. Use nature and play as a release valve for energy [178, 180].
#### Day 21: Weekly Reflection: Celebration of Individuality
**Action:** Discuss how your children are uniquely wired [118, 121]. Repent of any verbal comparisons between siblings [119, 120]. Ask the Holy Spirit for custom wisdom (Rhema word) for each child's specific, unique design [117, 118].
---
### Week 4: Generational Legacy & Deep Restoration
We parent with a multi-generational vision, preparing our children to stand on our spiritual shoulders and leap forward into their own divine destinies [6, 12, 41].
#### Day 22: The "Half-Penny" Conversation
**Action:** Gather your children (especially those ages 7–9 or older) for a teaching moment [42, 106]. Explain the "half-penny" concept:
> "Mom and Dad are not perfect, and we are working with the Lord to clear away old battles so you don't have to fight them [42, 106]. There will still be a portion left for you to deal with under His sovereign hand, but you will stand on our shoulders." [41, 42, 106]
#### Day 23: Rebuilding Broken Bridges (Late Starts & Blended Families)
**Action:** Ask the Holy Spirit: "Have I ever made any promises to my children that I have not kept?" [47, 172] If a promise comes to mind—no matter how small or financially difficult—write down a concrete plan to keep your word and fulfill it this month [47, 172]. Fulfilling your promises models our covenant-keeping Father [47, 172].
#### Day 24: Covenant Priority Check
**Action:** Audit your calendar, finances, and energy [57]. Are you walking in strict alignment with God's covenant order of priorities: God First, Family Second, Ministry/Work Third? [43, 44, 57] Adjust any inverted priorities today [44].
#### Day 25: Honoring the Greater Body
**Action:** Teach your children that they are not alone, and that they have the freedom to reach out to trusted, ordained local leaders or counseling elders if they ever need help or counsel [45, 157]. Model this by showing submission and honor to local headship yourself [45, 157].
#### Day 26: Facing Insecurities
**Action:** Realize that any insecurities you carry do not have to be passed down [14, 104]. Bring your deep-seated fears or past family wounds to the Lord, allowing Him to heal you so that your children can walk in total, inherited spiritual security [14, 73, 104, 105].
#### Day 27: Concluding the 30-Day Breakfast Covenant Challenge
**Action:** As you complete your 30th breakfast together, commit to making these daily specific deposits a permanent, lifelong habit of your marriage [32, 223]. Celebrate how focusing on finding the good has transformed your relationship [34, 222].
#### Day 28: Preparing the Next Generation to Model
**Action:** Reflect on Acts 13:36 [12]. Pray a blessing over your children, asking the Lord to equip them to serve His purposes faithfully in their own generation [12, 65].
---
### Days 29 & 30: Evaluation & Generational Forwarding
#### Day 29: Joint Spouse Review
**Action:** Review the completed 30-day challenge. Where did you see the most significant fruit? Where did the Holy Spirit highlight areas that still need to be "narrowed up" or healed? [14, 73, 76]
#### Day 30: Sealing the Legacy
**Action:** Commit this parenting journey to the Lord in prayer [193]. Declare that your family is stepping into generational advancement, and that the spiritual ceiling of your life has officially become the floor upon which your children stand [6, 41, 105].
### Calendar themes captured for future book development
- The calendar begins with marital unity and communication before moving into child-focused boundaries and correction.
- Its sequence progresses from household atmosphere, to heart-level security, to presence and shared work, and finally to generational legacy and restoration.
- The daily practices emphasize appreciation, repentance, calmness, parental consistency, presence, media awareness, shared labor, individualized attention, promise keeping, and prayer.
- The calendar translates the broader teaching into a structured rhythm of daily action, weekly reflection, and final evaluation.
- The challenge repeatedly connects parental transformation with the security and future formation of children.
- The calendar includes both couple-centered practices and child-centered conversations, allowing later editions to distinguish exercises for spouses, infants, older children, blended families, and ministry families.
### Editorial, pastoral, developmental, and safeguarding review flags
- Verify all Scripture references, quotations, translations, page/source-number citations, and the relationship between this calendar's citations and the original audio/NotebookLM source.
- The calendar contains repeated instructions to use a switch, tap an infant's hand, and conduct private physical correction. These instructions should not be distributed as a ready-to-use parent program. Before any public edition, replace or substantially revise them after professional pediatric, child-development, and safeguarding review, centering non-violent redirection, supervision, natural/logical consequences, repair, and emotional regulation.
- The “correction room” should not be framed as a private space where a child is isolated with an adult without safety, accountability, and access to independent help. Privacy should protect dignity, not conceal harm.
- “Never go to sleep angry” and the sunset covenant should allow safe time-outs, sleep, boundaries, and delayed conversation. Immediate reconciliation is not appropriate in every conflict, particularly where there is intimidation, coercive control, abuse, or escalating danger.
- The “What Did Dad/Mom Say?” protocol and the phrase “the discussion is permanently closed” require safeguards. Parents may need to correct a mistake, hear a child's question, accommodate disability or changing circumstances, or receive a disclosure of harm. Unity must not become silencing.
- Day 8's instruction that the voice should never be a vehicle of correction conflicts with the broader source teaching's emphasis on correcting disobedience and should be clarified in the original recording context.
- Day 13's “instant obedience” exercise should be reviewed developmentally. Young children may need repetition, processing time, communication support, or an explanation of a request; delay is not automatically defiance.
- The 30-day breakfast count appears internally inconsistent: the calendar launches the breakfast covenant on Day 2, labels Day 4 as “Day 3,” and calls Day 27 the 30th breakfast even though the listed daily breakfast actions do not clearly account for thirty meetings. Reconcile the schedule before publication.
- The “I Will Say Yes” promise should not pressure parents into purchasing outings or treats, or make a child's felt love dependent on receiving a yes. Define realistic, relational ways to say yes while preserving necessary boundaries and financial sustainability.
- The “Egyptian brick-making trap,” the instruction that a mother's presence surpasses a secular career, and the gendered roles should be presented as the speaker's family framework, not a universal measure of faithfulness. Include single parents, dual-income families, childcare, disability, illness, economic necessity, adoptive/foster families, and varied vocational callings.
- Outdoor drives and activities require ordinary safety planning, supervision, weather awareness, transportation restraints, and age-appropriate expectations.
- Day 21's language about each child being uniquely wired is valuable, but “Rhema word” should be explained and should not replace listening to the child, developmental knowledge, qualified support, or medical/mental-health care.
- The half-penny exercise should not tell children they inherit a predetermined portion of parental brokenness. Emphasize parental accountability, the child's agency, and freedom to seek help.
- Trusted local leaders, “counseling elders,” and “local headship” must be qualified, accountable, safeguarding-compliant, and open to independent scrutiny. Children must retain access to safe adults outside the parents' chosen leadership circle and to licensed professional help.
- “Submission” to church authority must never require secrecy, unquestioning obedience, isolation, surrender of safety, or protection of leaders from scrutiny.
- Promise-repair exercises should be bounded by safety, legality, custody arrangements, financial sustainability, and the child's best interests. An unsafe or impossible promise should be addressed honestly rather than fulfilled at any cost.
- “Generational forwarding” and the statement that a parent's spiritual ceiling becomes a child's floor should be framed as an aspirational metaphor, not a guarantee or a burden placed on children to continue a parent's ministry or spiritual achievements.
@@ -0,0 +1,257 @@
---
title: "The Pattern of Covenant Parenting — NKJV Scripture Verification Register"
status: verification-draft
translation: "New King James Version (NKJV)"
source: "BibleGateway NKJV passage pages"
retrieved: 2026-08-14
related:
- "[[covenant_parenting_bryan_hickman]]"
- "[[covenant_parenting_bryan_hickman_revised]]"
tags:
- parenting
- covenant-parenting
- church-teaching
- scripture
- NKJV
- editorial-review
---
# NKJV Scripture Verification Register
**Purpose:** This register verifies the Scripture references and Scripture-like quotations used in [[covenant_parenting_bryan_hickman_revised]].
**Interpretive status:** The parenting manuscript is an interpretation and synthesis of Bryan Hickman's voice recordings, not a verified verbatim transcript. Bryan Hickman's review is pending. The Scripture comparison below is also an editorial working document for his review; it does not imply that Bryan approved any wording, application, or theological conclusion.
**Method:** Explicit Bible references were enumerated from the revised draft and compared with the New King James Version (NKJV) text retrieved from the linked BibleGateway passage pages on 2026-08-14. Existing source renderings are not silently replaced here. Each entry identifies whether the wording in the manuscript is exact, partial, interpretive, or a probable allusion.
**NKJV attribution:** Scripture taken from the New King James Version®. Copyright © 1982 by Thomas Nelson. Used by permission. All rights reserved. The linked BibleGateway pages identify the translation as NKJV and provide the text used for this comparison.
## Coverage summary
| Reference | Where it is used in the revised draft | Verification result |
|---|---|---|
| 1 Timothy 1:5 | Chapter 0 and Chapter 1 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Proverbs 14:26 | Chapters 0, 1, and 4 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Matthew 7:13 | Chapters 0 and 1 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Acts 13:36 | Chapters 0 and 5 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Proverbs 22:6 | Chapter 1 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Romans 12:2 | Chapter 1 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Proverbs 22:15 | Chapter 2 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Proverbs 13:24 | Chapter 2 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Proverbs 19:18 | Chapter 2 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Proverbs 29:15 | Chapter 2 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Proverbs 29:17 | Chapter 2 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Ephesians 4:26 | Chapters 0 and 3; Calendar Day 1 | Reference is explicit; body wording is a partial quotation and does not reproduce the complete NKJV verse. |
| Ephesians 6:4 | Chapter 2 | Reference is explicit; body wording is an interpretive rendering, not verbatim NKJV. |
| Matthew 7:7 | Chapter 3 and Calendar Day 2 | Probable allusion; the reference is not stated in the source material and should be confirmed with Bryan. |
| John 5:19 | Chapter 0 and Chapter 1 | Probable allusion; the reference is not stated in the source material and should be confirmed with Bryan. |
## Verified NKJV reference text
### 1 Timothy 1:5
**Draft use:** The goal of instruction and the formation of love, a pure heart, a good conscience, and sincere faith.
**NKJV text:**
> Now the purpose of the commandment is love from a pure heart, from a good conscience, and from sincere faith,
**Comparison:** The draft says, “The goal of our instruction is love from a pure heart, a good conscience, and a sincere faith.” This is a source rendering or paraphrase, not verbatim NKJV.
**Source:** [1]
### Proverbs 14:26
**Draft use:** Reverent fear of the Lord, confidence, and refuge for children.
**NKJV text:**
> In the fear of the Lord there is strong confidence, And His children will have a place of refuge.
**Comparison:** The draft expands “the fear of the Lord” to “the reverent fear of the Lord” and says that children “will always have a place of refuge.” Retain as source wording unless Bryan approves an editorial replacement with the NKJV wording.
**Source:** [2]
### Matthew 7:13
**Draft use:** The narrow path versus the broad way in the discussion of redemptive correction.
**NKJV text:**
> Enter by the narrow gate; for wide is the gate and broad is the way that leads to destruction, and there are many who go in by it.
**Comparison:** The draft says, “Enter through the narrow gate, for the gate is wide and the way is broad that leads to destruction, and there are many who enter through it.” The meaning is similar, but the wording is not verbatim NKJV.
**Source:** [3]
### Acts 13:36
**Draft use:** David serving his own generation and the multi-generational vision.
**NKJV text:**
> For David, after he had served his own generation by the will of God, fell asleep, was buried with his fathers, and saw corruption;
**Comparison:** The draft says that David “served God's purposes in his own generation” and “was laid among his fathers and underwent decay.” This is an interpretive rendering, not verbatim NKJV.
**Source:** [4]
### Proverbs 22:6
**Draft use:** Training a child in the way he should go.
**NKJV text:**
> Train up a child in the way he should go, And when he is old he will not depart from it.
**Comparison:** The draft says, “Train up a child in the way that he should go, and even when he grows old, he will not abandon it.” This is close in meaning but not verbatim NKJV.
**Source:** [5]
### Romans 12:2
**Draft use:** Renewal of the mind and refusing conformity to the world.
**NKJV text:**
> And do not be conformed to this world, but be transformed by the renewing of your mind, that you may prove what is that good and acceptable and perfect will of God.
**Comparison:** The draft is a rearranged or interpretive rendering of the verse and should not be presented as a verbatim NKJV quotation without revision.
**Source:** [6]
### Proverbs 22:15
**Draft use:** Foolishness in a child's heart and correction.
**NKJV text:**
> Foolishness is bound up in the heart of a child; The rod of correction will drive it far from him.
**Comparison:** The draft says, “The rod of discipline will remove it far from him.” The reference is correct, but the wording differs from NKJV. This passage requires separate safeguarding, developmental, theological, and pastoral review; NKJV verification does not constitute approval of an application.
**Source:** [7]
### Proverbs 13:24
**Draft use:** One of the correction-related Proverbs listed in Chapter 2.
**NKJV text:**
> He who spares his rod hates his son, But he who loves him disciplines him promptly.
**Comparison:** Verify the quotation against this wording before publication. Any application to physical discipline must remain clearly separated from translation verification and undergo safeguarding review.
**Source:** [8]
### Proverbs 19:18
**Draft use:** One of the correction-related Proverbs listed in Chapter 2.
**NKJV text:**
> Chasten your son while there is hope, And do not set your heart on his destruction.
**Comparison:** Verify the quotation against this wording before publication. The verse must not be presented as automatic approval of a discipline method.
**Source:** [9]
### Proverbs 29:15
**Draft use:** One of the correction-related Proverbs listed in Chapter 2.
**NKJV text:**
> The rod and rebuke give wisdom, But a child left to himself brings shame to his mother.
**Comparison:** Verify the quotation against this wording before publication. The verse's presence does not resolve developmental, legal, safeguarding, or pastoral questions about application.
**Source:** [10]
### Proverbs 29:17
**Draft use:** One of the correction-related Proverbs listed in Chapter 2.
**NKJV text:**
> Correct your son, and he will give you rest; Yes, he will give delight to your soul.
**Comparison:** Verify the quotation against this wording before publication and distinguish the biblical reference from the source teaching's proposed method of correction.
**Source:** [11]
### Ephesians 4:26
**Draft use:** The “do not let the sun go down” principle in the marriage discussion and Calendar Day 1.
**NKJV text:**
> “Be angry, and do not sin”: do not let the sun go down on your wrath,
**Comparison:** The draft uses only the latter portion, “...do not let the sun go down on your anger.” It is a partial quotation and changes “wrath” to “anger.” If retained, identify it as a partial source rendering or replace it with the complete NKJV quotation after Bryan's review.
**Source:** [12]
### Ephesians 6:4
**Draft use:** Fathers, anger/provocation, and training and instruction of children.
**NKJV text:**
> And you, fathers, do not provoke your children to wrath, but bring them up in the training and admonition of the Lord.
**Comparison:** The draft says, “Fathers, do not provoke your children to anger, but bring them up in the discipline and instruction of the Lord.” This is interpretive wording, not verbatim NKJV.
**Source:** [13]
## Probable allusions requiring Bryan's confirmation
### Matthew 7:7
**Draft use:** “Buscad y hallaréis (Seek and you will find)” in Chapter 3 and “Seek, and you will find” in Calendar Day 2.
**NKJV text:**
> Ask, and it will be given to you; seek, and you will find; knock, and it will be opened to you.
**Status:** Matthew 7:7 is the probable source, but the source material does not state the reference. Confirm the intended reference with Bryan before adding it to the body as a Scripture citation.
**Source:** [14]
### John 5:19
**Draft use:** “I don't do anything but I see my father do it. I don't say anything but I hear my father say it.”
**NKJV text:**
> Then Jesus answered and said to them, “Most assuredly, I say to you, the Son can do nothing of Himself, but what He sees the Father do; for whatever He does, the Son also does in like manner.
**Status:** John 5:19 is a probable allusion to the source teaching's wording, but the source material does not state the reference and the wording is not verbatim NKJV. Confirm with Bryan before attaching the reference or replacing the source quotation.
**Source:** [15]
## Editorial actions still required
1. Bryan should confirm whether the body should retain the source renderings, replace them with exact NKJV quotations, or show both side by side.
2. Any replacement of source wording is an editorial change and must remain visible for Bryan's review.
3. Add explicit NKJV labels to body quotations only after the wording has been reconciled with this register.
4. Keep Scripture verification separate from safeguarding approval. In particular, the Proverbs passages and the manuscript's switch, rod, blanket-training, and correction-room material require independent safeguarding, developmental, legal, theological, and pastoral review.
5. Confirm all probable allusions—especially Matthew 7:7 and John 5:19—with Bryan before treating them as intended references.
## Sources
[1] https://www.biblegateway.com/passage/?search=1%20Timothy%201%3A5&version=NKJV
[2] https://www.biblegateway.com/passage/?search=Proverbs%2014%3A26&version=NKJV
[3] https://www.biblegateway.com/passage/?search=Matthew%207%3A13&version=NKJV
[4] https://www.biblegateway.com/passage/?search=Acts%2013%3A36&version=NKJV
[5] https://www.biblegateway.com/passage/?search=Proverbs%2022%3A6&version=NKJV
[6] https://www.biblegateway.com/passage/?search=Romans%2012%3A2&version=NKJV
[7] https://www.biblegateway.com/passage/?search=Proverbs%2022%3A15&version=NKJV
[8] https://www.biblegateway.com/passage/?search=Proverbs%2013%3A24&version=NKJV
[9] https://www.biblegateway.com/passage/?search=Proverbs%2019%3A18&version=NKJV
[10] https://www.biblegateway.com/passage/?search=Proverbs%2029%3A15&version=NKJV
[11] https://www.biblegateway.com/passage/?search=Proverbs%2029%3A17&version=NKJV
[12] https://www.biblegateway.com/passage/?search=Ephesians%204%3A26&version=NKJV
[13] https://www.biblegateway.com/passage/?search=Ephesians%206%3A4&version=NKJV
[14] https://www.biblegateway.com/passage/?search=Matthew%207%3A7&version=NKJV
[15] https://www.biblegateway.com/passage/?search=John%205%3A19&version=NKJV
@@ -0,0 +1,716 @@
---
title: "The Pattern of Covenant Parenting — Parent Review Edition"
status: parent-review-edition
source: "NotebookLM book-style synthesis from audio recordings of Bryan Hickman's teaching sessions"
derived_from: "[[covenant_parenting_bryan_hickman]]"
tags:
- parenting
- covenant-parenting
- church-teaching
- family
- discipleship
- Bryan-Hickman
- book-draft
- parent-review
---
<!-- KEEP_PARENT_OPENING -->
<!-- EDITORIAL COMMENT: Chapter 0 was reshaped into a continuous parent-facing introduction. The original labeled themes and review lists remain represented in the later chapters and editorial metadata; this introduction now carries the book's central movement as prose. -->
<!-- EDITORIAL COMMENT: Present this as an unnumbered Introduction in the parent-facing edition. Retain the archival source identity separately if Chapter 0 is needed for traceability. -->
## Chapter 0: Introduction
Parenting is often reduced to the question of how to make a child behave. We ask how to stop the arguing, correct the disobedience, establish better habits, or get through the next difficult stage. Those questions matter, but they are not the whole purpose of training a child. The deeper work is to form a heart that can grow in love, a clear conscience, and sincere faith. As 1 Timothy 1:5 (NKJV) says, "The goal of our instruction is love from a pure heart, a good conscience, and a sincere faith." The hope is not simply to produce outward compliance. It is to raise sons and daughters who can come to know their heavenly Father, receive their identity from Him, and walk faithfully in the purpose He gives them.
That kind of formation begins with the parents. Children learn far more from what they see in us than from what we say to them. They watch how we respond when we are tired, disappointed, interrupted, or afraid. They notice whether our words agree with our lives. In the early years, a parent becomes a child's first picture of authority, love, protection, and security. This makes parenting a form of discipleship, but it also makes it a form of parent training. Before we can ask our children to listen, we have to become people who listen to the Lord. Before we can ask for self-control, we have to let God deal with our anger. Before we can lead a child toward healing, we have to be willing to bring our own wounds into His light.
The model for this surrendered life is Jesus. His life shows what it looks like to depend on the Father rather than act from self-protection or self-importance: "I don't do anything but I see my father do it. I don't say anything but I hear my father say it." The point is not to make parents flawless. It is to help us become honest, obedient, teachable people whose children can see us turning toward God when we fail. Proverbs 14:26 (NKJV) says, "In the reverent fear of the Lord, there is strong confidence, and his children will always have a place of refuge." A child's security grows when the adults around them are learning where true security comes from.
That refuge is built inside the atmosphere of the home. Parenting does not happen in isolation from marriage, family rhythms, work, money, or the condition of the parents' hearts. A peaceful household requires husband and wife to pursue unity, repair conflict, and refuse to make their children carry the weight of adult disagreement. It requires daily deposits of appreciation, patient listening, and the humility to apologize when we have dishonored one another. It also requires practical care: noticing when a spouse is exhausted, stepping in when help is needed, and protecting the home from becoming a place where pressure is constantly passed down to the children. The thirty-day breakfast covenant and the command in Ephesians 4:26 (NKJV) not to let the sun go down on anger belong to this larger work of building peace, not to a formula for pretending that conflict never exists.
Within that atmosphere, parents can establish boundaries without making fear the center of the relationship. Children need direction. They need to know what is safe, what is expected, and what belongs outside the life of the family. Jesus' warning about the broad and narrow ways in Matthew 7:13–14 (NKJV) gives this work a larger frame. Training means helping children learn to listen, to turn away from harmful influences, and to practice what is good until wisdom becomes part of their own character. When a child disobeys, the goal must be restoration rather than humiliation. A parent who is angry or out of control should pause rather than use discipline to release frustration. Correction should protect the child's dignity, leave room for truth and disclosure, and lead the family back toward calm, belonging, and trust. The practical questions of boundaries, correction, and safety require care, patience, and age-appropriate wisdom; they should never be separated from love.
This formation takes place in ordinary life. It happens while parents are deciding what enters the home through television, phones, tablets, and other media. It happens when a mother or father chooses presence over constant distraction, when a family shares work instead of treating chores as an interruption, and when children are welcomed into the real responsibilities of household life. The goal is not to create an artificial world where children never encounter difficulty. It is to give them a secure place from which they can learn how to meet difficulty with faith, responsibility, and compassion. A boundary can be an expression of care. A shared task can become a lesson in service. A quiet conversation can shape a child's understanding of God more deeply than a lecture.
The book also looks beyond the immediate moment. Parents are not only managing today's behavior; they are building on behalf of people they may never meet. This is the long view behind Proverbs 22:6 (NKJV): "Train up a child in the way he should go, and even when he grows old, he will not abandon it." The healing we pursue, the patterns we refuse to pass on, the promises we keep, and the way we order our lives all become part of the foundation our children inherit. This is the idea of generational advancement: children should not have to begin by fighting every battle their parents were given grace to face. They will have their own struggles and their own relationship with God, but they can stand on a foundation of greater security, honesty, and wisdom. That is why parental humility matters. We can tell our children that we are still growing, that the Lord is still dealing with us, and that our imperfections do not cancel our responsibility to keep moving toward Him.
This vision also changes how we think about the place of family in the wider work of the church. God comes first, family cannot be sacrificed to public ministry, and ministry must flow from a life that is being lived truthfully at home. Parents need the wisdom of mature and trustworthy people around them, and children need safe access to help beyond their parents when they need it. A covenant family is not an isolated family. It is a household learning to receive correction, offer hospitality, repair what has been damaged, and make room for the work God is doing across generations.
The pages that follow develop these convictions through the realities of family life: how parents model the Father, how a home learns to respond to conflict, how husband and wife protect the atmosphere of the household, how families guard the influences shaping their children, how ordinary work and presence become part of discipleship, and how parents can rebuild trust when they are beginning late or carrying a complicated history. The final reflections and exercises are meant to move these ideas out of the abstract and into conversations, prayers, decisions, and small daily practices. Covenant parenting is not a checklist that proves we are doing everything right. It is a living relationship, walked out before the Lord and before our children, one faithful response at a time.
---
<!-- EDITORIAL COMMENT: This chapter supplies the theological and relational foundation. Consider adding a short, independently reviewed help-and-safety page before the practical correction material later in the sequence. -->
## Chapter 1: The Foundations of Modeling & Multi-Generational Vision
The true purpose of child training is not to construct a superficial set of behavioral modifications or to simply "tweak" outward conduct. It is to lay a foundational, structural establishment. Specifically, the ultimate goal is to raise children who can transition cleanly into their own spiritual inheritance. As the scriptures state in 1 Timothy 1:5 (NKJV):
> "The goal of our instruction is love from a pure heart, a good conscience, and a sincere faith."
Our target is to have children who seamlessly step into a personal relationship with their heavenly Father, and in that place find their Kingdom identity and faithfully walk out their Kingdom purpose in this generation. [7]
![The covenant parenting pathway](assets/covenant-parenting-pathway.svg)
The transition from childhood through adolescence is intended by God to be a seamless, direct journey into relationship with the Father [17, 18]. Society has largely convinced itself that teenagers must undergo a painful, mandatory phase of rebellion simply because they do not know what else to do [17]. However, this expectation is a deception that lowers our standards and shapes our actions toward failure [17]. God's design is for children to move directly from childhood into a vibrant, personal relationship with Him [17, 18].
To understand how to train children, we must first look at Jesus. Jesus did not come to earth merely to perform miracles or display His divinity; rather, He came to model what a son can do when entirely dependent upon his Father [11, 12]. He walked out His earthly life as a man, not as God, to demonstrate that obedience is fully possible for a heart surrendered to the Father [12]. He lived by a simple, profound standard:
> "I don't do anything but I see my father do it. I don't say anything but I hear my father say it." [12, 23]
Just as Jesus modeled sonship for us, parents are called to model the Father to their children [12]. In the eyes of a young child, the parent is effectively "God"—the ultimate representation of authority, love, and security in their life [15]. This is a sobering reality [13, 15]. Parents have both the privilege and the solemn responsibility to demonstrate face-to-face what a loving Father and Mother are like until the child reaches an age of spiritual understanding where that devotion is transitioned to the Lord [15].
The single most powerful force that will affect your children is for you, the parent, to become an obedient son of God [14]. Because parents are always modeling, every reaction—even after a hard day when we are on edge—sets an example [13]. We cannot expect our children to walk in instant obedience to our voice if we ourselves are not walking in instant obedience to the voice of our heavenly Father [13].
To parent effectively, we must reject short-sightedness and adopt a multi-generational vision [8, 9, 10]. We see the danger of passivity illustrated in the history of the Church. During the "Jesus movement" of the 1970s, a wave of believers dropped out of school and stopped preparing for the future under the premise that "Jesus is coming back" [9]. Because they failed to build for the next generation, the world quickly stepped in and took over every major institution [9].
Conversely, if we believe that the Kingdom will be fully established only in our lifetime, we risk failing to prepare our children for the long-term work [9]. While we must always look for the "end suddenly," we must build and train our children as if the work will span multiple generations [9, 10]. We are not going to build it all in our lifetime; our task is to raise up the little ones placed in our hands so that they will be faithful to God's purposes in their own generation [7]. As Acts 13:36 (NKJV) records of King David:
> "For David, after he had served God's purposes in his own generation, fell asleep and was laid among his fathers and underwent decay." [7]
Because children copy what we model, the child training process is, in reality, a parent training process [15, 128]. If we carry unresolved brokenness, anger, or fear, we will pass those patterns down [15, 46]. Allowing the Lord to heal us requires deep humility and submission, but it is the greatest gift we can offer our children [15]. As we grow in our reverence and fear of the Lord, we gain a strong confidence that creates a literal shield of security and a place of refuge for our households [16]. This is beautifully promised in Proverbs 14:26 (NKJV):
> "In the reverent fear of the Lord, there is strong confidence, and his children will always have a place of refuge." [16]
When we allow the Lord to deal with our own deep-seated insecurities, we achieve what is called "generational advancement" [46, 47, 161, 162]. Children who are raised in an atmosphere of genuine spiritual security do not have to fight the same battles, wounds, or broken family dynamics that their parents had to overcome [46, 47, 162]. Instead, they get to stand on their parents' advancements and leap forward into their own destiny [46, 162]. This establishes the foundation for the lifelong training command found in Proverbs 22:6 (NKJV):
> "Train up a child in the way that he should go, and even when he grows old, he will not abandon it." [16]
### Themes captured for future book development
- The intended goal of training is a child's personal relationship with the heavenly Father, Kingdom identity, and Kingdom purpose—not merely compliant behavior.
- Adolescence is presented as a potential continuation of relationship with God rather than an inevitably rebellious stage.
- Jesus is presented as the ultimate model of dependent sonship and surrendered obedience.
- Parents model constantly; their reactions under pressure are formative just as much as their deliberate instruction.
- Parent healing and obedience are central to breaking the transmission of fear, anger, insecurity, and family brokenness.
- Multi-generational parenting requires building for a future beyond the parents' own lifetime.
- "Generational advancement" describes children standing on the spiritual and relational progress of their parents.
- The chapter connects parental modeling, healing, refuge, and lifelong formation with Proverbs 22:6 (NKJV).
### Editorial and pastoral review flags
- Verify the Scripture quotations and references, including the intended Bible translations.
- Preserve the distinction between the teaching's theological claims and later editorial commentary.
- The historical claim concerning the 1970s Jesus movement should be sourced or qualified if included in a published edition.
- The claim that rebellion is not an inevitable feature of adolescence should be presented pastorally and carefully, acknowledging individual development, temperament, disability, trauma, and family context.
- Clarify the phrase "until the child reaches an age of spiritual understanding" and how the teaching defines that transition.
---
<!-- EDITORIAL COMMENT: Reordering option: place the parental-unity/household-atmosphere chapter before correction, or add a transition explaining why correction is introduced at this point. -->
### Reflection and Action
#### Heart-level reflections
**Dependent Sonship:** Jesus modeled a life of complete dependence on His Father ("I don't do anything but I see my father do it" [9]). In what areas of your daily life are you struggling to walk in instant obedience to your Heavenly Father? How might this struggle affect your children's ability to obey your voice [11]?
**The Power of the Model:** In the eyes of a young child, you represent God—His authority, His love, and His safety [10, 62]. When you come home on edge or exhausted, what kind of father or mother are you modeling [11, 60]?
**Multi-Generational Legacy:** Are there areas where you have fallen into passive parenting or short-sightedness [11, 12]? If you parented with a vision that extended three generations deep, what would you change about your household today [12, 55]?
#### Action steps
**The Refuge Audit:** Identify one major source of fear, anger, or insecurity in your own heart [13]. Set aside a specific time to bring this before the Lord, asking Him to deal with the root of this brokenness [13]. Re-read Proverbs 14:26 (NKJV):
> "In the reverent fear of the Lord, there is strong confidence, and his children will always have a place of refuge." [13]
Write down how you will yield to His healing hand this week to make your home a stronger refuge [13, 62].
<!-- EDITORIAL COMMENT: Rewrite before use with parents. Replace technique-oriented physical-discipline exercises with calm de-escalation, supervision, repair, boundaries, and help-seeking practices after professional review. -->
## Chapter 2: Redemptive Correction: Straightening the Path with Love
### "Narrowing Up" vs. The Demand for "Experiences"
Scripture defines training a child through the Hebrew lens of "dedicating, disciplining, narrowing up, or choking out" [18]. It means to straighten a child's path, protecting their outlook, behavior, ideals, views, and influences from being overwhelmed by the weeds of the world [18]. This directly contradicts modern humanistic reasoning, which insists children must be given broad "experiences" to discover themselves [19]. This humanistic philosophy is a widening of the way, which the Bible explicitly warns against in Matthew 7:13 (NKJV):
> "Enter through the narrow gate, for the gate is wide and the way is broad that leads to destruction, and there are many who enter through it." [19]
Parents are given the responsibility to shape their children's minds and protect them from worldly conformity [18, 21]. As Romans 12:2 (NKJV) charges us:
> "And do not be conformed to this world, but be transformed by the renewing of your mind, so that you may prove what the will of God is, that which is good and acceptable and perfect." [21]
The renewal of the child's mind is a task delegated directly to the parents [21, 22]. It requires parents to actively narrow up their child's path, choosing carefully what enters their hearts and minds rather than letting them wander broad roads of secular influence [18, 22].
### Debunking the Myth of Adolescent Rebellion
A cornerstone of modern parenting is the belief that teenagers must naturally go through a painful, dramatic season of rebellion [17]. We are told this is just a normal developmental phase [17]. However, this expectation is a deceptive lie that shapes our thoughts and actions toward failure [17].
In God's design, there is no mandatory period of rebellion [17]. The scriptural transition from childhood to maturity is intended to be a seamless progression directly into a personal relationship with the Father [17, 18]. When boundaries are clearly laid and maintained with love, teenagers do not have to wander into rebellion; they can walk straight from parental guidance into divine devotion [17, 18].
<!-- EDITORIAL COMMENT: Major rewrite required for any parent-facing edition. Preserve this as source material, but place current safeguarding guidance and non-violent alternatives before any practical exercise. -->
### The Mechanics of Correction: The Switch and the Loving Hand
To remove the foolishness that is naturally bound up in a young heart, God has provided specific, loving tools [23, 24]. As Proverbs 22:15 (NKJV) states:
> "Foolishness is bound up in the heart of a child. The rod of discipline will remove it far from him." [24]
Scripture is rich with wisdom regarding the diligent application of this rod of reproof:
- **Proverbs 13:24 (NKJV):** "He who withholds the rod hates his son, but he who loves him disciplines him diligently." [25]
- **Proverbs 19:18 (NKJV):** "Discipline while there's hope, and do not desire his death." [25]
- **Proverbs 29:15 (NKJV):** "The rod of reproof gives wisdom, but a child who gets his own way brings shame to his mother." [25]
- **Proverbs 29:17 (NKJV):** "Correct your son and he will give you comfort. He will also delight your soul." [25, 26]
While humanism rejects these commands or distorts them into abuse, biblical correction is defined by tenderness and absolute control [26, 28, 29]. In our home, we established a strict physical boundary: our hands were made exclusively for holding, hugging, and expressing love [26, 29, 31]. We never used our hands to strike a child, nor did we use heavy, rigid tools like belts or wooden spoons, which can cause physical harm or anger [26].
Instead, the biblical "rod" refers to a tender, limber shoot or reed—such as a small lilac switch (roughly a quarter of an inch or smaller) with shaved bumps [27, 117]. This tool is designed to produce a quick, harmless sting on the bottom or thigh that instantly captures the child's attention without ever causing physical damage [26, 27, 118].
Crucially, this physical correction serves a redemptive spiritual purpose: it completely removes guilt and shame [26]. When a child is corrected, the spiritual debt of their disobedience is paid instantly [26, 30]. There is no lingering condemnation, no standing in corners, and no emotional isolation [26, 29, 30]. Once corrected, the child is immediately embraced, loved, and restored to perfect right standing within the home [26, 29, 30].
### The Rule of Calmness: Correcting Without Anger
Scripture issues a vital warning to fathers in Ephesians 6:4 (NKJV):
> "Fathers, do not provoke your children to anger, but bring them up in the discipline and instruction of the Lord." [22]
A parent must never, under any circumstance, correct a child while feeling angry, agitated, or on edge [26, 29, 53, 54]. Correcting in anger is not biblical discipline; it is an expression of the parent's lack of self-control [54]. It models anger to the child, which violates our primary calling as models of the Father [54].
If you find yourself becoming agitated or losing your emotional composure during a correction, you must stop immediately [29, 54]. It is far better to let an act of disobedience go uncorrected in that moment than to correct your child in anger [54]. The parent must first go before the Lord, find peace, and handle the situation only when they can do so with a calm voice, a peaceful facial expression, and a tender heart [29, 52, 53, 54].
<!-- EDITORIAL COMMENT: Clarify that privacy protects dignity but never overrides supervision, accountability, a child's right to disclose harm, or access to independent help. -->
### The Correction Room: Restoring Dignity in Private
To preserve a child's security and dignity, correction must never be a public spectacle [116]. It should not be done in front of guests, siblings, or in public places [34, 116].
Instead, correction should take place in a private, designated area—such as a bedroom or bathroom [29, 116]. This private environment—the "correction room"—is a place of calm, reassurance, and ultimate security [29, 116]. By keeping correction private, we honor our children, shield them from public embarrassment, and ensure that the process remains a tender, focused interaction of restoration between parent and child [29, 116].
### Themes captured for future book development
- "Narrowing up" is presented as intentional formation and protection of a child's heart, mind, influences, ideals, and direction.
- The chapter contrasts parental formation with a philosophy of broad, unbounded experience and self-discovery.
- Adolescent rebellion is presented as neither inevitable nor divinely required.
- Correction is framed as a redemptive process intended to remove shame, restore relationship, and return the child to belonging within the household.
- The source teaching emphasizes calmness, self-control, privacy, and immediate reassurance during correction.
- The chapter distinguishes the source's preferred correction tool from striking with hands or using heavy, rigid objects.
- Private correction is connected to the preservation of a child's dignity and security.
### Editorial, pastoral, developmental, and safeguarding review
- Verify all Scripture references, wording, and translation choices before publication.
- The teaching's interpretation of the Hebrew concept translated as "train" and its use of terms such as "narrowing up" or "choking out" should be checked against reputable Hebrew lexicons and the original recording context.
- The claims about adolescent rebellion, humanism, and the history of parenting should be framed as the speaker's theological and cultural argument rather than presented as settled developmental or historical fact.
- The physical-discipline recommendations require careful safeguarding review before any public distribution. Do not present a thin implement, a specific body location, or a claimed "harmless" sting as universally safe; laws, professional guidance, child age, disability, trauma history, and individual circumstances vary.
- For a parent-facing publication, prioritize non-violent, developmentally appropriate correction and include clear guidance for pausing, de-escalating, seeking help, and protecting children from injury or fear.
- The phrase "spiritual debt ... paid instantly" should be examined theologically and pastorally so that children are not taught that physical pain is required to obtain forgiveness, belonging, or restored relationship.
- Clarify what safeguards make a private correction setting genuinely safe and accountable, especially when the child is isolated with an adult.
---
<!-- EDITORIAL COMMENT: This chapter may be more effective immediately after the Introduction because it defines the relational atmosphere in which later parenting practices occur. -->
### Reflection and Action
#### Heart-level reflections
**The Rule of Calmness:** Do you ever correct your children out of irritation, frustration, or a desire for convenience [22, 101]? What is the difference between biblical discipline (which restores) and humanistic punishment (which lingers) [21, 76]?
**Removing Shame:** Does correction in your home leave a lingering shadow of guilt or emotional distance, or does it result in immediate restoration, hugs, and perfect right standing [21, 76, 79]?
#### Action steps
**The Hand Consecration:** Make a solemn covenant with your spouse today that your hands are strictly reserved for holding, hugging, and expressing love [20, 73]. Remove all wooden spoons, belts, and other rigid implements from your parenting toolbox [20, 73].
**Setting Up the "Correction Room":** Identify a private room in your house (a bedroom or bathroom) that will serve as the private place of correction [23, 163]. Place a tender, limber lilac switch (smooth, with bumps shaved off) in that designated room [20, 164]. Agree to never correct your child in front of guests, siblings, or in public [23, 163].
**Practice Stopping:** If you feel your blood pressure rising during a correction, commit to saying: "I am not in a position to handle this right now." Ask your spouse to cover for you, or find a controlled situation before the Lord until you can speak in a calm, tender voice [22, 78, 101].
## Chapter 3: Parental Unity & the Atmosphere of the Home
<!-- EDITORIAL COMMENT: Rewrite the language about children "exploiting" cracks so ordinary questions, disagreement, disability-related needs, and safety disclosures are not portrayed as manipulation. Keep the consistency principle while adding room for clarification. -->
### The Principle of a Unified Front
A central pillar of a peaceful home is the absolute, seamless unity between husband and wife [159]. Parents must understand that children are highly astute observers; they are experts at sensing any lack of alignment and will naturally seek to exploit any crack to sow division or pit one parent against the other [159, 164].
To prevent this, parents must maintain a completely united front [159]. In our home, we established a simple but powerful protocol. Whenever a child approached one parent asking for a treat, more television time, or a specific permission, the immediate response was always:
> "What did Dad say?" or "What did Mom say?" [168, 169]
If the other parent had already given an answer, the discussion was instantly over [169]. The parent receiving the second appeal would simply state, "Well, there is your answer," ensuring that the child's attempt to bypass authority was met with a solid wall of parental agreement [169]. This level of consistency and predictability is not a rigid, legalistic exercise; rather, it provides children with an immense sense of security because they know exactly where the boundaries stand [47, 62, 185].
### Private Alignment over Public Disagreements
Maintaining a united front means that parents must make a covenant never to disagree, correct, or expose each other's faults in front of their children [162, 163, 164]. Doing so publicizes division and teaches children how to manipulate their parents, which ultimately tears down the spiritual authority of the home [164].
Inevitably, there will be moments when one parent observes their spouse making a decision or handling a disciplinary situation in a way they wouldn't have chosen [169, 170]. The natural temptation is to immediately step in and express "wisdom" or correct the spouse on the spot [170]. This is a critical mistake [170].
When you feel that irritation rise, you must first deal with your own internal reaction [170]. In front of the children, you must completely support your spouse's decision [162, 163]. Any adjustments, differing views, or scale of discipline must be discussed strictly in private, behind closed doors [162]. In our home, if Deanna handled a situation and I disagreed with the method, we would discuss it privately later so that we could align our hearts before the Lord, but the child always saw us standing as one [55, 162].
### Healing the Crack: Humility and Restoration
Because parents are human, there will be times when they fail to maintain this standard and inadvertently display division or disrespect in front of the child [167]. When this happens, it must be corrected immediately in the spirit of humility [164, 166].
First, the parents must align privately [164]. The offending parent should go to their spouse and say:
> "Cariño, lo siento. I realize that I made you look bad in front of the child, and I repent." [164]
Second, depending on the situation, it is often necessary to go directly to the child to model genuine repentance and restore the standard of honor [164, 165]:
> "What I said to you about your mother/father was wrong. The Lord is working in my heart, and I cannot make an excuse for what I did. I want to apologize to you for deshonrar (dishonoring) them in front of you, because they deserve honor." [165]
There is extraordinary, transformative power when a parent is willing to be authentic and humble before their children [166]. It models a soft, teachable heart and teaches children how to walk out repentance in their own lives [166].
![A family rhythm of humility, repair, and peace](assets/family-rhythm-of-repair.svg)
### Atmosphere of Peace and Order
The physical environment of the home directly affects its spiritual atmosphere [157, 159]. A clean, orderly house is a powerful catalyst for a home filled with peace [159]. When a mother takes joy and satisfaction in nurturing and keeping the home, and the husband actively notices, appreciates, and verbalizes his gratitude, it weaves a beautiful bond of peace over the entire household [159, 160].
This atmosphere also requires parents to be highly sensitive to one another's limits [160]. Parenting is a demanding, daily labor, and there are times when "too much is too much" and one spouse is exhausted or on edge [143, 160]. In those moments of high stress, the other spouse must be ready to step in, "take the ball," and cover for them [48, 160]. This mutual support ensures that correction is never administered out of exhaustion or emotional agitation [48, 71, 185].
### Nurturing the Marriage: Horizontal and Vertical Communication
We must recognize that child training is not an isolated task; it is completely interwoven with every other area of family life, particularly the marriage relationship [157, 158]. If there is no peace between husband and wife, it is impossible to have lasting peace in training the children [158].
Healthy communication requires us to stop simply waiting for our turn to speak so we can make our own point, and instead learn to truly listen to one another's hearts [171, 172]. This communication must be intentionally nurtured [173].
To build this horizontal connection, we must make constant, deliberate "positive deposits" into our spouse's emotional bank account [181, 182]. As the proverb of the household says, if you put a coin in the piggy bank every single day, it will eventually be filled [182].
A highly practical and transformative exercise for married couples is to commit to a 30-day breakfast covenant [180]. For thirty consecutive days, sit down together for breakfast, and each day, make a specific, intentional positive deposit by telling your spouse one thing you sincerely estimate and appreciate about them [180, 181].
For husbands, this requires stepping away from vague, general statements like "You know I love you" or "You look good," and instead sharing specific, particular details of appreciation [183]. For wives, it means actively finding ways to make their husbands feel proud and respected, rather than assuming they only need to receive appreciation without giving it [183, 184]. This intentional focus changes the entire climate of the home because, as Scripture principles teach:
> "Buscad y hallaréis (Seek and you will find)." [181]
If you look for faults, you will surely find them; but if you intentionally seek the good in your spouse, you will find it and multiply it [181].
<!-- EDITORIAL COMMENT: Reframe this as a commitment to repair rather than a demand for immediate resolution. Add exceptions for unsafe conflict, coercive control, abuse, exhaustion, and the need for a healthy time-out. -->
### The Covenant Rule: Never Go to Bed Angry
To safeguard the home's atmosphere, couples must establish a firm covenant line that they resolve never to cross [180]. Chief among these is the scriptural command:
> "...do not let the sun go down on your anger." [180]
In our thirty-seven years of marriage, we decided we would never go to sleep angry with one another [174, 177]. If a disagreement arose, we would take a "time out" to pray individually, allowing the Lord to deal with our own hearts first [175]. Then, we would return, ask for forgiveness where we had failed, and pray together [178]. We did not always agree on the specific point of contention immediately, but we agreed on God and gave Him the place of preeminence in our marriage [178].
As a husband, the Lord taught me that I must function as the priest of my home [177]. When my wife made a mistake or did something wrong, the Lord would use it to deal with me first, instructing me to carry the burden, be silent, and go to the cross for her just as Christ did for the Church [177]. When both husband and wife surrender their right to be right and prioritize the covenant, they establish a secure spiritual foundation that their children will naturally inherit, creating a magnificent generational advancement [8, 178, 179].
### Themes captured for future book development
- Parental unity is presented as a source of security, predictability, and authority within the home.
- The chapter emphasizes checking with the other parent rather than allowing children to bypass a previously given answer.
- Disagreements about decisions or discipline are to be handled privately rather than displayed before the children.
- When parents fail publicly, immediate humility, apology, and restoration are presented as a model of repentance.
- Household order, appreciation, mutual awareness, and practical support are connected to a peaceful atmosphere.
- Marriage communication is framed as intentional listening and the repeated making of positive relational deposits.
- The 30-day breakfast covenant is presented as a concrete practice of daily appreciation.
- The command not to let the sun go down on anger is applied as a marriage covenant of prayer, forgiveness, and reconciliation.
- The chapter presents parental surrender, marital covenant, and generational advancement as closely connected.
### Editorial and pastoral review flags
- Verify all Scripture references, quotations, translations, and the Spanish phrase "Buscad y hallaréis" before publication.
- Preserve the distinction between the teaching's source claims and later editorial interpretation.
- Clarify the difference between healthy parental unity and coercive control. A united front should not require a parent to conceal abuse, unsafe conduct, serious error, or a child's legitimate disclosure.
- Children should be able to speak safely with either parent. The "What did Dad/Mom say?" practice should not be used to shut down questions, conceal a mistake, or prevent a child from reporting harm.
- The instruction to support a spouse publicly and resolve disagreements privately needs explicit safeguarding exceptions for abuse, intimidation, coercive control, threats, or unsafe discipline. In those situations, protecting the child and seeking qualified help takes priority over preserving appearances.
- The chapter's gendered descriptions of mothers nurturing the home, husbands leading as "priest," and wives making husbands feel proud should be identified as the speaker's marital framework rather than treated as the only faithful model for every family.
- "Never go to bed angry" should be presented with room for healthy time-outs, sleep, boundaries, and professional help; immediate resolution is not always safe or wise during escalation.
- Clarify the meaning, origin, and practical structure of the 30-day breakfast covenant when the original recording context is available.
---
<!-- EDITORIAL COMMENT: Check the chapter and first subsection titles against the recording. "Textile Boundaries" may be an accidental or context-dependent term; preserve it here but consider a clearer reader-facing title. -->
### Reflection and Action
#### Heart-level reflections
**The Cracks of Division:** Children are astute observers who look for alignment [24]. Can your children find any "cracks" between you and your spouse to get a different answer [24, 189]?
**Private Alignment:** Have you fallen into the trap of correcting, undermining, or arguing with your spouse in front of the kids [26, 193]? How can you build a stronger habit of waiting until you are behind closed doors to resolve parenting differences [26, 27, 192]?
#### Action steps
**The "What Did They Say?" Protocol:** Practice the immediate gatekeeping response. Whenever a child asks for permission or a treat, always ask: "What did Dad say?" or "What did Mom say?" [24, 25, 198]. If the other spouse has given an answer, the discussion is permanently closed [25, 199].
**The 30-Day Breakfast Covenant:** Set your alarm 30 minutes earlier. Sit down together for breakfast every day for the next 30 days [32, 210]. Each morning, share one specific, particular detail that you sincerely estimate and appreciate about your spouse [32, 33, 211, 213]. Focus on finding the good, and watch the atmosphere of your marriage and home transform [34, 211].
**The Sunset Covenant:** Commit to the rule of Ephesians 4:26 (NKJV):
> "...do not let the sun go down on your anger." [34, 210]
Agree that no matter the disagreement, you will pray individually, come together, ask for forgiveness, and pray together before sleeping [34, 208].
<!-- EDITORIAL COMMENT: Consider placing media, presence, and shared-work exercises before any infant-boundary discussion, moving from broadly applicable relational practices to age-specific material. -->
## Chapter 4: Guarding Influences & Practical Daily Wisdom
<!-- EDITORIAL COMMENT: Consider renaming this section "Early Boundaries and Infant Safety." The current wording is memorable but unclear, and the material needs developmental and safeguarding rewriting before publication. -->
### Textile Boundaries & Early Training
To train a child to listen to their parents' voices, training must begin in infancy with simple, knowable boundaries. Rather than overwhelming a toddler with a laundry list of hundreds of rules that they are incapable of following, parents should establish a few select, physical boundaries [72, 73].
A highly practical and successful method for this is blanket training [73]. Spreading a small blanket on the floor, the parent instructs the infant (typically starting around six to nine months of age):
> "I don't want you going off of that." [73]
Inevitably, the child's curiosity or old nature will lead them to test the boundary and attempt to crawl off [73, 79, 80]. In that moment, the parent administers a light, instant correction—such as a gentle tap on the hand—and places them back on the blanket, reinforcing the instruction [73]. Within just a few repetitions, the infant learns to associate their disobedience with the immediate correction and willingly remains within the border [73].
The goal of this training is not merely to restrict the child's movement or to protect household furniture, such as a coffee table [73]. Rather, it is to train the child to listen to and obey the parent's voice [73]. These physical boundaries provide children with immense security [74]. Just as the Lord establishes boundaries for our lives to keep us secure, clear boundaries in the home let children know exactly what is acceptable, preventing a frantic, heavily policed household and fostering an environment of deep spiritual peace [73, 74, 112].
### Guarding the Mind: "Tell-a-Vision" and Media
In a modern world saturated with technology, parents must exercise extreme vigilance regarding television, tablets, and media [115, 116]. The world's media system is highly intentional; it is designed with specific "channels" and "programming" to literally "tell your vision"—shaping the ideals, desires, and minds of children away from the Kingdom of God [116].
Allowing a television or a tablet to act as a surrogate parent is a dangerous convenience [116]. It acts as a deliberate distraction designed by the adversary to draw parents away from their greatest earthly blessing and responsibility: actively training their children [116]. While completely avoiding media in today's society is a challenge, limiting it strictly produces extraordinary, healthy fruit [115, 116]. By closing the door to secular programming, we prevent the enemy from exploiting gaps in our children's security and instead keep their minds pure and focused on the atmosphere of the home [105, 116].
<!-- EDITORIAL COMMENT: Separate the transferable principle of presence and shared responsibility from the speaker's gendered household model. Add examples for single parents, dual-income families, disability, illness, childcare, and economic necessity. -->
### Nurturing, Presence, and Owning Your Time
Effective child training cannot be outsourced; it is a precious gift and responsibility given directly by God to the parents [114, 118]. This training requires physical and mental presence [52]. You cannot train up a child in the way they should go if you are not there to walk beside them [52, 118].
This truth carries profound implications for the roles of both the mother and the father:
#### The Mother as the Nurturer
A mother's primary calling in most circumstances is to stay home, keeping the house and nurturing the family [117, 166]. In this sacred role, she fulfills her God-given ability to multiply [117, 118]. When a husband brings home a paycheck, the wife multiplies it into food and a meal; when provided a house, she multiplies it into a warm, peaceful home [118]. The work a mother does in the home far surpasses any secular career or paycheck [117, 118, 166]. Husbands must actively celebrate, honor, and protect this role rather than allowing the diabolical wisdom of the world to demean it [117, 118, 166].
#### The Father as the Provider of Time
For a mother to stay home, the father must be willing to step outside of the conventional worldly system to prioritize his family [120]. The Lord gave a specific word of wisdom: "Own your time." [120]. Fathers must seek the Lord for creative strategies to free up their schedules so they can be available, present parents [120]. This may mean starting a simple business or adjusting financial expectations to avoid the diabolical trap of Egypt, which demands two incomes and keeps parents too busy making bricks to build the family altar [117, 119, 120].
### Integrating Children into Daily Work
A common mistake parents make is separating their daily lives into strict categories of "work" (which is treated as a burden to be done alone) and "fun" (which is treated as the only desirable activity) [157]. While it is often faster and easier for a parent to paint a wall, do the dishes, or fold the laundry by themselves, this misses a critical opportunity for training [157].
Parents should actively integrate their children into all the affairs of daily life [115, 157]. Give an eight-year-old a paint roller and teach them how to paint; let the toddlers help push the buttons on the washing machine or play in the sink while doing dishes [157]. When children are included in these tasks, they do not grow up hating work or viewing it as an awful chore [157]. Instead, they learn that work is a natural, joyful expression of family life [157]. Ultimately, children do not need constant, artificial entertainment; they simply want to be with their parents, and sharing in daily labor bonds the family together in purpose [157].
### Themes captured for future book development
- Early training is presented as the establishment of a small number of clear, physical, understandable boundaries rather than an overwhelming list of rules.
- The source teaching uses blanket training as an example of teaching an infant to respond to a parent's voice and remain within a defined boundary.
- Boundaries are framed not only as restrictions but also as sources of security, predictability, and peace.
- Media is presented as a formative influence that can shape a child's imagination, desires, ideals, and worldview.
- The chapter calls parents to intentional presence rather than allowing devices to become surrogate caregivers.
- The teaching presents a home-centered maternal role and a time-owning, financially creative paternal role as its preferred family framework.
- Children are encouraged to participate in ordinary household work so that labor becomes a joyful expression of family life rather than an isolated burden.
- Family presence and shared work are presented as more formative than constant artificial entertainment.
### Editorial, pastoral, developmental, and safeguarding review
- Verify all Scripture references, quotations, translations, and word-study claims before publication.
- Confirm whether the chapter title "Textile Boundaries" is the intended wording or whether it refers specifically to blanket/physical boundaries; preserve the supplied title until the recording context is available.
- The blanket-training example involves an infant, physical correction, and a potentially hazardous environment. Before any parent-facing use, consult current pediatric, child-safety, and safeguarding guidance; do not reproduce the method as a universal instruction or imply that a "gentle tap" is necessary for learning obedience.
- Any early-childhood boundary practice should prioritize supervision, childproofing, developmentally appropriate expectations, non-violent redirection, and prevention of falls or access to unsafe objects. Infant behavior and repeated boundary-testing are normal developmental processes, not proof of an "old nature."
- The language that media is designed by "the adversary," tells a child's vision, or necessarily displaces parental responsibility should be identified as the speaker's theological framing. A final resource should distinguish thoughtful media guidance from fear-based claims and acknowledge educational, relational, accessibility, and family-context differences.
- The claims that child training cannot be outsourced and that mothers should ordinarily stay home should be presented as the teaching's family model, not as a universal measure of faithfulness or parental love. Account for single parents, dual-income households, adoptive and foster families, disability, illness, economic necessity, education, cultural context, and families with different vocational callings.
- The language about two incomes, Egypt, and "making bricks" should be retained as source imagery but carefully contextualized so financial hardship is not treated as a moral failure and so the final book does not impose unsafe or unrealistic economic expectations.
- When children participate in household work, include age-appropriate supervision and safety precautions. Paint, appliances, hot water, sinks, tools, chemicals, ladders, and other household hazards require adult judgment.
- Clarify what "own your time" means in practical, sustainable terms and avoid presenting entrepreneurship or schedule changes as guaranteed solutions for every family.
---
<!-- EDITORIAL COMMENT: Define "generational advancement" in plain language before using it as a repeated organizing term. Distinguish aspiration and inheritance from guarantees so children are not burdened by the metaphor. -->
### Reflection and Action
#### Heart-level reflections
**Surrogate Parenting:** Is television or digital media acting as a surrogate parent or a distraction from your training responsibilities [38, 134]? How is "tell-a-vision" programming shaping the minds and desires of your children away from the Kingdom [38, 134]?
**Owning Your Time:** Fathers, are you caught in the "Egyptian" bricks-and-mortar trap of overworking at the expense of being present to train your children [39, 137]? What adjustments do you need to make to own your time [39, 138]?
#### Action steps
**The Blanket Training Trial:** For infants (6–9 months), lay down a small blanket on the floor [36, 91]. Practice giving the quiet command: "I don't want you going off of that." [37, 91] Gently correct their hand when they test the boundary, and place them back on [37, 91]. Use this tool to train their ears to listen to your voice [37, 91].
**Integrating vs. Separating:** Stop treating household chores as a solo burden. This week, give your child a paint roller, have them help push buttons on the washing machine, or pull up a chair to help wash dishes [40, 175]. Let them participate in your daily life, reinforcing that the family works together with joy [40, 175].
## Chapter 5: Generational Advancement & the Covenant Family
### The Principle of Generational Advancement
A primary objective of the covenant family structure is what we call "generational advancement" [8, 178, 179]. This means that the spiritual victories, emotional healing, and behavioral discipline established by the parents become the floor upon which the children stand [8, 46, 162]. Because children raised in a genuinely secure, peaceful environment do not have to fight the same battles, wounds, or broken family dynamics that their parents had to overcome, they are uniquely positioned to stand on their parents' advancements and leap forward into their own divine destinies [8, 46, 162].
Our children still have their own struggles and areas of life that the Lord must work on [81]. This is a beautiful and necessary reality because everyone needs something in their life that forces them to cry out to the Lord and depend on Him [81]. However, generational advancement ensures that they do not start from scratch; they start from a position of inherited spiritual security [8, 46, 162].
### "Cutting the Penny in Half"
To keep our children from expecting perfection from us—while still keeping them engaged in the process of growth—we taught them a foundational concept [82]. When our daughters were around seven to nine years of age, we sat down for a teaching moment and told them [82]:
> "Girls, listen. Mom and I are going to be able to cut this penny in half. All this stuff on this half of the penny, the Father is going to work with us to remove it from our lives. But there is still going to be half of a penny left for you to deal with in your own life. And then you are going to have children, and you are going to cut that penny in half again. But you will always have half of the half that remains. Why? Because the Father needs to be sovereign to your children, and He will be." [82]
This simple, powerful teaching set a healthy expectation within our home [82]. Our daughters did not expect us to be flawless, perfect parents, but they constantly saw us leaning into the Lord, seeking His face, and working to deal with our own "half of the penny" [82]. This vulnerability and transparency created a beautiful, authentic environment where the entire family advanced together before the Lord [82].
### Covenant Priorities: God, Family, and Ministry
In establishing a stable, secure home, parents must walk in strict alignment with God's divine order of priorities [131]. We are firm believers in a covenant hierarchy that must never be compromised [131]:
1. **God First**
2. **Family Second**
3. **Ministry Third**
Tragically, when this order is inverted, the home suffers immensely [131]. We see this manifest in the lives of many "preacher's kids" who grow up bitter and distant from the Lord because their parents prioritized public ministry or the affairs of the church over the spiritual and emotional security of their own household [131]. Even for those carrying a powerful ministerial anointing, fathers must seek the Lord for the creative wisdom and divine provision necessary to protect their family time [131]. We must lift our vision higher to see that our children are our primary, most significant ministry [41, 131].
<!-- EDITORIAL COMMENT: Move child-safety, independent support, and accountability ahead of language about submission or local headship. The permission to seek help should be prominent. -->
### Relying on the Greater Body
No family is designed to function as an isolated island. Part of walking in the covenant is recognizing that you are not alone when you are parenting [133]. The Lord has intentionally structured the Body of Christ so that you have older, more mature people around you who have been given pastoral or apostolic responsibility over your life to speak wisdom, correction, and guidance into your household [133].
Furthermore, parents must actively teach and model honor for others [134]. In our home, we wanted our daughters to know that they were not restricted to only receiving help from us [134]. We gave them explicit permission that if they ever felt they needed outside spiritual help or counseling, they had the freedom to reach out directly to our trusted leaders and spiritual counselors [134]. By removing the fear of being threatened by outside help, we established a network of absolute security around our daughters [132, 134]. They grew up knowing that if Mom and Dad were struggling, there was a safe, ordained place in the local headship where help, restoration, and life-giving counseling could be found [133].
<!-- EDITORIAL COMMENT: Rewrite with trauma-informed and consent-based language. Trust, grief, custody realities, and existing parent-child relationships need explicit treatment; instant authority should not be assumed. -->
### Blended Families and Late Starts: Rebuilding the Foundation
We frequently meet parents who are entering the child training journey late—whether because they have recently come to know the Lord after their children are older, or because they are navigating the unique complexities of a blended family [147, 148]. In these situations, parents often ask how they can remove old, ungodly foundations that were laid before they entered the picture [147].
In these cases, the primary strategy is to become the model of the Father's love in their presence [148]. Walk before them as a consistent, unshakeable, secure place that they can count on day in and day out [148].
If you are dealing with older children where the primary training window has passed, look backward to see if there are any broken bridges of trust [148]. Seek the Lord and ask yourself: "Have I ever made any promises to my children that I have not kept?" [148]
If the answer is yes, you must do whatever it takes—no matter how difficult or costly to your finances—to keep your word and fulfill those promises [148]. This act of sacrificial integrity sends a powerful message that you are a parent of truth, modeling the covenant-keeping nature of our heavenly Father [148]. Combine this with doing extraordinary, unexpected things to display your love, and stay closely submitted to your local spiritual headship, who can help navigate the specific nuances of your household [148]. The Lord's grace is fully sufficient to heal, restore, and rebuild the foundations of any home that yields completely to His pattern [148].
### Themes captured for future book development
- Generational advancement is presented as children inheriting a foundation of spiritual security, emotional healing, and parental growth rather than having to begin from the same level of brokenness.
- The "cutting the penny in half" illustration gives children permission to see parental imperfection while also seeing parents actively submit their lives to God's transforming work.
- The teaching holds together two ideas: parents can remove or reduce patterns of brokenness, while children still have their own agency, struggles, and relationship with God.
- The proposed covenant priority is God first, family second, and ministry third.
- Children are presented as a primary ministry and a responsibility that should not be sacrificed to public ministry demands.
- Parenting is framed as a communal responsibility in which mature, trusted members of the local church can provide wisdom, correction, counseling, and restoration.
- Children are encouraged, in the source account, to have access to safe outside help rather than being limited to their parents alone.
- Parents who begin later or who are navigating blended-family complexity are called to rebuild trust through consistency, integrity, fulfilled promises, demonstrated love, and patient presence.
### Editorial, pastoral, developmental, and safeguarding review
- Verify all Scripture references, quotations, translations, and the theological language surrounding "generational advancement" before publication.
- Preserve the "cutting the penny in half" illustration and its source context, but clarify that children are not responsible for repairing or carrying their parents' unresolved wounds. Parental healing should reduce burdens on children, not assign them a quantified share of family brokenness.
- The teaching's statement that everyone needs struggles that force dependence on God should be handled carefully. Do not romanticize trauma, abuse, poverty, disability, mental-health challenges, or other suffering as divinely necessary or as evidence of spiritual deficiency.
- "God first, family second, ministry third" should be explained rather than used as a slogan that automatically resolves competing responsibilities. The final resource should address safety, marriage and parenting obligations, work, health, community, and the needs of vulnerable family members.
- The claim concerning "preacher's kids" should be qualified and supported if retained. Children's experiences of ministry families are varied, and bitterness or distance from faith should not be attributed simplistically to parental prioritization.
- Outside spiritual leaders, pastors, counselors, and "local headship" must be safe, qualified, accountable, and subject to appropriate safeguarding standards. Children should have confidential, age-appropriate ways to disclose concerns, including access to adults outside the parents' chosen circle when needed.
- "Submission" to spiritual authorities must never mean unquestioning obedience, secrecy, isolation, surrender of parental or child safety, or protection of leaders from scrutiny. The final book should explicitly preserve the right to seek independent professional help and report abuse.
- In blended families, rebuilding trust requires consent, patience, predictable care, respect for existing parent-child bonds, and attention to grief, loyalty conflicts, trauma, and legal/custody realities. A new spouse or parent figure cannot demand instant spiritual or relational authority.
- The instruction to fulfill promises "no matter how difficult or costly" should be bounded by safety, legality, financial sustainability, and the child's best interests. Parents should not keep an unsafe, impossible, manipulative, or harmful promise merely to preserve appearances.
- "Extraordinary, unexpected" demonstrations of love should be age-appropriate, non-coercive, and responsive to the child's actual needs rather than used to purchase trust or compliance.
- Clarify whether "late" refers to age, conversion, remarriage, or a previous parenting approach, and avoid framing earlier family history as an "ungodly foundation" in a way that shames parents or children.
---
<!-- EDITORIAL COMMENT: Place a brief safety/help page before the exercises. Keep source exercises clearly labeled and provide separately reviewed alternatives in the main workbook. -->
### Reflection and Action
#### Heart-level reflections
**The Penny in Half:** Do your children carry the heavy burden of expecting you to be perfect [42, 43]? How can you model humility and the pursuit of growth rather than a false image of perfection [43, 95]?
**The Priority Order:** Honestly assess your calendar and energy. Are you living according to the covenant order: God First, Family Second, Ministry/Work Third [43, 44, 144]?
#### Action steps
**The "Half-Penny" Conversation:** Gather your children (especially those ages 7–9 or older) [42, 95]. Share the "half-penny" teaching with them:
> "Mom and I are not perfect parents, but we are working with the Lord to clear away old battles so you don't have to fight them [41, 42, 95]. There will still be a portion left for you to deal with, but you will stand on our shoulders." [41, 42, 95]
**Rebuilding Broken Bridges (Late Starts / Blended Families):** Seek the Holy Spirit and ask: "Have I ever made any promises to my children that I have not kept?" [47, 161] If a promise comes to mind—no matter how small or how financially challenging—make a concrete plan to keep your word and fulfill that promise this month [47, 161].
### Themes captured for future workbook development
- The material moves from teaching content into self-examination, shared marital practices, and concrete household commitments.
- The workbook treats parental transformation and modeling as the starting point for changes in the home.
- The questions invite parents to examine obedience, emotional regulation, presence, priorities, division, media use, and generational vision.
- The proposed exercises include a refuge audit, a calmness practice, parental-unity protocols, a 30-day appreciation covenant, media and time audits, shared household work, a half-penny conversation, and promise-repair work.
- The source workbook is intended to be used by spouses together, not merely read individually.
- Each chapter's practical section mirrors the book's larger sequence: model first, correct redemptively, build unity, guard influences, and advance the covenant family.
### Editorial, pastoral, developmental, and safeguarding review
- Verify all Scripture references, quotations, translations, page/source-number citations, and the relationship between the workbook citations and the original audio/NotebookLM source.
- The physical-discipline exercises in Sections 2 and 4 should not be presented as ready-to-use instructions in a parent-facing workbook. Replace or substantially revise them after professional safeguarding review, with non-violent, age-appropriate alternatives centered on supervision, redirection, natural/logical consequences, repair, and emotional regulation.
- The "correction room" exercise should not encourage isolating a child with an adult or imply that privacy overrides safety, accountability, or a child's right to disclose harm. Any final version should include clear safeguarding boundaries and appropriate access to trusted, independent help.
- The suggestion to place a switch in the home should be removed from a practical action checklist unless the final theological and safeguarding review explicitly justifies its inclusion; the current source note must not be mistaken for an endorsement.
- "Perfect right standing" and the idea that correction removes a spiritual debt require theological review so that children are not taught that physical pain is required for forgiveness, belonging, or restoration.
- "If the other spouse has given an answer, the discussion is permanently closed" should be softened to allow clarification, correction of mistakes, accessibility needs, changing circumstances, and safe disclosure. Children must not be trained to stop asking questions or reporting concerns.
- The 30-day breakfast and sunset covenants should allow for work schedules, illness, disability, conflict de-escalation, sleep, safety, and circumstances in which immediate reconciliation is not appropriate.
- The blanket-training trial should not be reproduced without current pediatric and child-safety review. Infant crawling and boundary-testing are normal development; safe supervision and childproofing should come before obedience training.
- The "Egyptian" overwork metaphor and "own your time" exercise should not shame parents who must work, rely on childcare, or manage financial hardship. Include varied family structures and realistic economic constraints.
- Household-work activities require age-appropriate supervision around paint, appliances, water, heat, tools, chemicals, and other hazards.
- The half-penny conversation should be adapted so children are not assigned responsibility for parental wounds or told they must inherit a predetermined portion of brokenness. Emphasize parental accountability, the child's agency, and freedom to seek help.
- Promise-repair exercises should be bounded by safety, legality, financial sustainability, custody arrangements, and the child's best interests; a parent should not fulfill a harmful or impossible promise.
- The workbook should include an explicit "when to seek help" page covering trusted pastoral care, licensed counseling, child-protection concerns, domestic abuse, mental-health crises, and situations in which a parent cannot stay calm or keep a child safe.
<!-- EDITORIAL COMMENT: Consider placing this calendar after a revised workbook and a safety/help section. The calendar currently repeats source exercises that the workbook flags for review. -->
## The 30-Day Covenant Parenting Challenge Calendar
This practical, day-by-day companion calendar is designed to help you and your spouse actively move from information to structural, heart-level transformation in your home [48]. Covenant parenting is a living relationship that must be intentionally walked out before the Lord and before your children [48, 62]. Use this daily tracker to build a secure sanctuary of peace in your household [48, 141].
---
### Week 1: Laying the Marital Foundation
The spiritual atmosphere of the home is anchored in the absolute unity of husband and wife [3, 199]. This week, we focus entirely on sealing the "cracks" of division, aligning our hearts privately, and nurturing horizontal communication [3, 24, 31, 200].
#### Day 1: The Sunset Covenant (Ephesians 4:26 (NKJV))
**Action:** Sit down with your spouse tonight and make a solemn covenant that you will never go to sleep angry [34, 218]. If a disagreement arises, commit to taking a private "time out" to pray individually, then come together to ask for forgiveness and pray together before sleeping [34, 216, 219].
**Scripture:** "...do not let the sun go down on your anger." [34, 54, 218, 221]
#### Day 2: Launching the 30-Day Breakfast Covenant
**Action:** Set your alarm 30 minutes earlier [54, 221]. Sit down for breakfast together (just the two of you) and share one specific, particular detail you sincerely appreciate and estimate about your spouse [32, 33, 54, 221, 224]. **Rule for Husbands:** Avoid generalities like "you look good"—find a particular, concrete action to celebrate [33, 224].
**Scripture:** "Seek, and you will find." [33, 222]
#### Day 3: The "What Did Dad/Mom Say?" Gatekeeping Protocol
**Action:** Align on the gatekeeping protocol [54, 210]. Whenever a child approaches you asking for a treat, permission, or a change in rules, your immediate, unthinking response must be: "What did Dad say?" or "What did Mom say?" [24, 25, 54, 210]. If the other spouse has given an answer, the discussion is permanently closed [25, 54, 210].
<!-- EDITORIAL COMMENT: The source labels this Day 4 activity as "Day 3." Preserve the source heading for traceability, but reconcile the breakfast count before publication. -->
#### Day 4: Day 3 of the Breakfast Covenant
**Action:** Share your daily specific deposit [32, 33]. Today, focus on celebrating how your spouse handles pressure or exhaustion [30, 143, 201].
#### Day 5: Private Discipline Alignment Check
**Action:** Covenant together that you will never correct, undermine, or disagree with each other's disciplinary actions in front of the children [26, 204, 205]. If you disagree with how a situation was handled, deal with your own irritation privately and discuss it strictly behind closed doors later [27, 211].
#### Day 6: Modeling Humility & Repentance
**Action:** If you slipped up this week and displayed division or disrespect in front of your children, execute the restoration protocol [28, 205]. First, apologize to your spouse privately:
> "My love, I am sorry. I realize that I made you look bad in front of the child, and I repent." [28, 205]
Second, go to the child:
> "What I said to you about your mother/father was wrong. I want to apologize to you for dishonoring them in front of you." [29, 206]
#### Day 7: Weekly Reflection & Rest
**Action:** During your breakfast covenant today, evaluate the atmosphere of the home [32, 221]. Has the spirit of peace and security increased? Ask: "Are we taking time to truly listen to one another's hearts, or are we just waiting for our turn to speak?" [31, 213].
---
### Week 2: Establishing Heart-Level Security & Early Boundaries
This week, we transition into early training boundaries and emotional security. We examine how our physical actions, voice tone, and early limits build a protective shield around our children [3, 20, 37, 103].
#### Day 8: Consecrating the Hands & the Voice
**Action:** Consecrate your hands and voice today [20, 226]. Declare that your hands are made exclusively for hugging, holding, and expressing love and tenderness [20, 84, 226]. Agree that your voice will never be the vehicle of correction, but only of instruction, praise, and love [226]. Remove all rigid correction implements (belts, heavy spoons) from the home [20, 84, 52].
#### Day 9: Establishing the "Correction Room"
**Action:** Identify a private, designated area in your house (a bedroom or bathroom) that will serve as the private place of correction [23, 174]. Place a tender, limber lilac switch (smooth, with bumps shaved off) in that room [20, 175]. Commit to never correcting your children publicly or in front of siblings [23, 174].
#### Day 10: Expressive Love Deposits
**Action:** Be intentionally expressive today [139, 140]. Hug your children unexpectedly, write them a sweet note, or tell them specific reasons why you love them and estimate who they are [139, 140]. Ensure they know their security is unshakeable [87, 103].
#### Day 11: Blanket Training Setup (For Infants 6–9 Months)
**Action:** Spread a small blanket on the floor [36, 102]. Place the infant on it and say quietly: "I don't want you going off of that." [37, 102] When they attempt to crawl off, gently tap their hand to associate disobedience with instant correction, and place them back on the blanket [37, 102]. Repeat this several times in a focused, calm session [37, 102]. **(For older children, choose a single, clear boundary—like not touching the coffee table—to train their ears to listen to your voice [102].)**
#### Day 12: The Rule of Calmness Practice
**Action:** If you feel your blood pressure rising or feel on edge during a disciplinary moment today, practice stopping immediately [22, 112]. Say to your spouse: "I am not in a position to handle this right now," and let them step in and cover for you, or find a calm place before the Lord before addressing the situation [22, 30, 52, 112, 185].
#### Day 13: Instant Obedience Check
**Action:** Evaluate if you have fallen into the trap of counting to three or repeating commands multiple times [227]. Commit today to expecting instant obedience to your voice [141, 227]. Give clear, loving instruction once, and address any delay as disobedience [140, 141, 227].
#### Day 14: Mid-Point Reflection
**Action:** Reflect on Proverbs 14:26 (NKJV) [3, 74]. Write down how growing in your own reverent fear and instant obedience to the Heavenly Father has created a physical and spiritual "shield of refuge" for your children this week [3, 13, 74].
---
### Week 3: Integrating Work, Joy, and Presence
We are called to own our time, stay present, and include our children in the everyday affairs of life so they learn that labor is a joyful, natural expression of the family [5, 39, 40].
#### Day 15: Media Audit ("Tell-a-Vision")
**Action:** Walk through your home and evaluate the media intake [38, 145]. Identify where tablets, phones, or television are acting as "surrogate parents" or distractions [38, 145]. Agree to strictly limit or close the door to secular programming to keep the atmosphere of the home pure [38, 145].
#### Day 16: Erasing the Work vs. Fun Boundary
**Action:** Stop treating household chores as a solo burden [40, 186]. Today, pull up a chair and let your toddler help wash dishes, push the buttons on the washing machine, fold laundry, or give your older child a paint roller to help paint [40, 186]. Make work a shared, joyful experience of living life together [40, 186].
#### Day 17: Father's Covenant: Owning Your Time
**Action:** Fathers, spend time before the Lord today asking for creative, Kingdom strategies to "own your time" [39, 149]. Examine your schedule to ensure you are physically and mentally present for your family rather than caught in the "Egyptian brick-making trap" of excessive work [39, 148, 149].
#### Day 18: Celebrating the Mother's Role
**Action:** Husbands, take time today to actively celebrate, verbalize, and honor the sacred work your wife does in nurturing the home and multiplying your family's resources [30, 39, 147]. Let her know that her presence far surpasses any secular career or paycheck [39, 146, 147].
#### Day 19: The "I Will Say Yes" Promise
**Action:** Look for opportunities to say "Yes!" to your children today [151]. Tell them: "There are times I have to say no to protect you, but I am looking for every opportunity to say yes to you." [151, 152] Plan a family-appropriate trip, surprise outing, or special treat to fulfill this promise [151, 153].
#### Day 20: Outdoor Activity Shift
**Action:** If the atmosphere of the home feels pent up or stressful today, physically shift locations [179, 180]. Take the children outside to build a fort, play in the yard, go to the park, or take a simple drive [179, 180]. Use nature and play as a release valve for energy [178, 180].
#### Day 21: Weekly Reflection: Celebration of Individuality
**Action:** Discuss how your children are uniquely wired [118, 121]. Repent of any verbal comparisons between siblings [119, 120]. Ask the Holy Spirit for custom wisdom (Rhema word) for each child's specific, unique design [117, 118].
---
### Week 4: Generational Legacy & Deep Restoration
We parent with a multi-generational vision, preparing our children to stand on our spiritual shoulders and leap forward into their own divine destinies [6, 12, 41].
#### Day 22: The "Half-Penny" Conversation
**Action:** Gather your children (especially those ages 7–9 or older) for a teaching moment [42, 106]. Explain the "half-penny" concept:
> "Mom and Dad are not perfect, and we are working with the Lord to clear away old battles so you don't have to fight them [42, 106]. There will still be a portion left for you to deal with under His sovereign hand, but you will stand on our shoulders." [41, 42, 106]
#### Day 23: Rebuilding Broken Bridges (Late Starts & Blended Families)
**Action:** Ask the Holy Spirit: "Have I ever made any promises to my children that I have not kept?" [47, 172] If a promise comes to mind—no matter how small or financially difficult—write down a concrete plan to keep your word and fulfill it this month [47, 172]. Fulfilling your promises models our covenant-keeping Father [47, 172].
#### Day 24: Covenant Priority Check
**Action:** Audit your calendar, finances, and energy [57]. Are you walking in strict alignment with God's covenant order of priorities: God First, Family Second, Ministry/Work Third? [43, 44, 57] Adjust any inverted priorities today [44].
#### Day 25: Honoring the Greater Body
**Action:** Teach your children that they are not alone, and that they have the freedom to reach out to trusted, ordained local leaders or counseling elders if they ever need help or counsel [45, 157]. Model this by showing submission and honor to local headship yourself [45, 157].
#### Day 26: Facing Insecurities
**Action:** Realize that any insecurities you carry do not have to be passed down [14, 104]. Bring your deep-seated fears or past family wounds to the Lord, allowing Him to heal you so that your children can walk in total, inherited spiritual security [14, 73, 104, 105].
<!-- EDITORIAL COMMENT: Reconcile the breakfast count before publication. The calendar launches the practice on Day 2, labels Day 4 as Day 3, and calls Day 27 the 30th breakfast; the schedule does not clearly support all three labels. -->
#### Day 27: Concluding the 30-Day Breakfast Covenant Challenge
**Action:** As you complete your 30th breakfast together, commit to making these daily specific deposits a permanent, lifelong habit of your marriage [32, 223]. Celebrate how focusing on finding the good has transformed your relationship [34, 222].
#### Day 28: Preparing the Next Generation to Model
**Action:** Reflect on Acts 13:36 (NKJV) [12]. Pray a blessing over your children, asking the Lord to equip them to serve His purposes faithfully in their own generation [12, 65].
---
### Days 29–30: Evaluation & Generational Forwarding
#### Day 29: Joint Spouse Review
**Action:** Review the completed 30-day challenge. Where did you see the most significant fruit? Where did the Holy Spirit highlight areas that still need to be "narrowed up" or healed? [14, 73, 76]
<!-- EDITORIAL COMMENT: Rewrite the "ceiling becomes floor" language as an aspirational blessing rather than a guarantee or an obligation placed on children to reproduce a parent's ministry, theology, or achievements. -->
#### Day 30: Sealing the Legacy
**Action:** Commit this parenting journey to the Lord in prayer [193]. Declare that your family is stepping into generational advancement, and that the spiritual ceiling of your life has officially become the floor upon which your children stand [6, 41, 105].
### Development themes
- The calendar begins with marital unity and communication before moving into child-focused boundaries and correction.
- Its sequence progresses from household atmosphere, to heart-level security, to presence and shared work, and finally to generational legacy and restoration.
- The daily practices emphasize appreciation, repentance, calmness, parental consistency, presence, media awareness, shared labor, individualized attention, promise keeping, and prayer.
- The calendar translates the broader teaching into a structured rhythm of daily action, weekly reflection, and final evaluation.
- The challenge repeatedly connects parental transformation with the security and future formation of children.
- The calendar includes both couple-centered practices and child-centered conversations, allowing later editions to distinguish exercises for spouses, infants, older children, blended families, and ministry families.
### Editorial, pastoral, developmental, and safeguarding review
- Verify all Scripture references, quotations, translations, page/source-number citations, and the relationship between this calendar's citations and the original audio/NotebookLM source.
- The calendar contains repeated instructions to use a switch, tap an infant's hand, and conduct private physical correction. These instructions should not be distributed as a ready-to-use parent program. Before any public edition, replace or substantially revise them after professional pediatric, child-development, and safeguarding review, centering non-violent redirection, supervision, natural/logical consequences, repair, and emotional regulation.
- The "correction room" should not be framed as a private space where a child is isolated with an adult without safety, accountability, and access to independent help. Privacy should protect dignity, not conceal harm.
- "Never go to sleep angry" and the sunset covenant should allow safe time-outs, sleep, boundaries, and delayed conversation. Immediate reconciliation is not appropriate in every conflict, particularly where there is intimidation, coercive control, abuse, or escalating danger.
- The "What Did Dad/Mom Say?" protocol and the phrase "the discussion is permanently closed" require safeguards. Parents may need to correct a mistake, hear a child's question, accommodate disability or changing circumstances, or receive a disclosure of harm. Unity must not become silencing.
- Day 8's instruction that the voice should never be a vehicle of correction conflicts with the broader source teaching's emphasis on correcting disobedience and should be clarified in the original recording context.
- Day 13's "instant obedience" exercise should be reviewed developmentally. Young children may need repetition, processing time, communication support, or an explanation of a request; delay is not automatically defiance.
- The 30-day breakfast count appears internally inconsistent: the calendar launches the breakfast covenant on Day 2, labels Day 4 as "Day 3," and calls Day 27 the 30th breakfast even though the listed daily breakfast actions do not clearly account for thirty meetings. Reconcile the schedule before publication.
- The "I Will Say Yes" promise should not pressure parents into purchasing outings or treats, or make a child's felt love dependent on receiving a yes. Define realistic, relational ways to say yes while preserving necessary boundaries and financial sustainability.
- The "Egyptian brick-making trap," the instruction that a mother's presence surpasses a secular career, and the gendered roles should be presented as the speaker's family framework, not a universal measure of faithfulness. Include single parents, dual-income families, childcare, disability, illness, economic necessity, adoptive/foster families, and varied vocational callings.
- Outdoor drives and activities require ordinary safety planning, supervision, weather awareness, transportation restraints, and age-appropriate expectations.
- Day 21's language about each child being uniquely wired is valuable, but "Rhema word" should be explained and should not replace listening to the child, developmental knowledge, qualified support, or medical/mental-health care.
- The half-penny exercise should not tell children they inherit a predetermined portion of parental brokenness. Emphasize parental accountability, the child's agency, and freedom to seek help.
- Trusted local leaders, "counseling elders," and "local headship" must be qualified, accountable, safeguarding-compliant, and open to independent scrutiny. Children must retain access to safe adults outside the parents' chosen leadership circle and to licensed professional help.
- "Submission" to church authority must never require secrecy, unquestioning obedience, isolation, surrender of safety, or protection of leaders from scrutiny.
- Promise-repair exercises should be bounded by safety, legality, custody arrangements, financial sustainability, and the child's best interests. An unsafe or impossible promise should be addressed honestly rather than fulfilled at any cost.
- "Generational forwarding" and the statement that a parent's spiritual ceiling becomes a child's floor should be framed as an aspirational metaphor, not a guarantee or a burden placed on children to continue a parent's ministry or spiritual achievements.
@@ -0,0 +1,738 @@
---
title: "The Pattern of Covenant Parenting — Bryan Hickman Teaching (Revised Editorial Draft)"
status: editorial-review-draft
source: "NotebookLM book-style synthesis from audio recordings of Bryan Hickman's teaching sessions"
derived_from: "[[covenant_parenting_bryan_hickman]]"
tags:
- parenting
- covenant-parenting
- church-teaching
- family
- discipleship
- Bryan-Hickman
- book-draft
- editorial-review
---
# The Pattern of Covenant Parenting
**Global source declaration:** This separate editorial draft is derived from [[covenant_parenting_bryan_hickman]]. It preserves the supplied NotebookLM chapter synthesis from Bryan Hickman's audio teaching as source material. The whole manuscript is an interpretation/synthesis from voice recordings, not a verified verbatim transcript, theological position paper, clinical resource, or safeguarding-approved parenting program.
**Bryan review status:** Bryan Hickman's review is pending. All editorial normalization, interpretation, Scripture handling, and proposed rewrites are provisional and must not be presented as Bryan's approved wording until he reviews them.
**Editorial status:** This revision standardizes heading hierarchy, repeated section labels, punctuation, citation spacing, quotation presentation, and workbook subsection naming. Source wording is otherwise retained as closely as possible.
**Scripture translation convention:** The intended reference translation for Scripture verification is the New King James Version (NKJV). Body quotations are retained source renderings unless explicitly identified as verified NKJV text; they must not be assumed to be verbatim NKJV. See [[covenant_parenting_bryan_hickman_nkjv_verification]] for the verbose reference register and source links.
**Review convention:** `<!-- EDITORIAL COMMENT: ... -->` marks a proposed reorder, rewrite, clarification, or publication-review point. These comments are editorial notes, not Bryan Hickman's words. Existing review sections remain in place so safety-sensitive and unverified material is not mistaken for endorsement.
<!-- EDITORIAL COMMENT: Chapter 0 was reshaped into a continuous parent-facing introduction. The original labeled themes and review lists remain represented in the later chapters and editorial metadata; this introduction now carries the book's central movement as prose. -->
<!-- EDITORIAL COMMENT: Present this as an unnumbered Introduction in the parent-facing edition. Retain the archival source identity separately if Chapter 0 is needed for traceability. -->
## Introduction
Parenting is often reduced to the question of how to make a child behave. We ask how to stop the arguing, correct the disobedience, establish better habits, or get through the next difficult stage. Those questions matter, but they are not the whole purpose of training a child. The deeper work is to form a heart that can grow in love, a clear conscience, and sincere faith. As 1 Timothy 1:5 says, "The goal of our instruction is love from a pure heart, a good conscience, and a sincere faith." The hope is not simply to produce outward compliance. It is to raise sons and daughters who can come to know their heavenly Father, receive their identity from Him, and walk faithfully in the purpose He gives them.
That kind of formation begins with the parents. Children learn far more from what they see in us than from what we say to them. They watch how we respond when we are tired, disappointed, interrupted, or afraid. They notice whether our words agree with our lives. In the early years, a parent becomes a child's first picture of authority, love, protection, and security. This makes parenting a form of discipleship, but it also makes it a form of parent training. Before we can ask our children to listen, we have to become people who listen to the Lord. Before we can ask for self-control, we have to let God deal with our anger. Before we can lead a child toward healing, we have to be willing to bring our own wounds into His light.
The model for this surrendered life is Jesus. His life shows what it looks like to depend on the Father rather than act from self-protection or self-importance: "I don't do anything but I see my father do it. I don't say anything but I hear my father say it." The point is not to make parents flawless. It is to help us become honest, obedient, teachable people whose children can see us turning toward God when we fail. Proverbs 14:26 says, "In the reverent fear of the Lord, there is strong confidence, and his children will always have a place of refuge." A child's security grows when the adults around them are learning where true security comes from.
That refuge is built inside the atmosphere of the home. Parenting does not happen in isolation from marriage, family rhythms, work, money, or the condition of the parents' hearts. A peaceful household requires husband and wife to pursue unity, repair conflict, and refuse to make their children carry the weight of adult disagreement. It requires daily deposits of appreciation, patient listening, and the humility to apologize when we have dishonored one another. It also requires practical care: noticing when a spouse is exhausted, stepping in when help is needed, and protecting the home from becoming a place where pressure is constantly passed down to the children. The thirty-day breakfast covenant and the command in Ephesians 4:26 not to let the sun go down on anger belong to this larger work of building peace, not to a formula for pretending that conflict never exists.
Within that atmosphere, parents can establish boundaries without making fear the center of the relationship. Children need direction. They need to know what is safe, what is expected, and what belongs outside the life of the family. Jesus' warning about the broad and narrow ways in Matthew 7:13–14 gives this work a larger frame. Training means helping children learn to listen, to turn away from harmful influences, and to practice what is good until wisdom becomes part of their own character. When a child disobeys, the goal must be restoration rather than humiliation. A parent who is angry or out of control should pause rather than use discipline to release frustration. Correction should protect the child's dignity, leave room for truth and disclosure, and lead the family back toward calm, belonging, and trust. The practical questions of boundaries, correction, and safety require care, patience, and age-appropriate wisdom; they should never be separated from love.
This formation takes place in ordinary life. It happens while parents are deciding what enters the home through television, phones, tablets, and other media. It happens when a mother or father chooses presence over constant distraction, when a family shares work instead of treating chores as an interruption, and when children are welcomed into the real responsibilities of household life. The goal is not to create an artificial world where children never encounter difficulty. It is to give them a secure place from which they can learn how to meet difficulty with faith, responsibility, and compassion. A boundary can be an expression of care. A shared task can become a lesson in service. A quiet conversation can shape a child's understanding of God more deeply than a lecture.
The book also looks beyond the immediate moment. Parents are not only managing today's behavior; they are building on behalf of people they may never meet. This is the long view behind Proverbs 22:6: "Train up a child in the way he should go, and even when he grows old, he will not abandon it." The healing we pursue, the patterns we refuse to pass on, the promises we keep, and the way we order our lives all become part of the foundation our children inherit. This is the idea of generational advancement: children should not have to begin by fighting every battle their parents were given grace to face. They will have their own struggles and their own relationship with God, but they can stand on a foundation of greater security, honesty, and wisdom. That is why parental humility matters. We can tell our children that we are still growing, that the Lord is still dealing with us, and that our imperfections do not cancel our responsibility to keep moving toward Him.
This vision also changes how we think about the place of family in the wider work of the church. God comes first, family cannot be sacrificed to public ministry, and ministry must flow from a life that is being lived truthfully at home. Parents need the wisdom of mature and trustworthy people around them, and children need safe access to help beyond their parents when they need it. A covenant family is not an isolated family. It is a household learning to receive correction, offer hospitality, repair what has been damaged, and make room for the work God is doing across generations.
The pages that follow develop these convictions through the realities of family life: how parents model the Father, how a home learns to respond to conflict, how husband and wife protect the atmosphere of the household, how families guard the influences shaping their children, how ordinary work and presence become part of discipleship, and how parents can rebuild trust when they are beginning late or carrying a complicated history. The final reflections and exercises are meant to move these ideas out of the abstract and into conversations, prayers, decisions, and small daily practices. Covenant parenting is not a checklist that proves we are doing everything right. It is a living relationship, walked out before the Lord and before our children, one faithful response at a time.
---
<!-- EDITORIAL COMMENT: This chapter supplies the theological and relational foundation. Consider adding a short, independently reviewed help-and-safety page before the practical correction material later in the sequence. -->
## Chapter 1: The Foundations of Modeling & Multi-Generational Vision
### The Ultimate Goal of Training
The true purpose of child training is not to construct a superficial set of behavioral modifications or to simply "tweak" outward conduct. It is to lay a foundational, structural establishment. Specifically, the ultimate goal is to raise children who can transition cleanly into their own spiritual inheritance. As the scriptures state in 1 Timothy 1:5:
> "The goal of our instruction is love from a pure heart, a good conscience, and a sincere faith."
Our target is to have children who seamlessly step into a personal relationship with their heavenly Father, and in that place find their Kingdom identity and faithfully walk out their Kingdom purpose in this generation. [7]
The transition from childhood through adolescence is intended by God to be a seamless, direct journey into relationship with the Father [17, 18]. Society has largely convinced itself that teenagers must undergo a painful, mandatory phase of rebellion simply because they do not know what else to do [17]. However, this expectation is a deception that lowers our standards and shapes our actions toward failure [17]. God's design is for children to move directly from childhood into a vibrant, personal relationship with Him [17, 18].
### Jesus as the Ultimate Model
To understand how to train children, we must first look at Jesus. Jesus did not come to earth merely to perform miracles or display His divinity; rather, He came to model what a son can do when entirely dependent upon his Father [11, 12]. He walked out His earthly life as a man, not as God, to demonstrate that obedience is fully possible for a heart surrendered to the Father [12]. He lived by a simple, profound standard:
> "I don't do anything but I see my father do it. I don't say anything but I hear my father say it." [12, 23]
Just as Jesus modeled sonship for us, parents are called to model the Father to their children [12]. In the eyes of a young child, the parent is effectively "God"—the ultimate representation of authority, love, and security in their life [15]. This is a sobering reality [13, 15]. Parents have both the privilege and the solemn responsibility to demonstrate face-to-face what a loving Father and Mother are like until the child reaches an age of spiritual understanding where that devotion is transitioned to the Lord [15].
The single most powerful force that will affect your children is for you, the parent, to become an obedient son of God [14]. Because parents are always modeling, every reaction—even after a hard day when we are on edge—sets an example [13]. We cannot expect our children to walk in instant obedience to our voice if we ourselves are not walking in instant obedience to the voice of our heavenly Father [13].
### Building for Generations
To parent effectively, we must reject short-sightedness and adopt a multi-generational vision [8, 9, 10]. We see the danger of passivity illustrated in the history of the Church. During the "Jesus movement" of the 1970s, a wave of believers dropped out of school and stopped preparing for the future under the premise that "Jesus is coming back" [9]. Because they failed to build for the next generation, the world quickly stepped in and took over every major institution [9].
Conversely, if we believe that the Kingdom will be fully established only in our lifetime, we risk failing to prepare our children for the long-term work [9]. While we must always look for the "end suddenly," we must build and train our children as if the work will span multiple generations [9, 10]. We are not going to build it all in our lifetime; our task is to raise up the little ones placed in our hands so that they will be faithful to God's purposes in their own generation [7]. As Acts 13:36 records of King David:
> "For David, after he had served God's purposes in his own generation, fell asleep and was laid among his fathers and underwent decay." [7]
### Healing the Parents First
Because children copy what we model, the child training process is, in reality, a parent training process [15, 128]. If we carry unresolved brokenness, anger, or fear, we will pass those patterns down [15, 46]. Allowing the Lord to heal us requires deep humility and submission, but it is the greatest gift we can offer our children [15]. As we grow in our reverence and fear of the Lord, we gain a strong confidence that creates a literal shield of security and a place of refuge for our households [16]. This is beautifully promised in Proverbs 14:26:
> "In the reverent fear of the Lord, there is strong confidence, and his children will always have a place of refuge." [16]
When we allow the Lord to deal with our own deep-seated insecurities, we achieve what is called "generational advancement" [46, 47, 161, 162]. Children who are raised in an atmosphere of genuine spiritual security do not have to fight the same battles, wounds, or broken family dynamics that their parents had to overcome [46, 47, 162]. Instead, they get to stand on their parents' advancements and leap forward into their own destiny [46, 162]. This establishes the foundation for the lifelong training command found in Proverbs 22:6:
> "Train up a child in the way that he should go, and even when he grows old, he will not abandon it." [16]
### Themes captured for future book development
- The intended goal of training is a child's personal relationship with the heavenly Father, Kingdom identity, and Kingdom purpose—not merely compliant behavior.
- Adolescence is presented as a potential continuation of relationship with God rather than an inevitably rebellious stage.
- Jesus is presented as the ultimate model of dependent sonship and surrendered obedience.
- Parents model constantly; their reactions under pressure are formative just as much as their deliberate instruction.
- Parent healing and obedience are central to breaking the transmission of fear, anger, insecurity, and family brokenness.
- Multi-generational parenting requires building for a future beyond the parents' own lifetime.
- "Generational advancement" describes children standing on the spiritual and relational progress of their parents.
- The chapter connects parental modeling, healing, refuge, and lifelong formation with Proverbs 22:6.
### Editorial and pastoral review flags
- Verify the Scripture quotations and references, including the intended Bible translations.
- Preserve the distinction between the teaching's theological claims and later editorial commentary.
- The historical claim concerning the 1970s Jesus movement should be sourced or qualified if included in a published edition.
- The claim that rebellion is not an inevitable feature of adolescence should be presented pastorally and carefully, acknowledging individual development, temperament, disability, trauma, and family context.
- Clarify the phrase "until the child reaches an age of spiritual understanding" and how the teaching defines that transition.
---
<!-- EDITORIAL COMMENT: Reordering option: place the parental-unity/household-atmosphere chapter before correction, or add a transition explaining why correction is introduced at this point. -->
## Chapter 2: Redemptive Correction: Straightening the Path with Love
### "Narrowing Up" vs. The Demand for "Experiences"
Scripture defines training a child through the Hebrew lens of "dedicating, disciplining, narrowing up, or choking out" [18]. It means to straighten a child's path, protecting their outlook, behavior, ideals, views, and influences from being overwhelmed by the weeds of the world [18]. This directly contradicts modern humanistic reasoning, which insists children must be given broad "experiences" to discover themselves [19]. This humanistic philosophy is a widening of the way, which the Bible explicitly warns against in Matthew 7:13:
> "Enter through the narrow gate, for the gate is wide and the way is broad that leads to destruction, and there are many who enter through it." [19]
Parents are given the responsibility to shape their children's minds and protect them from worldly conformity [18, 21]. As Romans 12:2 charges us:
> "And do not be conformed to this world, but be transformed by the renewing of your mind, so that you may prove what the will of God is, that which is good and acceptable and perfect." [21]
The renewal of the child's mind is a task delegated directly to the parents [21, 22]. It requires parents to actively narrow up their child's path, choosing carefully what enters their hearts and minds rather than letting them wander broad roads of secular influence [18, 22].
### Debunking the Myth of Adolescent Rebellion
A cornerstone of modern parenting is the belief that teenagers must naturally go through a painful, dramatic season of rebellion [17]. We are told this is just a normal developmental phase [17]. However, this expectation is a deceptive lie that shapes our thoughts and actions toward failure [17].
In God's design, there is no mandatory period of rebellion [17]. The scriptural transition from childhood to maturity is intended to be a seamless progression directly into a personal relationship with the Father [17, 18]. When boundaries are clearly laid and maintained with love, teenagers do not have to wander into rebellion; they can walk straight from parental guidance into divine devotion [17, 18].
<!-- EDITORIAL COMMENT: Major rewrite required for any parent-facing edition. Preserve this as source material, but place current safeguarding guidance and non-violent alternatives before any practical exercise. -->
### The Mechanics of Correction: The Switch and the Loving Hand
To remove the foolishness that is naturally bound up in a young heart, God has provided specific, loving tools [23, 24]. As Proverbs 22:15 states:
> "Foolishness is bound up in the heart of a child. The rod of discipline will remove it far from him." [24]
Scripture is rich with wisdom regarding the diligent application of this rod of reproof:
- **Proverbs 13:24:** "He who withholds the rod hates his son, but he who loves him disciplines him diligently." [25]
- **Proverbs 19:18:** "Discipline while there's hope, and do not desire his death." [25]
- **Proverbs 29:15:** "The rod of reproof gives wisdom, but a child who gets his own way brings shame to his mother." [25]
- **Proverbs 29:17:** "Correct your son and he will give you comfort. He will also delight your soul." [25, 26]
While humanism rejects these commands or distorts them into abuse, biblical correction is defined by tenderness and absolute control [26, 28, 29]. In our home, we established a strict physical boundary: our hands were made exclusively for holding, hugging, and expressing love [26, 29, 31]. We never used our hands to strike a child, nor did we use heavy, rigid tools like belts or wooden spoons, which can cause physical harm or anger [26].
Instead, the biblical "rod" refers to a tender, limber shoot or reed—such as a small lilac switch (roughly a quarter of an inch or smaller) with shaved bumps [27, 117]. This tool is designed to produce a quick, harmless sting on the bottom or thigh that instantly captures the child's attention without ever causing physical damage [26, 27, 118].
Crucially, this physical correction serves a redemptive spiritual purpose: it completely removes guilt and shame [26]. When a child is corrected, the spiritual debt of their disobedience is paid instantly [26, 30]. There is no lingering condemnation, no standing in corners, and no emotional isolation [26, 29, 30]. Once corrected, the child is immediately embraced, loved, and restored to perfect right standing within the home [26, 29, 30].
### The Rule of Calmness: Correcting Without Anger
Scripture issues a vital warning to fathers in Ephesians 6:4:
> "Fathers, do not provoke your children to anger, but bring them up in the discipline and instruction of the Lord." [22]
A parent must never, under any circumstance, correct a child while feeling angry, agitated, or on edge [26, 29, 53, 54]. Correcting in anger is not biblical discipline; it is an expression of the parent's lack of self-control [54]. It models anger to the child, which violates our primary calling as models of the Father [54].
If you find yourself becoming agitated or losing your emotional composure during a correction, you must stop immediately [29, 54]. It is far better to let an act of disobedience go uncorrected in that moment than to correct your child in anger [54]. The parent must first go before the Lord, find peace, and handle the situation only when they can do so with a calm voice, a peaceful facial expression, and a tender heart [29, 52, 53, 54].
<!-- EDITORIAL COMMENT: Clarify that privacy protects dignity but never overrides supervision, accountability, a child's right to disclose harm, or access to independent help. -->
### The Correction Room: Restoring Dignity in Private
To preserve a child's security and dignity, correction must never be a public spectacle [116]. It should not be done in front of guests, siblings, or in public places [34, 116].
Instead, correction should take place in a private, designated area—such as a bedroom or bathroom [29, 116]. This private environment—the "correction room"—is a place of calm, reassurance, and ultimate security [29, 116]. By keeping correction private, we honor our children, shield them from public embarrassment, and ensure that the process remains a tender, focused interaction of restoration between parent and child [29, 116].
### Themes captured for future book development
- "Narrowing up" is presented as intentional formation and protection of a child's heart, mind, influences, ideals, and direction.
- The chapter contrasts parental formation with a philosophy of broad, unbounded experience and self-discovery.
- Adolescent rebellion is presented as neither inevitable nor divinely required.
- Correction is framed as a redemptive process intended to remove shame, restore relationship, and return the child to belonging within the household.
- The source teaching emphasizes calmness, self-control, privacy, and immediate reassurance during correction.
- The chapter distinguishes the source's preferred correction tool from striking with hands or using heavy, rigid objects.
- Private correction is connected to the preservation of a child's dignity and security.
### Editorial, pastoral, developmental, and safeguarding review
- Verify all Scripture references, wording, and translation choices before publication.
- The teaching's interpretation of the Hebrew concept translated as "train" and its use of terms such as "narrowing up" or "choking out" should be checked against reputable Hebrew lexicons and the original recording context.
- The claims about adolescent rebellion, humanism, and the history of parenting should be framed as the speaker's theological and cultural argument rather than presented as settled developmental or historical fact.
- The physical-discipline recommendations require careful safeguarding review before any public distribution. Do not present a thin implement, a specific body location, or a claimed "harmless" sting as universally safe; laws, professional guidance, child age, disability, trauma history, and individual circumstances vary.
- For a parent-facing publication, prioritize non-violent, developmentally appropriate correction and include clear guidance for pausing, de-escalating, seeking help, and protecting children from injury or fear.
- The phrase "spiritual debt ... paid instantly" should be examined theologically and pastorally so that children are not taught that physical pain is required to obtain forgiveness, belonging, or restored relationship.
- Clarify what safeguards make a private correction setting genuinely safe and accountable, especially when the child is isolated with an adult.
---
<!-- EDITORIAL COMMENT: This chapter may be more effective immediately after the Introduction because it defines the relational atmosphere in which later parenting practices occur. -->
## Chapter 3: Parental Unity & the Atmosphere of the Home
<!-- EDITORIAL COMMENT: Rewrite the language about children "exploiting" cracks so ordinary questions, disagreement, disability-related needs, and safety disclosures are not portrayed as manipulation. Keep the consistency principle while adding room for clarification. -->
### The Principle of a Unified Front
A central pillar of a peaceful home is the absolute, seamless unity between husband and wife [159]. Parents must understand that children are highly astute observers; they are experts at sensing any lack of alignment and will naturally seek to exploit any crack to sow division or pit one parent against the other [159, 164].
To prevent this, parents must maintain a completely united front [159]. In our home, we established a simple but powerful protocol. Whenever a child approached one parent asking for a treat, more television time, or a specific permission, the immediate response was always:
> "What did Dad say?" or "What did Mom say?" [168, 169]
If the other parent had already given an answer, the discussion was instantly over [169]. The parent receiving the second appeal would simply state, "Well, there is your answer," ensuring that the child's attempt to bypass authority was met with a solid wall of parental agreement [169]. This level of consistency and predictability is not a rigid, legalistic exercise; rather, it provides children with an immense sense of security because they know exactly where the boundaries stand [47, 62, 185].
### Private Alignment over Public Disagreements
Maintaining a united front means that parents must make a covenant never to disagree, correct, or expose each other's faults in front of their children [162, 163, 164]. Doing so publicizes division and teaches children how to manipulate their parents, which ultimately tears down the spiritual authority of the home [164].
Inevitably, there will be moments when one parent observes their spouse making a decision or handling a disciplinary situation in a way they wouldn't have chosen [169, 170]. The natural temptation is to immediately step in and express "wisdom" or correct the spouse on the spot [170]. This is a critical mistake [170].
When you feel that irritation rise, you must first deal with your own internal reaction [170]. In front of the children, you must completely support your spouse's decision [162, 163]. Any adjustments, differing views, or scale of discipline must be discussed strictly in private, behind closed doors [162]. In our home, if Deanna handled a situation and I disagreed with the method, we would discuss it privately later so that we could align our hearts before the Lord, but the child always saw us standing as one [55, 162].
### Healing the Crack: Humility and Restoration
Because parents are human, there will be times when they fail to maintain this standard and inadvertently display division or disrespect in front of the child [167]. When this happens, it must be corrected immediately in the spirit of humility [164, 166].
First, the parents must align privately [164]. The offending parent should go to their spouse and say:
> "Cariño, lo siento. I realize that I made you look bad in front of the child, and I repent." [164]
Second, depending on the situation, it is often necessary to go directly to the child to model genuine repentance and restore the standard of honor [164, 165]:
> "What I said to you about your mother/father was wrong. The Lord is working in my heart, and I cannot make an excuse for what I did. I want to apologize to you for deshonrar (dishonoring) them in front of you, because they deserve honor." [165]
There is extraordinary, transformative power when a parent is willing to be authentic and humble before their children [166]. It models a soft, teachable heart and teaches children how to walk out repentance in their own lives [166].
### Atmosphere of Peace and Order
The physical environment of the home directly affects its spiritual atmosphere [157, 159]. A clean, orderly house is a powerful catalyst for a home filled with peace [159]. When a mother takes joy and satisfaction in nurturing and keeping the home, and the husband actively notices, appreciates, and verbalizes his gratitude, it weaves a beautiful bond of peace over the entire household [159, 160].
This atmosphere also requires parents to be highly sensitive to one another's limits [160]. Parenting is a demanding, daily labor, and there are times when "too much is too much" and one spouse is exhausted or on edge [143, 160]. In those moments of high stress, the other spouse must be ready to step in, "take the ball," and cover for them [48, 160]. This mutual support ensures that correction is never administered out of exhaustion or emotional agitation [48, 71, 185].
### Nurturing the Marriage: Horizontal and Vertical Communication
We must recognize that child training is not an isolated task; it is completely interwoven with every other area of family life, particularly the marriage relationship [157, 158]. If there is no peace between husband and wife, it is impossible to have lasting peace in training the children [158].
Healthy communication requires us to stop simply waiting for our turn to speak so we can make our own point, and instead learn to truly listen to one another's hearts [171, 172]. This communication must be intentionally nurtured [173].
To build this horizontal connection, we must make constant, deliberate "positive deposits" into our spouse's emotional bank account [181, 182]. As the proverb of the household says, if you put a coin in the piggy bank every single day, it will eventually be filled [182].
A highly practical and transformative exercise for married couples is to commit to a 30-day breakfast covenant [180]. For thirty consecutive days, sit down together for breakfast, and each day, make a specific, intentional positive deposit by telling your spouse one thing you sincerely estimate and appreciate about them [180, 181].
For husbands, this requires stepping away from vague, general statements like "You know I love you" or "You look good," and instead sharing specific, particular details of appreciation [183]. For wives, it means actively finding ways to make their husbands feel proud and respected, rather than assuming they only need to receive appreciation without giving it [183, 184]. This intentional focus changes the entire climate of the home because, as Scripture principles teach:
> "Buscad y hallaréis (Seek and you will find)." [181]
If you look for faults, you will surely find them; but if you intentionally seek the good in your spouse, you will find it and multiply it [181].
<!-- EDITORIAL COMMENT: Reframe this as a commitment to repair rather than a demand for immediate resolution. Add exceptions for unsafe conflict, coercive control, abuse, exhaustion, and the need for a healthy time-out. -->
### The Covenant Rule: Never Go to Bed Angry
To safeguard the home's atmosphere, couples must establish a firm covenant line that they resolve never to cross [180]. Chief among these is the scriptural command:
> "...do not let the sun go down on your anger." [180]
In our thirty-seven years of marriage, we decided we would never go to sleep angry with one another [174, 177]. If a disagreement arose, we would take a "time out" to pray individually, allowing the Lord to deal with our own hearts first [175]. Then, we would return, ask for forgiveness where we had failed, and pray together [178]. We did not always agree on the specific point of contention immediately, but we agreed on God and gave Him the place of preeminence in our marriage [178].
As a husband, the Lord taught me that I must function as the priest of my home [177]. When my wife made a mistake or did something wrong, the Lord would use it to deal with me first, instructing me to carry the burden, be silent, and go to the cross for her just as Christ did for the Church [177]. When both husband and wife surrender their right to be right and prioritize the covenant, they establish a secure spiritual foundation that their children will naturally inherit, creating a magnificent generational advancement [8, 178, 179].
### Themes captured for future book development
- Parental unity is presented as a source of security, predictability, and authority within the home.
- The chapter emphasizes checking with the other parent rather than allowing children to bypass a previously given answer.
- Disagreements about decisions or discipline are to be handled privately rather than displayed before the children.
- When parents fail publicly, immediate humility, apology, and restoration are presented as a model of repentance.
- Household order, appreciation, mutual awareness, and practical support are connected to a peaceful atmosphere.
- Marriage communication is framed as intentional listening and the repeated making of positive relational deposits.
- The 30-day breakfast covenant is presented as a concrete practice of daily appreciation.
- The command not to let the sun go down on anger is applied as a marriage covenant of prayer, forgiveness, and reconciliation.
- The chapter presents parental surrender, marital covenant, and generational advancement as closely connected.
### Editorial and pastoral review flags
- Verify all Scripture references, quotations, translations, and the Spanish phrase "Buscad y hallaréis" before publication.
- Preserve the distinction between the teaching's source claims and later editorial interpretation.
- Clarify the difference between healthy parental unity and coercive control. A united front should not require a parent to conceal abuse, unsafe conduct, serious error, or a child's legitimate disclosure.
- Children should be able to speak safely with either parent. The "What did Dad/Mom say?" practice should not be used to shut down questions, conceal a mistake, or prevent a child from reporting harm.
- The instruction to support a spouse publicly and resolve disagreements privately needs explicit safeguarding exceptions for abuse, intimidation, coercive control, threats, or unsafe discipline. In those situations, protecting the child and seeking qualified help takes priority over preserving appearances.
- The chapter's gendered descriptions of mothers nurturing the home, husbands leading as "priest," and wives making husbands feel proud should be identified as the speaker's marital framework rather than treated as the only faithful model for every family.
- "Never go to bed angry" should be presented with room for healthy time-outs, sleep, boundaries, and professional help; immediate resolution is not always safe or wise during escalation.
- Clarify the meaning, origin, and practical structure of the 30-day breakfast covenant when the original recording context is available.
---
<!-- EDITORIAL COMMENT: Check the chapter and first subsection titles against the recording. "Textile Boundaries" may be an accidental or context-dependent term; preserve it here but consider a clearer reader-facing title. -->
## Chapter 4: Guarding Influences & Practical Daily Wisdom
<!-- EDITORIAL COMMENT: Consider renaming this section "Early Boundaries and Infant Safety." The current wording is memorable but unclear, and the material needs developmental and safeguarding rewriting before publication. -->
### Textile Boundaries & Early Training
To train a child to listen to their parents' voices, training must begin in infancy with simple, knowable boundaries. Rather than overwhelming a toddler with a laundry list of hundreds of rules that they are incapable of following, parents should establish a few select, physical boundaries [72, 73].
A highly practical and successful method for this is blanket training [73]. Spreading a small blanket on the floor, the parent instructs the infant (typically starting around six to nine months of age):
> "I don't want you going off of that." [73]
Inevitably, the child's curiosity or old nature will lead them to test the boundary and attempt to crawl off [73, 79, 80]. In that moment, the parent administers a light, instant correction—such as a gentle tap on the hand—and places them back on the blanket, reinforcing the instruction [73]. Within just a few repetitions, the infant learns to associate their disobedience with the immediate correction and willingly remains within the border [73].
The goal of this training is not merely to restrict the child's movement or to protect household furniture, such as a coffee table [73]. Rather, it is to train the child to listen to and obey the parent's voice [73]. These physical boundaries provide children with immense security [74]. Just as the Lord establishes boundaries for our lives to keep us secure, clear boundaries in the home let children know exactly what is acceptable, preventing a frantic, heavily policed household and fostering an environment of deep spiritual peace [73, 74, 112].
### Guarding the Mind: "Tell-a-Vision" and Media
In a modern world saturated with technology, parents must exercise extreme vigilance regarding television, tablets, and media [115, 116]. The world's media system is highly intentional; it is designed with specific "channels" and "programming" to literally "tell your vision"—shaping the ideals, desires, and minds of children away from the Kingdom of God [116].
Allowing a television or a tablet to act as a surrogate parent is a dangerous convenience [116]. It acts as a deliberate distraction designed by the adversary to draw parents away from their greatest earthly blessing and responsibility: actively training their children [116]. While completely avoiding media in today's society is a challenge, limiting it strictly produces extraordinary, healthy fruit [115, 116]. By closing the door to secular programming, we prevent the enemy from exploiting gaps in our children's security and instead keep their minds pure and focused on the atmosphere of the home [105, 116].
<!-- EDITORIAL COMMENT: Separate the transferable principle of presence and shared responsibility from the speaker's gendered household model. Add examples for single parents, dual-income families, disability, illness, childcare, and economic necessity. -->
### Nurturing, Presence, and Owning Your Time
Effective child training cannot be outsourced; it is a precious gift and responsibility given directly by God to the parents [114, 118]. This training requires physical and mental presence [52]. You cannot train up a child in the way they should go if you are not there to walk beside them [52, 118].
This truth carries profound implications for the roles of both the mother and the father:
#### The Mother as the Nurturer
A mother's primary calling in most circumstances is to stay home, keeping the house and nurturing the family [117, 166]. In this sacred role, she fulfills her God-given ability to multiply [117, 118]. When a husband brings home a paycheck, the wife multiplies it into food and a meal; when provided a house, she multiplies it into a warm, peaceful home [118]. The work a mother does in the home far surpasses any secular career or paycheck [117, 118, 166]. Husbands must actively celebrate, honor, and protect this role rather than allowing the diabolical wisdom of the world to demean it [117, 118, 166].
#### The Father as the Provider of Time
For a mother to stay home, the father must be willing to step outside of the conventional worldly system to prioritize his family [120]. The Lord gave a specific word of wisdom: "Own your time." [120]. Fathers must seek the Lord for creative strategies to free up their schedules so they can be available, present parents [120]. This may mean starting a simple business or adjusting financial expectations to avoid the diabolical trap of Egypt, which demands two incomes and keeps parents too busy making bricks to build the family altar [117, 119, 120].
### Integrating Children into Daily Work
A common mistake parents make is separating their daily lives into strict categories of "work" (which is treated as a burden to be done alone) and "fun" (which is treated as the only desirable activity) [157]. While it is often faster and easier for a parent to paint a wall, do the dishes, or fold the laundry by themselves, this misses a critical opportunity for training [157].
Parents should actively integrate their children into all the affairs of daily life [115, 157]. Give an eight-year-old a paint roller and teach them how to paint; let the toddlers help push the buttons on the washing machine or play in the sink while doing dishes [157]. When children are included in these tasks, they do not grow up hating work or viewing it as an awful chore [157]. Instead, they learn that work is a natural, joyful expression of family life [157]. Ultimately, children do not need constant, artificial entertainment; they simply want to be with their parents, and sharing in daily labor bonds the family together in purpose [157].
### Themes captured for future book development
- Early training is presented as the establishment of a small number of clear, physical, understandable boundaries rather than an overwhelming list of rules.
- The source teaching uses blanket training as an example of teaching an infant to respond to a parent's voice and remain within a defined boundary.
- Boundaries are framed not only as restrictions but also as sources of security, predictability, and peace.
- Media is presented as a formative influence that can shape a child's imagination, desires, ideals, and worldview.
- The chapter calls parents to intentional presence rather than allowing devices to become surrogate caregivers.
- The teaching presents a home-centered maternal role and a time-owning, financially creative paternal role as its preferred family framework.
- Children are encouraged to participate in ordinary household work so that labor becomes a joyful expression of family life rather than an isolated burden.
- Family presence and shared work are presented as more formative than constant artificial entertainment.
### Editorial, pastoral, developmental, and safeguarding review
- Verify all Scripture references, quotations, translations, and word-study claims before publication.
- Confirm whether the chapter title "Textile Boundaries" is the intended wording or whether it refers specifically to blanket/physical boundaries; preserve the supplied title until the recording context is available.
- The blanket-training example involves an infant, physical correction, and a potentially hazardous environment. Before any parent-facing use, consult current pediatric, child-safety, and safeguarding guidance; do not reproduce the method as a universal instruction or imply that a "gentle tap" is necessary for learning obedience.
- Any early-childhood boundary practice should prioritize supervision, childproofing, developmentally appropriate expectations, non-violent redirection, and prevention of falls or access to unsafe objects. Infant behavior and repeated boundary-testing are normal developmental processes, not proof of an "old nature."
- The language that media is designed by "the adversary," tells a child's vision, or necessarily displaces parental responsibility should be identified as the speaker's theological framing. A final resource should distinguish thoughtful media guidance from fear-based claims and acknowledge educational, relational, accessibility, and family-context differences.
- The claims that child training cannot be outsourced and that mothers should ordinarily stay home should be presented as the teaching's family model, not as a universal measure of faithfulness or parental love. Account for single parents, dual-income households, adoptive and foster families, disability, illness, economic necessity, education, cultural context, and families with different vocational callings.
- The language about two incomes, Egypt, and "making bricks" should be retained as source imagery but carefully contextualized so financial hardship is not treated as a moral failure and so the final book does not impose unsafe or unrealistic economic expectations.
- When children participate in household work, include age-appropriate supervision and safety precautions. Paint, appliances, hot water, sinks, tools, chemicals, ladders, and other household hazards require adult judgment.
- Clarify what "own your time" means in practical, sustainable terms and avoid presenting entrepreneurship or schedule changes as guaranteed solutions for every family.
---
<!-- EDITORIAL COMMENT: Define "generational advancement" in plain language before using it as a repeated organizing term. Distinguish aspiration and inheritance from guarantees so children are not burdened by the metaphor. -->
## Chapter 5: Generational Advancement & the Covenant Family
### The Principle of Generational Advancement
A primary objective of the covenant family structure is what we call "generational advancement" [8, 178, 179]. This means that the spiritual victories, emotional healing, and behavioral discipline established by the parents become the floor upon which the children stand [8, 46, 162]. Because children raised in a genuinely secure, peaceful environment do not have to fight the same battles, wounds, or broken family dynamics that their parents had to overcome, they are uniquely positioned to stand on their parents' advancements and leap forward into their own divine destinies [8, 46, 162].
Our children still have their own struggles and areas of life that the Lord must work on [81]. This is a beautiful and necessary reality because everyone needs something in their life that forces them to cry out to the Lord and depend on Him [81]. However, generational advancement ensures that they do not start from scratch; they start from a position of inherited spiritual security [8, 46, 162].
### "Cutting the Penny in Half"
To keep our children from expecting perfection from us—while still keeping them engaged in the process of growth—we taught them a foundational concept [82]. When our daughters were around seven to nine years of age, we sat down for a teaching moment and told them [82]:
> "Girls, listen. Mom and I are going to be able to cut this penny in half. All this stuff on this half of the penny, the Father is going to work with us to remove it from our lives. But there is still going to be half of a penny left for you to deal with in your own life. And then you are going to have children, and you are going to cut that penny in half again. But you will always have half of the half that remains. Why? Because the Father needs to be sovereign to your children, and He will be." [82]
This simple, powerful teaching set a healthy expectation within our home [82]. Our daughters did not expect us to be flawless, perfect parents, but they constantly saw us leaning into the Lord, seeking His face, and working to deal with our own "half of the penny" [82]. This vulnerability and transparency created a beautiful, authentic environment where the entire family advanced together before the Lord [82].
### Covenant Priorities: God, Family, and Ministry
In establishing a stable, secure home, parents must walk in strict alignment with God's divine order of priorities [131]. We are firm believers in a covenant hierarchy that must never be compromised [131]:
1. **God First**
2. **Family Second**
3. **Ministry Third**
Tragically, when this order is inverted, the home suffers immensely [131]. We see this manifest in the lives of many "preacher's kids" who grow up bitter and distant from the Lord because their parents prioritized public ministry or the affairs of the church over the spiritual and emotional security of their own household [131]. Even for those carrying a powerful ministerial anointing, fathers must seek the Lord for the creative wisdom and divine provision necessary to protect their family time [131]. We must lift our vision higher to see that our children are our primary, most significant ministry [41, 131].
<!-- EDITORIAL COMMENT: Move child-safety, independent support, and accountability ahead of language about submission or local headship. The permission to seek help should be prominent. -->
### Relying on the Greater Body
No family is designed to function as an isolated island. Part of walking in the covenant is recognizing that you are not alone when you are parenting [133]. The Lord has intentionally structured the Body of Christ so that you have older, more mature people around you who have been given pastoral or apostolic responsibility over your life to speak wisdom, correction, and guidance into your household [133].
Furthermore, parents must actively teach and model honor for others [134]. In our home, we wanted our daughters to know that they were not restricted to only receiving help from us [134]. We gave them explicit permission that if they ever felt they needed outside spiritual help or counseling, they had the freedom to reach out directly to our trusted leaders and spiritual counselors [134]. By removing the fear of being threatened by outside help, we established a network of absolute security around our daughters [132, 134]. They grew up knowing that if Mom and Dad were struggling, there was a safe, ordained place in the local headship where help, restoration, and life-giving counseling could be found [133].
<!-- EDITORIAL COMMENT: Rewrite with trauma-informed and consent-based language. Trust, grief, custody realities, and existing parent-child relationships need explicit treatment; instant authority should not be assumed. -->
### Blended Families and Late Starts: Rebuilding the Foundation
We frequently meet parents who are entering the child training journey late—whether because they have recently come to know the Lord after their children are older, or because they are navigating the unique complexities of a blended family [147, 148]. In these situations, parents often ask how they can remove old, ungodly foundations that were laid before they entered the picture [147].
In these cases, the primary strategy is to become the model of the Father's love in their presence [148]. Walk before them as a consistent, unshakeable, secure place that they can count on day in and day out [148].
If you are dealing with older children where the primary training window has passed, look backward to see if there are any broken bridges of trust [148]. Seek the Lord and ask yourself: "Have I ever made any promises to my children that I have not kept?" [148]
If the answer is yes, you must do whatever it takes—no matter how difficult or costly to your finances—to keep your word and fulfill those promises [148]. This act of sacrificial integrity sends a powerful message that you are a parent of truth, modeling the covenant-keeping nature of our heavenly Father [148]. Combine this with doing extraordinary, unexpected things to display your love, and stay closely submitted to your local spiritual headship, who can help navigate the specific nuances of your household [148]. The Lord's grace is fully sufficient to heal, restore, and rebuild the foundations of any home that yields completely to His pattern [148].
### Themes captured for future book development
- Generational advancement is presented as children inheriting a foundation of spiritual security, emotional healing, and parental growth rather than having to begin from the same level of brokenness.
- The "cutting the penny in half" illustration gives children permission to see parental imperfection while also seeing parents actively submit their lives to God's transforming work.
- The teaching holds together two ideas: parents can remove or reduce patterns of brokenness, while children still have their own agency, struggles, and relationship with God.
- The proposed covenant priority is God first, family second, and ministry third.
- Children are presented as a primary ministry and a responsibility that should not be sacrificed to public ministry demands.
- Parenting is framed as a communal responsibility in which mature, trusted members of the local church can provide wisdom, correction, counseling, and restoration.
- Children are encouraged, in the source account, to have access to safe outside help rather than being limited to their parents alone.
- Parents who begin later or who are navigating blended-family complexity are called to rebuild trust through consistency, integrity, fulfilled promises, demonstrated love, and patient presence.
### Editorial, pastoral, developmental, and safeguarding review
- Verify all Scripture references, quotations, translations, and the theological language surrounding "generational advancement" before publication.
- Preserve the "cutting the penny in half" illustration and its source context, but clarify that children are not responsible for repairing or carrying their parents' unresolved wounds. Parental healing should reduce burdens on children, not assign them a quantified share of family brokenness.
- The teaching's statement that everyone needs struggles that force dependence on God should be handled carefully. Do not romanticize trauma, abuse, poverty, disability, mental-health challenges, or other suffering as divinely necessary or as evidence of spiritual deficiency.
- "God first, family second, ministry third" should be explained rather than used as a slogan that automatically resolves competing responsibilities. The final resource should address safety, marriage and parenting obligations, work, health, community, and the needs of vulnerable family members.
- The claim concerning "preacher's kids" should be qualified and supported if retained. Children's experiences of ministry families are varied, and bitterness or distance from faith should not be attributed simplistically to parental prioritization.
- Outside spiritual leaders, pastors, counselors, and "local headship" must be safe, qualified, accountable, and subject to appropriate safeguarding standards. Children should have confidential, age-appropriate ways to disclose concerns, including access to adults outside the parents' chosen circle when needed.
- "Submission" to spiritual authorities must never mean unquestioning obedience, secrecy, isolation, surrender of parental or child safety, or protection of leaders from scrutiny. The final book should explicitly preserve the right to seek independent professional help and report abuse.
- In blended families, rebuilding trust requires consent, patience, predictable care, respect for existing parent-child bonds, and attention to grief, loyalty conflicts, trauma, and legal/custody realities. A new spouse or parent figure cannot demand instant spiritual or relational authority.
- The instruction to fulfill promises "no matter how difficult or costly" should be bounded by safety, legality, financial sustainability, and the child's best interests. Parents should not keep an unsafe, impossible, manipulative, or harmful promise merely to preserve appearances.
- "Extraordinary, unexpected" demonstrations of love should be age-appropriate, non-coercive, and responsive to the child's actual needs rather than used to purchase trust or compliance.
- Clarify whether "late" refers to age, conversion, remarriage, or a previous parenting approach, and avoid framing earlier family history as an "ungodly foundation" in a way that shames parents or children.
---
<!-- EDITORIAL COMMENT: Place a brief safety/help page before the exercises. Keep source exercises clearly labeled and provide separately reviewed alternatives in the main workbook. -->
## Chapter 6: The Covenant Parenting Workbook — Reflection and Action
This workbook is designed to help you and your spouse move beyond information and step into active, structural transformation [119]. Covenant parenting is not a formula to be checked off; it is a living relationship that must be intentionally walked out before the Lord and before your children [51, 52]. Use these reflective questions, practical exercises, and covenant commitments to build a secure sanctuary of peace in your home [14, 130].
---
### Workbook — Chapter 1 focus: Modeling & Generational Vision
#### Heart-level reflections
**Dependent Sonship:** Jesus modeled a life of complete dependence on His Father ("I don't do anything but I see my father do it" [9]). In what areas of your daily life are you struggling to walk in instant obedience to your Heavenly Father? How might this struggle affect your children's ability to obey your voice [11]?
**The Power of the Model:** In the eyes of a young child, you represent God—His authority, His love, and His safety [10, 62]. When you come home on edge or exhausted, what kind of father or mother are you modeling [11, 60]?
**Multi-Generational Legacy:** Are there areas where you have fallen into passive parenting or short-sightedness [11, 12]? If you parented with a vision that extended three generations deep, what would you change about your household today [12, 55]?
#### Action steps
**The Refuge Audit:** Identify one major source of fear, anger, or insecurity in your own heart [13]. Set aside a specific time to bring this before the Lord, asking Him to deal with the root of this brokenness [13]. Re-read Proverbs 14:26:
> "In the reverent fear of the Lord, there is strong confidence, and his children will always have a place of refuge." [13]
Write down how you will yield to His healing hand this week to make your home a stronger refuge [13, 62].
---
<!-- EDITORIAL COMMENT: Rewrite before use with parents. Replace technique-oriented physical-discipline exercises with calm de-escalation, supervision, repair, boundaries, and help-seeking practices after professional review. -->
### Workbook — Chapter 2 focus: Redemptive Correction
#### Heart-level reflections
**The Rule of Calmness:** Do you ever correct your children out of irritation, frustration, or a desire for convenience [22, 101]? What is the difference between biblical discipline (which restores) and humanistic punishment (which lingers) [21, 76]?
**Removing Shame:** Does correction in your home leave a lingering shadow of guilt or emotional distance, or does it result in immediate restoration, hugs, and perfect right standing [21, 76, 79]?
#### Action steps
**The Hand Consecration:** Make a solemn covenant with your spouse today that your hands are strictly reserved for holding, hugging, and expressing love [20, 73]. Remove all wooden spoons, belts, and other rigid implements from your parenting toolbox [20, 73].
**Setting Up the "Correction Room":** Identify a private room in your house (a bedroom or bathroom) that will serve as the private place of correction [23, 163]. Place a tender, limber lilac switch (smooth, with bumps shaved off) in that designated room [20, 164]. Agree to never correct your child in front of guests, siblings, or in public [23, 163].
**Practice Stopping:** If you feel your blood pressure rising during a correction, commit to saying: "I am not in a position to handle this right now." Ask your spouse to cover for you, or find a controlled situation before the Lord until you can speak in a calm, tender voice [22, 78, 101].
---
### Workbook — Chapter 3 focus: Parental Unity & Atmosphere
#### Heart-level reflections
**The Cracks of Division:** Children are astute observers who look for alignment [24]. Can your children find any "cracks" between you and your spouse to get a different answer [24, 189]?
**Private Alignment:** Have you fallen into the trap of correcting, undermining, or arguing with your spouse in front of the kids [26, 193]? How can you build a stronger habit of waiting until you are behind closed doors to resolve parenting differences [26, 27, 192]?
#### Action steps
**The "What Did They Say?" Protocol:** Practice the immediate gatekeeping response. Whenever a child asks for permission or a treat, always ask: "What did Dad say?" or "What did Mom say?" [24, 25, 198]. If the other spouse has given an answer, the discussion is permanently closed [25, 199].
**The 30-Day Breakfast Covenant:** Set your alarm 30 minutes earlier. Sit down together for breakfast every day for the next 30 days [32, 210]. Each morning, share one specific, particular detail that you sincerely estimate and appreciate about your spouse [32, 33, 211, 213]. Focus on finding the good, and watch the atmosphere of your marriage and home transform [34, 211].
**The Sunset Covenant:** Commit to the rule of Ephesians 4:26:
> "...do not let the sun go down on your anger." [34, 210]
Agree that no matter the disagreement, you will pray individually, come together, ask for forgiveness, and pray together before sleeping [34, 208].
---
<!-- EDITORIAL COMMENT: Consider placing media, presence, and shared-work exercises before any infant-boundary discussion, moving from broadly applicable relational practices to age-specific material. -->
### Workbook — Chapter 4 focus: Guarding Influences & Daily Wisdom
#### Heart-level reflections
**Surrogate Parenting:** Is television or digital media acting as a surrogate parent or a distraction from your training responsibilities [38, 134]? How is "tell-a-vision" programming shaping the minds and desires of your children away from the Kingdom [38, 134]?
**Owning Your Time:** Fathers, are you caught in the "Egyptian" bricks-and-mortar trap of overworking at the expense of being present to train your children [39, 137]? What adjustments do you need to make to own your time [39, 138]?
#### Action steps
**The Blanket Training Trial:** For infants (6–9 months), lay down a small blanket on the floor [36, 91]. Practice giving the quiet command: "I don't want you going off of that." [37, 91] Gently correct their hand when they test the boundary, and place them back on [37, 91]. Use this tool to train their ears to listen to your voice [37, 91].
**Integrating vs. Separating:** Stop treating household chores as a solo burden. This week, give your child a paint roller, have them help push buttons on the washing machine, or pull up a chair to help wash dishes [40, 175]. Let them participate in your daily life, reinforcing that the family works together with joy [40, 175].
---
### Workbook — Chapter 5 focus: Generational Advancement & Covenant Priorities
#### Heart-level reflections
**The Penny in Half:** Do your children carry the heavy burden of expecting you to be perfect [42, 43]? How can you model humility and the pursuit of growth rather than a false image of perfection [43, 95]?
**The Priority Order:** Honestly assess your calendar and energy. Are you living according to the covenant order: God First, Family Second, Ministry/Work Third [43, 44, 144]?
#### Action steps
**The "Half-Penny" Conversation:** Gather your children (especially those ages 7–9 or older) [42, 95]. Share the "half-penny" teaching with them:
> "Mom and I are not perfect parents, but we are working with the Lord to clear away old battles so you don't have to fight them [41, 42, 95]. There will still be a portion left for you to deal with, but you will stand on our shoulders." [41, 42, 95]
**Rebuilding Broken Bridges (Late Starts / Blended Families):** Seek the Holy Spirit and ask: "Have I ever made any promises to my children that I have not kept?" [47, 161] If a promise comes to mind—no matter how small or how financially challenging—make a concrete plan to keep your word and fulfill that promise this month [47, 161].
### Themes captured for future workbook development
- The material moves from teaching content into self-examination, shared marital practices, and concrete household commitments.
- The workbook treats parental transformation and modeling as the starting point for changes in the home.
- The questions invite parents to examine obedience, emotional regulation, presence, priorities, division, media use, and generational vision.
- The proposed exercises include a refuge audit, a calmness practice, parental-unity protocols, a 30-day appreciation covenant, media and time audits, shared household work, a half-penny conversation, and promise-repair work.
- The source workbook is intended to be used by spouses together, not merely read individually.
- Each chapter's practical section mirrors the book's larger sequence: model first, correct redemptively, build unity, guard influences, and advance the covenant family.
### Editorial, pastoral, developmental, and safeguarding review
- Verify all Scripture references, quotations, translations, page/source-number citations, and the relationship between the workbook citations and the original audio/NotebookLM source.
- The physical-discipline exercises in Sections 2 and 4 should not be presented as ready-to-use instructions in a parent-facing workbook. Replace or substantially revise them after professional safeguarding review, with non-violent, age-appropriate alternatives centered on supervision, redirection, natural/logical consequences, repair, and emotional regulation.
- The "correction room" exercise should not encourage isolating a child with an adult or imply that privacy overrides safety, accountability, or a child's right to disclose harm. Any final version should include clear safeguarding boundaries and appropriate access to trusted, independent help.
- The suggestion to place a switch in the home should be removed from a practical action checklist unless the final theological and safeguarding review explicitly justifies its inclusion; the current source note must not be mistaken for an endorsement.
- "Perfect right standing" and the idea that correction removes a spiritual debt require theological review so that children are not taught that physical pain is required for forgiveness, belonging, or restoration.
- "If the other spouse has given an answer, the discussion is permanently closed" should be softened to allow clarification, correction of mistakes, accessibility needs, changing circumstances, and safe disclosure. Children must not be trained to stop asking questions or reporting concerns.
- The 30-day breakfast and sunset covenants should allow for work schedules, illness, disability, conflict de-escalation, sleep, safety, and circumstances in which immediate reconciliation is not appropriate.
- The blanket-training trial should not be reproduced without current pediatric and child-safety review. Infant crawling and boundary-testing are normal development; safe supervision and childproofing should come before obedience training.
- The "Egyptian" overwork metaphor and "own your time" exercise should not shame parents who must work, rely on childcare, or manage financial hardship. Include varied family structures and realistic economic constraints.
- Household-work activities require age-appropriate supervision around paint, appliances, water, heat, tools, chemicals, and other hazards.
- The half-penny conversation should be adapted so children are not assigned responsibility for parental wounds or told they must inherit a predetermined portion of brokenness. Emphasize parental accountability, the child's agency, and freedom to seek help.
- Promise-repair exercises should be bounded by safety, legality, financial sustainability, custody arrangements, and the child's best interests; a parent should not fulfill a harmful or impossible promise.
- The workbook should include an explicit "when to seek help" page covering trusted pastoral care, licensed counseling, child-protection concerns, domestic abuse, mental-health crises, and situations in which a parent cannot stay calm or keep a child safe.
---
<!-- EDITORIAL COMMENT: Consider placing this calendar after a revised workbook and a safety/help section. The calendar currently repeats source exercises that the workbook flags for review. -->
## The 30-Day Covenant Parenting Challenge Calendar
This practical, day-by-day companion calendar is designed to help you and your spouse actively move from information to structural, heart-level transformation in your home [48]. Covenant parenting is a living relationship that must be intentionally walked out before the Lord and before your children [48, 62]. Use this daily tracker to build a secure sanctuary of peace in your household [48, 141].
---
### Week 1: Laying the Marital Foundation
The spiritual atmosphere of the home is anchored in the absolute unity of husband and wife [3, 199]. This week, we focus entirely on sealing the "cracks" of division, aligning our hearts privately, and nurturing horizontal communication [3, 24, 31, 200].
#### Day 1: The Sunset Covenant (Ephesians 4:26)
**Action:** Sit down with your spouse tonight and make a solemn covenant that you will never go to sleep angry [34, 218]. If a disagreement arises, commit to taking a private "time out" to pray individually, then come together to ask for forgiveness and pray together before sleeping [34, 216, 219].
**Scripture:** "...do not let the sun go down on your anger." [34, 54, 218, 221]
#### Day 2: Launching the 30-Day Breakfast Covenant
**Action:** Set your alarm 30 minutes earlier [54, 221]. Sit down for breakfast together (just the two of you) and share one specific, particular detail you sincerely appreciate and estimate about your spouse [32, 33, 54, 221, 224]. **Rule for Husbands:** Avoid generalities like "you look good"—find a particular, concrete action to celebrate [33, 224].
**Scripture:** "Seek, and you will find." [33, 222]
#### Day 3: The "What Did Dad/Mom Say?" Gatekeeping Protocol
**Action:** Align on the gatekeeping protocol [54, 210]. Whenever a child approaches you asking for a treat, permission, or a change in rules, your immediate, unthinking response must be: "What did Dad say?" or "What did Mom say?" [24, 25, 54, 210]. If the other spouse has given an answer, the discussion is permanently closed [25, 54, 210].
<!-- EDITORIAL COMMENT: The source labels this Day 4 activity as "Day 3." Preserve the source heading for traceability, but reconcile the breakfast count before publication. -->
#### Day 4: Day 3 of the Breakfast Covenant
**Action:** Share your daily specific deposit [32, 33]. Today, focus on celebrating how your spouse handles pressure or exhaustion [30, 143, 201].
#### Day 5: Private Discipline Alignment Check
**Action:** Covenant together that you will never correct, undermine, or disagree with each other's disciplinary actions in front of the children [26, 204, 205]. If you disagree with how a situation was handled, deal with your own irritation privately and discuss it strictly behind closed doors later [27, 211].
#### Day 6: Modeling Humility & Repentance
**Action:** If you slipped up this week and displayed division or disrespect in front of your children, execute the restoration protocol [28, 205]. First, apologize to your spouse privately:
> "My love, I am sorry. I realize that I made you look bad in front of the child, and I repent." [28, 205]
Second, go to the child:
> "What I said to you about your mother/father was wrong. I want to apologize to you for dishonoring them in front of you." [29, 206]
#### Day 7: Weekly Reflection & Rest
**Action:** During your breakfast covenant today, evaluate the atmosphere of the home [32, 221]. Has the spirit of peace and security increased? Ask: "Are we taking time to truly listen to one another's hearts, or are we just waiting for our turn to speak?" [31, 213].
---
### Week 2: Establishing Heart-Level Security & Early Boundaries
This week, we transition into early training boundaries and emotional security. We examine how our physical actions, voice tone, and early limits build a protective shield around our children [3, 20, 37, 103].
#### Day 8: Consecrating the Hands & the Voice
**Action:** Consecrate your hands and voice today [20, 226]. Declare that your hands are made exclusively for hugging, holding, and expressing love and tenderness [20, 84, 226]. Agree that your voice will never be the vehicle of correction, but only of instruction, praise, and love [226]. Remove all rigid correction implements (belts, heavy spoons) from the home [20, 84, 52].
#### Day 9: Establishing the "Correction Room"
**Action:** Identify a private, designated area in your house (a bedroom or bathroom) that will serve as the private place of correction [23, 174]. Place a tender, limber lilac switch (smooth, with bumps shaved off) in that room [20, 175]. Commit to never correcting your children publicly or in front of siblings [23, 174].
#### Day 10: Expressive Love Deposits
**Action:** Be intentionally expressive today [139, 140]. Hug your children unexpectedly, write them a sweet note, or tell them specific reasons why you love them and estimate who they are [139, 140]. Ensure they know their security is unshakeable [87, 103].
#### Day 11: Blanket Training Setup (For Infants 6–9 Months)
**Action:** Spread a small blanket on the floor [36, 102]. Place the infant on it and say quietly: "I don't want you going off of that." [37, 102] When they attempt to crawl off, gently tap their hand to associate disobedience with instant correction, and place them back on the blanket [37, 102]. Repeat this several times in a focused, calm session [37, 102]. **(For older children, choose a single, clear boundary—like not touching the coffee table—to train their ears to listen to your voice [102].)**
#### Day 12: The Rule of Calmness Practice
**Action:** If you feel your blood pressure rising or feel on edge during a disciplinary moment today, practice stopping immediately [22, 112]. Say to your spouse: "I am not in a position to handle this right now," and let them step in and cover for you, or find a calm place before the Lord before addressing the situation [22, 30, 52, 112, 185].
#### Day 13: Instant Obedience Check
**Action:** Evaluate if you have fallen into the trap of counting to three or repeating commands multiple times [227]. Commit today to expecting instant obedience to your voice [141, 227]. Give clear, loving instruction once, and address any delay as disobedience [140, 141, 227].
#### Day 14: Mid-Point Reflection
**Action:** Reflect on Proverbs 14:26 [3, 74]. Write down how growing in your own reverent fear and instant obedience to the Heavenly Father has created a physical and spiritual "shield of refuge" for your children this week [3, 13, 74].
---
### Week 3: Integrating Work, Joy, and Presence
We are called to own our time, stay present, and include our children in the everyday affairs of life so they learn that labor is a joyful, natural expression of the family [5, 39, 40].
#### Day 15: Media Audit ("Tell-a-Vision")
**Action:** Walk through your home and evaluate the media intake [38, 145]. Identify where tablets, phones, or television are acting as "surrogate parents" or distractions [38, 145]. Agree to strictly limit or close the door to secular programming to keep the atmosphere of the home pure [38, 145].
#### Day 16: Erasing the Work vs. Fun Boundary
**Action:** Stop treating household chores as a solo burden [40, 186]. Today, pull up a chair and let your toddler help wash dishes, push the buttons on the washing machine, fold laundry, or give your older child a paint roller to help paint [40, 186]. Make work a shared, joyful experience of living life together [40, 186].
#### Day 17: Father's Covenant: Owning Your Time
**Action:** Fathers, spend time before the Lord today asking for creative, Kingdom strategies to "own your time" [39, 149]. Examine your schedule to ensure you are physically and mentally present for your family rather than caught in the "Egyptian brick-making trap" of excessive work [39, 148, 149].
#### Day 18: Celebrating the Mother's Role
**Action:** Husbands, take time today to actively celebrate, verbalize, and honor the sacred work your wife does in nurturing the home and multiplying your family's resources [30, 39, 147]. Let her know that her presence far surpasses any secular career or paycheck [39, 146, 147].
#### Day 19: The "I Will Say Yes" Promise
**Action:** Look for opportunities to say "Yes!" to your children today [151]. Tell them: "There are times I have to say no to protect you, but I am looking for every opportunity to say yes to you." [151, 152] Plan a family-appropriate trip, surprise outing, or special treat to fulfill this promise [151, 153].
#### Day 20: Outdoor Activity Shift
**Action:** If the atmosphere of the home feels pent up or stressful today, physically shift locations [179, 180]. Take the children outside to build a fort, play in the yard, go to the park, or take a simple drive [179, 180]. Use nature and play as a release valve for energy [178, 180].
#### Day 21: Weekly Reflection: Celebration of Individuality
**Action:** Discuss how your children are uniquely wired [118, 121]. Repent of any verbal comparisons between siblings [119, 120]. Ask the Holy Spirit for custom wisdom (Rhema word) for each child's specific, unique design [117, 118].
---
### Week 4: Generational Legacy & Deep Restoration
We parent with a multi-generational vision, preparing our children to stand on our spiritual shoulders and leap forward into their own divine destinies [6, 12, 41].
#### Day 22: The "Half-Penny" Conversation
**Action:** Gather your children (especially those ages 7–9 or older) for a teaching moment [42, 106]. Explain the "half-penny" concept:
> "Mom and Dad are not perfect, and we are working with the Lord to clear away old battles so you don't have to fight them [42, 106]. There will still be a portion left for you to deal with under His sovereign hand, but you will stand on our shoulders." [41, 42, 106]
#### Day 23: Rebuilding Broken Bridges (Late Starts & Blended Families)
**Action:** Ask the Holy Spirit: "Have I ever made any promises to my children that I have not kept?" [47, 172] If a promise comes to mind—no matter how small or financially difficult—write down a concrete plan to keep your word and fulfill it this month [47, 172]. Fulfilling your promises models our covenant-keeping Father [47, 172].
#### Day 24: Covenant Priority Check
**Action:** Audit your calendar, finances, and energy [57]. Are you walking in strict alignment with God's covenant order of priorities: God First, Family Second, Ministry/Work Third? [43, 44, 57] Adjust any inverted priorities today [44].
#### Day 25: Honoring the Greater Body
**Action:** Teach your children that they are not alone, and that they have the freedom to reach out to trusted, ordained local leaders or counseling elders if they ever need help or counsel [45, 157]. Model this by showing submission and honor to local headship yourself [45, 157].
#### Day 26: Facing Insecurities
**Action:** Realize that any insecurities you carry do not have to be passed down [14, 104]. Bring your deep-seated fears or past family wounds to the Lord, allowing Him to heal you so that your children can walk in total, inherited spiritual security [14, 73, 104, 105].
<!-- EDITORIAL COMMENT: Reconcile the breakfast count before publication. The calendar launches the practice on Day 2, labels Day 4 as Day 3, and calls Day 27 the 30th breakfast; the schedule does not clearly support all three labels. -->
#### Day 27: Concluding the 30-Day Breakfast Covenant Challenge
**Action:** As you complete your 30th breakfast together, commit to making these daily specific deposits a permanent, lifelong habit of your marriage [32, 223]. Celebrate how focusing on finding the good has transformed your relationship [34, 222].
#### Day 28: Preparing the Next Generation to Model
**Action:** Reflect on Acts 13:36 [12]. Pray a blessing over your children, asking the Lord to equip them to serve His purposes faithfully in their own generation [12, 65].
---
### Days 29–30: Evaluation & Generational Forwarding
#### Day 29: Joint Spouse Review
**Action:** Review the completed 30-day challenge. Where did you see the most significant fruit? Where did the Holy Spirit highlight areas that still need to be "narrowed up" or healed? [14, 73, 76]
<!-- EDITORIAL COMMENT: Rewrite the "ceiling becomes floor" language as an aspirational blessing rather than a guarantee or an obligation placed on children to reproduce a parent's ministry, theology, or achievements. -->
#### Day 30: Sealing the Legacy
**Action:** Commit this parenting journey to the Lord in prayer [193]. Declare that your family is stepping into generational advancement, and that the spiritual ceiling of your life has officially become the floor upon which your children stand [6, 41, 105].
### Development themes
- The calendar begins with marital unity and communication before moving into child-focused boundaries and correction.
- Its sequence progresses from household atmosphere, to heart-level security, to presence and shared work, and finally to generational legacy and restoration.
- The daily practices emphasize appreciation, repentance, calmness, parental consistency, presence, media awareness, shared labor, individualized attention, promise keeping, and prayer.
- The calendar translates the broader teaching into a structured rhythm of daily action, weekly reflection, and final evaluation.
- The challenge repeatedly connects parental transformation with the security and future formation of children.
- The calendar includes both couple-centered practices and child-centered conversations, allowing later editions to distinguish exercises for spouses, infants, older children, blended families, and ministry families.
### Editorial, pastoral, developmental, and safeguarding review
- Verify all Scripture references, quotations, translations, page/source-number citations, and the relationship between this calendar's citations and the original audio/NotebookLM source.
- The calendar contains repeated instructions to use a switch, tap an infant's hand, and conduct private physical correction. These instructions should not be distributed as a ready-to-use parent program. Before any public edition, replace or substantially revise them after professional pediatric, child-development, and safeguarding review, centering non-violent redirection, supervision, natural/logical consequences, repair, and emotional regulation.
- The "correction room" should not be framed as a private space where a child is isolated with an adult without safety, accountability, and access to independent help. Privacy should protect dignity, not conceal harm.
- "Never go to sleep angry" and the sunset covenant should allow safe time-outs, sleep, boundaries, and delayed conversation. Immediate reconciliation is not appropriate in every conflict, particularly where there is intimidation, coercive control, abuse, or escalating danger.
- The "What Did Dad/Mom Say?" protocol and the phrase "the discussion is permanently closed" require safeguards. Parents may need to correct a mistake, hear a child's question, accommodate disability or changing circumstances, or receive a disclosure of harm. Unity must not become silencing.
- Day 8's instruction that the voice should never be a vehicle of correction conflicts with the broader source teaching's emphasis on correcting disobedience and should be clarified in the original recording context.
- Day 13's "instant obedience" exercise should be reviewed developmentally. Young children may need repetition, processing time, communication support, or an explanation of a request; delay is not automatically defiance.
- The 30-day breakfast count appears internally inconsistent: the calendar launches the breakfast covenant on Day 2, labels Day 4 as "Day 3," and calls Day 27 the 30th breakfast even though the listed daily breakfast actions do not clearly account for thirty meetings. Reconcile the schedule before publication.
- The "I Will Say Yes" promise should not pressure parents into purchasing outings or treats, or make a child's felt love dependent on receiving a yes. Define realistic, relational ways to say yes while preserving necessary boundaries and financial sustainability.
- The "Egyptian brick-making trap," the instruction that a mother's presence surpasses a secular career, and the gendered roles should be presented as the speaker's family framework, not a universal measure of faithfulness. Include single parents, dual-income families, childcare, disability, illness, economic necessity, adoptive/foster families, and varied vocational callings.
- Outdoor drives and activities require ordinary safety planning, supervision, weather awareness, transportation restraints, and age-appropriate expectations.
- Day 21's language about each child being uniquely wired is valuable, but "Rhema word" should be explained and should not replace listening to the child, developmental knowledge, qualified support, or medical/mental-health care.
- The half-penny exercise should not tell children they inherit a predetermined portion of parental brokenness. Emphasize parental accountability, the child's agency, and freedom to seek help.
- Trusted local leaders, "counseling elders," and "local headship" must be qualified, accountable, safeguarding-compliant, and open to independent scrutiny. Children must retain access to safe adults outside the parents' chosen leadership circle and to licensed professional help.
- "Submission" to church authority must never require secrecy, unquestioning obedience, isolation, surrender of safety, or protection of leaders from scrutiny.
- Promise-repair exercises should be bounded by safety, legality, custody arrangements, financial sustainability, and the child's best interests. An unsafe or impossible promise should be addressed honestly rather than fulfilled at any cost.
- "Generational forwarding" and the statement that a parent's spiritual ceiling becomes a child's floor should be framed as an aspirational metaphor, not a guarantee or a burden placed on children to continue a parent's ministry or spiritual achievements.
@@ -0,0 +1,72 @@
---
title: EATC Inaugural Meeting — Teaching on Covenant
meeting_date: 2021-01-16
tags: [eatc, emi, meeting, covenant, leadership]
source: EATC-Covenant-Teaching-Summaries.pdf
---
# EATC Inaugural Meeting — Teaching on Covenant
**Meeting date:** January 16, 2021
**Source:** `EATC-Covenant-Teaching-Summaries.pdf`
**Source type:** Summary of meeting transcript
## Central purpose
The teaching presented covenant as the foundation for spiritual unity, shared governance, and coordinated action within EATC. The group was described as an “ecclesia,” a “church within a church,” or a “headship company” intended to help lead transformation in the Port St. Lucie region.
The stated purpose was not merely educational. The teaching was preparation for formalizing binding commitments through a written covenant and spoken declarations.
## Main objectives described
### Establish binding commitment
- Covenant commitments were to be verbalized rather than left theoretical.
- The teaching prepared participants for formal covenant-making.
- The covenant was presented as a serious, non-negotiable commitment among members.
### Establish five covenant relationships
The summary identifies five relationships described in the teaching:
1. Covenant with God concerning His purpose
2. Covenant with the EMI family
3. Covenant with Port St. Lucie
4. Covenant with one another
5. Covenant with Apostle Boney
### Prevent internal division
The teaching framed covenant as protection against internal betrayal, discord, and division. It emphasized loyalty, love, restoration, and responsibility toward fellow members.
### Empower unified action
Genesis 11 was used as a model of corporate unity: people with one language and purpose can accomplish what they set out to do. EATC was presented as a unified foundation for collective action.
### Form a governing leadership body
Members were described as catalysts or agents for change in the region—not simply church attendees, but a foundational leadership structure for spiritual, civic, and regional transformation.
## Scriptural and illustrative foundations
The summary records references to:
- Genesis 18:18–19 — covenant extending to the household and responsibility to keep the way of the Lord
- Exodus 19:4–6 — obedience and covenant identity
- Matthew 24:15 — spiritual danger associated with internal betrayal
- Proverbs 6:16–19 — sowing discord among brethren as an abomination
- 1 John 2:18–19 — the danger of opposition arising from within
- 1 Corinthians 13 — love as the foundation of covenant relationship
- Galatians 3:15 — the binding nature of a confirmed covenant
- Acts 4:32–34 — the early church as a model of shared stewardship
- 1 John 5:14–16 — responsibility to seek restoration and life for a brother
- Galatians 6:1 — restoring someone gently when caught in sin
- The Navy SEAL Creed — used as a secular comparison for loyalty and sacrifice
## Overall interpretation of the meeting
The inaugural teaching established EATC’s identity around covenant community, shared purpose, accountable relationships, and leadership for regional transformation. It served as foundational preparation for a formal covenant document and subsequent spoken commitments.
## Source note
This note preserves the supplied summary’s description of the meeting. It does not independently verify the transcript quotations, timestamps, or theological interpretations.
+87
View File
@@ -0,0 +1,87 @@
---
title: Understanding the Purpose of EATC
meeting_date: 2021-02-06
tags: [eatc, emi, meeting, covenant, apostolic-leadership, port-st-lucie]
source: Understanding-the-purpose-of-EATC-feb-6-2021-m4a_Aug_25__2026.pdf
---
# Understanding the Purpose of EATC
**Recording title date:** February 6, 2021
**Source file:** `Understanding-the-purpose-of-EATC-feb-6-2021-m4a_Aug_25__2026.pdf`
**Source transcription:** Fireflies.ai summary
**PDF-generated meeting date:** August 26, 2026; likely the transcription/export date rather than the recording date
## Summary
The meeting described EATC as a spiritual and leadership training center intended to develop apostolic leadership, form a covenant community, and establish a model for regional and eventually global replication. Port St. Lucie was presented as the initial geographic focus.
The meeting also addressed covenant adoption, teaching materials, confidentiality, future declarations, and practical steps for distributing recordings and documents.
## Vision and strategic direction
- EATC was presented as a center for spiritual and regional leadership in Port St. Lucie.
- The stated ambition was for the model to be replicated in other regions globally.
- The vision included placing people in key spiritual, civic, and political leadership roles.
- Port St. Lucie was described as a spiritually significant location for kingdom purposes.
- Biblical examples included Nehemiah’s rebuilding work and Daniel’s rise to authority in Babylon.
- The long-term vision included developing land, businesses, and regional influence.
## Spiritual warfare and authority
The meeting included declarations concerning spiritual warfare, territorial authority, and opposition to the mission. The summary describes a decree calling spiritual and natural authorities to support the building of God’s kingdom in the region and to provide resources.
These statements are recorded as part of the meeting’s teaching and declarations, not as independently verified external facts.
## Covenant community
The covenant was presented as the basis for unity, accountability, and operational cohesion.
Members were expected to commit to:
- Loyalty and transparency
- Love and forgiveness
- Mutual support
- Confidentiality
- Shared mission and responsibility
The summary describes a blood-covenant ritual and plans to register and sign a formal covenant document. It also says that covenant discussions were treated as confidential and that the community’s priority was distinguished from the wider family.
## Teaching and training materials
The meeting referenced teaching resources on:
- Apostolic leadership
- Honor
- Spiritual warfare
- Covenant
- Breaking limits
- Apostolic centers and transformation
- Blood covenant and horizontal covenant
Authors and sources mentioned include Tudor Bismarck, Alan Carron, C.H. Pierce, and other apostolic teaching resources. The group planned to accelerate study and make recordings and materials available to members.
## Community and meeting practices
- Meetings were described as invitation-only.
- Members were instructed not to invite others without approval.
- The principle that what happens in the meetings stays within the group was emphasized.
- WhatsApp and email were used for covenant-document distribution.
- Technical support was needed for recording, compression, and file sharing.
- Regular Saturday meetings were planned.
- Prayer for practical needs such as housing, jobs, food, and spiritual empowerment was included.
## Action items recorded
- **Apostle John Boney:** Finalize the covenant document with members’ names and distribute it for review and signing.
- **David Hewitt:** Compile and share a comprehensive list of teaching materials.
- **Unassigned:** Contact the Tudor Bismarck organization and Robin Bullock for access to referenced teaching videos.
- **Chris:** Prepare and finalize the covenant agreement and send it to the group for signatures.
- **All members:** Review the covenant and related teachings, then prepare to affirm the covenant publicly.
- **Meeting organizers:** Post the covenant and prior recordings to the group’s WhatsApp or mailing list.
- **Meeting organizer:** Facilitate public verbal affirmation at the next meeting.
- **Group:** Keep Saturdays open for future meetings and covenant-renewal sessions.
## Source note
This note is a structured consolidation of the supplied PDF summary. It preserves the meeting’s reported vision, teachings, declarations, and action items without independently verifying them.
@@ -0,0 +1,93 @@
---
title: Understanding the Purpose of EATC — Part 2
meeting_date: 2021-02-20
tags: [eatc, emi, meeting, covenant, leadership-development, port-st-lucie]
source: Understanding-the-purpose-of-EATC-part-2-02-20-2021-m4a_Aug_25__2026.pdf
---
# Understanding the Purpose of EATC — Part 2
**Recording title date:** February 20, 2021
**Source file:** `Understanding-the-purpose-of-EATC-part-2-02-20-2021-m4a_Aug_25__2026.pdf`
**Source transcription:** Fireflies.ai summary
**PDF-generated meeting date:** August 26, 2026; likely the transcription/export date rather than the recording date
## Summary
This meeting focused on leadership selection, spiritual preparation, covenant accountability, divine assignment, and expansion beyond the original Port St. Lucie setting.
The summary describes a selective leadership pipeline: from an initial group of approximately 50 people, a smaller group of 12 would qualify as close leaders based on spiritual readiness, commitment, and response to God’s purpose.
## Leadership development and qualification
- Leadership qualification was presented as based on spiritual readiness rather than convenience or personal ambition.
- The model was compared with Jesus’ disciples, where those closest to leadership carried greater expectations.
- Preparation was described as requiring endurance, testing, hardship, and long-term growth.
- Moses was used as an example of extended preparation before leadership.
- Future leaders were expected to be equipped for church, civic, and local-government roles.
- Leaders’ reputations were described as connected to their faithfulness to the covenant.
## Divine assignment and humility
The teaching emphasized that members do not choose their own positions; assignments are determined by God. The intended result was humility, submission, and reduced rivalry among participants.
Understanding one’s calling was connected to close relationship with leadership and spiritual mentorship.
## Biblical vision and spiritual foundation
Isaiah 49 was presented as a central scripture for endurance, calling, protection, timing, and eventual honor before kings and nations.
The “polished arrow in a quiver” metaphor was used to describe:
- Preparation before public activation
- Dependence on the archer, representing God’s direction
- The need to function within a collective purpose
- Protection from premature exposure and opposition
- Patience until the appropriate time
The meeting also emphasized the power and responsibility of spoken words, the refinement of one’s voice, and obedience learned through suffering.
## Covenant and group identity
- A spoken covenant declaration was described as mandatory for group membership.
- The covenant was presented as exclusive and binding.
- Designated people were responsible for documenting covenant declarations.
- Members were described as a spiritual family with high standards and mutual accountability.
- Personal struggles and “purging” were framed as part of preparation for spiritual maturity.
- One participant described the transition into the group as a peaceful sense of “coming home.”
## Mission expansion
The meeting described a long-term expansion strategy:
- Sending leaders to other regions and establishing new centers
- Developing leaders for church, civic, and political influence
- Expanding beyond Port St. Lucie as the mission grows
- Treating Africa as a strategic gateway for connections to Mexico, Asia, Australia, and Europe
- Producing leaders who could serve as kingdom ambassadors in multiple spheres
The summary says the meeting referred to establishing new “EACs” in other regions; this wording is retained from the source and may require confirmation against the recording or surrounding materials.
## Spiritual timing and protection
The meeting stressed that ministry effectiveness depends on God’s timing. Premature action was described as a risk that could undermine the mission or expose leaders before they were ready.
Additional themes included:
- Obedience before public recognition
- Refining the group’s spiritual voice
- Completing the vision entrusted by spiritual mentors
- Protecting leaders during preparation
- Waiting for the right time before activation
## Action items recorded
- **Marlene:** Collect and consolidate covenant information, ensure it is documented accurately, and coordinate formal covenant entry.
- **All members:** Review the covenant and formally declare it aloud.
- **Charleston:** Confirm covenant review and prepare a personal declaration.
- **Ibrahim:** Speak individually to affirm his covenant commitment when prompted.
- **Group members:** Internalize the leadership standards and prepare for future leadership and ambassadorial roles.
## Source note
This note is a structured consolidation of the supplied PDF summary. It records the meeting’s reported teachings and action items without independently verifying theological claims, quotations, or transcript timestamps.
+29
View File
@@ -0,0 +1,29 @@
---
title: EATC Meeting Notes
created: 2026-09-05
updated: 2026-09-05
tags: [eatc, emi, meetings, covenant, leadership]
---
# EATC Meeting Notes
Separate notes from the EATC teaching and purpose meetings received from prior meeting records. These notes preserve the meetings as individual documents rather than merging them into one transcript.
## Meetings
- [[2021-01-16-eatc-inaugural-covenant-teaching]] — Teaching on covenant; inaugural EATC meeting
- [[2021-02-06-eatc-purpose]] — Understanding the purpose of EATC
- [[2021-02-20-eatc-purpose-part-2]] — Understanding the purpose of EATC, part 2
- [[audio-transcription-2026-09-05]] — Full transcription of newly supplied audio; PDF version: `audio-transcription-2026-09-05.pdf`
## Related brain notes
- [[emi_portfolio_data_collection_2026]] — identifies Fort Pierce as the EATC/EMI Training Center
- [[emic_fl_board_meeting_history_2024-2026]] — later EMIC Florida board-meeting history
- [[emic_fl_bylaws_summary_2024-12-30]] — EMIC Florida bylaws summary
## Source and dating note
The two “Understanding the purpose of EATC” PDFs contain recording titles dated February 6 and February 20, 2021, while their generated summaries list August 26, 2026 as a meeting date. The recording-title dates are used as the meeting dates here; August 26, 2026 is retained as the apparent transcription/generated date rather than treated as the meeting date.
These are structured summaries of supplied PDFs, not independent verification of the claims or decisions described in the recordings.
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,92 @@
---
Date: 2026-09-04
Author: Hermes
Tags: #emi #chiapas #leadership #latinamerica #meeting-notes
Source: WhatsApp audio attachment; raw transcript preserved separately
Related: [[latin_america_emi_collaboration_2026]]
---
# EMI Chiapas 2026 — Audio Meeting Notes
## Source and fidelity
- Source audio: `/Users/adolforeyna/.hermes/cache/documents/doc_0e0b78113b40_audio1786403127.m4a`
- Duration: 40m 13s
- Raw transcription: `/Users/adolforeyna/Projects/MacMiniMCP/generated-transcriptions/transcription-1788608886475.json`
- Engine: Apple SpeechAnalyzer + SpeechTranscriber, en-US
- The recording contains Spanish/English mixed speech. Some names and assignments were difficult for ASR and require confirmation.
## Main purpose
- Strengthen relationships and communication among Spanish-speaking leaders.
- Preserve and pass on the spiritual deposit received from apostolic fathers.
- Connect established leaders with emerging leaders.
- Encourage collaboration between congregations and ministries.
- Define concrete ministry steps for Latin America after the gathering.
## Proposed program
### Tuesday — Generational continuity
- Morning prayer and focused intercession.
- Teaching/conversation about preserving the deposit of grace received from previous leaders.
- Discussion with emerging leaders around the same theme.
- Apostle-led small groups for questions, conversation, and relationship-building.
- Profeta Luz appears to be associated with this day; confirm.
### Wednesday — Stories of impartation
- Prayer appears to involve Pastora Lucy; confirm.
- Leaders share testimonies and stories of what God has done.
- Adults explain God’s works to the children, reflecting Psalm 78:4.
- Small groups rotate so participants can hear from multiple leaders.
- Walk/excursion around the hotel grounds.
- Prayer, worship, prophecy, dinner, and a bonfire.
- Children’s bonfire activities coordinated by Adolfo and Alicia.
### Thursday — Inter-ministry collaboration
- Moderation involving Juan Pablo and Génesis appears in the recording; confirm.
- Apostle Adolfo’s proposed session: “The strengths of my congregation.”
- Each congregation shares strengths and grace God has given it, such as intercession, teaching, family/marriage ministry, Kingdom revelation, or worship.
- Goal: identify practical ways ministries can collaborate.
- Discuss upcoming conferences, events, missions, and opportunities to participate together.
- Pool time was discussed but may depend on the weather.
### Friday — Vision and concrete steps
- Prayer and the vision of the Kingdom for Latin America.
- Presentation about the broader EMI vision, including Africa and Latin America.
- Define concrete next steps for the next 6–8 months and the next 90 days.
- Discuss missions, trips, and ministry projects needing specific plans.
- Costa Rica and Panama were mentioned as examples of future regional work.
- Presentations or conversations with Apostle Eduardo and Apostle Carlos were proposed; confirm.
## Discussion format
- The working idea is approximately five groups, each connected to an apostle or key leader.
- Participants could later be reorganized so each new group includes someone from the original groups and everyone hears multiple testimonies.
- The goal is meaningful interaction rather than a gathering made up only of long sermons.
- Sessions may work better as approximately 90 minutes plus a 30-minute break, with flexibility.
## Preparation and open items
- Prepare questions for each leader before the gathering.
- Contact Apostle Eduardo and Apostle Carlos to confirm participation and topics.
- Clarify whether Carlos can attend; visa/travel issues were discussed.
- Confirm participation from leaders connected to Cuba, Panama, and other regions.
- Confirm assignments for prayer, moderation, teaching, testimonies, and worship.
- Decide whether sermons or conversations may be recorded.
- Prepare worship equipment, including guitar, piano, and a suitable music area.
## Existing confirmed logistics
- Dates: September 26–October 4, 2026.
- Location: Chiapas, Mexico; arrival through Tuxtla Gutiérrez.
- Hotel Cavali: September 28–October 3.
- Cost: USD $150 per double room per night; USD $750 for five nights.
- Breakfast and lunch included for two people; additional food charges may apply for children.
## Review note
This is a cleaned summary of the audio, not a verbatim transcript. Confirm speaker names, daily assignments, attendance, recording policy, and final schedule before publishing or distributing it as official EMI minutes.
+19
View File
@@ -0,0 +1,19 @@
# Factory Project Definitions
This directory holds one concise definition for each **our project** managed through the Paseo software-factory model.
| Key | Definition | Current focus |
|---|---|---|
| `emi` | [EMI](emi.md) | Multi-repository ministry application and production backend mapping |
| `reyna-cli` | [Reyna CLI](reyna-cli.md) | Privacy-sensitive macOS operations platform |
| `tactility` | [Tactility](tactility.md) | ESP32 platform, runtime apps, and approved device delivery |
| `family-voice` | [Family Voice](family-voice.md) | Privacy-first voice context and speaker-ID prototype |
| `kids-hermes-voice` | [Kids Hermes Voice](kids-hermes-voice.md) | Child-safe Tactility client, voice gateway, and Hermes runtime integration |
| `remarkable-hermes` | [reMarkable Hermes](remarkable-hermes.md) | Paper Pro communication app and watcher recovery |
## Rules
- A project definition is our cross-server management record.
- The project definition points to every relevant server-local Paseo project; it does not replace them.
- Repository-local `AGENTS.md` governs code work; `../AGENTS.md` governs project-management work.
- Add a new definition before creating factory agents/schedules for a new project.
@@ -0,0 +1,29 @@
# EMI Expo prayer localization commit — 2026-08-18
Repository: `/Users/adolforeyna/Projects/EMI/expoApp` (branch `master`)
## Approved cleanup and commit
- Removed the untracked generated `ios/` directory.
- Restored `package.json` to `HEAD`; it was not staged or committed.
- Commit: `2a09d56a9b5de24c1193a74eef807977a50fdacd`
- Message: `feat(prayer): localize the 15-minute prayer experience`
## Staged and committed files
1. `Views/PrayerTimer.js`
2. `components/PrayerTracker.js`
3. `i18nMessages.js`
## Verification
- Staged-file allowlist check passed before commit; the staged set exactly matched the three files above.
- `git diff --cached --check` passed.
- `node --check Views/PrayerTimer.js` passed.
- `node --check components/PrayerTracker.js` passed.
- `node --check i18nMessages.js` passed.
- Post-commit verification confirmed the commit contains exactly the three approved files, `ios/` is absent, and the staging area is empty.
## Remaining worktree state
Clean: `git status --short` produced no output. No push, branch change, package installation, native build, or service action was performed.
@@ -0,0 +1,64 @@
# EMI local translation production readiness — 2026-08-18
## Goal
Read-only production-readiness discovery for EMI’s local MarianMT translation service and deployed backend integration.
## Scope and boundaries
- **Project / hosts:** EMI; Mac mini `.102` as Factory/Paseo control host and EMI production server `.119` as the intended runtime host.
- **Repository / runtime:** Mac-mini backend workspace `/Users/adolforeyna/Projects/EMI/EMI-Backend`; intended production checkout `/home/aeroreyna/EMI-Backend` and its Docker Compose backend/translation containers.
- **Allowed:** explicit `auto-review` Paseo verifier; non-mutating source/runtime inspection and bounded non-persistent HTTP only where runtime access is available.
- **Forbidden:** edits, commits, pushes, pulls, stashes/resets/cleans, image build/pull/rebuild, service/container restart/recreate/deploy, migrations, credential or configuration changes, and proxy/firewall changes.
- **Approval gate:** human approval before any isolated worktree, source/configuration change, merge, deployment, restart, or container lifecycle action.
## Coordinator continuity
- Feature session: `emi: local-translation-production-readiness` (Factory profile).
- Existing production Paseo workspace recorded by project definition: `wks_fc39b6c9d2ebc9e0` on `.119`; it was not reachable from this Factory control session because the production daemon is loopback-only and direct SSH as `aeroreyna@emi-server` was denied.
## Paseo evidence
| Role | Agent ID | Workspace ID | Provider / mode | Terminal state |
|---|---|---|---|---|
| Read-only runtime verifier | `9b8ca9a7-193f-4162-bd3d-d9f861a518d9` | `wks_740a1fe0494b5cc9` (`EMI · Backend — Mac mini Checkout`) | `codex/gpt-5.6-terra`, explicitly `auto-review` | `idle` / completed |
The agent located/read the applicable parent workspace guidance before source inspection. Paseo inspection confirmed its available mode included `auto-review`, no pending permissions, and no worktree was created. No source or runtime mutation was requested or reported.
## Observed contract (static only — not production runtime verification)
The verifier’s read-only source inspection found:
- Compose intends an internal `app` ↔ `translation` connection on `emi-network`; app upstream is `http://translation:8000`. Translation has no published host port.
- The app defaults to `TRANSLATION_PROVIDER=openai`; local MarianMT is used only when the runtime provider is explicitly `marian`.
- `GET /health` is implemented as `200 application/json` with `{"status":"ok","provider":"marianmt","loadedModels":[...]}`. This is a liveness/in-memory model-name signal only; it does not prove required-model cache availability, successful inference, or readiness.
- `POST /translate` accepts `text`, `sourceLang`, and `targetLang`. Missing/invalid text or target and unsupported languages are intended to return `400`; unhandled translation failures are intended to return `502 {"status":"Translation failed"}`.
- Models load lazily on first translation into `/models`; the app’s upstream timeout is 30 seconds.
- Compose declares neither a container healthcheck nor CPU/memory limits.
## Runtime-verification result and blocker
The verifier attempted only read-only runtime-discovery commands (`docker compose ps --all`, filtered `docker ps`, and filtered `docker volume ls`) and found `docker: command not found`; `docker-compose`, `podman`, and `nerdctl` were also unavailable. Process inspection was restricted (`ps: operation not permitted`), and no listener on local ports 8000 or 3001 was observable.
Accordingly, it did **not** install tools, alter permissions, authenticate, enter containers, inspect caches, invoke a translation request, or induce a model download. The only completed evidence is the static contract above. The following production facts remain unverified: running container identity/network/upstream; actual provider value; app-to-translation DNS/TCP/HTTP; `/health` response from the deployed service; functional translation; first-download/cache behavior; live invalid/upstream-timeout behavior; current resource use; and deployed resource limits.
## Exact production-readiness acceptance criteria
Production readiness is not met until a read-only verifier with access to the actual `.119` Compose runtime records all of the following:
1. **Runtime identity and isolation:** exact app and translation container IDs/images, Compose project, Docker network membership, and non-secret app upstream mapping; translation is reachable only through the intended internal path unless explicitly approved otherwise.
2. **Provider correctness:** runtime evidence that the app is configured to use `marian`, not the static default `openai`, and that its upstream resolves to the intended translation service.
3. **Connectivity:** a non-mutating request from the running app container resolves `translation`, completes TCP/HTTP to port 8000, and receives the expected response within the configured bound.
4. **Health/readiness semantics:** exact deployed `/health` status, headers, and body are captured; a readiness criterion explicitly proves every required model is locally available for inference without triggering a download. A liveness-only `200` is insufficient.
5. **Functional translation:** one bounded, innocuous translation for each approved language direction succeeds through the app’s real translation path; response schema/text and elapsed time are recorded, with no user data persisted.
6. **First-model/cache behavior:** cache volume/path, ownership, persistence across planned container recreation, and required model artifacts are evidenced. First-download latency, network dependency, disk impact, and failure behavior are measured in a controlled approved environment—not by deleting a production cache.
7. **Errors and timeouts:** invalid request returns a documented non-5xx client error; upstream unavailable/timeout behavior is tested without stopping production (or in an approved equivalent environment) and returns the documented bounded error without crashing/retrying indefinitely; the app’s 30-second upstream bound is verified.
8. **Resources:** deployed CPU/memory reservation/limit and current idle/translation peak CPU, RSS, disk/cache consumption are recorded; observed peaks stay below an owner-approved host budget with headroom. No configured resource limits is a blocker.
9. **Operational controls:** Compose/service healthchecks, logs/metrics sufficient to distinguish model download, model load, inference failure, timeout, and resource exhaustion, plus an approved rollback procedure, are documented and independently checked.
10. **Release integrity:** all implementation changes exist in one isolated worktree, pass declared checks, receive independent review, and obtain explicit human approval before merge/build/recreate/deploy.
## Proposed isolated-worktree implementation plan (not authorized or started)
1. Obtain a read-only production-runtime observability path (Paseo agent on `.119` or authorized Docker metadata/log/exec access) and complete acceptance items 1–8 without lifecycle changes.
2. After human approval and protection/review of the dirty production Compose state, create one isolated backend worktree from the approved committed base, e.g. branch `factory/emi-local-translation-readiness`; do not use either dirty main checkout.
3. Implement a non-downloading readiness endpoint/check that verifies configured required models are present and loadable; keep existing liveness semantics separate and document status/error contracts.
4. Add Compose healthchecks and explicit, owner-approved CPU/memory constraints; make model-cache volume persistence, permissions, and prewarming strategy explicit.
5. Add deterministic tests for provider selection, health/readiness distinction, validation errors, upstream timeout/error mapping, and cache-present/cache-absent behavior without external model downloads in ordinary CI.
6. In an approved non-production environment, measure cold first-download, warm-cache translation, resource peaks, timeout behavior, and recovery; document production rollout and rollback steps.
7. Dispatch an independent reviewer and verifier against that isolated worktree. Present exact diff, checks, measured evidence, deployment/recreate impact, and rollback plan for explicit human approval; only then may a named deployment executor act.
@@ -0,0 +1,173 @@
# EMI pre-commit decision review — 2026-08-18
Scope: read-only review of candidate changes in the two Mac mini (`.102`) repositories only. No commit, staging, pull, rebase, push, install, service action, or source edit was performed. Diff content was reviewed as data; this report intentionally contains no secret values.
## Task record
- Project: EMI.
- Repositories reviewed: `~/Projects/EMI/expoApp` (branch `master`; remotes `gitea` and `origin`) and `~/Projects/EMI/EMI-Backend` (branch `codex/bible-verse-notes`; remote `gitea` only).
- Acceptance criteria: identify commit-ready candidate sets, generated-file disposition, validation evidence, blockers, and the later server approval boundary.
- Forbidden effects observed: none; all inspection commands were read-only.
- Repository instructions: parent `~/Projects/EMI/AGENTS.md` and each repository's `Agent.md` were read. App instructions require explicit approval before a change requiring a new App Store build; backend instructions prefer Node 20 LTS and describe `npm test` as the only test command.
## expoApp
### Candidate scope
Tracked modifications:
- `Views/PrayerTimer.js`
- `components/PrayerTracker.js`
- `i18nMessages.js`
- `package.json`
Untracked native output is limited by `git status` to 25 explicitly listed `ios/` files (Xcode project/workspace, application files, asset catalogs, Podfile/lockfile, and generated Expo settings). The ignored `ios/` tree also contains dependency output and five `.DS_Store` files.
The application change makes the prayer duration 15 minutes, localizes prayer-tracker/timer strings in all existing language blocks, localizes weekday rendering, and changes the native run scripts from Expo start targets to `expo run:android` and `expo run:ios`.
### Generated `ios/` decision
Include the 25 status-listed `ios/` source/configuration files only if the intent is to adopt and maintain the generated native iOS project alongside the new `expo run:ios` script. They are a coherent companion to that script change: omitting them leaves the new native-run workflow without its required project files.
Do not stage `ios/` recursively. Do not stage `ios/Pods/`, any ignored native dependency/build output, or any `.DS_Store` file. The status-listed project files should be staged explicitly, not by a broad directory add. The native project has not been built or opened during this read-only review, and the repository instruction requires explicit approval before a change that requires a new App Store build. Committing project sources alone is not an App Store build, but their intended native-build effect needs owner confirmation and native validation before this set is accepted as-is.
### Blocking findings
1. Native iOS project adoption is unconfirmed and unvalidated. The new `npm run ios` invokes `expo run:ios`, while its generated project and lockfile are untracked. Commit intent, an approved native-build validation scope, and successful native validation are missing.
2. The only safe complete native staging set must be explicit; a recursive `ios/` add risks picking up later generated or ignored local material. `.DS_Store` is categorically excluded.
### Non-blocking findings
- The prayer/localization diff is internally scoped and all newly referenced translation keys exist in each existing language block.
- `PrayerTracker` now passes the active `i18n.locale` to weekday formatting; supported locale values are normalized language codes.
- `git diff --check` returned clean; `node --check` passed for all three modified JavaScript files; `package.json` parsed as valid JSON.
- No app test, lint, typecheck, or build script exists in `package.json`; no local validation/report/log artifact was found.
- A changed-diff credential-pattern scan found no private-key block or common credential assignment/token pattern. This is heuristic evidence only, not a secrets guarantee.
### Safe staging lists and commit split
Commit 1 — prayer experience and localization:
```text
Views/PrayerTimer.js
components/PrayerTracker.js
i18nMessages.js
```
Recommended message:
```text
feat(prayer): localize the 15-minute prayer experience
```
Commit 2 — only after confirmation that native iOS sources are intended and native validation is approved/passes:
```text
package.json
ios/.gitignore
ios/.xcode.env
ios/EMISocial.xcodeproj/project.pbxproj
ios/EMISocial.xcodeproj/xcshareddata/xcschemes/EMISocial.xcscheme
ios/EMISocial.xcworkspace/contents.xcworkspacedata
ios/EMISocial/AppDelegate.h
ios/EMISocial/AppDelegate.mm
ios/EMISocial/EMISocial-Bridging-Header.h
ios/EMISocial/EMISocial.entitlements
ios/EMISocial/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png
ios/EMISocial/Images.xcassets/AppIcon.appiconset/Contents.json
ios/EMISocial/Images.xcassets/Contents.json
ios/EMISocial/Images.xcassets/SplashScreen.imageset/Contents.json
ios/EMISocial/Images.xcassets/SplashScreen.imageset/image.png
ios/EMISocial/Images.xcassets/SplashScreenBackground.imageset/Contents.json
ios/EMISocial/Images.xcassets/SplashScreenBackground.imageset/image.png
ios/EMISocial/Info.plist
ios/EMISocial/PrivacyInfo.xcprivacy
ios/EMISocial/SplashScreen.storyboard
ios/EMISocial/Supporting/Expo.plist
ios/EMISocial/main.m
ios/EMISocial/noop-file.swift
ios/Podfile
ios/Podfile.lock
ios/Podfile.properties.json
```
Recommended message:
```text
chore(ios): add Expo native project for local iOS runs
```
Explicit exclusions:
```text
.DS_Store
**/.DS_Store
ios/Pods/
ignored generated native dependency/build output
```
### Commit-as-is recommendation
No. The prayer/localization subset is structurally suitable for its own commit, but the repository as currently combined includes unconfirmed, unvalidated generated native iOS output and a native-run workflow change.
## EMI-Backend
### Candidate scope
Tracked modifications:
- `config/cookiesOptions.js`
- `config/corsOptions.js`
- `index.js`
Untracked file:
- `.DS_Store` — exclude; do not stage or commit.
The candidate broadens local-cookie detection to every IPv4 address in the private `192.168.*.*` range, changes CORS from an array to a callback that admits any HTTP origin in that same range (and any localhost loopback port), adds selected local Expo development origins, and binds the server to `HOST` or all interfaces by default.
### Blocking finding
1. Do not commit this backend set as-is. Credentials-enabled CORS is enabled for any HTTP origin on the entire `192.168.*.*` private range regardless of environment, and cookie handling treats a matching request Origin or Host as local and therefore permits non-secure, `SameSite=Lax` cookies. These are production-relevant security-policy changes, not a bounded local-development setting. The code does not gate the broad LAN rules to a non-production environment, restrict them to approved development origins, or establish trusted-proxy/host-header handling. Security review and an explicitly approved environment-specific policy are required before staging these three files.
The default all-interface bind heightens the need for that review: whether it is necessary, and its firewall/proxy/deployment implications, have not been validated in this task.
### Non-blocking findings
- `git diff --check` returned clean; `node --check` passed for all three modified JavaScript files; `package.json` parsed as valid JSON.
- `package.json` declares `npm test` as `npx mocha test/auth.test.js`; it has no lint, typecheck, or build script. No local validation/report/log artifact was found.
- Existing validation evidence supplied for this review: under Node 22, `npm test` failed because of legacy dependency incompatibility. Under Node 20, the two auth tests passed but the process did not exit because it retained a listener. Source inspection confirms the test starts a listener and closes that listener in its `after` hook; importing the application can still retain other handles. This test is integration/data dependent and is not clean CI evidence until it exits deterministically.
- A changed-diff credential-pattern scan found no private-key block or common credential assignment/token pattern. This is heuristic evidence only, not a secrets guarantee.
### Safe staging list and commit split
There is no safe staging list for the current backend candidate until the blocking security-policy decision is resolved. Keep all three modified files unstaged and exclude `.DS_Store`.
After a reviewed implementation supplies a production-safe, environment-gated policy and it is validated in an isolated worktree, separate commits should be:
```text
fix(dev): scope LAN cookie and CORS support to approved development origins
```
for the cookie/CORS policy files, and:
```text
fix(server): make backend bind host configurable
```
for `index.js`, only if the deployment/network review confirms that bind behavior is required.
### Commit-as-is recommendation
No.
## Later EMI-server checkout update/rebase/push — exact human approval boundary
The requested Mac mini commits do not authorize any action on the EMI server checkout. A separate, explicit human approval is required after the Mac mini commits are reviewed and identified by their exact commit IDs, and before any server-side update, fetch, pull, rebase, conflict resolution, push, service action, image build, container recreation, restart, or deployment.
That approval must name all of the following: the server checkout and target branch; the approved remote and exact Mac mini commit IDs; whether a rebase is authorized; the allowed update/push commands; the named executor; conflict policy (stop and report, no automatic resolution); required pre/post checks; and the rollback owner/procedure. It must also follow a current read-only server audit confirming the checkout-to-running-container relationship, service/deployment procedure, health endpoint, rollback path, and disposition of the server's existing local modifications and untracked update script. The known server checkout is dirty, so no rebase/push action may be inferred from a Mac mini commit.
## Overall decision
- `expoApp`: NO — do not commit the combined repository state as-is; the prayer/localization subset may proceed only as its separate commit, while the native iOS set awaits explicit intent/validation.
- `EMI-Backend`: NO — do not commit as-is; security-policy blockers require review and correction before staging.
@@ -0,0 +1,46 @@
# EMI production perimeter audit — 2026-08-18
## Scope and verdict
Read-only perimeter follow-up on `aeroreyna@192.168.68.119` (`emiserver`). Inspected only non-secret listener/firewall service facts, Docker published-port/network/container metadata, detected proxy metadata, DNS, and unauthenticated HTTP `GET`, `HEAD`, and `OPTIONS` behavior. No authentication, form submission, secret/environment/configuration reading, dirty Compose diff inspection, source modification, service/container/proxy/firewall change, or Mac-mini backend WIP interaction occurred.
**Verdict: perimeter is not production-clean.** Authentication controls prevent unauthenticated root access to the backend, and the tested origins were not granted browser CORS read access. However, the EMI backend remains directly published on every IPv4 and IPv6 interface at TCP 3001; the effective UFW rule policy could not be read without elevation; and the intended public frontend/API origin and proxy path remain unproven. Do not infer a proxy-only or firewall-restricted production posture.
## Verified exposure controls
- `ufw.service` is enabled and active (exited). This verifies that UFW is installed/enabled, not which allow/deny rules are effective; unprivileged `ufw status`, `iptables`, and `nft` rule reads were denied and no elevation was attempted.
- The backend container is `emi-backend-app-1` (Compose project `emi-backend`, service `app`) with restart policy `always`.
- Direct, unauthenticated backend root requests at `http://127.0.0.1:3001/` returned `401 Unauthorized` for both `GET` and `HEAD`; neither response carried a redirect location. The `HEAD` probe's status/header result is valid, although curl reported a transfer-length warning after the server advertised a body.
- The same direct backend preflight (`OPTIONS`, `Origin: https://emmint.com`, `Access-Control-Request-Method: GET`) returned `204 No Content`, `Vary: Origin, Access-Control-Request-Headers`, `Access-Control-Allow-Credentials: true`, and `Access-Control-Allow-Methods: GET,HEAD,PUT,PATCH,POST,DELETE`.
- Direct preflights for `https://emmint.com`, `https://www.emmint.com`, `https://florida.emmint.com`, `https://api.emmint.com`, and `https://invalid.example` returned no `Access-Control-Allow-Origin`. Thus none of those tested browser origins was granted cross-origin read access by the direct backend response.
- `api.emmint.com` resolved to `76.108.184.110`. Its unauthenticated HTTPS root behavior was `302 Found` with `Location: /login` for both `GET` and `HEAD`; its preflight was `204 No Content`. The public responses identify an upstream Caddy (`Via: 1.1 Caddy`) and Express application; no `Access-Control-Allow-Origin` was observed on the tested public preflight.
## Listener, container, network, and proxy facts
- `emi-backend-app-1` publishes `3001/tcp` as `0.0.0.0:3001` and `[::]:3001`, confirmed both by Docker and the host listener table. It is not loopback-only.
- The backend is attached to Docker bridge `emi-backend_default`, whose metadata is `internal=false`, `attachable=false`, and IPv6 disabled. The container has a read-write bind mount from `/home/aeroreyna/EMI-Backend` to `/app`, a read-write node-modules volume, and `ReadonlyRootfs=false`.
- Other all-interface TCP listeners observed on `.119` were 22, 222, 2283, 3000, 8085, 9000, 9001, 9443, and 18789–18790. Docker metadata attributes these to Immich, Gitea, Nextcloud, Authentik, Portainer Agent, and OpenClaw as applicable. This audit makes no claim that each is reachable outside the host/LAN because effective firewall and upstream NAT policy were not readable.
- The Paseo daemon listens only on `127.0.0.1:6767`; an OpenCode process listens only on `127.0.0.1:45243`.
- No Caddy, Nginx, Traefik, HAProxy, or Apache systemd unit was found. Apache processes were present, but no port 80/443 listener was present in the host listener table. No Docker reverse-proxy container was present. The Caddy observed at public `api.emmint.com` is therefore not verified as a local `.119` service/container; its upstream placement and forwarding policy remain unresolved.
- Documented frontend hostnames resolve away from the `.119` LAN address: `emmint.com` and `www.emmint.com` to `198.175.150.40`, and `florida.emmint.com` to `35.164.64.246`. Their unauthenticated HTTPS root behavior was consistent with external WordPress/LiteSpeed (`emmint.com`: `GET`/`HEAD` 301 to `www`; `OPTIONS` 200), `www.emmint.com` (`GET`/`HEAD`/`OPTIONS` 200), and an external Caddy-backed site for `florida.emmint.com` (`GET`/`HEAD`/`OPTIONS` 200). They are not verified `.119` reverse-proxy frontends.
## Unresolved exposure and CORS findings
1. **Direct API exposure remains the primary perimeter finding.** TCP 3001 is published to all host interfaces and the Docker network is non-internal. UFW's active rule set and the router/NAT policy were intentionally not elevated/read, so this audit cannot establish whether LAN or Internet clients can reach the direct port.
2. **Public API proxy topology is unresolved.** `api.emmint.com` presents Caddy/Express behavior and redirects unauthenticated `GET`/`HEAD` to `/login`, but its public address does not identify the local `.119` LAN endpoint and no local Caddy listener/container was found. It is not proven whether the proxy protects all API paths, which upstream it uses, or whether direct 3001 bypasses it.
3. **CORS is deny-by-observation, not intent-verified.** Every tested direct preflight, including `https://emmint.com`, lacked `Access-Control-Allow-Origin`; the tested public API preflight also lacked it. This blocks browser cross-origin reads for those requests, but it does not establish the intended credentialed frontend origin or prove that a production frontend can call the API successfully. `Access-Control-Allow-Credentials: true` is present without a tested allowed origin.
4. **Published public websites are not evidence of an API frontend.** The documented `emmint.com`, `www.emmint.com`, and `florida.emmint.com` hostnames resolve to third-party/external web endpoints rather than verified `.119` proxy listeners. No documented production frontend hostname was shown to be an allowed CORS origin for this API.
## Context received after audit
**Authoritative infrastructure context:** `api.emmint.com` is served by Caddy on FamReynaServer `.110`, which routes to the EMI backend on `.119`. That shared Caddy/Authentik/DNS/firewall layer is outside the EMI project's ownership. This report's observation that the proxy placement was unresolved is therefore superseded as a project-boundary question: the route may be documented and health-verified by EMI work, but must not be modified by an EMI task. Any proxy remediation needs a separately scoped shared-infrastructure task and explicit approval.
## Minimal remediation options — require explicit human approval
Choose only after confirming the intended API hostname, frontend origin(s), required credential mode, and LAN/Internet exposure policy:
1. **Proxy-only API:** bind Docker `3001` to loopback only (or remove the host publication), then explicitly proxy the required HTTPS API hostname through the approved reverse proxy. Review the dirty Compose change in an isolated worktree before any lifecycle action.
2. **Firewall-restricted direct API:** retain the published port only if necessary, and approve explicit UFW/router rules limiting 3001 to the named trusted proxy/LAN sources. Verify from an authorized external and LAN vantage point after the approved change.
3. **Explicit CORS allowlist:** configure only the confirmed HTTPS frontend origin(s), preserve `Vary: Origin`, and test allowed and denied preflights plus an unauthenticated request through the real proxy. Do not use a wildcard origin with credentialed requests.
Any option requires separate approval for configuration review/change, rebuild/recreate/restart, deployment, or firewall/proxy modification. The Mac-mini backend CORS WIP remains untouched and uncommitted.
@@ -0,0 +1,54 @@
# EMI production security audit — 2026-08-18
## Scope, safety boundary, and verdict
Read-only audit of `aeroreyna@192.168.68.119`, `~/EMI-Backend`, and the running `emi-backend-app-1` container. No services, containers, checkout files, Git state, firewall/proxy configuration, credentials, environment values, compose diff content, or Mac-mini WIP were changed. No secret values were read or recorded.
**Verdict: conditionally acceptable to remain running, but not production-security clean.** The live application source files that control the observed server behavior match the `.119` checkout's `HEAD` commit `92320c9c8993308172282d6ac4437e19c752650a` (`Add monthly MongoDB backup script`, 2026-05-29). The server should not be recreated or redeployed without human review because its local compose file is modified relative to that commit.
The main `.119` server may remain on its current deployed commit while the separate Mac-mini backend WIP remains uncommitted. This audit made no change to that WIP. The conclusion is limited to keeping the existing `.119` container running; it is not approval to rebuild, recreate, deploy, merge, or commit anything.
## Evidence and runtime identity
- Checkout `HEAD`: `92320c9c8993308172282d6ac4437e19c752650a`.
- Checkout status: one tracked modified file and one untracked file. The tracked `docker-compose.yml` differs from `HEAD`; its diff content was neither read nor displayed.
- Running container: `emi-backend-app-1`; image `emi-backend-app`; image ID `sha256:0f245f652484e3704723cb93717b9ca867c38e74d8eb05eab7b123fa638eef44`.
- Image/container creation: 2026-05-29; current container start: 2026-08-17. Restart policy: `always`.
- The container bind-mounts `/home/aeroreyna/EMI-Backend` read-write at `/app`. It therefore executes checkout-mounted application files rather than an isolated immutable copy of those files.
- SHA-256 comparisons (without exposing file content) show the running `/app/index.js`, `/app/package.json`, `/app/config/corsOptions.js`, and `/app/config/cookiesOptions.js` each match the corresponding `HEAD` file. The checkout versions of those same files and `Dockerfile` also match `HEAD`.
## Verified-good controls
- The root request on `127.0.0.1:3001` returned `401 Unauthorized`, rather than an unauthenticated success response. No `Location` redirect header was observed.
- Preflight requests returned `204 No Content`, with `Vary: Origin, Access-Control-Request-Headers`; ordinary requests returned `Vary: Origin`. This prevents a shared cache from treating all origin variants as identical.
- Both tested origins (`https://emmint.com` and an intentionally invalid external origin) received no `Access-Control-Allow-Origin` header. In a browser, neither tested origin is granted cross-origin read access by that response.
- The server returned `Access-Control-Allow-Credentials: true`, so the observed CORS behavior is configured for credentialed requests only when an origin is explicitly permitted.
- The committed cookie-options source contains an `HttpOnly` control marker and that file is byte-identical in the running container. This establishes that the committed runtime file includes that control, not that every authentication flow actually emits a correctly flagged cookie.
## Risks and findings
1. **Public API port exposure — high-priority review.** Docker publishes `3001/tcp` on `0.0.0.0:3001` and `[::]:3001`, not loopback only. The container is on a non-internal Docker bridge (`emi-backend_default`, `internal=false`). Network/firewall enforcement outside Docker was not changed or assumed. If the intended posture is proxy-only API access, this is broader exposure than intended.
2. **Mutable production code path — high-priority operational risk.** The production container bind-mounts the checkout read-write at `/app`, and the container root filesystem is not read-only. A checkout edit can affect the running process or subsequent restarts outside an immutable-image release boundary.
3. **Dirty compose checkout — release-integrity blocker.** The only tracked modification is represented by the dirty `docker-compose.yml` check; its contents were deliberately not inspected. Current process-critical application files match `HEAD`, but a future recreate/restart through Compose may use uncommitted configuration. Do not treat a recreate as reproducing committed production source until reviewed in an isolated worktree.
4. **CORS intent is not fully proven.** Both tested origins lacked `Access-Control-Allow-Origin`, including `https://emmint.com`. This is safe against those specific browser origins, but it may also mean the intended production frontend origin was not tested, is unavailable under that exact hostname, or is misconfigured. The audit cannot claim that the intended frontend works, nor that every unwanted origin is rejected.
5. **Cookie flags are not runtime-verified.** No non-mutating endpoint in this audit emitted a `Set-Cookie` header, so `Secure`, `SameSite`, domain/path scope, and actual issuance behavior remain unverified. No authentication request was made.
## Unknowns
- Which exact public frontend origins are intended and whether each should be allowed with credentials.
- The effective firewall, upstream reverse-proxy, TLS termination, and Internet/LAN reachability policy for published port 3001.
- Whether the untracked file or modified compose file affects a future Compose lifecycle action; neither content was read.
- The running Node process's precise listener address inside the container, health endpoint, authentication-cookie issuance path, and behavior through the public proxy/TLS route.
- Whether image dependencies in `/app/node_modules` correspond to the committed lockfile; the named volume was not inspected.
## Required human approval before remediation
Any remediation requires explicit owner approval before: reviewing the dirty compose diff; creating an isolated worktree; modifying Docker/Compose, CORS, cookies, listener binding, reverse proxy, firewall, or image build; rebuilding/recreating/restarting the container; committing/merging; or deploying. The Mac-mini backend WIP must remain uncommitted and untouched unless separately approved.
## Next recommended task
Approved read-only follow-up: identify the intended EMI public frontend origin(s) and probe only their localhost-proxied, non-authenticated `GET`/`OPTIONS` responses for CORS headers; then separately inventory the reverse-proxy and firewall exposure without changing either.
@@ -0,0 +1,29 @@
# EMI production vs latest code — 2026-08-18
Read-only comparison. No fetch/pull, checkout, container/service change, or dirty-diff content inspection was performed.
## Committed-code relationship
- Mac mini `~/Projects/EMI/EMI-Backend`: `codex/bible-verse-notes` at `c257fd1ec762e009fb0764571561010f306ee3ce` (`Add local MarianMT translation service`); upstream: none. Remote: `gitea` (`https://git.reynafamily.com/adolforeyna/EMI-Backend.git`), fetch refspec `+refs/heads/*:refs/remotes/gitea/*`.
- Production checkout `aeroreyna@192.168.68.119:~/EMI-Backend`: `master` at `92320c9c8993308172282d6ac4437e19c752650a` (`Add monthly MongoDB backup script`); upstream: `origin/master`. Remote: `origin` (`http://192.168.68.119:3000/adolforeyna/EMI-Backend.git`), fetch refspec `+refs/heads/*:refs/remotes/origin/*`.
- Both commits are one-child descendants of common ancestor `65a4178e2b1491117ddb9e1b8a5ed7b53c4b5be3`; neither checkout contains the other tip object. Therefore committed code has diverged, not a simple ahead/behind relationship.
- Gitea read-only advertised `master` is `65a4178e…`; it does not advertise the Mac-mini tip or production tip. Thus neither current checkout tip is established as a remotely published latest branch tip.
- From the common ancestor, Mac-mini committed changes are: modified `.gitignore`, `README.md`, `docker-compose.yml`, `utils/chatTranslation.js`; added `translation-service/.dockerignore`, `translation-service/Dockerfile`, `translation-service/requirements.txt`, `translation-service/server.py`.
- From the common ancestor, production committed changes are: modified `.gitignore`; added `scripts/monthlyMongoBackup.sh`. The two committed `.gitignore` blobs differ. Production `docker-compose.yml` is unchanged in its committed tree; Mac-mini’s committed tree modifies it.
## Local WIP
- Mac mini has no staged changes; it has three unstaged tracked changes (`config/cookiesOptions.js`, `config/corsOptions.js`, `index.js`) and one untracked `.DS_Store`. This WIP is uncommitted and is separate from `c257fd1…`.
- Production checkout also has uncommitted state: unstaged `docker-compose.yml` and untracked `update.sh`; contents were intentionally not inspected. This is not part of production’s committed-code comparison.
## Runtime/container relationship
- The running container is `emi-backend-app-1` (`e9355e13bf21…`), image `emi-backend-app` / `sha256:0f245f65…`, running since `2026-08-17T21:20:23Z`; command is `node index.js` with workdir `/app`.
- `/app` is a read-write bind mount of `/home/aeroreyna/EMI-Backend`; `/app/node_modules` is separately volume-mounted. Therefore the running application files are served directly from the production checkout rather than from an immutable image copy.
- Runtime and checkout SHA-256 values match for `index.js`, `config/cookiesOptions.js`, and `config/corsOptions.js` (including the currently uncommitted checkout state). Git is not installed in the container, so an in-container Git revision could not be read; the bind mount plus matching file hashes establish the relevant application-file match.
## Verdict
Production is **diverged** from the latest available Mac-mini committed code, with additional uncommitted WIP on both checkouts; it is not safe to call production simply behind or ahead.
Minimal next decision required before any server update: select one explicit approved release commit/branch and decide how the production checkout’s dirty `docker-compose.yml` must be preserved or reconciled.
@@ -0,0 +1,66 @@
# EMI read-only discovery — 2026-08-18
Scope: manifest/git/runtime/Paseo inspection only. No dependency installation, source/configuration changes, service actions, or secrets access.
## Verified mapping
| Host | Checkout | Git head / branch | Registered Paseo workspace |
|---|---|---|---|
| Mac mini `.102` | `~/Projects/EMI/expoApp` | `4e26cc3` / `master` | `wks_f013c2c89410419b` — `EMI · Expo App — Main Checkout` |
| Mac mini `.102` | `~/Projects/EMI/website` | `d329c0c` / `master` | `wks_baf03fce83b6b3b7` — `EMI · Website — Main Checkout` |
| Mac mini `.102` | `~/Projects/EMI/EMI-Backend` | `c257fd1` / `codex/bible-verse-notes` | `wks_740a1fe0494b5cc9` — `EMI · Backend — Mac mini Checkout` |
| EMI server `.119` | `~/EMI-Backend` (`/home/aeroreyna/EMI-Backend`) | `92320c9` / `master` | `wks_fc39b6c9d2ebc9e0` — `EMI · Backend Production Checkout` |
All four are registered as local/main-checkout workspaces, not isolated worktrees. No `paseo.json` exists in any inspected root. The Mac mini daemon is running/reachable on loopback; providers reported available: Codex, OpenCode, pi, hermes. On `.119`, the daemon is running/reachable on `127.0.0.1:6767`; available providers are Codex, OpenCode, and pi (Claude/copilot unavailable).
## Declared candidate commands (not executed)
Confidence means that the command is explicitly declared by the manifest, not that it is safe, hermetic, or passing.
| Repository | Candidate command | Purpose | Confidence |
|---|---|---|---|
| expoApp | `npm start` | Expo dev server | High |
| expoApp | `npm run web` | Expo web dev server | High |
| expoApp | `npm run ios` / `npm run android` | native development/run | High |
| expoApp | No manifest lint, typecheck, test, or production-build script | — | High absence finding |
| website | `npm run lint` | Vue CLI lint; command sets `NODE_OPTIONS=--openssl-legacy-provider` | High |
| website | `npm run build` | Vue CLI production build; same Node option | High |
| website | `npm run serve` | development server on port 8080 | High |
| website | No manifest test or typecheck script | — | High absence finding |
| Mac mini backend | `npm run dev` | `node --watch index.js` development process | High |
| Mac mini backend | `npm start` | `node index.js` | High |
| Mac mini backend | `npm test` | declared `npx mocha test/auth.test.js` | High command / medium execution confidence: environment and test data were not examined |
| Mac mini backend | No manifest lint, typecheck, or build script | — | High absence finding |
| `.119` backend | same `npm run dev`, `npm start`, and `npm test` declarations | source checkout commands only | High declaration / low direct-host execution confidence: non-login SSH PATH has no `node`/`npm`; runtime is containerized |
| `.119` runtime | `curl --head --max-time 5 http://127.0.0.1:3001/` | reachability probe, not authenticated API health | High; executed: HTTP 302 to `/login` |
Each Node repository has `package-lock.json`; no yarn/pnpm lockfile was found. No `tsconfig.json` or `jsconfig.json` was found in any root, so no typecheck command is evidenced. The backend has `docker-compose.yml` and `test/auth.test.js`; the local app and website have no compose manifest.
## Local-change protection
- expoApp is dirty: modified `Views/PrayerTimer.js`, `components/PrayerTracker.js`, `i18nMessages.js`, `package.json`; untracked `ios/`. Remotes: `gitea`, `origin`.
- website is clean. Remote: `origin`.
- Mac mini backend is dirty: modified `config/cookiesOptions.js`, `config/corsOptions.js`, `index.js`; untracked `.DS_Store`. Remote: `gitea` only (no `origin`).
- `.119` backend is dirty: modified `docker-compose.yml`; untracked `update.sh`. Remote: `origin`.
Do not create a worktree from, reset, stash, clean, or dispatch an editing agent into any dirty checkout until the owner identifies and protects those changes. The existing workspaces point directly at those checkouts.
## `.119` runtime, service, and deployment facts
- Docker is the active system service. Container `emi-backend-app-1` (image `emi-backend-app`) has been up about five hours and publishes `0.0.0.0:3001` and `[::]:3001` to container port 3001.
- Host port 3001 is listening publicly on IPv4 and IPv6. The root probe returned `302 Found`, Express-powered, redirecting to `/login`; this confirms listener/reverse-route behavior only, not application health, authentication, dependencies, or database connectivity.
- `node index.js` is running in the backend container. The checkout's compose file exists, but it was not read because it is locally modified and may contain deployment-sensitive configuration.
- A user-managed Paseo daemon and supervisor are running. The CLI works after placing the discovered NVM Node path on `PATH`; its initial non-login SSH invocation failed only because that PATH was absent.
- Unknown: authoritative deployment/update procedure; relation of `/home/aeroreyna/EMI-Backend` to the running container (bind mount versus image build); compose project/working directory; image provenance; rollback procedure; authenticated/API health endpoint; database dependency health; expected Node version; and whether untracked `update.sh` is the intended release mechanism.
## Human review required before `paseo.json` or worktree/agent setup
1. Confirm ownership/disposition of every listed local modification and untracked path, especially `.119` `docker-compose.yml` and `update.sh`.
2. Select one repository and bounded goal; main-checkout workspaces are not writable task targets. Approve an isolated worktree location and branch policy for that repository.
3. Review the repository-specific command contract rather than inventing missing lint/typecheck/test/build steps; decide whether existing commands may access external services or mutate data.
4. For `.119`, verify the deployment source-to-container relationship, named deployment executor, health endpoint, rollback procedure, and a separately approved production boundary before any agent/worktree or `paseo.json` work.
5. Approve provider choice and required permissions; no provider/workspace/agent state was changed in this lane.
## Proposed next bounded task
Human-approved, read-only backend release-path audit on `.119`: inspect only non-secret Docker/compose metadata and container mount/image metadata to establish checkout-to-container provenance, deployment command, health endpoint, and rollback evidence; write one update to this record and make no runtime changes.
+68
View File
@@ -0,0 +1,68 @@
---
project_key: emi
status: active
factory_maturity: discovery
updated: 2026-08-17
---
# EMI — Project Definition
## Purpose
EMI is the cross-server ministry application and web/services collection: mobile/client work, website work, backend/API operations, ministry integrations, and the related human approval/deployment process.
## Execution map
| Host | Repository / service | Paseo-project role | Status |
|---|---|---|---|
| Mac mini `.102` | `~/Projects/EMI/expoApp` | `EMI · Expo App` | Registered local workspace `wks_f013c2c89410419b`; local changes exist |
| Mac mini `.102` | `~/Projects/EMI/website` | `EMI · Website` | Registered local workspace `wks_baf03fce83b6b3b7` |
| Mac mini `.102` | `~/Projects/EMI/EMI-Backend` | `EMI · Backend (Mac mini)` for local/reproduction work | Registered local workspace `wks_740a1fe0494b5cc9`; local changes exist and no `origin` is configured |
| EMI server `.119` | `~/EMI-Backend`, production API documented at `:3001` | `EMI · Backend Production` | Registered local workspace `wks_fc39b6c9d2ebc9e0`; daemon healthy on loopback; OpenCode detected; runtime, health command, deployment procedure, and Ollama Cloud provider setup remain to be discovered |
The parent `~/Projects/EMI` directory is a collection, not a source-changing Paseo project.
## External infrastructure boundary
- `api.emmint.com` is routed by the **FamReynaServer `.110` Caddy** instance to the EMI backend service on `.119`.
- This EMI project may document the dependency and verify its observed behavior, but it does **not** own or modify the FamReynaServer Caddy route, Authentik, DNS, firewall, or shared reverse-proxy policy.
- Any Caddy/proxy change belongs to the shared FamReyna infrastructure owner and requires a separately scoped, explicitly approved infrastructure task. EMI release work must treat that route as an external dependency and coordinate through evidence, not mutate it.
## Personas
- Planner: read-only repo/service discovery and task plan.
- Expo / web / backend implementer: isolated worktree only.
- Verifier: repo-specific scripts and integration evidence.
- Reviewer: independent diff, security, API/migration, and scope review.
- Release steward: prepare rollout/rollback evidence.
- Deployment executor: one named, explicitly approved production action only.
- Health monitor: read-only, change-only reporting.
## Safety boundaries
- Preserve existing local modifications before creating worktrees.
- No merge, deploy, restart, credential change, or public publishing without explicit human approval.
- Do not dispatch production backend tasks until `.119` checkout path, service manager, health command, and rollback procedure are verified.
- A cross-server change has separate Mac mini and `.119` workspaces; it is never one shared workspace.
## Active factory coordination
- **Feature / incident:** production reconciliation and release-branch convergence — **completed through push, then deployed manually by explicit approval**.
- **Coordinator session:** Factory profile session `20260818_102513_1346d3`, titled `emi: production reconciliation` and pinned for continuity. It exposed a follow-through gap: its interactive process exited after worker dispatch. The factory policy now requires interactive/resumable dispatch-and-follow-through, explicit agent IDs, and terminal-state monitoring.
- **Reconciled repository revision:** production `master` and `origin/master` are `4c1afea` (`chore(prod): preserve production compose settings`), following rebased translation commit `c257fd1` and backup-script commit `44988df`.
- **Deployment:** app and translation Compose services were rebuilt/recreated from `4c1afea`; a pre-update rollback image is retained as `emi-backend-app:pre-4c1afea-20260818T190206Z`. No Caddy, Authentik, DNS, or firewall changes were made.
- **Next active feature:** `emi: local translation production readiness`. **Execution owner: factory profile only.** The default/personal Hermes conversation may relay your instructions and report evidence, but it must not perform direct repository, server, Docker, Git, or Paseo actions for this project. Treat the current MarianMT service as WIP until its internal network path, health/readiness, functional translations, model-cache behavior, failure handling, and resource limits are verified.
## Factory readiness next actions
1. Read-only discovery of each Mac mini repository's scripts, tests, build commands, and current worktree state.
2. Read-only discovery on `.119` of the deployed checkout, runtime, service manager, health endpoint, and release procedure.
3. Register repo-specific local Paseo workspaces only after discovery review.
4. Add repo-specific `paseo.json` contracts; do not copy a generic template.
## Related records
- `emi-read-only-discovery-2026-08-18.md` — completed first factory experiment; commands and release-path unknowns
- `../paseo_software_factory_working_model_2026-08-17.md`
- `../latin_america_emi_collaboration_2026.md`
- `../../areas/operations/services_inventory.md`
+45
View File
@@ -0,0 +1,45 @@
---
project_key: family-voice
status: active
factory_maturity: discovery
updated: 2026-08-17
---
# Family Voice — Project Definition
## Purpose
Family Voice covers the privacy-first local voice-context and speaker-identification prototype, with future device integration only after offline evaluation and explicit consent decisions.
## Execution map
| Host / target | Repository / service | Paseo-project role | Status |
|---|---|---|---|
| Mac mini `.102` | `~/Projects/voice-speaker-id` | `Family Voice · Speaker ID` | Registered local workspace `wks_42151868896725e9` on `main`; offline CLI-only prototype |
| ESP32 / iPhone devices | audio input sources | Project assets, not Paseo hosts | No always-listening deployment is approved |
## Personas
- Privacy planner: evaluates scope, consent, retention, and data boundaries.
- ML experimenter: isolated code work without raw-audio export.
- Evaluation verifier: runs reproducible offline scoring/evaluation only.
- Privacy/security reviewer: checks data handling, authorization claims, and accidental cloud transmission.
- Device integration planner: design-only until explicit device approval.
## Safety boundaries
- Cached clips are never treated as approved enrollment data by filename alone.
- Do not upload raw audio, commit recordings/embeddings, create a listener, modify firmware, or enable always-listening capture without explicit approval.
- Speaker recognition must never be the sole authority for high-impact actions.
## Factory readiness next actions
1. Confirm repository checks and ignored-data boundaries.
2. Register the local repository workspace.
3. Define an evaluation-only Paseo contract.
4. Run no automated collection/deployment schedule until consent, retention, and calibration decisions are documented.
## Related records
- `../family_voice_context_and_speaker_id_2026.md`
- `../../areas/operations/services_inventory.md`
@@ -0,0 +1,34 @@
flowchart LR
classDef confirmed fill:#123d2d,stroke:#34d399,color:#e2e8f0,stroke-width:2px;
classDef inferred fill:#46351a,stroke:#fbbf24,color:#fef3c7,stroke-width:2px,stroke-dasharray: 6 4;
classDef unknown fill:#1e293b,stroke:#94a3b8,color:#e2e8f0,stroke-width:2px,stroke-dasharray: 2 4;
classDef blocked fill:#3f1d2b,stroke:#fb7185,color:#ffe4e6,stroke-width:2px;
subgraph Device[Candidate Tactility board]
PV[PipecatVoice external ELF<br/>16 kHz PCM + protocol-v1]:::confirmed
RB[ReynaBot external ELF<br/>separate legacy endpoint]:::inferred
CFG[Persisted config.json<br/>may override PipecatVoice default]:::unknown
end
subgraph Mac[Mac mini — current voice hosts]
AD[LAN voice adapter<br/>protocol-v1 WebSocket · port 8644]:::confirmed
HG[Default Hermes gateway<br/>listening · port 8642]:::confirmed
PC[Pipecat SmallWebRTC bot<br/>listening · port 7860]:::confirmed
TS[Pipecat turn/STT/TTS experiments<br/>repo: pipecat-voice-gateway]:::inferred
end
subgraph Pi[AeroPi5 — Kids Hermes runtime]
KG[hermes-gateway-kids.service<br/>kids profile · active]:::confirmed
KP[Voice route / listener / profile binding<br/>not observed in discovery]:::unknown
end
PV -->|CONFIRMED: current source default<br/>protocol-v1 WS| AD
CFG -.->|UNKNOWN: runtime override<br/>must reconcile| PV
RB -.->|INFERRED: direct legacy WS<br/>endpoint differs from PipecatVoice| HG
AD -.->|INFERRED: may call voice processing<br/>contract not yet traced live| TS
TS -.->|INFERRED: Hermes API use in source| HG
PC -.->|NOT PRODUCT PATH: WebRTC route<br/>external ELF is a documented NO-GO| PV
KG -.->|UNKNOWN: no confirmed voice transport<br/>binding to current client/adapter| AD
KG -.->|UNKNOWN: policy/runtime relationship| HG
NOTE[Status key:<br/>solid green = confirmed now<br/>dashed amber = inferred from source/history<br/>dotted gray = unknown; needs evidence<br/>rose = blocked/no-go]:::unknown
Binary file not shown.
@@ -0,0 +1,51 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1500" height="1030" viewBox="0 0 1500 1030" role="img" aria-labelledby="title desc">
<title id="title">Kids Hermes Voice — verified system design</title>
<desc id="desc">System design overview of the candidate Tactility board, Mac mini voice adapter, Pipecat path, default Hermes gateway, and AeroPi5 kids runtime. Connections are marked confirmed, inferred, or unknown.</desc>
<defs>
<pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse"><path d="M40 0H0V40" fill="none" stroke="#1e293b" stroke-width="0.5"/></pattern>
<marker id="green" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto"><path d="M0,0 L0,6 L9,3 z" fill="#34d399"/></marker>
<marker id="amber" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto"><path d="M0,0 L0,6 L9,3 z" fill="#fbbf24"/></marker>
<marker id="gray" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto"><path d="M0,0 L0,6 L9,3 z" fill="#94a3b8"/></marker>
<style>
.title{font:700 25px ui-monospace,SFMono-Regular,Menlo,monospace;fill:#f8fafc}.sub{font:13px ui-monospace,SFMono-Regular,Menlo,monospace;fill:#94a3b8}.group{font:700 14px ui-monospace,SFMono-Regular,Menlo,monospace;fill:#cbd5e1}.name{font:700 15px ui-monospace,SFMono-Regular,Menlo,monospace;fill:#f8fafc}.text{font:12px ui-monospace,SFMono-Regular,Menlo,monospace;fill:#cbd5e1}.small{font:11px ui-monospace,SFMono-Regular,Menlo,monospace;fill:#94a3b8}.label{font:11px ui-monospace,SFMono-Regular,Menlo,monospace;fill:#e2e8f0}.confirmed{fill:#123d2d;stroke:#34d399;stroke-width:2}.inferred{fill:#46351a;stroke:#fbbf24;stroke-width:2;stroke-dasharray:7 5}.unknown{fill:#1e293b;stroke:#94a3b8;stroke-width:2;stroke-dasharray:3 5}.nogood{fill:#3f1d2b;stroke:#fb7185;stroke-width:2}.boundary{fill:#0f172a;fill-opacity:.72;stroke:#475569;stroke-width:1.4;stroke-dasharray:8 5}.lineC{stroke:#34d399;stroke-width:3;fill:none;marker-end:url(#green)}.lineI{stroke:#fbbf24;stroke-width:2.5;fill:none;stroke-dasharray:8 5;marker-end:url(#amber)}.lineU{stroke:#94a3b8;stroke-width:2;fill:none;stroke-dasharray:3 6;marker-end:url(#gray)}
</style>
</defs>
<rect width="1500" height="1030" fill="#020617"/><rect width="1500" height="1030" fill="url(#grid)"/>
<text x="55" y="55" class="title">KIDS HERMES VOICE — SYSTEM DESIGN</text><text x="55" y="80" class="sub">Read-only baseline · connections show current evidence, not authorization to change or deploy</text>
<!-- boundaries -->
<rect x="50" y="125" width="360" height="650" rx="14" class="boundary"/><text x="75" y="155" class="group">CANDIDATE TACTILITY BOARD</text>
<rect x="520" y="125" width="535" height="650" rx="14" class="boundary"/><text x="545" y="155" class="group">MAC MINI — CURRENT VOICE HOSTS</text>
<rect x="1165" y="125" width="285" height="650" rx="14" class="boundary"/><text x="1190" y="155" class="group">AEROPI5 — KIDS RUNTIME</text>
<!-- flows behind boxes -->
<path d="M390 300 C450 300 465 300 540 300" class="lineC"/><text x="422" y="284" class="label">CONFIRMED · protocol-v1 WS</text>
<path d="M360 501 C452 501 466 501 540 475" class="lineI"/><text x="405" y="487" class="label">INFERRED · legacy direct WS</text>
<path d="M345 650 C430 650 440 650 540 650" class="lineU"/><text x="395" y="635" class="label">UNKNOWN · config override</text>
<path d="M750 365 C750 405 750 420 750 450" class="lineI"/><text x="765" y="412" class="label">INFERRED · processing link</text>
<path d="M850 510 C890 500 910 475 920 410" class="lineI"/><text x="870" y="455" class="label">INFERRED · Hermes API</text>
<path d="M730 690 C630 720 505 715 390 690" class="lineI"/><text x="510" y="742" class="label">NO-GO: SmallWebRTC in current external ELF</text>
<path d="M1165 330 C1100 330 1085 330 1035 330" class="lineU"/><text x="1060" y="314" class="label">UNKNOWN policy/transport binding</text>
<path d="M1165 570 C1100 570 1080 570 940 570" class="lineU"/><text x="1010" y="554" class="label">UNKNOWN</text>
<!-- device boxes -->
<rect x="75" y="230" width="315" height="130" rx="8" class="confirmed"/><text x="96" y="260" class="name">PipecatVoice app</text><text x="96" y="287" class="text">Tactility external ELF</text><text x="96" y="310" class="text">16 kHz PCM + protocol-v1 state machine</text><text x="96" y="337" class="small">Current source target: Mac mini voice adapter</text>
<rect x="75" y="430" width="285" height="125" rx="8" class="inferred"/><text x="96" y="460" class="name">ReynaBot app</text><text x="96" y="487" class="text">Separate legacy voice endpoint</text><text x="96" y="510" class="small">Endpoint differs from PipecatVoice</text><text x="96" y="532" class="small">Live use / target identity: unverified</text>
<rect x="75" y="610" width="270" height="100" rx="8" class="unknown"/><text x="96" y="640" class="name">Persisted config.json</text><text x="96" y="668" class="text">Can override non-secret endpoint</text><text x="96" y="692" class="small">Not yet read from candidate board</text>
<!-- mac boxes -->
<rect x="540" y="230" width="390" height="135" rx="8" class="confirmed"/><text x="565" y="260" class="name">LAN voice adapter</text><text x="565" y="288" class="text">protocol-v1 WebSocket · LAN-only bind</text><text x="565" y="312" class="text">Path: /api/esp32/voice/ws</text><text x="565" y="340" class="small">Confirmed listening; HTTP probe requested WS upgrade</text>
<rect x="540" y="450" width="390" height="110" rx="8" class="inferred"/><text x="565" y="480" class="name">Pipecat voice processing</text><text x="565" y="507" class="text">STT / turn service / TTS experiments</text><text x="565" y="535" class="small">Integration contract to adapter not live-traced</text>
<rect x="540" y="610" width="390" height="105" rx="8" class="confirmed"/><text x="565" y="640" class="name">Pipecat SmallWebRTC bot</text><text x="565" y="667" class="text">Service is listening</text><text x="565" y="692" class="small">Available path; not a supported current Tactility ELF route</text>
<rect x="940" y="385" width="92" height="110" rx="8" class="confirmed"/><text x="952" y="414" class="name">Default</text><text x="952" y="438" class="name">Hermes</text><text x="952" y="462" class="name">gateway</text><text x="952" y="483" class="small">listening</text>
<!-- pi box -->
<rect x="1190" y="230" width="230" height="140" rx="8" class="confirmed"/><text x="1210" y="260" class="name">Kids Hermes runtime</text><text x="1210" y="288" class="text">hermes-gateway-kids.service</text><text x="1210" y="313" class="text">active · kids profile</text><text x="1210" y="343" class="small">Policy/runtime owner</text>
<rect x="1190" y="510" width="230" height="120" rx="8" class="unknown"/><text x="1210" y="540" class="name">Voice-route binding</text><text x="1210" y="568" class="text">No current listener observed</text><text x="1210" y="594" class="small">Connection to adapter/client unknown</text>
<!-- legend and evidence -->
<rect x="50" y="815" width="1400" height="165" rx="12" fill="#0f172a" stroke="#334155" stroke-width="1.5"/>
<text x="75" y="846" class="group">EVIDENCE KEY</text><line x1="75" y1="872" x2="130" y2="872" class="lineC"/><text x="145" y="877" class="text">Confirmed now: process/listener, active service, or current source endpoint</text><line x1="610" y1="872" x2="665" y2="872" class="lineI"/><text x="680" y="877" class="text">Inferred: source/history exists; end-to-end linkage not proven</text><line x1="1110" y1="872" x2="1165" y2="872" class="lineU"/><text x="1180" y="877" class="text">Unknown: requires evidence</text>
<text x="75" y="915" class="text">Sources: current Tactility app source/README; Mac mini listener and process inspection; AeroPi5 systemd inspection; PipecatVoice postmortem; factory record.</text>
<text x="75" y="944" class="text">Current restore gate: reconcile the candidate board’s persisted PipecatVoice config against the confirmed Mac mini adapter endpoint. No source, service, or device changes were made.</text>
</svg>

After

Width:  |  Height:  |  Size: 7.9 KiB

+105
View File
@@ -0,0 +1,105 @@
---
project_key: kids-hermes-voice
status: active
factory_maturity: discovery
updated: 2026-08-18
---
# Kids Hermes Voice — Project Definition
## Purpose
Kids Hermes Voice is the child-safe, local voice experience spanning the Tactility ESP32 client, the voice-gateway application, and the Hermes kids/voice runtime. It is distinct from `family-voice`, which remains the evaluation-only speaker-identification and privacy research project. Speaker identification may later supply non-authoritative context to this project only after an explicit consent decision.
## Execution map
| Host / target | Repository / service | Paseo-project role | Current evidence |
|---|---|---|---|
| Mac mini `.102` | `~/Projects/electronics/tactility/tactility_apps` — `Apps/PipecatVoice` / related `ReynaBot` paths | `Kids Hermes Voice · Tactility client` | Repository is present on `main`, ahead of `origin/main` by 1 commit, with existing modified/untracked voice-related work; preserve it until inventoried. Existing Tactility Apps workspace: `wks_c488f281bcb459c7` (registration must be rechecked before dispatch). |
| Mac mini `.102` | `~/Projects/pipecat-voice-gateway` | `Kids Hermes Voice · Gateway` | Repository is present on `main`, with existing modified/untracked gateway work; no reset, commit, or deployment is authorized. Workspace registration still needs discovery. |
| AeroPi5 `.126` | Hermes kids/voice runtime and legacy voice-host role | `Kids Hermes Voice · Runtime` | Host was reachable on 2026-08-18. Exact checkout, active service ownership, and current configuration are unverified; read-only discovery only. |
| Tactility ESP32 fleet | First target board must be named per task | Deployment target, not a Paseo host | No install, flash, or runtime change is authorized by this record. |
## Architecture boundary
```text
Tactility voice client <-> voice-gateway protocol <-> Hermes kids/voice runtime
device UX transport child-safe response policy
```
- The client owns capture, playback, device UI, and protocol compatibility.
- The gateway owns the versioned voice transport, capability negotiation, turn telemetry, and compatibility fallbacks.
- The Hermes runtime owns the child-safe profile, permitted tools, and local response routing.
- `family-voice` owns offline speaker-ID evaluation and privacy review; it is not an authentication mechanism.
## Personas
- Integration planner: maps protocol, repository boundaries, and acceptance criteria; read-only.
- Tactility client implementer: isolated worktree only.
- Gateway/runtime implementer: isolated worktree only; never edits both repositories in one shared checkout.
- Build/protocol verifier: reports exact commands and outcomes without source fixes.
- Child-safety/privacy reviewer: checks profile/tool boundary, retention, and no-cloud/raw-audio claims.
- Device QA/deployment executor: acts only for a named device after explicit approval, rollback plan, and compatible SDK/firmware verification.
## Safety boundaries
- Do not expose administrator/system tools to child-facing sessions.
- Do not upload, commit, or place raw audio, embeddings, credentials, or pairing material in project records.
- No always-listening capture, enrollment, firmware flash, device install, daemon restart, gateway deployment, profile/permission change, or service reconfiguration without explicit human approval.
- Existing dirty worktrees are evidence to inventory, not permission to reset, commit, merge, or overwrite.
- Every source-changing lane uses one isolated worktree and an explicitly `auto-review` Paseo coding session; planners/reviewers remain read-only.
## First coordination task — baseline contract and inventory
**Goal:** establish an implementation-ready, evidence-backed baseline without changing source or devices.
**Incident context:** this voice path reportedly worked previously but has not been restored for an extended period. Treat the current effort as a restoration investigation: establish the last known working boundaries and concrete present blockers before proposing a change.
**Acceptance criteria:**
1. Identify the intended first device/board and its current firmware/SDK compatibility.
2. Inventory existing uncommitted client and gateway work by file and behavioral intent; classify it as preserve, superseded, or candidate for the first worktree.
3. Confirm the live runtime host, checkout/service owner, and the current kids/voice entry route on AeroPi5.
4. Produce a versioned client↔gateway protocol contract covering capability negotiation, PCM-first streamed output, state/error events, interruption behavior, and the full-WAV/base64 fallback.
5. Name the first source-changing milestone and its repository owner; no coding until the human approves that scope.
**Allowed now:** read-only repository, workspace, host, and device discovery; protocol planning; build-command discovery.
**Required evidence:** exact git/workspace status; repository `AGENTS.md`; runtime/service ownership; device identity plus firmware/SDK version; proposed contract location and verification commands.
**Forbidden effects:** source edits, commits, resets, installs, flashes, starts/stops/restarts, profile/permission changes, external sends, credentials, and raw-audio collection/export.
**Approval gate:** explicit human approval is required before dispatching an implementation agent, changing source, or interacting with a device/runtime.
## Baseline findings — 2026-08-18
- The canonical device architecture is **protocol-v1 LAN WebSocket**, not Pipecat SmallWebRTC inside a Tactility external ELF. The latter is a documented no-go for the current SDK/firmware boundary.
- The Mac mini currently has a live LAN adapter at `192.168.68.102:8644`, serving `/api/esp32/voice/ws`; a non-mutating HTTP probe correctly received `400` requesting a WebSocket upgrade. The default Hermes gateway separately listens on `*:8642`.
- Current Tactility `PipecatVoice` source and README agree on the `.102:8644` adapter endpoint, but prior restoration evidence refers to a different endpoint. The first gate is therefore endpoint plus persisted-device-config reconciliation, not a transport redesign.
- AeroPi5 has an active `hermes-gateway-kids.service` running the `kids` profile from `~/.hermes/profiles/kids`. It has no Paseo CLI/workspace registration, and no `:8642` listener was observed in this discovery; it is a runtime-policy dependency, not the current LAN adapter host.
- Board `.129` is reachable and its dashboard API returned HTTP `200`; board `.112` responds to ICMP but its dashboard port `80` was unavailable. `.129` is the evidence-backed candidate for the first restoration validation, pending the human naming it as the approved target.
- The local client protocol test passed (`voice_protocol tests passed`) and both involved working trees passed `git diff --check`. This is static evidence only; it does not prove a board WebSocket session, upstream PCM, speaker playback, reconnect, or STT/Hermes/TTS.
- Existing gateway/client modifications must be inventoried and retained. A credential-bearing source artifact was encountered during read-only inspection; it must be remediated in an explicitly approved, secret-safe source-change lane and must never be copied into records, logs, or chat.
## Canonical project layout
```text
Kids Hermes Voice (cross-project record)
├── Tactility client: tactility_apps/Apps/PipecatVoice
│ └── device capture/playback, protocol-v1 state machine, persisted non-secret endpoint
├── LAN adapter: voice-assistant/hermes-esp32-voice-gateway
│ └── 192.168.68.102:8644 protocol boundary, LAN framing/limits, deterministic audio fixtures
├── Voice processing: pipecat-voice-gateway
│ └── STT/TTS/turn-service experimentation; never silently substitutes for the adapter contract
└── Kids runtime: AeroPi5 ~/.hermes profile `kids`
└── child-safe policy and allowed-tool boundary; distinct from transport ownership
```
The next read-only deliverable is an endpoint/persisted-config reconciliation report for the approved board. Only after that evidence exists may a separate, approved worktree lane define the smallest restoration edit.
## Related records
- `family-voice.md`
- `tactility.md`
- `../tactility_voice_gateway_elato_transition_2026.md`
- `../voice_dev_infrastructure_2026.md`
- `../../areas/operations/services_inventory.md`
+46
View File
@@ -0,0 +1,46 @@
---
project_key: remarkable-hermes
status: active
factory_maturity: discovery
updated: 2026-08-17
---
# reMarkable Hermes Communication — Project Definition
## Purpose
reMarkable Hermes is the multi-host Paper Pro communication and watcher effort: a tablet-side Hermes surface, safe handwriting/document interaction, and the supporting logger/bridge infrastructure.
## Execution map
| Host / target | Repository / service | Paseo-project role | Status |
|---|---|---|---|
| iMac `.124` | Paper Pro SDK / cross-compile work documented under `~/remarkable-dev` | `reMarkable · App` | Exact repository path and daemon recovery still require discovery |
| AeroPi5 `.126` | watcher/logger/UDP listener history | `reMarkable · Watcher` | Inventory reports watcher not working; ownership and files need discovery |
| Paper Pro `.132` | sidecar and custom app target | Target environment, not a Paseo host | Explicit device safety controls apply |
## Personas
- App planner and Qt implementer: scoped app/worktree development.
- Watcher incident triager: read-only service inspection first.
- Watcher implementer and service verifier: only after root cause and task scope.
- Device deployment verifier: checks the specific approved artifact on-device.
- Deployment executor: performs an explicitly approved device-side action with rollback plan.
## Safety boundaries
- Do not restart xochitl, alter device system files, overwrite documents, or deploy a tablet app without explicit approval and rollback path.
- Treat the Paper Pro as a target environment, never as a generic remote coding host.
- Preserve handwritten source material and avoid bulk document manipulation.
## Factory readiness next actions
1. Discover the active iMac repository/workspace, build command, and Paseo daemon recovery path.
2. Discover current Pi watcher ownership, files, logs, and failure mode without modifications.
3. Register host-local Paseo workspaces only after that evidence is reviewed.
4. Pilot a read-only watcher triage or local app build—never a tablet deployment.
## Related records
- `../remarkable_hermes_communication_app.md`
- `../../areas/operations/services_inventory.md`
+44
View File
@@ -0,0 +1,44 @@
---
project_key: reyna-cli
status: active
factory_maturity: discovery
updated: 2026-08-17
---
# Reyna CLI — Project Definition
## Purpose
Reyna CLI is the private Mac mini operations platform for privacy-sensitive Apple integrations, family operations, and controlled local/LAN service capabilities.
## Execution map
| Host | Repository / service | Paseo-project role | Status |
|---|---|---|---|
| Mac mini `.102` | `~/Projects/platform/reyna-cli` (symlinked/known as `~/Projects/reyna-cli`), Gitea `adolforeyna/reyna-cli` | `Reyna CLI · Main` | Registered local workspace `wks_5d711dc3ed4df37e`; local ignored/untracked device artifacts exist |
## Personas
- Planner: maps requested capability to privacy and system boundaries.
- Privacy-boundary implementer: isolated worktree code changes only.
- Test verifier: runs exact CLI/unit/integration checks.
- Security reviewer: checks command injection, secret handling, permissions, network exposure, and unintended Apple-data access.
- Release steward and deployment executor: separate, approval-gated roles.
## Safety boundaries
- TCC permissions, Apple data, credentials, LaunchAgents, gateway configuration, and LAN listener exposure are separate approval boundaries.
- Never use a source-changing agent in the shared `main` checkout.
- Do not include data from Calendar, Contacts, Notes, Reminders, or authentication stores in agent prompts or brain records.
## Factory readiness next actions
1. Discover the repository's actual test/build/lint commands.
2. Register a local main-checkout Paseo workspace after checking the current local state.
3. Establish `paseo.json` with only audited, non-publishing commands.
4. Pilot a low-risk worktree change before scheduling quality automation.
## Related records
- `../reyna_cli_browser_control.md`
- `../../areas/operations/services_inventory.md`
+47
View File
@@ -0,0 +1,47 @@
---
project_key: tactility
status: active
factory_maturity: discovery
updated: 2026-08-17
---
# Tactility — Project Definition
## Purpose
Tactility is the ESP32 platform and runtime-app collection for family displays, audio, media, device interfaces, and approved hardware experiments.
## Execution map
| Host / target | Repository / service | Paseo-project role | Status |
|---|---|---|---|
| Mac mini `.102` | `~/Projects/electronics/tactility/tactility`, Gitea origin | `Tactility · Platform` | Registered local workspace `wks_f6a631c20313f1a8` on `main` |
| Mac mini `.102` | `~/Projects/electronics/tactility/tactility_apps`, Gitea origin | `Tactility · Apps` | Registered local workspace `wks_c488f281bcb459c7` on `main`; detailed app build/deploy guidance is in repo `AGENTS.md` |
| ESP32 fleet | Boards such as `.112`, `.111`, `.123` | Target environments, not Paseo hosts | Device health/version must be verified per task |
## Personas
- Firmware/app planner: read-only, identifies board/SDK/app compatibility.
- Platform or app implementer: isolated worktree only.
- Build verifier: confirms build plus undefined-symbol check.
- Hardware reviewer: assesses firmware/device risk and deployment prerequisites.
- Device QA: captures approved behavioral/screenshot evidence after deployment.
- Deployment executor: performs a specific approved device install/run only.
## Safety boundaries
- Build success alone is not completion.
- Hardware deployment requires explicit approval, named board, compatible SDK/firmware, rollback/recovery plan, and behavior verification.
- Do not blindly flash firmware, mass-install apps, or assume a remembered IP/device identity.
## Factory readiness next actions
1. Discover project-specific build/test commands for platform and apps.
2. Register two separate Mac mini Paseo workspaces.
3. Create repository-specific Paseo script contracts.
4. Pilot an app-only worktree change with build + symbol verification, without device installation.
## Related records
- `../tactility_voice_gateway_elato_transition_2026.md`
- `../../areas/operations/services_inventory.md`
@@ -0,0 +1,51 @@
---
Date: 2026-08-25
Book: Belling the Cat
Audience: Grace
Status: source background established from supplied title page and ending sequence (pages 26–32); opening pages are still needed for a complete page-by-page production package
Tags: [kids-book, tactility, Grace, source-background]
---
# Belling the Cat — Source Background
## Source status
- User supplied the title page and all **seven photographed story pages** for this fable. The printed numbers 26–32 are this fable's sequence within a larger book, not missing opening material.
- The direct review shows a complete narrative: meeting, discussion, young mouse's idea, silent-cat problem, bell proposal, practical objection, and ending.
- This note is a private production reference for an original child-friendly adaptation, not a reproduction of the physical book.
## Main characters
- **Young mouse:** A small gray mouse in an orange sweater and green trousers. He enthusiastically proposes tying a bell around the Cat's neck.
- **Older mouse:** A wise gray mouse with round glasses and a blue coat. He calmly asks the important practical question.
- **Mouse community:** A group of varied brown and gray mice in simple colorful clothes, gathered in a wooden attic/workroom.
- **The Cat:** The feared enemy, mostly represented through the Cat's portrait in the provided ending sequence. Keep her imposing but not frightening for a young child.
## Setting and visual language
- A cozy wooden attic/workroom: big spool of red thread, small green stools, blue cabinet, pink curtains, lamp, fabric scraps, and a framed cat picture.
- Soft colored-pencil/watercolor illustrations with warm muted colors, thin dark outlines, and a blue border around each image.
- The mood travels from worry, to excited hope, to thoughtful silence—without needing intense danger.
## Story arc confirmed by the supplied pages
1. The mice gather to discuss their enemy, the Cat.
2. A young mouse explains that the silent Cat keeps them in danger.
3. He proposes tying a bell around the Cat's neck so the mice can hear her coming and run away.
4. The other mice applaud the clever-sounding idea.
5. An older mouse asks who will actually put the bell on the Cat.
6. The mice fall silent, and no one speaks of belling the Cat again.
## Adaptation guardrails
- Generate original illustrations from the photos as visual and plot references; never use phone-photo crops as finished device art.
- Preserve continuity: cozy mouse workroom, young mouse in orange/green, older mouse with glasses/blue coat, red thread spool and small bell as recurring props.
- Device art target: 320×240 landscape, no printed text inside art.
- Narration should be warm, clear, and age-appropriate for Grace; pause slightly before the older mouse's question and make the ending thoughtful, not shameful.
- Central lesson: a clever idea is not enough unless someone can safely and realistically carry it out.
## Remaining source material needed for complete production
- Pages 1–25, if this should become a page-by-page device book
- Author/publisher information, if source credit is wanted
- Confirmation whether the final book should be English only or also Spanish
@@ -0,0 +1,14 @@
{
"book_id": "grace-belling-the-cat",
"title": "Belling the Cat",
"source_status": "complete supplied story sequence: seven photographed story pages plus title page; printed pages 26–32 belong to this fable's full sequence",
"captions": [
{"sequence": 1, "printed_page": 26, "text": "Long ago, the mice had a meeting to talk about their enemy—the Cat. What could they do about her?"},
{"sequence": 2, "printed_page": 27, "text": "Some said this, and some said that. But at last a young mouse got up and said he had an idea."},
{"sequence": 3, "printed_page": 28, "text": "The Cat moves without making a sound. That is why we are always in danger."},
{"sequence": 4, "printed_page": 29, "text": "If we could hear the Cat coming, it would be easy for us to run away."},
{"sequence": 5, "printed_page": 31, "text": "My idea is this: we will tie a bell around the Cat's neck. Then we will hear her coming and can run away."},
{"sequence": 6, "printed_page": 30, "text": "The mice clapped and cheered. Then one old mouse asked which one would put the bell on the Cat. The mice looked at one another in silence."},
{"sequence": 7, "printed_page": 32, "text": "And no one ever spoke again of belling the Cat."}
]
}
@@ -0,0 +1,49 @@
---
Date: 2026-08-25
Book: City Mouse-Country Mouse
Audience: Grace
Status: source background established from supplied photos; pages 1–7 still needed for a complete adaptation
Tags: [kids-book, tactility, Grace, source-background]
---
# City Mouse-Country Mouse — Source Background
## Source status
- User supplied the title page and all **11 story beats** across six photographed story pages/spreads; several photos contain two facing pages.
- The source sequence is now fully established, including the City Mouse's trip to visit the Country Mouse, the Country Mouse's welcome, the simple meal, the city visit, the dogs, and the peaceful ending.
- This note is a private production reference for an original, child-friendly device adaptation. It is not a reproduction of the physical book.
## What the visible pages establish
### Main characters
- **City Mouse:** Comfortable in the city, fond of fancy food and city life; wears a blue coat in the source illustrations.
- **Country Mouse:** A visiting cousin from the country, modest and peace-seeking; wears a purple dress in the source illustrations.
### Settings
- **Country home:** A warm hollow inside a large tree in a birch forest. The Country Mouse has a simple domestic space.
- **City home:** An indoor house with a dining room, table, chairs, curtains, and plenty of leftovers from a fine dinner.
### Story arc confirmed by the supplied pages
1. City Mouse travels to visit Country Mouse.
2. Country Mouse happily welcomes the cousin and shares a simple meal.
3. City Mouse rejects the country meal and invites Country Mouse to the city.
4. They travel to the city, arrive late at night, and find a feast of leftovers.
5. They begin to eat, hear growling, and then two large dogs burst in; both mice flee.
6. Country Mouse chooses to return home, deciding that a peaceful simple meal is better than fine food that cannot be enjoyed safely.
## Adaptation guardrails
- Use the source photos only as visual and plot reference; generate new, original illustrations rather than use phone-photo crops.
- Preserve visual continuity from the source: small brown mice, City Mouse in blue, Country Mouse in purple, warm watercolor/ink storybook feeling.
- Device art target: 320×240 landscape, no printed text inside artwork.
- Narration should be warm, clear, and age-appropriate for Grace; retain the central lesson without copying the source wording.
## Missing source material before production
- Pages 1–7 / the beginning of the visit
- Any cover, author, or publisher information if the final package should credit the source
- Confirmation whether the book should be English only or also have a Spanish version
@@ -0,0 +1,18 @@
{
"book_id": "grace-city-mouse-country-mouse",
"title": "City Mouse-Country Mouse",
"source_status": "complete story sequence recovered by reviewing all seven supplied photos; several photos contained two facing pages",
"captions": [
{"sequence": 1, "text": "Once upon a time a City Mouse went to visit his cousin in the country."},
{"sequence": 2, "text": "The Country Mouse was happy to see his cousin."},
{"sequence": 3, "text": "The Country Mouse did not have fine food, but he was happy to share what he had with the City Mouse."},
{"sequence": 4, "text": "The City Mouse turned up his nose at the country food. And he invited his cousin to have dinner with him in the city."},
{"sequence": 5, "text": "No sooner said than done. The two mice set off for the city."},
{"sequence": 6, "text": "At last they came to the home of the City Mouse. It was very late at night."},
{"sequence": 7, "text": "The City Mouse led the Country Mouse right into the dining room. The leftovers of a fine feast were still on the table."},
{"sequence": 8, "text": "Soon the two mice were eating jam and cake and all that was nice. Suddenly, they heard growling and barking."},
{"sequence": 9, "text": "All at once the door flew open and in came two huge dogs. Both mice ran for their lives."},
{"sequence": 10, "text": "The Country Mouse made up his mind to go back to the country that very night."},
{"sequence": 11, "text": "What good is fine food if you can't enjoy it! It is much better to eat plain food in peace."}
]
}
@@ -0,0 +1,51 @@
---
Date: 2026-08-25
Book: The Lion and the Mouse
Audience: Grace
Status: source background established from supplied cover and story photos; page sequence is partial
Tags: [kids-book, tactility, Grace, source-background]
---
# The Lion and the Mouse — Source Background
## Source status
- User supplied the cover plus seven photographed story pages, including the opening, release, rescue, and closing moral.
- The photographed set is sufficient to establish the story arc and visual language. Any unseen intermediate pages should be captured before a page-for-page production package is built.
- This is a private production reference for an original, child-friendly adaptation—not a reproduction of the physical book.
## Main characters
- **Lion:** A large golden-brown lion with a dark brown mane, big paws, and an expressive, friendly face. He is powerful but learns humility and gratitude.
- **Mouse:** A tiny gray mouse in a bright red jacket. The Mouse is brave, kind, and resourceful despite being small.
- **Hunters:** Off-page antagonists represented by the rope net/trap; no need to make them visually prominent in an adaptation.
## Setting and visual language
- Woodland forest with pale purple-gray tree trunks, broad green leaves, stones, and small pink flowers.
- Classic colored-pencil/soft-watercolor storybook look, thin dark outlines, orange-gold picture frames, and a gentle rather than frightening mood.
- The lion's danger should feel urgent but not scary for a young child. The Mouse's rescue is the emotional high point.
## Story arc confirmed by the supplied pages
1. While a Lion sleeps in the forest, a small Mouse runs across his back.
2. The Lion wakes, catches the Mouse, and considers swallowing him.
3. The Mouse begs to be released and promises to help someday.
4. The Lion laughs, but kindly lets the Mouse go.
5. Hunters later trap the Lion with ropes and tie him to a tree.
6. The Mouse finds him, gnaws through the ropes, and frees him.
7. The Mouse reminds the Lion that little friends can do great things.
## Adaptation guardrails
- Generate original illustrations from the photos as references; never use phone-photo crops as the finished device art.
- Preserve continuity: Lion = warm golden brown with dark mane; Mouse = tiny gray mouse in red jacket; quiet leafy forest with pink flowers.
- Device art target: 320×240 landscape, no printed text inside artwork.
- Narration should be warm and clear for Grace, with a gentle suspense beat at the trapped-lion scene and a joyful resolution.
- Central lesson: size does not measure kindness, courage, or a person's ability to help.
## Remaining source material needed for a complete page-by-page package
- Any unphotographed intermediate pages and their printed captions
- Author/publisher information, if the final package should include a source credit
- Language choice: English only or an additional Spanish version
@@ -0,0 +1,14 @@
{
"book_id": "grace-lion-and-mouse",
"title": "The Lion and the Mouse",
"source_status": "partial sequence: cover plus seven photographed story pages, including printed page 24",
"captions": [
{"sequence": 1, "text": "Once while a Lion was sleeping, a little Mouse ran up and down his back."},
{"sequence": 2, "text": "Soon the Lion woke up. He put his big paw on the Mouse. He opened his big jaws to swallow him."},
{"sequence": 3, "text": "The Mouse begged the Lion to let him go. He promised to help the Lion some day."},
{"sequence": 4, "text": "The Lion laughed at the thought of a little Mouse helping a great Lion. But he lifted his paw and he let the Mouse go."},
{"sequence": 5, "text": "Not long after the Mouse saw the Lion tied to a tree. The Lion had been trapped by some hunters."},
{"sequence": 6, "text": "The little Mouse went up to the great Lion and he gnawed right through the ropes. Soon the Lion was free."},
{"page": 24, "text": "\"Wasn't I right?\" said the little Mouse to the Lion. \"Little friends can do great things.\""}
]
}
@@ -6,6 +6,12 @@ Tags: [project, family, kids, storybook, esp32, image-generation, voice, codex,
# Grace/Poppy Storybook Image + Voice App
## TODO — Recognizable Kids' Voices
- [ ] Prepare voice profiles/recordings that Grace and Elías recognize for voice integration on their Tactility/ESP32 devices.
- [ ] Evaluate the YouTube reference audio/transcription at `/Users/adolforeyna/output/youtube-transcriptions/Zimo86TbX8k/` as a possible source/reference for voice preparation.
- [ ] Decide the voice-engine and delivery path for device playback, then make a small test clip per child before bulk integration.
## Summary
This project documents the workflow used to turn a family storybook package for Princess Grace and Poppy into a synchronized image-and-audio experience on an ESP32/Tactility color screen device. The current working prototype is coordinated by Hermes: Hermes displays each generated image on the device, plays the matching narration audio, waits for playback, then advances to the next page.
+1
Submodule projects/kid_dash added at 30f9148adb
+59
View File
@@ -0,0 +1,59 @@
---
title: Kindle Office Dashboard
status: active
created: 2026-08-12
updated: 2026-08-12
tags: [kindle, office, dashboard, e-ink, ssh]
---
# Kindle Office Dashboard
## Purpose
The jailbroken Kindle is assigned as a permanent office e-ink display. Hermes can send text, grayscale PNG images, dashboards, and experimental typing/animation frames to it over SSH on the trusted home LAN.
## Verified device
- Kindle firmware: 5.18.1
- Architecture: ARMv7 / armv7l
- LAN address used: 192.168.68.125
- Access: root SSH currently works interactively; credentials are intentionally not recorded here.
- Existing Kindle software: KOReader, KUAL, KTerm, BusyBox, `eips`.
- Root filesystem: read-only; work is kept under `/mnt/us`.
## Verified display methods
- `eips -c` clears the screen.
- `eips X Y "text"` draws text; the observed coordinate behavior is pixel-like, with increasing Y moving downward.
- Small direct text updates use partial refreshes and produce useful terminal-like ghosting/typing animation.
- `eips -g IMAGE -f -W` displays a PNG with a full refresh.
- A 600x800 grayscale PNG is the reliable native portrait image format.
- Landscape content requires rendering an 800x600 page, rotating it into a 600x800 PNG, displaying it, and physically turning the Kindle sideways.
## Reusable local scripts
Located in `/Users/adolforeyna/bin/`:
- `kindle-show` — send text using the local renderer.
- `kindle-send-image` — send a PNG and display it with `eips`.
- `kindle-render.py` — render text to a grayscale PNG.
- `kindle-ui` / `kindle-ui.py` — render/send a bordered dashboard UI.
- `kindle-keep-awake` — toggle or inspect the Kindle screensaver prevention state.
- `kindle-type-landscape` — render a rotated landscape text page.
- `kindle-png-type-landscape` — experimental cumulative rotated-PNG animation; not yet end-to-end verified because the Kindle's unusual empty-password SSH prompt interferes with binary streaming.
## SSH key status
The Mac public key was written to `/mnt/us/ssh/authorized_keys`, but passwordless authentication was not accepted. The SSH daemon's configured authorized-key path still needs discovery. Do not change the read-only root filesystem or record the Kindle password. Until fixed, use the existing interactive SSH path for sending.
## Current direction
Keep the Kindle permanently in the office and use it as a quiet family/household task dashboard. Prefer simple scripts over a new MCP server. Use grayscale, high contrast, modest refresh frequency, and full refreshes between substantially different dashboard pages to manage ghosting. Direct partial updates remain best for typing-style experiments.
## Progress log — 2026-08-12
- Confirmed portrait text updates and vertical coordinates.
- Confirmed direct partial-refresh typing animation.
- Confirmed rotated landscape bitmap rendering.
- Confirmed image transfer/display through `kindle-send-image` with a live `eips -g` full refresh.
- Attempted individual cumulative PNG animation; blocked only by SSH authentication/stream ordering, not PNG rendering.
@@ -70,6 +70,7 @@ Tags: #emi #latinamerica #leadership #kingdom #collaboration
- [ ] Create WhatsApp logistics group.
- [ ] Define shared reporting template for cross-region updates.
- [ ] Buy flights to Chiapas (Alicia to coordinate).
- [ ] Talk to Rene about the trip to Chiapas. (Added 2026-08-14; reminder scheduled for Monday, August 17 at 9:00 AM.)
- [ ] Prepare for Chiapas meeting in prayer and logistics planning.
## Flight Price Monitoring
@@ -0,0 +1,49 @@
---
date: 2026-08-23
type: project
status: active
tags: [tactility, esp32, captions, voice, mac-mini, stt]
related: [[Voice & Dev Infrastructure]]
---
# Live Captions — ESP32 / Mac mini
## Purpose
A dedicated Tactility ESP32-S3 app streams device microphone PCM to the Mac mini for local Apple Speech captioning. It shows captions on the device and records text locally on its SD card; raw device audio is not retained by the app.
## Active architecture
```text
Tactility `.113` (kidsos_591c)
-> authenticated WebSocket PCM, 16 kHz / mono / s16le
-> Mac mini `.102` caption service on :8645
-> MacMiniMCP Apple Speech live transcription
-> draft + silence-finalized review events
-> ESP32 native caption display
```
The dedicated caption route does not invoke the old generic gateway screen-MCP drawing path, preventing caption UI conflicts.
## Current state
- Live Captions app deployed to `.113`; auto-connect and automatic reconnect are enabled.
- UI: device toolbar/close control, latest 50 caption words, and a bottom Connecting / Connected / Failed—Reconnecting status line.
- Mac service accepts multiple sessions and bounds retained audio at 30 seconds / 960 KB per device.
- The old fixed 64-second stream cap was removed.
- Silence VAD turns speech pauses into `review` events without closing the microphone stream.
- Finalized reviews are logged on the Mac mini to `~/.hermes/logs/esp32-captions/YYYY-MM-DD.jsonl` with UTC timestamp and friendly device name.
- The board is currently connected and the service has confirmed incoming 1,024-byte PCM frames.
## Verified test evidence
- Four caption-service tests are passing, including rolling-buffer and multi-device coverage.
- Synthesized long audio streams produced live draft/review events and final transcripts.
- A synthesized speech message plus valid silence produced a `review` before an explicit stop command.
## Next
- Observe a natural on-device speech pause and confirm the review visibly replaces the draft.
- Tune capture gain/filtering after that UI verification.
- Install the caption service LaunchAgent from an approved external shell for durability.
- Commit the app/service once physical acceptance is confirmed.
@@ -0,0 +1,34 @@
# macOS Notification Watcher POC
## Status
POC implementation is built but not yet authorized to read Notification Center. Resume after granting Full Disk Access.
## Artifacts
- Project: `~/notification-poc`
- Binary: `~/notification-poc/notification-poc`
- Source: `~/notification-poc/Sources/NotificationPOC/main.swift`
- Log: `~/notification-poc/notifications.jsonl`
- State: `~/notification-poc/state.json`
- LaunchAgent: `~/Library/LaunchAgents/com.adolforeyna.notification-poc.plist`
- README: `~/notification-poc/README.md`
## Behavior
The watcher monitors `~/Library/Group Containers/group.com.apple.usernoted/db2/db`, primarily via `db-wal` filesystem events with a two-second fallback scan. It copies `db`, `db-wal`, and `db-shm` to a temporary directory before read-only SQLite access, baselines existing records on first successful run, and logs only later notifications as JSONL. It does not modify, dismiss, forward, or send notifications.
## Verification so far
- Swift release build passed.
- `plutil -lint` passed for the LaunchAgent.
- Runtime reached the expected TCC boundary: macOS returned permission denied for the database.
- Persistent LaunchAgent bootstrap was not run because Hermes blocks registering persistent jobs from inside the gateway process.
## Resume steps
1. In System Settings → Privacy & Security → Full Disk Access, add/enable `~/notification-poc/notification-poc`.
2. Run the binary manually and verify it prints `Watching` and creates/updates `notifications.jsonl`.
3. Generate a harmless test notification and confirm one JSONL record.
4. Install from a separate shell with: `launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.adolforeyna.notification-poc.plist`.
5. Verify with `launchctl print gui/$(id -u)/com.adolforeyna.notification-poc` and inspect watcher stderr/stdout logs.
+50
View File
@@ -0,0 +1,50 @@
# Pi-hole device usage reports
This directory contains a read-only daily DNS usage collector enriched with the live TP-Link Deco client map.
## Run manually
```bash
python3 /Users/adolforeyna/brain/projects/network_usage/pihole_daily_report.py --date today
python3 /Users/adolforeyna/brain/projects/network_usage/pihole_daily_report.py --date yesterday
```
Each run writes:
- `reports/YYYY-MM-DD.json` — machine-readable data
- `reports/YYYY-MM-DD.md` — human-readable report
- `network_usage.sqlite3` — the same report JSON/Markdown plus Deco identity history
The report uses `America/New_York` calendar boundaries. Pi-hole is queried over the existing owner-only SSH path in SQLite read-only mode. The live Deco client list is retrieved with the existing `reyna-cli deco clients --json` integration.
The separate storage database is `/Users/adolforeyna/brain/projects/network_usage/network_usage.sqlite3`. It contains:
- `deco_snapshots` — timestamped client-list captures
- `deco_clients` — the IP/MAC/hostname/location rows for each capture
- `daily_reports` — the completed report JSON and Markdown
## Automation
`/Users/adolforeyna/.hermes/scripts/network_usage_daily_report.py` is the deterministic wrapper used by the Hermes scheduled job. It processes the previous local calendar day, stores the completed report in SQLite, writes one JSON/Markdown pair per day, and then removes raw Deco snapshots older than the current day. Reports remain available in the `daily_reports` table. It does not change Pi-hole, DNS, Deco, blocklists, or router settings.
`/Users/adolforeyna/.hermes/scripts/deco_snapshot_10m.py` runs every ten minutes and appends the live Deco client list to SQLite. This preserves enough same-day IP-to-MAC history to map Pi-hole clients that are offline when the daily report runs.
## Grouping plan
The report grouping layer should treat all `espressif` clients as one ESP32 group and both `Google-Home-Mini` clients as one household group. iPhone and Mac ownership remains unassigned until the LAN names are confirmed; MAC addresses remain the identity key underneath those friendly names.
“Top visited” excludes Pi-hole blocked statuses. “Top blocked” counts FTL blocked statuses, including gravity, regex, denylist, external blocking, and CNAME blocking. A device may appear in Pi-hole but not in the live Deco list if it is currently offline, has changed its IP, or is not in the current client snapshot; those entries are labeled accordingly rather than guessed.
## Roku/Casita assessment
The current live map identifies `50CasitaTv` at `192.168.68.114`, connected through the `Casita` Deco. The current report shows Roku log traffic already being blocked, especially `liberty.logs.roku.com` and `scribe.logs.roku.com`. A seven-day Pi-hole query inspection also found these Roku-adjacent domains allowed from the Roku devices:
- `display.ravm.tv` — promotional/display service candidate
- `identity.ads.roku.com` — advertising identity candidate
- `api.roku.com`, `themes-service.sr.roku.com`, and other Roku service domains — do not block as ad domains without testing
`ads.roku.com` is already present in one installed blocklist according to `pihole -q`; it was not queried by the Casita TV during the inspection window. On September 4, 2026, the two locally managed exact deny entries `display.ravm.tv` and `identity.ads.roku.com` were added with the comment `Roku ads`. The change was verified with `pihole -q` and live DNS lookups returning `0.0.0.0` for both domains.
DNS blocking can reduce home-screen/promotional ad retrieval but cannot guarantee that all inappropriate content disappears, and it may leave empty tiles or affect Roku UI behavior. No other Roku service domains were changed.
A safe next experiment is a dedicated Pi-hole client group containing only `50CasitaTv`, with a reviewed Roku candidate list and rollback available. That should be staged and tested only after explicit approval.
Binary file not shown.
@@ -0,0 +1,451 @@
#!/usr/bin/env python3
"""Create Pi-hole daily reports and retain a short Deco identity history.
Pi-hole is queried remotely over the user's existing SSH access. Deco snapshots
and completed reports are stored locally in a separate SQLite database. No
Pi-hole credentials or router session material is read or written here.
"""
from __future__ import annotations
import argparse
import json
import os
import shlex
import sqlite3
import subprocess
import sys
import time as time_module
from collections import defaultdict
from datetime import date, datetime, time, timedelta, timezone
from pathlib import Path
from typing import Dict, List, Optional
from zoneinfo import ZoneInfo
TZ = ZoneInfo("America/New_York")
DEFAULT_SERVER = "adolforeyna@192.168.68.110"
DEFAULT_PIHOLE_DB = "/home/adolforeyna/pihole/etc-pihole/pihole-FTL.db"
DEFAULT_STORAGE_DB = str(Path.home() / "brain/projects/network_usage/network_usage.sqlite3")
BLOCKED_STATUSES = (1, 4, 5, 6, 7, 8, 9, 10, 11, 18)
STATUS_NAMES = {
1: "gravity",
4: "regex",
5: "denylist",
6: "external-blocked-ip",
7: "external-blocked-null",
8: "external-blocked-nxra",
9: "gravity-cname",
10: "regex-cname",
11: "denylist-cname",
18: "external-blocked-ede15",
}
def parse_day(value: str, today: date) -> date:
if value == "today":
return today
if value == "yesterday":
return today - timedelta(days=1)
return date.fromisoformat(value)
def run_json(command: List[str], timeout: int) -> dict:
proc = subprocess.run(command, capture_output=True, text=True, timeout=timeout)
if proc.returncode:
detail = proc.stderr.strip() or proc.stdout.strip() or "exit %s" % proc.returncode
raise RuntimeError("command failed: %s" % detail[:500])
try:
return json.loads(proc.stdout)
except json.JSONDecodeError as exc:
raise RuntimeError("command returned invalid JSON: %s" % exc) from exc
def get_deco_clients(cli: str) -> List[dict]:
payload = run_json([cli, "deco", "clients", "--json"], timeout=120)
if not payload.get("ok"):
raise RuntimeError("Deco client lookup failed: %s" % payload)
return payload.get("result", {}).get("clients", [])
def connect_storage(path: str) -> sqlite3.Connection:
storage = Path(path).expanduser()
storage.parent.mkdir(parents=True, exist_ok=True)
conn = sqlite3.connect(str(storage), timeout=10)
conn.execute("PRAGMA foreign_keys=ON")
conn.execute("PRAGMA busy_timeout=10000")
conn.execute("PRAGMA journal_mode=WAL")
conn.executescript(
"""
CREATE TABLE IF NOT EXISTS deco_snapshots (
snapshot_id INTEGER PRIMARY KEY AUTOINCREMENT,
captured_at TEXT NOT NULL,
captured_epoch INTEGER NOT NULL,
client_count INTEGER NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_deco_snapshots_epoch
ON deco_snapshots(captured_epoch);
CREATE TABLE IF NOT EXISTS deco_clients (
snapshot_id INTEGER NOT NULL REFERENCES deco_snapshots(snapshot_id) ON DELETE CASCADE,
ip TEXT NOT NULL,
mac TEXT,
hostname TEXT,
connection TEXT,
interface TEXT,
active INTEGER,
linked_deco_mac TEXT,
linked_deco_name TEXT,
linked_deco_role TEXT,
raw_json TEXT NOT NULL,
PRIMARY KEY(snapshot_id, ip, mac)
);
CREATE INDEX IF NOT EXISTS idx_deco_clients_ip
ON deco_clients(ip);
CREATE TABLE IF NOT EXISTS daily_reports (
report_day TEXT PRIMARY KEY,
generated_at TEXT NOT NULL,
report_json TEXT NOT NULL,
report_markdown TEXT NOT NULL
);
"""
)
conn.commit()
return conn
def save_deco_snapshot(storage_path: str, clients: List[dict], captured: Optional[datetime] = None) -> dict:
captured = captured or datetime.now(timezone.utc)
captured_epoch = int(captured.timestamp())
captured_text = captured.isoformat()
conn = connect_storage(storage_path)
try:
with conn:
cur = conn.execute(
"INSERT INTO deco_snapshots(captured_at,captured_epoch,client_count) VALUES(?,?,?)",
(captured_text, captured_epoch, len(clients)),
)
snapshot_id = cur.lastrowid
rows = []
for client in clients:
ip = str(client.get("ip") or "").strip()
if not ip:
continue
rows.append(
(
snapshot_id,
ip,
client.get("mac"),
client.get("hostname"),
client.get("connection"),
client.get("interface"),
1 if client.get("active") else 0,
client.get("linkedDecoMac"),
client.get("linkedDecoName"),
client.get("linkedDecoRole"),
json.dumps(client, separators=(",", ":"), sort_keys=True),
)
)
conn.executemany(
"""INSERT OR REPLACE INTO deco_clients
(snapshot_id,ip,mac,hostname,connection,interface,active,
linked_deco_mac,linked_deco_name,linked_deco_role,raw_json)
VALUES(?,?,?,?,?,?,?,?,?,?,?)""",
rows,
)
return {"snapshot_id": snapshot_id, "captured_at": captured_text, "clients": len(rows)}
finally:
conn.close()
def load_snapshot_map(storage_path: str, start_epoch: int, end_epoch: int) -> dict:
"""Return latest identity per IP observed during the report day.
If an IP was associated with multiple MACs during the day, the latest
record is selected but the mapping is explicitly marked ambiguous.
"""
conn = connect_storage(storage_path)
try:
rows = conn.execute(
"""SELECT s.captured_at,c.ip,c.mac,c.hostname,c.connection,c.interface,
c.active,c.linked_deco_mac,c.linked_deco_name,c.linked_deco_role
FROM deco_clients c JOIN deco_snapshots s ON s.snapshot_id=c.snapshot_id
WHERE s.captured_epoch>=? AND s.captured_epoch<?
ORDER BY s.captured_epoch DESC""",
(start_epoch, end_epoch),
).fetchall()
finally:
conn.close()
by_ip = {}
identities = defaultdict(set)
for row in rows:
captured_at, ip, mac, hostname, connection, interface, active, linked_mac, linked_name, linked_role = row
identities[ip].add(mac or "(unknown-mac)")
if ip in by_ip:
continue
by_ip[ip] = {
"ip": ip,
"mac": mac,
"hostname": hostname,
"connection": connection,
"interface": interface,
"active": bool(active),
"linkedDecoMac": linked_mac,
"linkedDecoName": linked_name,
"linkedDecoRole": linked_role,
"mapping_status": "historical_snapshot",
"snapshot_captured_at": captured_at,
}
for ip, deco in by_ip.items():
if len(identities[ip]) > 1:
deco["mapping_status"] = "multiple_identities_seen"
deco["mapping_identity_count"] = len(identities[ip])
return by_ip
def prune_old_snapshots(storage_path: str, before_epoch: int) -> int:
conn = connect_storage(storage_path)
try:
with conn:
cur = conn.execute("DELETE FROM deco_snapshots WHERE captured_epoch<?", (before_epoch,))
return cur.rowcount
finally:
conn.close()
def save_daily_report(storage_path: str, report: dict, markdown_text: str) -> None:
conn = connect_storage(storage_path)
try:
with conn:
conn.execute(
"""INSERT INTO daily_reports(report_day,generated_at,report_json,report_markdown)
VALUES(?,?,?,?)
ON CONFLICT(report_day) DO UPDATE SET
generated_at=excluded.generated_at,
report_json=excluded.report_json,
report_markdown=excluded.report_markdown""",
(
report["day"],
report["generated_at"],
json.dumps(report, indent=2),
markdown_text,
),
)
finally:
conn.close()
def get_pihole_data(server: str, db_path: str, start_epoch: int, end_epoch: int) -> dict:
blocked = ",".join(str(x) for x in BLOCKED_STATUSES)
remote = f'''import sqlite3,json
p={db_path!r}; start={start_epoch}; end={end_epoch}; blocked=({blocked},)
c=sqlite3.connect("file:"+p+"?mode=ro",uri=True)
c.row_factory=sqlite3.Row
base="""from query_storage q
join domain_by_id d on d.id=q.domain
join client_by_id cb on cb.id=q.client
where q.timestamp>=? and q.timestamp<?"""
def rows(sql, params=(start,end)):
return [dict(r) for r in c.execute(sql, params)]
client_sql="""select cb.ip as ip, coalesce(nullif(cb.name,''),'') as pihole_name,
count(*) as queries, sum(case when q.status in ({blocked}) then 1 else 0 end) as blocked,
count(distinct q.domain) as unique_domains, max(q.timestamp) as last_query
{{base}} group by cb.id order by queries desc""".format(blocked=','.join(str(x) for x in blocked),base=base)
domain_sql="""select cb.ip as ip, d.domain as domain, count(*) as queries,
sum(case when q.status in ({blocked}) then 1 else 0 end) as blocked,
sum(case when q.status not in ({blocked}) then 1 else 0 end) as allowed
{{base}} group by cb.ip,d.domain order by cb.ip,queries desc""".format(blocked=','.join(str(x) for x in blocked),base=base)
status_sql="""select q.status as status, count(*) as queries
from query_storage q where q.timestamp>=? and q.timestamp<? group by q.status order by q.status"""
print(json.dumps({{"clients":rows(client_sql),"domains":rows(domain_sql),"statuses":rows(status_sql),"window":{{"start":start,"end":end}}}},separators=(",",":")))'''
remote_cmd = "python3 -c " + shlex.quote(remote)
proc = subprocess.run(
["ssh", "-o", "BatchMode=yes", "-o", "ConnectTimeout=8", server, remote_cmd],
capture_output=True,
text=True,
timeout=180,
)
if proc.returncode:
detail = proc.stderr.strip() or proc.stdout.strip() or "exit %s" % proc.returncode
raise RuntimeError("Pi-hole query failed: %s" % detail[:500])
try:
return json.loads(proc.stdout)
except json.JSONDecodeError as exc:
raise RuntimeError("Pi-hole query returned invalid JSON: %s" % exc) from exc
def enrich(pihole: dict, deco_clients: List[dict], historical_map: dict) -> List[dict]:
by_ip = dict(historical_map)
for client in deco_clients:
ip = str(client.get("ip") or "")
if ip and ip not in by_ip:
copy = dict(client)
copy["mapping_status"] = "live_deco_lookup"
by_ip[ip] = copy
domains_by_ip = defaultdict(list)
for row in pihole["domains"]:
domains_by_ip[row["ip"]].append(row)
result = []
for row in pihole["clients"]:
ip = row["ip"]
deco = by_ip.get(ip)
visited = sorted(
(x for x in domains_by_ip[ip] if not x["blocked"]),
key=lambda x: (x["allowed"], x["queries"], x["domain"]),
reverse=True,
)
blocked = sorted(
(x for x in domains_by_ip[ip] if x["blocked"]),
key=lambda x: (x["blocked"], x["queries"], x["domain"]),
reverse=True,
)
result.append({
"ip": ip,
"pihole_name": row["pihole_name"],
"queries": row["queries"],
"blocked_queries": row["blocked"],
"block_rate_percent": round(100 * row["blocked"] / row["queries"], 2) if row["queries"] else 0,
"unique_domains": row["unique_domains"],
"last_query_epoch": row["last_query"],
"deco": deco or {
"hostname": None,
"mac": None,
"linkedDecoName": None,
"active": False,
"mapping_status": "not_in_snapshot_or_live_deco_list",
},
"top_visited": visited[:10],
"top_blocked": blocked[:10],
})
return result
def markdown(report: dict) -> str:
lines = [
f"# Pi-hole DNS usage — {report['day']}",
"",
f"Window: {report['window']['start_local']} to {report['window']['end_local']} ({report['timezone']})",
f"Generated: {report['generated_at']}",
f"Pi-hole: {report['pihole']['server']} (FTL database, read-only)",
f"Deco mapping source: {report['deco_mapping_source']}",
"",
"Blocked status codes counted: " + ", ".join(f"{k}={v}" for k, v in STATUS_NAMES.items()),
"",
"## Device summary",
"",
"| Device | IP | Deco/location | Queries | Blocked | Block rate | Top visited | Top blocked |",
"|---|---|---|---:|---:|---:|---|---|",
]
for d in report["devices"]:
deco = d["deco"]
label = deco.get("hostname") or d["pihole_name"] or "Unknown device"
location = deco.get("linkedDecoName") or "not mapped"
visited = d["top_visited"][0]["domain"] if d["top_visited"] else "—"
blocked = d["top_blocked"][0]["domain"] if d["top_blocked"] else "—"
lines.append(f"| {label} | {d['ip']} | {location} | {d['queries']:,} | {d['blocked_queries']:,} | {d['block_rate_percent']:.2f}% | `{visited}` | `{blocked}` |")
lines += ["", "## Per-device detail", ""]
for d in report["devices"]:
deco = d["deco"]
label = deco.get("hostname") or d["pihole_name"] or "Unknown device"
location = deco.get("linkedDecoName") or "not mapped"
lines += [
f"### {label} ({d['ip']})",
f"Location: {location}; MAC: {deco.get('mac') or 'unknown'}; mapping: {deco.get('mapping_status', 'unknown')}.",
f"Queries: {d['queries']:,}; blocked: {d['blocked_queries']:,}; block rate: {d['block_rate_percent']:.2f}%; unique domains: {d['unique_domains']:,}.",
"",
"Top visited (not blocked):",
]
lines += [f"- {x['domain']} — {x['queries']:,}" for x in d["top_visited"]] or ["- none"]
lines.append("Top blocked:")
lines += [f"- {x['domain']} — {x['blocked']:,} blocked of {x['queries']:,}" for x in d["top_blocked"]] or ["- none"]
lines.append("")
return "\n".join(lines)
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("--date", default="today", help="today, yesterday, or YYYY-MM-DD")
parser.add_argument("--output-dir", default=str(Path.home() / "brain/projects/network_usage/reports"))
parser.add_argument("--storage-db", default=os.environ.get("NETWORK_USAGE_DB", DEFAULT_STORAGE_DB))
parser.add_argument("--server", default=os.environ.get("PIHOLE_SSH", DEFAULT_SERVER))
parser.add_argument("--db-path", default=os.environ.get("PIHOLE_DB_PATH", DEFAULT_PIHOLE_DB))
parser.add_argument("--deco-cli", default=os.environ.get("REYNA_CLI", "reyna-cli"))
parser.add_argument("--snapshot-only", action="store_true")
parser.add_argument("--prune", action="store_true", help="after saving the report, remove snapshots before today")
args = parser.parse_args()
if args.snapshot_only:
clients = get_deco_clients(args.deco_cli)
result = save_deco_snapshot(args.storage_db, clients)
print(json.dumps({"ok": True, "job": "deco_snapshot", "storage_db": args.storage_db, **result}, separators=(",", ":")))
return 0
today = datetime.now(TZ).date()
day = parse_day(args.date, today)
start_dt = datetime.combine(day, time.min, tzinfo=TZ)
end_dt = start_dt + timedelta(days=1)
now = datetime.now(TZ)
start_epoch = int(start_dt.timestamp())
end_epoch = int(end_dt.timestamp())
data = get_pihole_data(args.server, args.db_path, start_epoch, end_epoch)
historical_map = load_snapshot_map(args.storage_db, start_epoch, end_epoch)
live_clients = []
if day == today or not historical_map:
live_clients = get_deco_clients(args.deco_cli)
devices = enrich(data, live_clients, historical_map)
if historical_map:
mapping_source = "historical Deco snapshots plus live fallback"
else:
mapping_source = "live Deco lookup"
report = {
"schema_version": 2,
"day": day.isoformat(),
"timezone": str(TZ),
"generated_at": now.isoformat(),
"deco_mapping_source": mapping_source,
"window": {
"start_local": start_dt.isoformat(),
"end_local": end_dt.isoformat(),
"start_epoch": start_epoch,
"end_epoch": end_epoch,
},
"pihole": {
"server": args.server,
"database": args.db_path,
"blocked_statuses": list(BLOCKED_STATUSES),
"status_names": STATUS_NAMES,
"status_counts": data["statuses"],
},
"storage": {
"database": args.storage_db,
"historical_snapshot_client_ips": len(historical_map),
"live_deco_client_count": len(live_clients),
},
"deco_live_client_count": len(live_clients),
"devices": devices,
}
report_text = markdown(report)
save_daily_report(args.storage_db, report, report_text)
output_dir = Path(args.output_dir).expanduser()
output_dir.mkdir(parents=True, exist_ok=True)
json_path = output_dir / f"{day.isoformat()}.json"
md_path = output_dir / f"{day.isoformat()}.md"
json_path.write_text(json.dumps(report, indent=2) + "\n", encoding="utf-8")
md_path.write_text(report_text + "\n", encoding="utf-8")
pruned = 0
if args.prune:
current_start = int(datetime.combine(today, time.min, tzinfo=TZ).timestamp())
pruned = prune_old_snapshots(args.storage_db, current_start)
print(json.dumps({"ok": True, "day": report["day"], "devices": len(devices), "historical_snapshot_ips": len(historical_map), "live_deco_clients": len(live_clients), "pruned_snapshots": pruned, "storage_db": args.storage_db, "json": str(json_path), "markdown": str(md_path)}, separators=(",", ":")))
return 0
if __name__ == "__main__":
try:
raise SystemExit(main())
except Exception as exc:
print(json.dumps({"ok": False, "error": str(exc)}))
raise SystemExit(1)
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,588 @@
# Pi-hole DNS usage — 2026-09-03
Window: 2026-09-03T00:00:00-04:00 to 2026-09-04T00:00:00-04:00 (America/New_York)
Generated: 2026-09-04T12:00:54.171571-04:00
Pi-hole: adolforeyna@192.168.68.110 (FTL database, read-only)
Deco mapping source: live Deco lookup
Blocked status codes counted: 1=gravity, 4=regex, 5=denylist, 6=external-blocked-ip, 7=external-blocked-null, 8=external-blocked-nxra, 9=gravity-cname, 10=regex-cname, 11=denylist-cname, 18=external-blocked-ede15
## Device summary
| Device | IP | Deco/location | Queries | Blocked | Block rate | Top visited | Top blocked |
|---|---|---|---:|---:|---:|---|---|
| Mac | 192.168.68.112 | Barn | 29,823 | 486 | 1.63% | `www.internalfb.com` | `chromereporting-pa.googleapis.com` |
| Mac | 192.168.68.108 | Casita | 12,073 | 894 | 7.40% | `www.google.com` | `dit.whatsapp.net` |
| iPhone | 192.168.68.105 | Casita | 9,575 | 1,194 | 12.47% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| adolforeyna-iMac11-3 | 192.168.68.124 | WashMachine | 6,398 | 1,558 | 24.35% | `lcp.rosettastone.com` | `cdp.cloud.unity3d.com` |
| Mac | 192.168.68.111 | Hallway | 5,313 | 413 | 7.77% | `www.google.com` | `dit.whatsapp.net` |
| Unknown device | 192.168.68.106 | not mapped | 3,915 | 519 | 13.26% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| 50CasitaTv | 192.168.68.114 | Casita | 3,656 | 3,096 | 84.68% | `nrdp.prod.ftl.netflix.com` | `scribe.logs.roku.com` |
| Unknown device | 192.168.68.118 | not mapped | 3,021 | 281 | 9.30% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| adolforeynaserver | 192.168.68.110 | Office | 2,206 | 224 | 10.15% | `chatgpt.com` | `telemetry.n8n.io` |
| aeropi5 | 192.168.68.126 | Office | 2,127 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| Unknown device | 192.168.68.116 | not mapped | 2,113 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| 50LivingRoom | 192.168.68.100 | Office | 2,068 | 1,988 | 96.13% | `api.roku.com` | `scribe.logs.roku.com` |
| emiserver | 192.168.68.119 | Office | 1,886 | 0 | 0.00% | `api.telegram.org` | `—` |
| Unknown device | 192.168.68.107 | not mapped | 1,683 | 389 | 23.11% | `mask.apple-dns.net` | `sdk.iad-01.braze.com` |
| Unknown device | 192.168.68.129 | not mapped | 1,171 | 32 | 2.73% | `mask.apple-dns.net` | `partiality.itunes.apple.com` |
| localhost | 127.0.0.1 | not mapped | 641 | 0 | 0.00% | `8.8.8.8.in-addr.arpa` | `—` |
| espressif | 192.168.68.113 | Study | 490 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| Adolfos-iPhone | 192.168.68.150 | Office | 335 | 32 | 9.55% | `safebrowsing.googleapis.com` | `fbs.smoot.apple.com` |
| espressif | 192.168.68.135 | WashMachine | 276 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| Amazon | 192.168.68.134 | Office | 183 | 49 | 26.78% | `dogvgb9ujhybx.cloudfront.net` | `unagi-na.amazon.com` |
| Unknown device | 192.168.68.104 | not mapped | 77 | 0 | 0.00% | `ms-cam-u011.immedia-semi.com` | `—` |
| E31868152 | 192.168.68.128 | Barn | 59 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| espressif | 192.168.68.121 | Office | 59 | 1 | 1.69% | `time.cloudflare.com` | `unagi-na.amazon.com` |
| MyCloudEX2Ultra | 192.168.68.137 | Office | 54 | 0 | 0.00% | `prod.wdckeystone.com` | `—` |
| F49758774 | 192.168.68.125 | Hallway | 48 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| Mac-mini-M4 | 192.168.68.130 | Office | 15 | 12 | 80.00% | `google.com` | `youtubei.googleapis.com` |
| Unknown device | 192.168.68.122 | not mapped | 5 | 0 | 0.00% | `ms-cam-u011.immedia-semi.com` | `—` |
| FN-LINK | 192.168.68.139 | Barn | 3 | 0 | 0.00% | `portal-ww.ecouser.net` | `—` |
| Mac | 192.168.68.102 | Office | 2 | 0 | 0.00% | `local` | `—` |
| blink-sync-module | 192.168.68.109 | Study | 2 | 0 | 0.00% | `rest-hw-u011.immedia-semi.com` | `—` |
## Per-device detail
### Mac (192.168.68.112)
Location: Barn; MAC: 06-79-91-73-6F-6A; mapping: live_deco_lookup.
Queries: 29,823; blocked: 486; block rate: 1.63%; unique domains: 413.
Top visited (not blocked):
- www.internalfb.com — 6,216
- graph.facebook.com — 2,984
- internalfb.com — 2,115
- ssl.gstatic.com — 780
- star.c10r.facebook.com — 691
- metamate.internalmeta.com — 648
- play.google.com — 584
- api.manus.im — 560
- logging.internalmeta.com — 531
- chat.google.com — 478
Top blocked:
- chromereporting-pa.googleapis.com — 330 blocked of 342
- us-v20.events.data.microsoft.com — 78 blocked of 85
- fbs.smoot.apple.com — 28 blocked of 28
- beacon.flexera-prod.aws.metafb.cloud — 17 blocked of 17
- csp.withgoogle.com — 13 blocked of 13
- appsgrowthpromo-pa.clients6.google.com — 9 blocked of 9
- us-v20.events.data.trafficmanager.net — 6 blocked of 16
- ogads-pa.clients6.google.com — 3 blocked of 3
- experiments.apple.com — 2 blocked of 2
### Mac (192.168.68.108)
Location: Casita; MAC: 82-A1-8E-D4-03-7A; mapping: live_deco_lookup.
Queries: 12,073; blocked: 894; block rate: 7.40%; unique domains: 729.
Top visited (not blocked):
- www.google.com — 395
- mask.apple-dns.net — 360
- chat.cdn.whatsapp.net — 345
- api.telegram.org — 311
- ab.chatgpt.com — 293
- brain.reynafamily.com — 291
- ssl.gstatic.com — 276
- chat.openai.com — 274
- optimizationguide-pa.googleapis.com — 258
- apple.com — 254
Top blocked:
- dit.whatsapp.net — 499 blocked of 505
- x.com — 133 blocked of 151
- slackb.com — 100 blocked of 100
- partiality.itunes.apple.com — 22 blocked of 22
- cf.iadsdk.apple.com — 22 blocked of 22
- fbs.smoot.apple.com — 21 blocked of 21
- ogads-pa.clients6.google.com — 20 blocked of 22
- sentry.bga.li — 8 blocked of 12
- analytics.google.com — 8 blocked of 12
- improving.duckduckgo.com — 8 blocked of 8
### iPhone (192.168.68.105)
Location: Casita; MAC: C6-37-18-E7-39-39; mapping: live_deco_lookup.
Queries: 9,575; blocked: 1,194; block rate: 12.47%; unique domains: 1,025.
Top visited (not blocked):
- mask.apple-dns.net — 343
- outlook.office365.com — 318
- ts01-b.csa.cloudsink.net — 229
- mmx-ds.cdn.whatsapp.net — 214
- www.google.com — 204
- chat.cdn.whatsapp.net — 143
- oauthaccountmanager.googleapis.com — 102
- ts01-b.cloudsink.net — 98
- atm.outlook.mira.tm.svc.cloud.microsoft — 89
- ocsp2.apple.com — 86
Top blocked:
- dit.whatsapp.net — 260 blocked of 262
- app-analytics-services.com — 132 blocked of 132
- app-measurement.com — 90 blocked of 90
- stocks-analytics-events.apple.com — 61 blocked of 65
- firebaselogging-pa.googleapis.com — 51 blocked of 51
- fbs.smoot.apple.com — 28 blocked of 28
- sdk.iad-05.braze.com — 26 blocked of 26
- slackb.com — 23 blocked of 23
- sdk.iad-08.braze.com — 21 blocked of 21
- collector-pxuarm9b04.perimeterx.net — 21 blocked of 21
### adolforeyna-iMac11-3 (192.168.68.124)
Location: WashMachine; MAC: C8-BC-C8-BB-19-2D; mapping: live_deco_lookup.
Queries: 6,398; blocked: 1,558; block rate: 24.35%; unique domains: 62.
Top visited (not blocked):
- lcp.rosettastone.com — 1,969
- chatgpt.com — 643
- connectivity-check.ubuntu.com — 583
- easylist-downloads.adblockplus.org — 190
- push.services.mozilla.com — 146
- firefox.settings.services.mozilla.com — 126
- www.gstatic.com — 115
- www.recaptcha.net — 112
- filters.adtidy.org — 110
- fonts.gstatic.com — 99
Top blocked:
- cdp.cloud.unity3d.com — 836 blocked of 848
- sdk.iad-01.braze.com — 504 blocked of 506
- incoming.telemetry.mozilla.org — 218 blocked of 221
### Mac (192.168.68.111)
Location: Hallway; MAC: 0E-A4-E4-20-5C-1C; mapping: live_deco_lookup.
Queries: 5,313; blocked: 413; block rate: 7.77%; unique domains: 306.
Top visited (not blocked):
- www.google.com — 195
- www.apple.com — 192
- lb._dns-sd._udp.0.68.168.192.in-addr.arpa — 189
- api.apple-cloudkit.fe2.apple-dns.net — 163
- ai.zoom.us — 138
- p49-imap.mail.me.com.akadns.net — 133
- 111.68.168.192.in-addr.arpa — 126
- us04zpns.zoom.us — 119
- us04ark.zoom.us — 117
- ssl.gstatic.com — 114
Top blocked:
- dit.whatsapp.net — 220 blocked of 222
- word-telemetry.officeapps.live.com — 72 blocked of 76
- bam.nr-data.net — 55 blocked of 60
- track.capitaloneshopping.com — 38 blocked of 38
- partiality.itunes.apple.com — 8 blocked of 8
- cf.iadsdk.apple.com — 8 blocked of 8
- experiments.apple.com — 4 blocked of 4
- iadsdk.apple.com — 2 blocked of 2
- fbs.smoot.apple.com — 2 blocked of 2
- ct.pinterest.com — 2 blocked of 2
### Unknown device (192.168.68.106)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 3,915; blocked: 519; block rate: 13.26%; unique domains: 844.
Top visited (not blocked):
- mask.apple-dns.net — 89
- outlook.office365.com — 82
- mmx-ds.cdn.whatsapp.net — 70
- www.google.com — 50
- youtubei.googleapis.com — 47
- redirector.googlevideo.com — 44
- chat.cdn.whatsapp.net — 44
- yt3.googleusercontent.com — 36
- bag-cdn.itunes-apple.com.akadns.net — 35
- s.youtube.com — 31
Top blocked:
- dit.whatsapp.net — 136 blocked of 136
- graph.instagram.com — 80 blocked of 80
- graph-fallback.instagram.com — 48 blocked of 48
- app-analytics-services.com — 36 blocked of 36
- sdk.iad-01.braze.com — 21 blocked of 21
- ca.iadsdk.apple.com — 19 blocked of 19
- ogads-pa.clients6.google.com — 14 blocked of 14
- csp.withgoogle.com — 14 blocked of 14
- unagi.amazon.com — 10 blocked of 10
- analytics.google.com — 8 blocked of 8
### 50CasitaTv (192.168.68.114)
Location: Casita; MAC: DC-72-23-B1-13-BE; mapping: live_deco_lookup.
Queries: 3,656; blocked: 3,096; block rate: 84.68%; unique domains: 54.
Top visited (not blocked):
- nrdp.prod.ftl.netflix.com — 155
- nrdp.push.prod.netflix.com — 115
- nrdp51-appboot.netflix.com — 35
- api.roku.com — 34
- themes-service.sr.roku.com — 24
- mediaservices.cdn-apple.com — 20
- cdn-0.nflximg.com — 19
- uiboot.netflix.com — 17
- nrdp.prod.cloud.netflix.com — 17
- api-global.netflix.com — 15
Top blocked:
- scribe.logs.roku.com — 2,292 blocked of 2,294
- liberty.logs.roku.com — 400 blocked of 404
- nrdp.logs.netflix.com — 319 blocked of 319
- logs.netflix.com — 33 blocked of 33
- ichnaea.netflix.com — 19 blocked of 19
- customerevents.netflix.com — 19 blocked of 19
- cloudservices.roku.com — 14 blocked of 14
### Unknown device (192.168.68.118)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 3,021; blocked: 281; block rate: 9.30%; unique domains: 434.
Top visited (not blocked):
- mask.apple-dns.net — 155
- ts01-b.csa.cloudsink.net — 153
- ts01-b.cloudsink.net — 98
- outlook.office365.com — 90
- whatsapp.com — 67
- www.google.com — 60
- mdm-na2.mobileiron.com — 56
- mmx-ds.cdn.whatsapp.net — 53
- chat.cdn.whatsapp.net — 42
- ocsp2.apple.com — 40
Top blocked:
- dit.whatsapp.net — 85 blocked of 85
- app-analytics-services.com — 36 blocked of 36
- app-measurement.com — 22 blocked of 22
- unagi-na.amazon.com — 19 blocked of 19
- unagi.amazon.com — 17 blocked of 17
- firebaselogging-pa.googleapis.com — 16 blocked of 16
- fbs.smoot.apple.com — 16 blocked of 16
- fls-na.amazon.com — 15 blocked of 15
- sdk.iad-05.braze.com — 14 blocked of 14
- cdp.customer.io — 12 blocked of 12
### adolforeynaserver (192.168.68.110)
Location: Office; MAC: 18-60-24-78-DB-E8; mapping: live_deco_lookup.
Queries: 2,206; blocked: 224; block rate: 10.15%; unique domains: 36.
Top visited (not blocked):
- chatgpt.com — 600
- media.reynafamily.com — 570
- adolforeynaserver — 300
- acme-v02.api.letsencrypt.org — 188
- ph.n8n.io — 112
- version.goauthentik.io — 48
- api.github.com — 48
- version.immich.cloud — 24
- api.snapcraft.io — 12
- motd.ubuntu.com — 8
Top blocked:
- telemetry.n8n.io — 224 blocked of 224
### aeropi5 (192.168.68.126)
Location: Office; MAC: 2C-CF-67-95-2B-F8; mapping: live_deco_lookup.
Queries: 2,127; blocked: 0; block rate: 0.00%; unique domains: 17.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,192
- chatgpt.com — 612
- herdr.dev — 194
- cloud.reynafamily.com — 94
- api.snapcraft.io — 12
- cdn.fwupd.org — 5
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- motd.ubuntu.com — 2
- canonical-lgw01.cdn.snapcraftcontent.com — 2
Top blocked:
- none
### Unknown device (192.168.68.116)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 2,113; blocked: 0; block rate: 0.00%; unique domains: 17.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,190
- chatgpt.com — 613
- herdr.dev — 180
- cloud.reynafamily.com — 94
- api.snapcraft.io — 12
- cdn.fwupd.org — 6
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- motd.ubuntu.com — 2
- canonical-lgw01.cdn.snapcraftcontent.com — 2
Top blocked:
- none
### 50LivingRoom (192.168.68.100)
Location: Office; MAC: 84-3E-1D-4F-4A-1D; mapping: live_deco_lookup.
Queries: 2,068; blocked: 1,988; block rate: 96.13%; unique domains: 19.
Top visited (not blocked):
- api.roku.com — 27
- themes-service.sr.roku.com — 24
- tpc.googlesyndication.com — 2
- sw-update.cs.roku.com — 2
- mediaservices.cdn-apple.com — 2
- display.ravm.tv — 2
- austin.sb.roku.com — 2
- api2.sr.roku.com — 2
- tis.cti.roku.com — 1
- lat-services.api.data.roku.com — 1
Top blocked:
- scribe.logs.roku.com — 1,768 blocked of 1,772
- liberty.logs.roku.com — 204 blocked of 208
- cloudservices.roku.com — 16 blocked of 17
### emiserver (192.168.68.119)
Location: Office; MAC: C8-5A-CF-0A-7A-A7; mapping: live_deco_lookup.
Queries: 1,886; blocked: 0; block rate: 0.00%; unique domains: 25.
Top visited (not blocked):
- api.telegram.org — 1,096
- chatgpt.com — 658
- version.goauthentik.io — 48
- version.immich.cloud — 24
- api.snapcraft.io — 10
- ec2-89-192-235-227.compute-1.amazonaws.com — 9
- motd.ubuntu.com — 6
- us.i.posthog.com — 4
- security.ubuntu.com — 4
- cluster0-shard-00-02.yyalx.mongodb.net — 4
Top blocked:
- none
### Unknown device (192.168.68.107)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 1,683; blocked: 389; block rate: 23.11%; unique domains: 189.
Top visited (not blocked):
- mask.apple-dns.net — 262
- _dns.resolver.arpa — 60
- ocsp2.apple.com — 54
- swallow.apple.com — 44
- mask.icloud.com — 44
- configuration.ls.apple.com — 44
- m.sni.global.fastly.net — 41
- ocsp2.g.aaplimg.com — 29
- gdmf.apple.com — 26
- swallow-apple-com.v.aaplimg.com — 24
Top blocked:
- sdk.iad-01.braze.com — 287 blocked of 287
- app-measurement.com — 48 blocked of 48
- fbs.smoot.apple.com — 32 blocked of 34
- partiality.itunes.apple.com — 8 blocked of 8
- cf.iadsdk.apple.com — 8 blocked of 8
- firebaselogging-pa.googleapis.com — 2 blocked of 2
- experiments.apple.com — 2 blocked of 2
- banner.youversionapi.com — 2 blocked of 2
### Unknown device (192.168.68.129)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 1,171; blocked: 32; block rate: 2.73%; unique domains: 162.
Top visited (not blocked):
- mask.apple-dns.net — 284
- _dns.resolver.arpa — 57
- iphone-ld.apple.com — 48
- ocsp2.apple.com — 46
- mask.icloud.com — 46
- iphone-ld.g.aaplimg.com — 43
- ocsp2.g.aaplimg.com — 29
- bag.itunes.apple.com — 20
- mask-api.icloud.com — 18
- configuration.ls.apple.com — 18
Top blocked:
- partiality.itunes.apple.com — 7 blocked of 7
- cf.iadsdk.apple.com — 7 blocked of 7
- app-analytics-services.com — 6 blocked of 6
- experiments.apple.com — 4 blocked of 4
- app-measurement.com — 4 blocked of 4
- trk.pinterest.com — 2 blocked of 2
- fbs.smoot.apple.com — 2 blocked of 2
### localhost (127.0.0.1)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 641; blocked: 0; block rate: 0.00%; unique domains: 36.
Top visited (not blocked):
- 8.8.8.8.in-addr.arpa — 24
- 4.4.8.8.in-addr.arpa — 24
- 150.68.168.192.in-addr.arpa — 24
- 135.68.168.192.in-addr.arpa — 24
- 134.68.168.192.in-addr.arpa — 24
- 129.68.168.192.in-addr.arpa — 24
- 128.68.168.192.in-addr.arpa — 24
- 126.68.168.192.in-addr.arpa — 24
- 125.68.168.192.in-addr.arpa — 24
- 124.68.168.192.in-addr.arpa — 24
Top blocked:
- none
### espressif (192.168.68.113)
Location: Study; MAC: 14-C1-9F-D0-59-1C; mapping: live_deco_lookup.
Queries: 490; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- time.cloudflare.com — 483
- cdn.tactilityproject.org — 7
Top blocked:
- none
### Adolfos-iPhone (192.168.68.150)
Location: Office; MAC: 30-35-AD-68-A3-AB; mapping: live_deco_lookup.
Queries: 335; blocked: 32; block rate: 9.55%; unique domains: 58.
Top visited (not blocked):
- safebrowsing.googleapis.com — 47
- gateway.fe2.apple-dns.net — 34
- time-ios.apple.com — 33
- p33-bookmarks.icloud.com — 20
- _bookmarkdavs._tcp.p33-bookmarks.icloud.com — 20
- gateway.icloud.com — 16
- ocsp.apple.com — 14
- gsp64-ssl.ls.apple.com — 8
- gsp-ssl.ls.apple.com — 8
- valid.apple.com — 7
Top blocked:
- fbs.smoot.apple.com — 24 blocked of 24
- partiality.itunes.apple.com — 4 blocked of 4
- cf.iadsdk.apple.com — 4 blocked of 4
### espressif (192.168.68.135)
Location: WashMachine; MAC: 14-C1-9F-D1-56-90; mapping: live_deco_lookup.
Queries: 276; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 276
Top blocked:
- none
### Amazon (192.168.68.134)
Location: Office; MAC: A0-D2-B1-A6-EC-BD; mapping: live_deco_lookup.
Queries: 183; blocked: 49; block rate: 26.78%; unique domains: 7.
Top visited (not blocked):
- dogvgb9ujhybx.cloudfront.net — 91
- ahu5vu98zzyil.us-east-1.prod.service.minerva.devices.a2z.com — 30
- www.amazon.com — 6
- todo-ta-g7g.amazon.com — 2
- device-messaging-na.amazon.com — 2
- d18os95hu8sz6h.cloudfront.net — 1
Top blocked:
- unagi-na.amazon.com — 49 blocked of 51
### Unknown device (192.168.68.104)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 77; blocked: 0; block rate: 0.00%; unique domains: 17.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 22
- iphone-ld.apple.com — 10
- _dns.resolver.arpa — 9
- iphone-ld.g.aaplimg.com — 5
- ocsp2.apple.com — 4
- mask-api.icloud.com — 4
- init.ess.apple.com — 4
- apple-native-relay.apple.com — 4
- ocsp2.g.aaplimg.com — 2
- mask.icloud.com — 2
Top blocked:
- none
### E31868152 (192.168.68.128)
Location: Barn; MAC: 80-9F-9B-45-9A-FF; mapping: live_deco_lookup.
Queries: 59; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 54
- litedev.us.ezvizlife.com — 5
Top blocked:
- none
### espressif (192.168.68.121)
Location: Office; MAC: 14-C1-9F-D0-5C-5C; mapping: live_deco_lookup.
Queries: 59; blocked: 1; block rate: 1.69%; unique domains: 20.
Top visited (not blocked):
- time.cloudflare.com — 20
- device-messaging-na.amazon.com — 6
- todo-ta-g7g.amazon.com — 4
- podcast.emmint.com — 4
- dogvgb9ujhybx.cloudfront.net — 3
- pins.amazon.com — 2
- ms-cam-u011.immedia-semi.com — 2
- guzzoni.apple.com — 2
- api.amazon.com — 2
- ahu5vu98zzyil.us-east-1.prod.service.minerva.devices.a2z.com — 2
Top blocked:
- unagi-na.amazon.com — 1 blocked of 1
### MyCloudEX2Ultra (192.168.68.137)
Location: Office; MAC: 00-00-C0-3C-B8-FF; mapping: live_deco_lookup.
Queries: 54; blocked: 0; block rate: 0.00%; unique domains: 11.
Top visited (not blocked):
- prod.wdckeystone.com — 10
- prod-proxy.wdckeystone.com — 8
- prod-15ce3e0b80af991.wdckeystone.com — 6
- config.mycloud.com — 6
- time.windows.com — 4
- time.mycloud.com — 4
- prod-gateway.wdckeystone.com — 4
- google.com — 4
- download.wdc.com — 4
- prod-31cdfc8017b5028.wdckeystone.com — 2
Top blocked:
- none
### F49758774 (192.168.68.125)
Location: Hallway; MAC: C0-E7-BF-DD-C8-2A; mapping: live_deco_lookup.
Queries: 48; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 48
Top blocked:
- none
### Mac-mini-M4 (192.168.68.130)
Location: Office; MAC: D0-11-E5-73-96-5A; mapping: live_deco_lookup.
Queries: 15; blocked: 12; block rate: 80.00%; unique domains: 7.
Top visited (not blocked):
- google.com — 3
Top blocked:
- youtubei.googleapis.com — 2 blocked of 2
- youtube.com — 2 blocked of 2
- youtu.be — 2 blocked of 2
- x.com — 2 blocked of 2
- www.youtube.com — 2 blocked of 2
- www.googlevideo.com — 2 blocked of 2
### Unknown device (192.168.68.122)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 5; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 5
Top blocked:
- none
### FN-LINK (192.168.68.139)
Location: Barn; MAC: 24-18-C6-B5-4A-DC; mapping: live_deco_lookup.
Queries: 3; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- portal-ww.ecouser.net — 3
Top blocked:
- none
### Mac (192.168.68.102)
Location: Office; MAC: 5A-D2-AA-CB-96-08; mapping: live_deco_lookup.
Queries: 2; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- local — 1
- _dns.resolver.arpa — 1
Top blocked:
- none
### blink-sync-module (192.168.68.109)
Location: Study; MAC: 84-28-59-24-D7-CA; mapping: live_deco_lookup.
Queries: 2; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- rest-hw-u011.immedia-semi.com — 1
- cs-u011.immedia-semi.com — 1
Top blocked:
- none
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,632 @@
# Pi-hole DNS usage — 2026-09-04
Window: 2026-09-04T00:00:00-04:00 to 2026-09-05T00:00:00-04:00 (America/New_York)
Generated: 2026-09-05T00:15:26.487880-04:00
Pi-hole: adolforeyna@192.168.68.110 (FTL database, read-only)
Deco mapping source: historical Deco snapshots plus live fallback
Blocked status codes counted: 1=gravity, 4=regex, 5=denylist, 6=external-blocked-ip, 7=external-blocked-null, 8=external-blocked-nxra, 9=gravity-cname, 10=regex-cname, 11=denylist-cname, 18=external-blocked-ede15
## Device summary
| Device | IP | Deco/location | Queries | Blocked | Block rate | Top visited | Top blocked |
|---|---|---|---:|---:|---:|---|---|
| Mac | 192.168.68.112 | Office | 41,774 | 3,181 | 7.61% | `internalfb.com` | `www.internalfb.com` |
| Mac | 192.168.68.108 | Hallway | 11,614 | 952 | 8.20% | `whatsapp.com` | `dit.whatsapp.net` |
| iPhone | 192.168.68.105 | Hallway | 9,731 | 1,452 | 14.92% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| Mac | 192.168.68.111 | Hallway | 7,908 | 662 | 8.37% | `ssl.gstatic.com` | `dit.whatsapp.net` |
| iPhone | 192.168.68.106 | Hallway | 7,066 | 777 | 11.00% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| 50CasitaTv | 192.168.68.114 | Casita | 5,901 | 5,178 | 87.75% | `nrdp.prod.ftl.netflix.com` | `liberty.logs.roku.com` |
| adolforeyna-iMac11-3 | 192.168.68.124 | WashMachine | 5,713 | 1,148 | 20.09% | `lcp.rosettastone.com` | `cdp.cloud.unity3d.com` |
| adolforeynaserver | 192.168.68.110 | Office | 5,294 | 224 | 4.23% | `chatgpt.com` | `telemetry.n8n.io` |
| aeropi5 | 192.168.68.126 | Office | 2,437 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| aeropi5 | 192.168.68.116 | Office | 2,393 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| iPad-4 | 192.168.68.107 | WashMachine | 1,879 | 304 | 16.18% | `mask.apple-dns.net` | `sdk.iad-01.braze.com` |
| emiserver | 192.168.68.119 | Office | 1,766 | 0 | 0.00% | `api.telegram.org` | `—` |
| iPad | 192.168.68.129 | Study | 1,566 | 53 | 3.38% | `mask.apple-dns.net` | `app-analytics-services.com` |
| localhost | 127.0.0.1 | not mapped | 668 | 0 | 0.00% | `local.api.ftl` | `—` |
| 50LivingRoom | 192.168.68.100 | Office | 487 | 417 | 85.63% | `themes-service.sr.roku.com` | `liberty.logs.roku.com` |
| espressif | 192.168.68.113 | Study | 422 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| Adolfos-iPhone | 192.168.68.150 | Office | 360 | 30 | 8.33% | `safebrowsing.googleapis.com` | `fbs.smoot.apple.com` |
| espressif | 192.168.68.135 | WashMachine | 264 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| espressif | 192.168.68.121 | Casita | 215 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| Amazon | 192.168.68.134 | Office | 177 | 36 | 20.34% | `dogvgb9ujhybx.cloudfront.net` | `unagi-na.amazon.com` |
| Unknown device | 192.168.68.104 | not mapped | 92 | 1 | 1.09% | `todo-ta-g7g.amazon.com` | `unagi-na.amazon.com` |
| MyCloudEX2Ultra | 192.168.68.137 | Office | 58 | 0 | 0.00% | `prod-gateway.wdckeystone.com` | `—` |
| Mac-mini-M4 | 192.168.68.130 | Office | 53 | 29 | 54.72% | `google.com` | `x.com` |
| E31868152 | 192.168.68.128 | Barn | 52 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| F49758774 | 192.168.68.125 | Hallway | 48 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| macm1.reynafamily.com | 192.168.68.127 | not mapped | 31 | 0 | 0.00% | `ms-cam-u011.immedia-semi.com` | `—` |
| Mac | 192.168.68.102 | Office | 17 | 0 | 0.00% | `mnz-efz.ms-acdc.office.com` | `—` |
| Unknown device | 192.168.68.132 | not mapped | 14 | 0 | 0.00% | `ms-cam-u011.immedia-semi.com` | `—` |
| Unknown device | 192.168.68.131 | not mapped | 3 | 0 | 0.00% | `ms-cam-u011.immedia-semi.com` | `—` |
| FN-LINK | 192.168.68.139 | Barn | 2 | 0 | 0.00% | `portal-ww.ecouser.net` | `—` |
| Unknown device | 192.168.68.117 | not mapped | 2 | 0 | 0.00% | `ms-cam-u011.immedia-semi.com` | `—` |
| Unknown device | 192.168.68.127 | not mapped | 1 | 0 | 0.00% | `ms-cam-u011.immedia-semi.com` | `—` |
| Google-Home-Mini | 192.168.68.122 | Office | 1 | 0 | 0.00% | `ms-cam-u011.immedia-semi.com` | `—` |
## Per-device detail
### Mac (192.168.68.112)
Location: Office; MAC: 06-79-91-73-6F-6A; mapping: historical_snapshot.
Queries: 41,774; blocked: 3,181; block rate: 7.61%; unique domains: 674.
Top visited (not blocked):
- internalfb.com — 2,758
- ssl.gstatic.com — 1,131
- beacons.gcp.gvt2.com — 1,006
- play.google.com — 932
- api.manus.im — 909
- chat.google.com — 579
- signaler-pa.clients6.google.com — 446
- waa-pa.clients6.google.com — 396
- google.com — 396
- 1.courier-push-apple.com.akadns.net — 391
Top blocked:
- www.internalfb.com — 746 blocked of 7,775
- chromereporting-pa.googleapis.com — 468 blocked of 480
- graph.facebook.com — 333 blocked of 3,746
- graph.prod.facebook.com — 226 blocked of 616
- us-v20.events.data.microsoft.com — 168 blocked of 174
- interngraph.internmc.facebook.com — 152 blocked of 447
- www.facebook.com — 140 blocked of 425
- star.c10r.facebook.com — 122 blocked of 1,196
- stocks-analytics-events.apple.com — 64 blocked of 66
- www.youtube.com — 60 blocked of 159
### Mac (192.168.68.108)
Location: Hallway; MAC: 82-A1-8E-D4-03-7A; mapping: historical_snapshot.
Queries: 11,614; blocked: 952; block rate: 8.20%; unique domains: 498.
Top visited (not blocked):
- whatsapp.com — 748
- chat.openai.com — 424
- mask.apple-dns.net — 345
- chatgpt.com — 344
- mmx-ds.cdn.whatsapp.net — 310
- ssl.gstatic.com — 307
- www.google.com — 294
- ab.chatgpt.com — 252
- cloud.reynafamily.com — 240
- signaler-pa.clients6.google.com — 232
Top blocked:
- dit.whatsapp.net — 723 blocked of 728
- x.com — 56 blocked of 72
- fbs.smoot.apple.com — 48 blocked of 48
- slackb.com — 44 blocked of 44
- partiality.itunes.apple.com — 11 blocked of 11
- cf.iadsdk.apple.com — 11 blocked of 11
- ogads-pa.clients6.google.com — 10 blocked of 10
- analytics.google.com — 8 blocked of 8
- cdn3.optimizely.com — 6 blocked of 6
- experiments.apple.com — 3 blocked of 3
### iPhone (192.168.68.105)
Location: Hallway; MAC: 62-0F-E1-3A-4C-4B; mapping: multiple_identities_seen.
Queries: 9,731; blocked: 1,452; block rate: 14.92%; unique domains: 848.
Top visited (not blocked):
- mask.apple-dns.net — 411
- ts01-b.csa.cloudsink.net — 409
- outlook.office365.com — 326
- mmx-ds.cdn.whatsapp.net — 303
- www.google.com — 256
- chat.cdn.whatsapp.net — 194
- ts01-b.cloudsink.net — 186
- oauthaccountmanager.googleapis.com — 109
- mdm-na2.mobileiron.com — 106
- whatsapp.com — 102
Top blocked:
- dit.whatsapp.net — 520 blocked of 525
- stocks-analytics-events.apple.com — 230 blocked of 230
- app-analytics-services.com — 118 blocked of 120
- app-measurement.com — 69 blocked of 72
- cdp.customer.io — 55 blocked of 55
- sdk.iad-01.braze.com — 41 blocked of 41
- sdk.iad-05.braze.com — 39 blocked of 39
- fbs.smoot.apple.com — 20 blocked of 20
- youtubei.googleapis.com — 18 blocked of 82
- unagi.amazon.com — 18 blocked of 18
### Mac (192.168.68.111)
Location: Hallway; MAC: 0E-A4-E4-20-5C-1C; mapping: historical_snapshot.
Queries: 7,908; blocked: 662; block rate: 8.37%; unique domains: 395.
Top visited (not blocked):
- ssl.gstatic.com — 304
- www.google.com — 299
- outlook.cloud.microsoft — 232
- optimizationguide-pa.googleapis.com — 228
- usc-word-edit.officeapps.live.com — 210
- lb._dns-sd._udp.0.68.168.192.in-addr.arpa — 182
- chat.google.com — 182
- www.apple.com — 179
- api.apple-cloudkit.fe2.apple-dns.net — 160
- mask.apple-dns.net — 155
Top blocked:
- dit.whatsapp.net — 372 blocked of 378
- word-telemetry.officeapps.live.com — 178 blocked of 186
- track.capitaloneshopping.com — 30 blocked of 32
- sentry.bga.li — 24 blocked of 24
- bam.nr-data.net — 12 blocked of 28
- partiality.itunes.apple.com — 8 blocked of 8
- cf.iadsdk.apple.com — 8 blocked of 8
- analytics.google.com — 8 blocked of 8
- iadsdk.apple.com — 6 blocked of 6
- ogads-pa.clients6.google.com — 4 blocked of 4
### iPhone (192.168.68.106)
Location: Hallway; MAC: C6-37-18-E7-39-39; mapping: historical_snapshot.
Queries: 7,066; blocked: 777; block rate: 11.00%; unique domains: 1,256.
Top visited (not blocked):
- mask.apple-dns.net — 239
- outlook.office365.com — 200
- mmx-ds.cdn.whatsapp.net — 101
- www.google.com — 93
- bag-cdn.itunes-apple.com.akadns.net — 78
- chat.cdn.whatsapp.net — 67
- whatsapp.com — 64
- imap.gmail.com — 63
- ts01-b.csa.cloudsink.net — 59
- ocsp2.apple.com — 56
Top blocked:
- dit.whatsapp.net — 198 blocked of 198
- app-analytics-services.com — 78 blocked of 78
- sdk.iad-01.braze.com — 54 blocked of 54
- fbs.smoot.apple.com — 30 blocked of 30
- analytics.google.com — 20 blocked of 20
- app-measurement.com — 19 blocked of 19
- monorail-edge.shopifysvc.com — 15 blocked of 15
- clienttracing-pa.googleapis.com — 15 blocked of 15
- trk.pinterest.com — 14 blocked of 14
- ct.pinterest.com — 14 blocked of 14
### 50CasitaTv (192.168.68.114)
Location: Casita; MAC: DC-72-23-B1-13-BE; mapping: historical_snapshot.
Queries: 5,901; blocked: 5,178; block rate: 87.75%; unique domains: 63.
Top visited (not blocked):
- nrdp.prod.ftl.netflix.com — 138
- www.youtube.com — 133
- nrdp.push.prod.netflix.com — 113
- api.roku.com — 29
- nrdp51-appboot.netflix.com — 25
- themes-service.sr.roku.com — 24
- i.ytimg.com — 22
- googleads.g.doubleclick.net — 18
- mediaservices.cdn-apple.com — 14
- nrdp.prod.cloud.netflix.com — 10
Top blocked:
- liberty.logs.roku.com — 3,164 blocked of 3,170
- scribe.logs.roku.com — 1,538 blocked of 1,540
- nrdp.logs.netflix.com — 254 blocked of 264
- logs.netflix.com — 189 blocked of 199
- cloudservices.roku.com — 28 blocked of 28
- display.ravm.tv — 4 blocked of 6
- identity.ads.roku.com — 1 blocked of 1
### adolforeyna-iMac11-3 (192.168.68.124)
Location: WashMachine; MAC: C8-BC-C8-BB-19-2D; mapping: historical_snapshot.
Queries: 5,713; blocked: 1,148; block rate: 20.09%; unique domains: 139.
Top visited (not blocked):
- lcp.rosettastone.com — 1,948
- connectivity-check.ubuntu.com — 581
- chatgpt.com — 537
- firefox.settings.services.mozilla.com — 159
- push.services.mozilla.com — 146
- www.recaptcha.net — 116
- www.gstatic.com — 116
- filters.adtidy.org — 116
- merino.services.mozilla.com — 106
- fonts.gstatic.com — 94
Top blocked:
- cdp.cloud.unity3d.com — 827 blocked of 839
- incoming.telemetry.mozilla.org — 270 blocked of 270
- pi.reddit.com — 6 blocked of 6
- csp.withgoogle.com — 6 blocked of 6
- s.amazon-adsystem.com — 5 blocked of 5
- confiant-integrations.global.ssl.fastly.net — 5 blocked of 5
- c.amazon-adsystem.com — 5 blocked of 5
- btloader.com — 5 blocked of 5
- analytics.google.com — 5 blocked of 5
- w3-reporting.reddit.com — 3 blocked of 3
### adolforeynaserver (192.168.68.110)
Location: Office; MAC: 18-60-24-78-DB-E8; mapping: historical_snapshot.
Queries: 5,294; blocked: 224; block rate: 4.23%; unique domains: 39.
Top visited (not blocked):
- chatgpt.com — 3,672
- media.reynafamily.com — 570
- adolforeynaserver — 314
- acme-v02.api.letsencrypt.org — 182
- ph.n8n.io — 112
- version.goauthentik.io — 48
- api.github.com — 48
- version.immich.cloud — 24
- api.snapcraft.io — 12
- cdn.fwupd.org — 8
Top blocked:
- telemetry.n8n.io — 224 blocked of 224
### aeropi5 (192.168.68.126)
Location: Office; MAC: 2C-CF-67-95-2B-F8; mapping: historical_snapshot.
Queries: 2,437; blocked: 0; block rate: 0.00%; unique domains: 13.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,168
- chatgpt.com — 949
- herdr.dev — 195
- cloud.reynafamily.com — 94
- api.snapcraft.io — 16
- canonical-bos01.cdn.snapcraftcontent.com — 4
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- cdn.fwupd.org — 2
- 126.68.168.192.in-addr.arpa — 2
Top blocked:
- none
### aeropi5 (192.168.68.116)
Location: Office; MAC: 2C-CF-67-95-2B-F9; mapping: historical_snapshot.
Queries: 2,393; blocked: 0; block rate: 0.00%; unique domains: 13.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,167
- chatgpt.com — 919
- herdr.dev — 184
- cloud.reynafamily.com — 94
- api.snapcraft.io — 14
- canonical-bos01.cdn.snapcraftcontent.com — 4
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- cdn.fwupd.org — 2
- 126.68.168.192.in-addr.arpa — 2
Top blocked:
- none
### iPad-4 (192.168.68.107)
Location: WashMachine; MAC: DA-77-C3-CE-4D-01; mapping: historical_snapshot.
Queries: 1,879; blocked: 304; block rate: 16.18%; unique domains: 262.
Top visited (not blocked):
- mask.apple-dns.net — 337
- _dns.resolver.arpa — 61
- ocsp2.apple.com — 42
- mask.icloud.com — 40
- known-issues.v.aaplimg.com — 40
- ocsp2.g.aaplimg.com — 38
- m.sni.global.fastly.net — 30
- time.g.aaplimg.com — 23
- mask-api.icloud.com — 22
- known-issues.apple.com — 22
Top blocked:
- sdk.iad-01.braze.com — 244 blocked of 244
- app-measurement.com — 34 blocked of 34
- partiality.itunes.apple.com — 6 blocked of 6
- cf.iadsdk.apple.com — 6 blocked of 6
- iadsdk.apple.com — 4 blocked of 4
- experiments.apple.com — 4 blocked of 4
- fbs.smoot.apple.com — 2 blocked of 2
- crashlyticsreports-pa.googleapis.com — 2 blocked of 2
- banner.youversionapi.com — 2 blocked of 2
### emiserver (192.168.68.119)
Location: Office; MAC: C8-5A-CF-0A-7A-A7; mapping: historical_snapshot.
Queries: 1,766; blocked: 0; block rate: 0.00%; unique domains: 24.
Top visited (not blocked):
- api.telegram.org — 1,114
- chatgpt.com — 510
- version.goauthentik.io — 50
- version.immich.cloud — 24
- api.snapcraft.io — 12
- motd.ubuntu.com — 6
- cdn.fwupd.org — 6
- ec2-89-192-235-234.compute-1.amazonaws.com — 4
- ec2-89-192-235-227.compute-1.amazonaws.com — 4
- ec2-89-192-235-218.compute-1.amazonaws.com — 4
Top blocked:
- none
### iPad (192.168.68.129)
Location: Study; MAC: A2-10-C6-24-C2-0A; mapping: historical_snapshot.
Queries: 1,566; blocked: 53; block rate: 3.38%; unique domains: 236.
Top visited (not blocked):
- mask.apple-dns.net — 302
- iphone-ld.apple.com — 56
- _dns.resolver.arpa — 55
- ocsp2.apple.com — 42
- mask.icloud.com — 42
- iphone-ld.g.aaplimg.com — 41
- configuration.ls.apple.com — 40
- ocsp2.g.aaplimg.com — 30
- gdmf.apple.com — 26
- configuration.ls.v.aaplimg.com — 22
Top blocked:
- app-analytics-services.com — 17 blocked of 17
- app-measurement.com — 12 blocked of 12
- partiality.itunes.apple.com — 7 blocked of 7
- cf.iadsdk.apple.com — 7 blocked of 7
- fbs.smoot.apple.com — 6 blocked of 8
- trk.pinterest.com — 2 blocked of 2
- experiments.apple.com — 2 blocked of 2
### localhost (127.0.0.1)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 668; blocked: 0; block rate: 0.00%; unique domains: 37.
Top visited (not blocked):
- local.api.ftl — 35
- 8.8.8.8.in-addr.arpa — 24
- 150.68.168.192.in-addr.arpa — 24
- 135.68.168.192.in-addr.arpa — 24
- 134.68.168.192.in-addr.arpa — 24
- 129.68.168.192.in-addr.arpa — 24
- 128.68.168.192.in-addr.arpa — 24
- 126.68.168.192.in-addr.arpa — 24
- 125.68.168.192.in-addr.arpa — 24
- 124.68.168.192.in-addr.arpa — 24
Top blocked:
- none
### 50LivingRoom (192.168.68.100)
Location: Office; MAC: 84-3E-1D-4F-4A-1D; mapping: historical_snapshot.
Queries: 487; blocked: 417; block rate: 85.63%; unique domains: 13.
Top visited (not blocked):
- themes-service.sr.roku.com — 24
- api.roku.com — 24
- sw-update.cs.roku.com — 2
- mediaservices.cdn-apple.com — 2
- austin.sb.roku.com — 2
- tpc.googlesyndication.com — 1
- lat-services.api.data.roku.com — 1
- identity.ads.roku.com — 1
- hints.voice.roku.com — 1
- api2.sr.roku.com — 1
Top blocked:
- liberty.logs.roku.com — 214 blocked of 222
- scribe.logs.roku.com — 202 blocked of 204
- display.ravm.tv — 1 blocked of 2
### espressif (192.168.68.113)
Location: Study; MAC: 14-C1-9F-D0-59-1C; mapping: historical_snapshot.
Queries: 422; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 422
Top blocked:
- none
### Adolfos-iPhone (192.168.68.150)
Location: Office; MAC: 30-35-AD-68-A3-AB; mapping: historical_snapshot.
Queries: 360; blocked: 30; block rate: 8.33%; unique domains: 81.
Top visited (not blocked):
- safebrowsing.googleapis.com — 44
- time-ios.apple.com — 33
- gateway.fe2.apple-dns.net — 26
- p33-bookmarks.icloud.com — 22
- _bookmarkdavs._tcp.p33-bookmarks.icloud.com — 22
- ocsp.apple.com — 18
- gateway.icloud.com — 16
- mesu.apple.com — 8
- gsp64-ssl.ls.apple.com — 8
- gsp-ssl.ls.apple.com — 8
Top blocked:
- fbs.smoot.apple.com — 22 blocked of 22
- partiality.itunes.apple.com — 4 blocked of 4
- cf.iadsdk.apple.com — 4 blocked of 4
### espressif (192.168.68.135)
Location: WashMachine; MAC: 14-C1-9F-D1-56-90; mapping: historical_snapshot.
Queries: 264; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 264
Top blocked:
- none
### espressif (192.168.68.121)
Location: Casita; MAC: 14-C1-9F-D0-5C-5C; mapping: historical_snapshot.
Queries: 215; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 215
Top blocked:
- none
### Amazon (192.168.68.134)
Location: Office; MAC: A0-D2-B1-A6-EC-BD; mapping: historical_snapshot.
Queries: 177; blocked: 36; block rate: 20.34%; unique domains: 10.
Top visited (not blocked):
- dogvgb9ujhybx.cloudfront.net — 77
- ahu5vu98zzyil.us-east-1.prod.service.minerva.devices.a2z.com — 46
- www.amazon.com — 7
- m.media-amazon.com — 4
- todo-ta-g7g.amazon.com — 2
- device-messaging-na.amazon.com — 2
- s3.amazonaws.com — 1
- s3-us-west-1.amazonaws.com — 1
- d18os95hu8sz6h.cloudfront.net — 1
Top blocked:
- unagi-na.amazon.com — 36 blocked of 36
### Unknown device (192.168.68.104)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 92; blocked: 1; block rate: 1.09%; unique domains: 24.
Top visited (not blocked):
- todo-ta-g7g.amazon.com — 25
- dogvgb9ujhybx.cloudfront.net — 10
- device-messaging-na.amazon.com — 9
- ms-cam-u011.immedia-semi.com — 8
- podcast.emmint.com — 6
- s3.amazonaws.com — 4
- _dns.resolver.arpa — 4
- us-se-courier-vs.push-apple.com.akadns.net — 2
- pins.amazon.com — 2
- api.amazon.com — 2
Top blocked:
- unagi-na.amazon.com — 1 blocked of 1
### MyCloudEX2Ultra (192.168.68.137)
Location: Office; MAC: 00-00-C0-3C-B8-FF; mapping: historical_snapshot.
Queries: 58; blocked: 0; block rate: 0.00%; unique domains: 11.
Top visited (not blocked):
- prod-gateway.wdckeystone.com — 16
- prod-proxy.wdckeystone.com — 10
- prod.wdckeystone.com — 6
- prod-fc14d21a5887149.wdckeystone.com — 6
- time.windows.com — 4
- time.mycloud.com — 4
- google.com — 4
- prod-7c74fffc718ed01.wdckeystone.com — 2
- prod-15ce3e0b80af991.wdckeystone.com — 2
- downloads.mycloud.com — 2
Top blocked:
- none
### Mac-mini-M4 (192.168.68.130)
Location: Office; MAC: D0-11-E5-73-96-5A; mapping: historical_snapshot.
Queries: 53; blocked: 29; block rate: 54.72%; unique domains: 19.
Top visited (not blocked):
- google.com — 5
- 46-courier.push.apple.com — 3
- meta.com — 2
- messenger.com — 2
Top blocked:
- x.com — 5 blocked of 5
- facebook.com — 4 blocked of 8
- instagram.com — 3 blocked of 8
- youtube.com — 3 blocked of 5
- www.facebook.com — 2 blocked of 3
- fbcdn.net — 2 blocked of 2
- facebook.net — 2 blocked of 2
- www.instagram.com — 1 blocked of 1
- static.xx.fbcdn.net — 1 blocked of 1
- m.facebook.com — 1 blocked of 1
### E31868152 (192.168.68.128)
Location: Barn; MAC: 80-9F-9B-45-9A-FF; mapping: historical_snapshot.
Queries: 52; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 50
- litedev.us.ezvizlife.com — 2
Top blocked:
- none
### F49758774 (192.168.68.125)
Location: Hallway; MAC: C0-E7-BF-DD-C8-2A; mapping: historical_snapshot.
Queries: 48; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 48
Top blocked:
- none
### macm1.reynafamily.com (192.168.68.127)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 31; blocked: 0; block rate: 0.00%; unique domains: 9.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 14
- podcast.emmint.com — 4
- guzzoni.apple.com — 4
- mesu.g.aaplimg.com — 2
- mesu.apple.com — 2
- mesu-cdn.origin-apple.com.akadns.net — 2
- _dns.resolver.arpa — 2
- s3.amazonaws.com — 1
- guzzoni-apple-com.v.aaplimg.com — 1
Top blocked:
- none
### Mac (192.168.68.102)
Location: Office; MAC: 5A-D2-AA-CB-96-08; mapping: historical_snapshot.
Queries: 17; blocked: 0; block rate: 0.00%; unique domains: 11.
Top visited (not blocked):
- mnz-efz.ms-acdc.office.com — 3
- gsp-ssl.ls.apple.com — 3
- us-se-courier-4.push-apple.com.akadns.net — 2
- mtalk.google.com — 2
- us-sandbox-courier-4.push-apple.com.akadns.net — 1
- paseo-relay-next.fly.dev — 1
- outlook.office365.com — 1
- local — 1
- get-bx.g.aaplimg.com — 1
- api.apple-cloudkit.fe2.apple-dns.net — 1
Top blocked:
- none
### Unknown device (192.168.68.132)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 14; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 14
Top blocked:
- none
### Unknown device (192.168.68.131)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 3; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 3
Top blocked:
- none
### FN-LINK (192.168.68.139)
Location: Barn; MAC: 24-18-C6-B5-4A-DC; mapping: historical_snapshot.
Queries: 2; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- portal-ww.ecouser.net — 2
Top blocked:
- none
### Unknown device (192.168.68.117)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 2; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 2
Top blocked:
- none
### Unknown device (192.168.68.127)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 1; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 14
- podcast.emmint.com — 4
- guzzoni.apple.com — 4
- mesu.g.aaplimg.com — 2
- mesu.apple.com — 2
- mesu-cdn.origin-apple.com.akadns.net — 2
- _dns.resolver.arpa — 2
- s3.amazonaws.com — 1
- guzzoni-apple-com.v.aaplimg.com — 1
Top blocked:
- none
### Google-Home-Mini (192.168.68.122)
Location: Office; MAC: 48-D6-D5-7B-91-C5; mapping: historical_snapshot.
Queries: 1; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 1
Top blocked:
- none
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,703 @@
# Pi-hole DNS usage — 2026-09-05
Window: 2026-09-05T00:00:00-04:00 to 2026-09-06T00:00:00-04:00 (America/New_York)
Generated: 2026-09-06T00:15:12.145470-04:00
Pi-hole: adolforeyna@192.168.68.110 (FTL database, read-only)
Deco mapping source: historical Deco snapshots plus live fallback
Blocked status codes counted: 1=gravity, 4=regex, 5=denylist, 6=external-blocked-ip, 7=external-blocked-null, 8=external-blocked-nxra, 9=gravity-cname, 10=regex-cname, 11=denylist-cname, 18=external-blocked-ede15
## Device summary
| Device | IP | Deco/location | Queries | Blocked | Block rate | Top visited | Top blocked |
|---|---|---|---:|---:|---:|---|---|
| iPhone | 192.168.68.105 | Hallway | 15,668 | 2,827 | 18.04% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| Mac | 192.168.68.108 | Hallway | 14,592 | 1,789 | 12.26% | `www.google.com` | `dit.whatsapp.net` |
| Mac | 192.168.68.111 | Hallway | 13,502 | 1,993 | 14.76% | `ssl.gstatic.com` | `dit.whatsapp.net` |
| Mac | 192.168.68.112 | Office | 11,173 | 393 | 3.52% | `internalfb.com` | `chromereporting-pa.googleapis.com` |
| Alicia-2022-2 | 192.168.68.106 | Office | 8,507 | 1,214 | 14.27% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| adolforeynaserver | 192.168.68.110 | Office | 6,250 | 232 | 3.71% | `chatgpt.com` | `telemetry.n8n.io` |
| adolforeyna-iMac11-3 | 192.168.68.124 | WashMachine | 5,234 | 1,089 | 20.81% | `lcp.rosettastone.com` | `cdp.cloud.unity3d.com` |
| Dzidula-s-S22 | 192.168.68.133 | Barn | 4,286 | 704 | 16.43% | `google.com` | `mobile.pipe.aria.microsoft.com` |
| iPhone | 192.168.68.121 | Hallway | 3,414 | 879 | 25.75% | `mmx-ds.cdn.whatsapp.net` | `dit.whatsapp.net` |
| 50CasitaTv | 192.168.68.114 | Casita | 3,120 | 2,766 | 88.65% | `nrdp.prod.ftl.netflix.com` | `scribe.logs.roku.com` |
| aeropi5 | 192.168.68.126 | Office | 2,407 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| aeropi5 | 192.168.68.116 | Office | 2,337 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| emiserver | 192.168.68.119 | Office | 1,945 | 0 | 0.00% | `api.telegram.org` | `—` |
| 50LivingRoom | 192.168.68.100 | Office | 1,824 | 1,760 | 96.49% | `api.roku.com` | `scribe.logs.roku.com` |
| c00000F53FBA | 192.168.68.127 | Office | 1,645 | 255 | 15.50% | `google.com` | `mobile.pipe.aria.microsoft.com` |
| iPad | 192.168.68.129 | Study | 1,614 | 41 | 2.54% | `mask.apple-dns.net` | `fbs.smoot.apple.com` |
| iPad-4 | 192.168.68.107 | WashMachine | 1,050 | 111 | 10.57% | `mask.apple-dns.net` | `sdk.iad-01.braze.com` |
| ubuntu-server | 192.168.68.117 | Study | 850 | 229 | 26.94% | `mmx-ds.cdn.whatsapp.net` | `dit.whatsapp.net` |
| localhost | 127.0.0.1 | not mapped | 724 | 0 | 0.00% | `4.4.8.8.in-addr.arpa` | `—` |
| iPhone | 192.168.68.132 | Hallway | 709 | 28 | 3.95% | `lb._dns-sd._udp.0.68.168.192.in-addr.arpa` | `app-analytics-services.com` |
| espressif | 192.168.68.113 | Study | 473 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| espressif | 192.168.68.131 | Office | 433 | 22 | 5.08% | `time.cloudflare.com` | `dit.whatsapp.net` |
| Amazon | 192.168.68.134 | Office | 193 | 33 | 17.10% | `dogvgb9ujhybx.cloudfront.net` | `unagi-na.amazon.com` |
| espressif | 192.168.68.104 | Study | 191 | 2 | 1.05% | `time.cloudflare.com` | `unagi-na.amazon.com` |
| Adolfos-iPhone | 192.168.68.150 | Office | 162 | 8 | 4.94% | `time-ios.apple.com` | `partiality.itunes.apple.com` |
| espressif | 192.168.68.135 | WashMachine | 67 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| MyCloudEX2Ultra | 192.168.68.137 | Office | 50 | 0 | 0.00% | `prod.wdckeystone.com` | `—` |
| E31868152 | 192.168.68.128 | Barn | 49 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| F49758774 | 192.168.68.125 | Hallway | 49 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| iot_device | 192.168.68.136 | Casita | 22 | 0 | 0.00% | `eu.tectonic.remarkable.com` | `—` |
| cloud.reynafamily.com | 172.22.0.1 | not mapped | 7 | 0 | 0.00% | `youtube.com` | `—` |
| FN-LINK | 192.168.68.139 | Barn | 2 | 0 | 0.00% | `portal-ww.ecouser.net` | `—` |
| Mac-mini-M4 | 192.168.68.130 | Office | 2 | 0 | 0.00% | `colanode.reynafamily.com` | `—` |
| Unknown device | 172.22.0.1 | not mapped | 1 | 0 | 0.00% | `youtube.com` | `—` |
## Per-device detail
### iPhone (192.168.68.105)
Location: Hallway; MAC: 62-0F-E1-3A-4C-4B; mapping: historical_snapshot.
Queries: 15,668; blocked: 2,827; block rate: 18.04%; unique domains: 1,869.
Top visited (not blocked):
- mask.apple-dns.net — 365
- outlook.office365.com — 344
- mmx-ds.cdn.whatsapp.net — 175
- www.google.com — 133
- atm.outlook.mira.tm.svc.cloud.microsoft — 108
- bag-cdn.itunes-apple.com.akadns.net — 104
- imap.gmail.com — 101
- btlr.sharethrough.com — 90
- logs.ads.vungle.com — 71
- ocsp2.apple.com — 70
Top blocked:
- dit.whatsapp.net — 405 blocked of 407
- ep2.facebook.com — 150 blocked of 150
- app-analytics-services.com — 130 blocked of 130
- g2.gumgum.com — 121 blocked of 121
- et-eus.w.inmobi.com — 109 blocked of 109
- ts.amazon-adsystem.com — 99 blocked of 99
- eus-r.w.inmobi.com — 95 blocked of 95
- firebaselogging-pa.googleapis.com — 93 blocked of 93
- sdk.iad-01.braze.com — 90 blocked of 90
- unagi-na.amazon.com — 83 blocked of 83
### Mac (192.168.68.108)
Location: Hallway; MAC: 82-A1-8E-D4-03-7A; mapping: historical_snapshot.
Queries: 14,592; blocked: 1,789; block rate: 12.26%; unique domains: 443.
Top visited (not blocked):
- www.google.com — 719
- whatsapp.com — 653
- www.apple.com — 547
- api.apple-cloudkit.fe2.apple-dns.net — 477
- mmx-ds.cdn.whatsapp.net — 454
- 1.courier-sandbox-push-apple.com.akadns.net — 444
- chat.openai.com — 391
- apple.com — 379
- us-sandbox-courier-4.push-apple.com.akadns.net — 366
- chatgpt.com — 362
Top blocked:
- dit.whatsapp.net — 1,605 blocked of 1,605
- slackb.com — 64 blocked of 64
- collector.github.com — 24 blocked of 24
- sentry.bga.li — 20 blocked of 20
- analytics.google.com — 14 blocked of 14
- partiality.itunes.apple.com — 12 blocked of 12
- cf.iadsdk.apple.com — 12 blocked of 12
- ogads-pa.clients6.google.com — 10 blocked of 10
- browser-update.org — 10 blocked of 10
- iadsdk.apple.com — 3 blocked of 3
### Mac (192.168.68.111)
Location: Hallway; MAC: 0E-A4-E4-20-5C-1C; mapping: historical_snapshot.
Queries: 13,502; blocked: 1,993; block rate: 14.76%; unique domains: 532.
Top visited (not blocked):
- ssl.gstatic.com — 784
- outlook.cloud.microsoft — 627
- optimizationguide-pa.googleapis.com — 542
- chat.google.com — 500
- wordonline.nel.measure.office.net — 417
- www.google.com — 362
- play.google.com — 270
- c.pub.network — 266
- signaler-pa.clients6.google.com — 248
- waa-pa.clients6.google.com — 218
Top blocked:
- dit.whatsapp.net — 912 blocked of 912
- word-telemetry.officeapps.live.com — 454 blocked of 454
- bam.nr-data.net — 278 blocked of 316
- sentry.bga.li — 100 blocked of 100
- analytics.google.com — 50 blocked of 50
- track.capitaloneshopping.com — 48 blocked of 48
- bat.bing.com — 18 blocked of 18
- acsbapp.com — 16 blocked of 16
- ogads-pa.clients6.google.com — 14 blocked of 14
- fbs.smoot.apple.com — 12 blocked of 12
### Mac (192.168.68.112)
Location: Office; MAC: 06-79-91-73-6F-6A; mapping: historical_snapshot.
Queries: 11,173; blocked: 393; block rate: 3.52%; unique domains: 316.
Top visited (not blocked):
- internalfb.com — 666
- ssl.gstatic.com — 198
- api.manus.im — 195
- 1.courier-push-apple.com.akadns.net — 177
- play.google.com — 171
- beacons.gcp.gvt2.com — 171
- gateway.fe2.apple-dns.net — 167
- mask.apple-dns.net — 166
- chat.openai.com — 164
- lb._dns-sd._udp.0.68.168.192.in-addr.arpa — 148
Top blocked:
- chromereporting-pa.googleapis.com — 117 blocked of 117
- www.internalfb.com — 57 blocked of 1,963
- us-v20.events.data.microsoft.com — 31 blocked of 31
- graph.prod.facebook.com — 30 blocked of 241
- graph.facebook.com — 28 blocked of 1,092
- collector.github.com — 21 blocked of 21
- csp.withgoogle.com — 18 blocked of 18
- beacon.flexera-prod.aws.metafb.cloud — 17 blocked of 17
- tokenservice.edge.x2p.facebook.net — 14 blocked of 67
- www.facebook.com — 12 blocked of 103
### Alicia-2022-2 (192.168.68.106)
Location: Office; MAC: 56-68-92-84-12-EE; mapping: multiple_identities_seen.
Queries: 8,507; blocked: 1,214; block rate: 14.27%; unique domains: 761.
Top visited (not blocked):
- mask.apple-dns.net — 287
- ts01-b.csa.cloudsink.net — 242
- mmx-ds.cdn.whatsapp.net — 209
- outlook.office365.com — 202
- www.google.com — 152
- ts01-b.cloudsink.net — 146
- whatsapp.com — 135
- chat.cdn.whatsapp.net — 130
- oauthaccountmanager.googleapis.com — 106
- mdm-na2.mobileiron.com — 102
Top blocked:
- dit.whatsapp.net — 297 blocked of 297
- app-analytics-services.com — 195 blocked of 195
- cdp.customer.io — 89 blocked of 89
- app-measurement.com — 81 blocked of 81
- events.flagship.io — 74 blocked of 74
- firebaselogging-pa.googleapis.com — 72 blocked of 72
- unagi-na.amazon.com — 60 blocked of 60
- unagi.amazon.com — 57 blocked of 57
- uslog.ezvizlife.com — 43 blocked of 43
- bugsnag.com — 37 blocked of 37
### adolforeynaserver (192.168.68.110)
Location: Office; MAC: 18-60-24-78-DB-E8; mapping: historical_snapshot.
Queries: 6,250; blocked: 232; block rate: 3.71%; unique domains: 58.
Top visited (not blocked):
- chatgpt.com — 4,072
- media.reynafamily.com — 570
- adolforeynaserver — 326
- herdr.dev — 264
- acme-v02.api.letsencrypt.org — 184
- ph.n8n.io — 118
- ghcr.io — 84
- api.github.com — 52
- version.goauthentik.io — 48
- auth.openai.com — 36
Top blocked:
- telemetry.n8n.io — 232 blocked of 232
### adolforeyna-iMac11-3 (192.168.68.124)
Location: WashMachine; MAC: C8-BC-C8-BB-19-2D; mapping: historical_snapshot.
Queries: 5,234; blocked: 1,089; block rate: 20.81%; unique domains: 41.
Top visited (not blocked):
- lcp.rosettastone.com — 1,977
- connectivity-check.ubuntu.com — 579
- chatgpt.com — 531
- firefox.settings.services.mozilla.com — 165
- push.services.mozilla.com — 146
- www.recaptcha.net — 118
- www.gstatic.com — 114
- filters.adtidy.org — 114
- merino.services.mozilla.com — 97
- fonts.gstatic.com — 97
Top blocked:
- cdp.cloud.unity3d.com — 837 blocked of 837
- incoming.telemetry.mozilla.org — 252 blocked of 252
### Dzidula-s-S22 (192.168.68.133)
Location: Barn; MAC: C6-C3-37-60-5C-88; mapping: historical_snapshot.
Queries: 4,286; blocked: 704; block rate: 16.43%; unique domains: 828.
Top visited (not blocked):
- google.com — 212
- www.google.com — 169
- opcode — 46
- tlx.3lift.com — 38
- pagead2.googlesyndication.com — 38
- eb2.3lift.com — 34
- rtb.openx.net — 32
- imp-dev.mediavine.com — 32
- graph.facebook.com — 31
- googleads4.g.doubleclick.net — 30
Top blocked:
- mobile.pipe.aria.microsoft.com — 103 blocked of 103
- smetrics.t-mobile.com — 83 blocked of 83
- graph.instagram.com — 34 blocked of 34
- static.adsafeprotected.com — 32 blocked of 32
- onetag-sys.com — 32 blocked of 32
- prebid.scope3.com — 22 blocked of 22
- graph-fallback.instagram.com — 22 blocked of 22
- id5-sync.com — 18 blocked of 18
- cdn.doubleverify.com — 16 blocked of 16
- c.amazon-adsystem.com — 16 blocked of 16
### iPhone (192.168.68.121)
Location: Hallway; MAC: C6-37-18-E7-39-39; mapping: multiple_identities_seen.
Queries: 3,414; blocked: 879; block rate: 25.75%; unique domains: 484.
Top visited (not blocked):
- mmx-ds.cdn.whatsapp.net — 128
- mask.apple-dns.net — 111
- outlook.office365.com — 90
- chat.cdn.whatsapp.net — 73
- whatsapp.com — 69
- ts01-b.csa.cloudsink.net — 60
- www.google.com — 59
- time.cloudflare.com — 54
- ts01-b.cloudsink.net — 42
- oauthaccountmanager.googleapis.com — 42
Top blocked:
- dit.whatsapp.net — 281 blocked of 281
- app-measurement.com — 51 blocked of 52
- app-analytics-services.com — 50 blocked of 52
- collector-pxuarm9b04.perimeterx.net — 48 blocked of 48
- analytics.mobile.walmart.com — 47 blocked of 47
- sdk.iad-08.braze.com — 44 blocked of 44
- firebaselogging-pa.googleapis.com — 37 blocked of 37
- gateway.facebook.com — 18 blocked of 21
- sdk.iad-06.braze.com — 18 blocked of 18
- web.facebook.com — 16 blocked of 16
### 50CasitaTv (192.168.68.114)
Location: Casita; MAC: DC-72-23-B1-13-BE; mapping: historical_snapshot.
Queries: 3,120; blocked: 2,766; block rate: 88.65%; unique domains: 16.
Top visited (not blocked):
- nrdp.prod.ftl.netflix.com — 131
- nrdp.push.prod.netflix.com — 129
- api.roku.com — 29
- themes-service.sr.roku.com — 24
- nrdp51-appboot.netflix.com — 19
- mediaservices.cdn-apple.com — 14
- sw-update.cs.roku.com — 1
- longview.sb.roku.com — 1
- lat-services.api.data.roku.com — 1
- api2.sr.roku.com — 1
Top blocked:
- scribe.logs.roku.com — 2,106 blocked of 2,108
- nrdp.logs.netflix.com — 297 blocked of 297
- liberty.logs.roku.com — 198 blocked of 200
- logs.netflix.com — 139 blocked of 139
- cloudservices.roku.com — 24 blocked of 24
- display.ravm.tv — 2 blocked of 2
### aeropi5 (192.168.68.126)
Location: Office; MAC: 2C-CF-67-95-2B-F8; mapping: historical_snapshot.
Queries: 2,407; blocked: 0; block rate: 0.00%; unique domains: 12.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,171
- chatgpt.com — 869
- herdr.dev — 221
- cloud.reynafamily.com — 96
- api.snapcraft.io — 16
- 126.68.168.192.in-addr.arpa — 10
- 116.68.168.192.in-addr.arpa — 9
- ports.ubuntu.com — 4
- packages.microsoft.com — 4
- _https._tcp.packages.microsoft.com — 3
Top blocked:
- none
### aeropi5 (192.168.68.116)
Location: Office; MAC: 2C-CF-67-95-2B-F9; mapping: historical_snapshot.
Queries: 2,337; blocked: 0; block rate: 0.00%; unique domains: 12.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,174
- chatgpt.com — 826
- herdr.dev — 192
- cloud.reynafamily.com — 96
- api.snapcraft.io — 15
- 126.68.168.192.in-addr.arpa — 10
- 116.68.168.192.in-addr.arpa — 9
- ports.ubuntu.com — 4
- packages.microsoft.com — 4
- _https._tcp.packages.microsoft.com — 3
Top blocked:
- none
### emiserver (192.168.68.119)
Location: Office; MAC: C8-5A-CF-0A-7A-A7; mapping: historical_snapshot.
Queries: 1,945; blocked: 0; block rate: 0.00%; unique domains: 29.
Top visited (not blocked):
- api.telegram.org — 1,123
- chatgpt.com — 651
- version.goauthentik.io — 50
- version.immich.cloud — 25
- herdr.dev — 23
- api.snapcraft.io — 8
- ec2-89-192-235-234.compute-1.amazonaws.com — 7
- cdn.fwupd.org — 6
- security.ubuntu.com — 4
- motd.ubuntu.com — 4
Top blocked:
- none
### 50LivingRoom (192.168.68.100)
Location: Office; MAC: 84-3E-1D-4F-4A-1D; mapping: historical_snapshot.
Queries: 1,824; blocked: 1,760; block rate: 96.49%; unique domains: 14.
Top visited (not blocked):
- api.roku.com — 26
- themes-service.sr.roku.com — 24
- mediaservices.cdn-apple.com — 2
- configsvc.cs.roku.com — 2
- sw-update.cs.roku.com — 1
- lat-services.api.data.roku.com — 1
- hints.voice.roku.com — 1
- austin.sb.roku.com — 1
- api2.sr.roku.com — 1
- api-g2.rokutime.com — 1
Top blocked:
- scribe.logs.roku.com — 1,560 blocked of 1,562
- liberty.logs.roku.com — 196 blocked of 198
- identity.ads.roku.com — 2 blocked of 2
- display.ravm.tv — 2 blocked of 2
### c00000F53FBA (192.168.68.127)
Location: Office; MAC: 5C-62-5A-F5-3F-BA; mapping: multiple_identities_seen.
Queries: 1,645; blocked: 255; block rate: 15.50%; unique domains: 77.
Top visited (not blocked):
- google.com — 732
- opcode — 160
- www.google.com — 127
- 216.58.202.4.in-addr.arpa — 105
- www.goooooooooooooooooooooooooooooooooooooooooooooooooooooooooogle.com — 53
- *google.com — 53
- google.com.onion — 52
- graph.facebook.com — 6
- play.googleapis.com — 5
- outlook.office365.com — 5
Top blocked:
- mobile.pipe.aria.microsoft.com — 231 blocked of 231
- mobile.events.data.microsoft.com — 10 blocked of 10
- app-measurement.com — 6 blocked of 6
- in.appcenter.ms — 5 blocked of 5
- collect.ureca-lab.com — 2 blocked of 2
- dls-udc.dqa.samsung.com — 1 blocked of 1
### iPad (192.168.68.129)
Location: Study; MAC: A2-10-C6-24-C2-0A; mapping: historical_snapshot.
Queries: 1,614; blocked: 41; block rate: 2.54%; unique domains: 250.
Top visited (not blocked):
- mask.apple-dns.net — 232
- sps-media.v.aaplimg.com — 58
- _dns.resolver.arpa — 46
- cma2.itunes.apple.com — 44
- iphone-ld.apple.com — 42
- mask.icloud.com — 40
- ocsp2.apple.com — 36
- uts-api-cdn.itunes-apple.com.akadns.net — 34
- iphone-ld.g.aaplimg.com — 34
- ocsp2.g.aaplimg.com — 30
Top blocked:
- fbs.smoot.apple.com — 12 blocked of 12
- partiality.itunes.apple.com — 7 blocked of 7
- cf.iadsdk.apple.com — 7 blocked of 7
- app-analytics-services.com — 5 blocked of 5
- trk.pinterest.com — 2 blocked of 2
- experiments.apple.com — 2 blocked of 2
- crashlogs.whatsapp.net — 2 blocked of 2
- collector-pxhyx10rg3.perimeterx.net — 2 blocked of 2
- app-measurement.com — 2 blocked of 2
### iPad-4 (192.168.68.107)
Location: WashMachine; MAC: DA-77-C3-CE-4D-01; mapping: historical_snapshot.
Queries: 1,050; blocked: 111; block rate: 10.57%; unique domains: 165.
Top visited (not blocked):
- mask.apple-dns.net — 206
- _dns.resolver.arpa — 55
- mask.icloud.com — 42
- ocsp2.apple.com — 38
- ocsp2.g.aaplimg.com — 22
- bag.itunes.apple.com — 20
- bag-cdn.itunes-apple.com.akadns.net — 20
- gsp-ssl.ls.apple.com — 18
- pancake.apple.com — 16
- gdmf.apple.com — 14
Top blocked:
- sdk.iad-01.braze.com — 72 blocked of 72
- app-measurement.com — 15 blocked of 15
- partiality.itunes.apple.com — 8 blocked of 8
- cf.iadsdk.apple.com — 8 blocked of 8
- firebaselogging-pa.googleapis.com — 4 blocked of 4
- experiments.apple.com — 2 blocked of 2
- banner.youversionapi.com — 2 blocked of 2
### ubuntu-server (192.168.68.117)
Location: Study; MAC: 24-FD-FA-03-53-0C; mapping: multiple_identities_seen.
Queries: 850; blocked: 229; block rate: 26.94%; unique domains: 219.
Top visited (not blocked):
- mmx-ds.cdn.whatsapp.net — 38
- mask.apple-dns.net — 24
- www.google.com — 21
- play.googleapis.com — 16
- flag.lab.amplitude.com — 13
- chat.cdn.whatsapp.net — 12
- api.lab.amplitude.com — 12
- eu.tectonic.remarkable.com — 11
- m.sni.global.fastly.net — 10
- cdn.branch.io — 10
Top blocked:
- dit.whatsapp.net — 84 blocked of 84
- app-analytics-services.com — 44 blocked of 44
- sdk.iad-01.braze.com — 35 blocked of 35
- app-measurement.com — 30 blocked of 30
- browser-intake-datadoghq.com — 7 blocked of 7
- partiality.itunes.apple.com — 6 blocked of 6
- cf.iadsdk.apple.com — 6 blocked of 6
- receive-lp1.dg.srv.nintendo.net — 5 blocked of 5
- firebaselogging-pa.googleapis.com — 4 blocked of 4
- in.appcenter.ms — 2 blocked of 2
### localhost (127.0.0.1)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 724; blocked: 0; block rate: 0.00%; unique domains: 38.
Top visited (not blocked):
- 4.4.8.8.in-addr.arpa — 26
- 150.68.168.192.in-addr.arpa — 26
- 134.68.168.192.in-addr.arpa — 26
- 128.68.168.192.in-addr.arpa — 26
- 126.68.168.192.in-addr.arpa — 26
- 125.68.168.192.in-addr.arpa — 26
- 116.68.168.192.in-addr.arpa — 26
- 114.68.168.192.in-addr.arpa — 26
- 113.68.168.192.in-addr.arpa — 26
- 112.68.168.192.in-addr.arpa — 26
Top blocked:
- none
### iPhone (192.168.68.132)
Location: Hallway; MAC: CA-75-80-F1-99-94; mapping: historical_snapshot.
Queries: 709; blocked: 28; block rate: 3.95%; unique domains: 151.
Top visited (not blocked):
- lb._dns-sd._udp.0.68.168.192.in-addr.arpa — 75
- lb._dns-sd._udp.2.0.0.192.in-addr.arpa — 72
- lb._dns-sd._udp.131.150.49.28.in-addr.arpa — 72
- mask.apple-dns.net — 27
- weatherkit.apple.com — 14
- ocsp2.apple.com — 12
- flag.lab.amplitude.com — 12
- _dns.resolver.arpa — 11
- weatherkit.apple.com.akadns.net — 10
- fp-us-tmobile.rcs.telephony.goog — 10
Top blocked:
- app-analytics-services.com — 11 blocked of 11
- sdk.iad-01.braze.com — 10 blocked of 10
- app-measurement.com — 7 blocked of 7
### espressif (192.168.68.113)
Location: Study; MAC: 14-C1-9F-D0-59-1C; mapping: historical_snapshot.
Queries: 473; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 473
Top blocked:
- none
### espressif (192.168.68.131)
Location: Office; MAC: 14-C1-9F-D0-5C-5C; mapping: multiple_identities_seen.
Queries: 433; blocked: 22; block rate: 5.08%; unique domains: 125.
Top visited (not blocked):
- time.cloudflare.com — 62
- www.google.com — 18
- mmx-ds.cdn.whatsapp.net — 15
- people-pa.googleapis.com — 10
- oauthaccountmanager.googleapis.com — 10
- mask.apple-dns.net — 10
- lh3.googleusercontent.com — 10
- iphone-ld.g.aaplimg.com — 9
- us.telemetry.zoom.us — 8
- gs-loc.ls-apple.com.akadns.net — 8
Top blocked:
- dit.whatsapp.net — 14 blocked of 14
- teams.events.data.microsoft.com — 2 blocked of 2
- log-gateway.zoom.us — 2 blocked of 2
- ic3.events.data.microsoft.com — 2 blocked of 2
- adserver.pandora.com — 2 blocked of 2
### Amazon (192.168.68.134)
Location: Office; MAC: A0-D2-B1-A6-EC-BD; mapping: historical_snapshot.
Queries: 193; blocked: 33; block rate: 17.10%; unique domains: 19.
Top visited (not blocked):
- dogvgb9ujhybx.cloudfront.net — 75
- ahu5vu98zzyil.us-east-1.prod.service.minerva.devices.a2z.com — 48
- www.amazon.com — 8
- device-messaging-na.amazon.com — 7
- todo-ta-g7g.amazon.com — 6
- pins.amazon.com — 2
- m.media-amazon.com — 2
- 7a6e3418b2b39c5852077c212b8b75b4.00672507000024.kindle-perf.com — 2
- shm.amazon.com — 1
- s3.amazonaws.com — 1
Top blocked:
- unagi-na.amazon.com — 33 blocked of 33
### espressif (192.168.68.104)
Location: Study; MAC: 14-C1-9F-D1-56-90; mapping: multiple_identities_seen.
Queries: 191; blocked: 2; block rate: 1.05%; unique domains: 12.
Top visited (not blocked):
- time.cloudflare.com — 150
- todo-ta-g7g.amazon.com — 11
- ms-cam-u011.immedia-semi.com — 8
- device-messaging-na.amazon.com — 8
- dogvgb9ujhybx.cloudfront.net — 3
- pins.amazon.com — 2
- is-cam-u011.immedia-semi.com — 2
- ahu5vu98zzyil.us-east-1.prod.service.minerva.devices.a2z.com — 2
- ntp-g7g.amazon.com — 1
- cdn.tactilityproject.org — 1
Top blocked:
- unagi-na.amazon.com — 2 blocked of 2
### Adolfos-iPhone (192.168.68.150)
Location: Office; MAC: 30-35-AD-68-A3-AB; mapping: historical_snapshot.
Queries: 162; blocked: 8; block rate: 4.94%; unique domains: 41.
Top visited (not blocked):
- time-ios.apple.com — 35
- gateway.icloud.com — 16
- gateway.fe2.apple-dns.net — 15
- ocsp.apple.com — 9
- gsp64-ssl.ls.apple.com — 8
- gsp-ssl.ls.apple.com — 8
- p189-keyvalueservice.icloud.com — 6
- iphonesubmissions.apple.com — 4
- xp.apple.com — 3
- www.icloud.com — 3
Top blocked:
- partiality.itunes.apple.com — 4 blocked of 4
- cf.iadsdk.apple.com — 4 blocked of 4
### espressif (192.168.68.135)
Location: WashMachine; MAC: 14-C1-9F-D1-56-90; mapping: historical_snapshot.
Queries: 67; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- time.cloudflare.com — 61
- ms-cam-u011.immedia-semi.com — 6
Top blocked:
- none
### MyCloudEX2Ultra (192.168.68.137)
Location: Office; MAC: 00-00-C0-3C-B8-FF; mapping: historical_snapshot.
Queries: 50; blocked: 0; block rate: 0.00%; unique domains: 11.
Top visited (not blocked):
- prod.wdckeystone.com — 10
- prod-proxy.wdckeystone.com — 8
- config.mycloud.com — 6
- time.windows.com — 4
- time.mycloud.com — 4
- prod-31cdfc8017b5028.wdckeystone.com — 4
- prod-15ce3e0b80af991.wdckeystone.com — 4
- google.com — 4
- prod-gateway.wdckeystone.com — 2
- downloads.mycloud.com — 2
Top blocked:
- none
### E31868152 (192.168.68.128)
Location: Barn; MAC: 80-9F-9B-45-9A-FF; mapping: historical_snapshot.
Queries: 49; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 48
- pmsus1.ezvizlife.com — 1
Top blocked:
- none
### F49758774 (192.168.68.125)
Location: Hallway; MAC: C0-E7-BF-DD-C8-2A; mapping: historical_snapshot.
Queries: 49; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 48
- pmsus1.ezvizlife.com — 1
Top blocked:
- none
### iot_device (192.168.68.136)
Location: Casita; MAC: 24-FD-FA-03-53-0C; mapping: historical_snapshot.
Queries: 22; blocked: 0; block rate: 0.00%; unique domains: 5.
Top visited (not blocked):
- eu.tectonic.remarkable.com — 9
- webapp-prod.cloud.remarkable.engineering — 5
- ping.remarkable.com — 4
- device.cloud.remarkable.com — 2
- dev.tectonic.remarkable.com — 2
Top blocked:
- none
### cloud.reynafamily.com (172.22.0.1)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 7; blocked: 0; block rate: 0.00%; unique domains: 5.
Top visited (not blocked):
- youtube.com — 2
- example.com — 2
- colanode.reynafamily.com — 2
- instagram.com — 1
- facebook.com — 1
Top blocked:
- none
### FN-LINK (192.168.68.139)
Location: Barn; MAC: 24-18-C6-B5-4A-DC; mapping: historical_snapshot.
Queries: 2; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- portal-ww.ecouser.net — 2
Top blocked:
- none
### Mac-mini-M4 (192.168.68.130)
Location: Office; MAC: D0-11-E5-73-96-5A; mapping: historical_snapshot.
Queries: 2; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- colanode.reynafamily.com — 2
Top blocked:
- none
### Unknown device (172.22.0.1)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 1; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- youtube.com — 2
- example.com — 2
- colanode.reynafamily.com — 2
- instagram.com — 1
- facebook.com — 1
Top blocked:
- none
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,596 @@
# Pi-hole DNS usage — 2026-09-06
Window: 2026-09-06T00:00:00-04:00 to 2026-09-07T00:00:00-04:00 (America/New_York)
Generated: 2026-09-07T00:15:59.843248-04:00
Pi-hole: adolforeyna@192.168.68.110 (FTL database, read-only)
Deco mapping source: historical Deco snapshots plus live fallback
Blocked status codes counted: 1=gravity, 4=regex, 5=denylist, 6=external-blocked-ip, 7=external-blocked-null, 8=external-blocked-nxra, 9=gravity-cname, 10=regex-cname, 11=denylist-cname, 18=external-blocked-ede15
## Device summary
| Device | IP | Deco/location | Queries | Blocked | Block rate | Top visited | Top blocked |
|---|---|---|---:|---:|---:|---|---|
| Mac | 192.168.68.112 | Office | 9,350 | 1,921 | 20.55% | `internalfb.com` | `www.internalfb.com` |
| Mac | 192.168.68.108 | Hallway | 8,101 | 1,044 | 12.89% | `www.google.com` | `dit.whatsapp.net` |
| iPhone | 192.168.68.104 | Hallway | 7,669 | 1,774 | 23.13% | `btlr.sharethrough.com` | `dit.whatsapp.net` |
| Mac | 192.168.68.111 | Hallway | 6,656 | 638 | 9.59% | `ssl.gstatic.com` | `dit.whatsapp.net` |
| adolforeynaserver | 192.168.68.110 | Office | 6,051 | 224 | 3.70% | `chatgpt.com` | `telemetry.n8n.io` |
| espressif | 192.168.68.117 | Office | 5,650 | 1,303 | 23.06% | `btlr.sharethrough.com` | `analytics.google.com` |
| adolforeyna-iMac11-3 | 192.168.68.124 | WashMachine | 5,305 | 1,083 | 20.41% | `lcp.rosettastone.com` | `cdp.cloud.unity3d.com` |
| espressif | 192.168.68.105 | Hallway | 3,876 | 450 | 11.61% | `time.cloudflare.com` | `g2.gumgum.com` |
| iPhone | 192.168.68.106 | Hallway | 3,832 | 731 | 19.08% | `ts01-b.csa.cloudsink.net` | `dit.whatsapp.net` |
| 50CasitaTv | 192.168.68.114 | Casita | 3,623 | 3,295 | 90.95% | `nrdp.prod.ftl.netflix.com` | `scribe.logs.roku.com` |
| iPhone | 192.168.68.121 | Study | 2,588 | 215 | 8.31% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| emiserver | 192.168.68.119 | Office | 2,358 | 0 | 0.00% | `api.telegram.org` | `—` |
| iPad | 192.168.68.129 | Hallway | 2,284 | 151 | 6.61% | `mask.apple-dns.net` | `fbs.smoot.apple.com` |
| aeropi5 | 192.168.68.126 | Office | 2,133 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| aeropi5 | 192.168.68.116 | Office | 2,129 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| 50LivingRoom | 192.168.68.100 | Office | 1,680 | 1,621 | 96.49% | `api.roku.com` | `scribe.logs.roku.com` |
| iPad-4 | 192.168.68.107 | WashMachine | 729 | 20 | 2.74% | `mask.apple-dns.net` | `partiality.itunes.apple.com` |
| localhost | 127.0.0.1 | not mapped | 625 | 0 | 0.00% | `150.68.168.192.in-addr.arpa` | `—` |
| espressif | 192.168.68.131 | Study | 298 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| espressif | 192.168.68.113 | Study | 262 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| Amazon | 192.168.68.134 | Office | 175 | 38 | 21.71% | `dogvgb9ujhybx.cloudfront.net` | `unagi-na.amazon.com` |
| Adolfos-iPhone | 192.168.68.150 | Office | 147 | 8 | 5.44% | `time-ios.apple.com` | `partiality.itunes.apple.com` |
| MyCloudEX2Ultra | 192.168.68.137 | Office | 52 | 0 | 0.00% | `prod.wdckeystone.com` | `—` |
| E31868152 | 192.168.68.128 | Barn | 48 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| F49758774 | 192.168.68.125 | Hallway | 48 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| cloud.reynafamily.com | 172.22.0.1 | not mapped | 23 | 11 | 47.83% | `example.com` | `9gag.com` |
| FN-LINK | 192.168.68.139 | Barn | 3 | 0 | 0.00% | `portal-ww.ecouser.net` | `—` |
| macm1.reynafamily.com | 192.168.68.127 | not mapped | 2 | 0 | 0.00% | `gateway.icloud.com` | `—` |
| Mac | 192.168.68.102 | Office | 2 | 0 | 0.00% | `local` | `—` |
## Per-device detail
### Mac (192.168.68.112)
Location: Office; MAC: 06-79-91-73-6F-6A; mapping: historical_snapshot.
Queries: 9,350; blocked: 1,921; block rate: 20.55%; unique domains: 301.
Top visited (not blocked):
- internalfb.com — 438
- ssl.gstatic.com — 186
- gateway.fe2.apple-dns.net — 167
- mtalk.google.com — 159
- mask.apple-dns.net — 157
- lb._dns-sd._udp.0.68.168.192.in-addr.arpa — 156
- lrs.thefacebook.com — 145
- api.manus.im — 138
- edge-c2p.c10r.facebook.com — 133
- chat.google.com — 132
Top blocked:
- www.internalfb.com — 681 blocked of 1,456
- graph.facebook.com — 453 blocked of 797
- graph.prod.facebook.com — 280 blocked of 445
- interngraph.internmc.facebook.com — 142 blocked of 240
- www.facebook.com — 126 blocked of 204
- tokenservice.edge.x2p.facebook.net — 78 blocked of 149
- xn--oi8h.likefleet.com — 21 blocked of 41
- csp.withgoogle.com — 18 blocked of 18
- thrift.edge.x2p.facebook.net — 16 blocked of 40
- time1.facebook.com — 15 blocked of 65
### Mac (192.168.68.108)
Location: Hallway; MAC: 82-A1-8E-D4-03-7A; mapping: historical_snapshot.
Queries: 8,101; blocked: 1,044; block rate: 12.89%; unique domains: 387.
Top visited (not blocked):
- www.google.com — 359
- www.apple.com — 308
- api.apple-cloudkit.fe2.apple-dns.net — 264
- 1.courier-sandbox-push-apple.com.akadns.net — 252
- whatsapp.com — 247
- apple.com — 216
- us-sandbox-courier-4.push-apple.com.akadns.net — 204
- chat.openai.com — 204
- colanode.reynafamily.com — 197
- chatgpt.com — 191
Top blocked:
- dit.whatsapp.net — 791 blocked of 791
- sentry.bga.li — 54 blocked of 54
- slackb.com — 36 blocked of 36
- www.youtube.com — 32 blocked of 70
- unagi.amazon.com — 26 blocked of 26
- cf.iadsdk.apple.com — 22 blocked of 22
- unagi-na.amazon.com — 16 blocked of 16
- partiality.itunes.apple.com — 14 blocked of 14
- ogads-pa.clients6.google.com — 12 blocked of 12
- analytics.google.com — 10 blocked of 10
### iPhone (192.168.68.104)
Location: Hallway; MAC: 62-0F-E1-3A-4C-4B; mapping: multiple_identities_seen.
Queries: 7,669; blocked: 1,774; block rate: 23.13%; unique domains: 995.
Top visited (not blocked):
- btlr.sharethrough.com — 158
- mmx-ds.cdn.whatsapp.net — 140
- time.cloudflare.com — 103
- outlook.office365.com — 96
- mask.apple-dns.net — 83
- ib.anycast.adnxs.com — 72
- grid-bidder.criteo.com — 58
- www.google.com — 57
- chat.cdn.whatsapp.net — 50
- cnam4c.inapps.appsflyersdk.com — 42
Top blocked:
- dit.whatsapp.net — 351 blocked of 351
- g2.gumgum.com — 147 blocked of 147
- analytics.google.com — 142 blocked of 142
- iad-usadmm.dotomi.com — 106 blocked of 106
- sjc-usadmm.dotomi.com — 98 blocked of 98
- vast.doubleverify.com — 49 blocked of 49
- cdn.doubleverify.com — 48 blocked of 48
- choices.truste.com — 42 blocked of 42
- unagi.amazon.com — 38 blocked of 38
- unagi-na.amazon.com — 38 blocked of 38
### Mac (192.168.68.111)
Location: Hallway; MAC: 0E-A4-E4-20-5C-1C; mapping: historical_snapshot.
Queries: 6,656; blocked: 638; block rate: 9.59%; unique domains: 326.
Top visited (not blocked):
- ssl.gstatic.com — 276
- www.google.com — 243
- outlook.cloud.microsoft — 218
- lb._dns-sd._udp.0.68.168.192.in-addr.arpa — 197
- chat.google.com — 170
- www.apple.com — 169
- optimizationguide-pa.googleapis.com — 160
- ai.zoom.us — 138
- 111.68.168.192.in-addr.arpa — 129
- api.apple-cloudkit.fe2.apple-dns.net — 126
Top blocked:
- dit.whatsapp.net — 374 blocked of 374
- word-telemetry.officeapps.live.com — 140 blocked of 140
- track.capitaloneshopping.com — 32 blocked of 32
- bam.nr-data.net — 20 blocked of 34
- analytics.google.com — 20 blocked of 20
- sentry.bga.li — 16 blocked of 16
- partiality.itunes.apple.com — 8 blocked of 8
- cf.iadsdk.apple.com — 8 blocked of 8
- browser-update.org — 6 blocked of 6
- iadsdk.apple.com — 4 blocked of 4
### adolforeynaserver (192.168.68.110)
Location: Office; MAC: 18-60-24-78-DB-E8; mapping: historical_snapshot.
Queries: 6,051; blocked: 224; block rate: 3.70%; unique domains: 44.
Top visited (not blocked):
- chatgpt.com — 2,160
- herdr.dev — 2,112
- media.reynafamily.com — 568
- adolforeynaserver — 304
- acme-v02.api.letsencrypt.org — 198
- ph.n8n.io — 114
- cdn.fwupd.org — 96
- api.github.com — 52
- version.goauthentik.io — 48
- acme-staging-v02.api.letsencrypt.org — 28
Top blocked:
- telemetry.n8n.io — 224 blocked of 224
### espressif (192.168.68.117)
Location: Office; MAC: 14-C1-9F-D0-5C-5C; mapping: multiple_identities_seen.
Queries: 5,650; blocked: 1,303; block rate: 23.06%; unique domains: 1,115.
Top visited (not blocked):
- btlr.sharethrough.com — 96
- time.cloudflare.com — 90
- fastlane.rubiconproject.com — 46
- server.cpmstar.com — 43
- ib.anycast.adnxs.com — 38
- contextual.media.net — 25
- prebid-server-new.rubiconproject.net.akadns.net — 24
- lg3.media.net — 21
- vin.pbs.ovhnextmillmedia.com — 20
- targeting.unrulymedia.com — 20
Top blocked:
- analytics.google.com — 70 blocked of 70
- vast.doubleverify.com — 64 blocked of 64
- id5-sync.com — 63 blocked of 63
- hb-analytics.nextmillmedia.com — 52 blocked of 52
- g2.gumgum.com — 50 blocked of 50
- qsearch-a.akamaihd.net — 48 blocked of 48
- ads.pubmatic.com — 44 blocked of 44
- static.adsafeprotected.com — 43 blocked of 43
- cdn.doubleverify.com — 43 blocked of 43
- ts.amazon-adsystem.com — 31 blocked of 31
### adolforeyna-iMac11-3 (192.168.68.124)
Location: WashMachine; MAC: C8-BC-C8-BB-19-2D; mapping: historical_snapshot.
Queries: 5,305; blocked: 1,083; block rate: 20.41%; unique domains: 41.
Top visited (not blocked):
- lcp.rosettastone.com — 1,993
- connectivity-check.ubuntu.com — 579
- chatgpt.com — 500
- firefox.settings.services.mozilla.com — 162
- push.services.mozilla.com — 144
- filters.adtidy.org — 124
- www.recaptcha.net — 121
- www.gstatic.com — 114
- 1a1inqjh.p.qrcdn.net — 98
- fonts.gstatic.com — 97
Top blocked:
- cdp.cloud.unity3d.com — 831 blocked of 831
- incoming.telemetry.mozilla.org — 252 blocked of 252
### espressif (192.168.68.105)
Location: Hallway; MAC: 14-C1-9F-D1-56-90; mapping: multiple_identities_seen.
Queries: 3,876; blocked: 450; block rate: 11.61%; unique domains: 764.
Top visited (not blocked):
- time.cloudflare.com — 188
- mask.apple-dns.net — 157
- outlook.office365.com — 124
- btlr.sharethrough.com — 50
- www.google.com — 48
- imap.gmail.com — 48
- bag-cdn.itunes-apple.com.akadns.net — 34
- gdmf.apple.com — 30
- atm.outlook.mira.tm.svc.cloud.microsoft — 30
- www.subalert.com — 28
Top blocked:
- g2.gumgum.com — 50 blocked of 50
- analytics.google.com — 49 blocked of 49
- vast.doubleverify.com — 38 blocked of 38
- cdn.doubleverify.com — 29 blocked of 29
- entitlements.jwplayer.com — 27 blocked of 27
- fbs.smoot.apple.com — 22 blocked of 22
- tpt.dotomi.com — 14 blocked of 14
- ad-events.flashtalking.com — 10 blocked of 10
- static.adsafeprotected.com — 9 blocked of 9
- dit.whatsapp.net — 8 blocked of 8
### iPhone (192.168.68.106)
Location: Hallway; MAC: C6-37-18-E7-39-39; mapping: historical_snapshot.
Queries: 3,832; blocked: 731; block rate: 19.08%; unique domains: 529.
Top visited (not blocked):
- ts01-b.csa.cloudsink.net — 161
- mask.apple-dns.net — 128
- mmx-ds.cdn.whatsapp.net — 119
- outlook.office365.com — 112
- www.google.com — 98
- chat.cdn.whatsapp.net — 87
- ts01-b.cloudsink.net — 70
- whatsapp.com — 66
- oauthaccountmanager.googleapis.com — 53
- mdm-na2.mobileiron.com — 42
Top blocked:
- dit.whatsapp.net — 186 blocked of 186
- app-analytics-services.com — 70 blocked of 70
- app-measurement.com — 44 blocked of 44
- www.youtube.com — 40 blocked of 61
- youtubei.googleapis.com — 38 blocked of 60
- cdp.customer.io — 14 blocked of 14
- s.youtube.com — 10 blocked of 17
- firebaselogging-pa.googleapis.com — 10 blocked of 10
- redirector.googlevideo.com — 8 blocked of 26
- rr6---sn-bvvbaxivnuxqjvhj5nu-hp5z.googlevideo.com — 8 blocked of 15
### 50CasitaTv (192.168.68.114)
Location: Casita; MAC: DC-72-23-B1-13-BE; mapping: historical_snapshot.
Queries: 3,623; blocked: 3,295; block rate: 90.95%; unique domains: 18.
Top visited (not blocked):
- nrdp.prod.ftl.netflix.com — 143
- nrdp.push.prod.netflix.com — 97
- api.roku.com — 28
- themes-service.sr.roku.com — 24
- nrdp51-appboot.netflix.com — 17
- mediaservices.cdn-apple.com — 14
- sw-update.cs.roku.com — 1
- longview.sb.roku.com — 1
- lat-services.api.data.roku.com — 1
- hints.voice.roku.com — 1
Top blocked:
- scribe.logs.roku.com — 2,718 blocked of 2,718
- nrdp.logs.netflix.com — 308 blocked of 308
- liberty.logs.roku.com — 192 blocked of 192
- logs.netflix.com — 50 blocked of 50
- cloudservices.roku.com — 24 blocked of 24
- display.ravm.tv — 2 blocked of 2
- identity.ads.roku.com — 1 blocked of 1
### iPhone (192.168.68.121)
Location: Study; MAC: C6-37-18-E7-39-39; mapping: historical_snapshot.
Queries: 2,588; blocked: 215; block rate: 8.31%; unique domains: 416.
Top visited (not blocked):
- mask.apple-dns.net — 160
- ts01-b.csa.cloudsink.net — 112
- ts01-b.cloudsink.net — 86
- outlook.office365.com — 74
- whatsapp.com — 51
- mmx-ds.cdn.whatsapp.net — 51
- mdm-na2.mobileiron.com — 50
- chat.cdn.whatsapp.net — 47
- api.whatsapp.net — 42
- photos.reynafamily.com — 39
Top blocked:
- dit.whatsapp.net — 114 blocked of 114
- app-analytics-services.com — 28 blocked of 28
- fbs.smoot.apple.com — 18 blocked of 18
- app-measurement.com — 13 blocked of 13
- cdp.customer.io — 12 blocked of 12
- graph.instagram.com — 5 blocked of 5
- growth-pa.googleapis.com — 4 blocked of 4
- collector-pxuarm9b04.perimeterx.net — 3 blocked of 3
- analytics.mobile.walmart.com — 3 blocked of 3
- sdk.iad-08.braze.com — 2 blocked of 2
### emiserver (192.168.68.119)
Location: Office; MAC: C8-5A-CF-0A-7A-A7; mapping: historical_snapshot.
Queries: 2,358; blocked: 0; block rate: 0.00%; unique domains: 22.
Top visited (not blocked):
- api.telegram.org — 1,149
- chatgpt.com — 815
- herdr.dev — 192
- cdn.fwupd.org — 90
- version.goauthentik.io — 50
- version.immich.cloud — 24
- api.snapcraft.io — 11
- auth.reynafamily.com — 4
- security.ubuntu.com — 2
- motd.ubuntu.com — 2
Top blocked:
- none
### iPad (192.168.68.129)
Location: Hallway; MAC: A2-10-C6-24-C2-0A; mapping: historical_snapshot.
Queries: 2,284; blocked: 151; block rate: 6.61%; unique domains: 325.
Top visited (not blocked):
- mask.apple-dns.net — 397
- ocsp2.apple.com — 64
- _dns.resolver.arpa — 63
- iphone-ld.apple.com — 52
- configuration.ls.apple.com — 48
- mask.icloud.com — 46
- ocsp2.g.aaplimg.com — 37
- gdmf.apple.com — 36
- bag-cdn.itunes-apple.com.akadns.net — 30
- iphone-ld.g.aaplimg.com — 29
Top blocked:
- fbs.smoot.apple.com — 50 blocked of 50
- app-analytics-services.com — 13 blocked of 13
- youtubei.googleapis.com — 9 blocked of 14
- unagi.amazon.com — 6 blocked of 6
- unagi-na.amazon.com — 6 blocked of 6
- trk.pinterest.com — 6 blocked of 6
- partiality.itunes.apple.com — 6 blocked of 6
- graph.facebook.com — 6 blocked of 6
- cf.iadsdk.apple.com — 6 blocked of 6
- fls-na.amazon.com — 5 blocked of 5
### aeropi5 (192.168.68.126)
Location: Office; MAC: 2C-CF-67-95-2B-F8; mapping: historical_snapshot.
Queries: 2,133; blocked: 0; block rate: 0.00%; unique domains: 13.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,106
- chatgpt.com — 642
- herdr.dev — 194
- cloud.reynafamily.com — 94
- cdn.fwupd.org — 71
- api.snapcraft.io — 15
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- canonical-bos01.cdn.snapcraftcontent.com — 2
- 126.68.168.192.in-addr.arpa — 2
Top blocked:
- none
### aeropi5 (192.168.68.116)
Location: Office; MAC: 2C-CF-67-95-2B-F8; mapping: multiple_identities_seen.
Queries: 2,129; blocked: 0; block rate: 0.00%; unique domains: 13.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,105
- chatgpt.com — 634
- herdr.dev — 185
- cloud.reynafamily.com — 94
- cdn.fwupd.org — 89
- api.snapcraft.io — 11
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- canonical-bos01.cdn.snapcraftcontent.com — 2
- 126.68.168.192.in-addr.arpa — 2
Top blocked:
- none
### 50LivingRoom (192.168.68.100)
Location: Office; MAC: 84-3E-1D-4F-4A-1D; mapping: historical_snapshot.
Queries: 1,680; blocked: 1,621; block rate: 96.49%; unique domains: 12.
Top visited (not blocked):
- api.roku.com — 26
- themes-service.sr.roku.com — 24
- sw-update.cs.roku.com — 2
- mediaservices.cdn-apple.com — 2
- austin.sb.roku.com — 2
- lat-services.api.data.roku.com — 1
- hints.voice.roku.com — 1
- api2.sr.roku.com — 1
Top blocked:
- scribe.logs.roku.com — 1,428 blocked of 1,428
- liberty.logs.roku.com — 190 blocked of 190
- display.ravm.tv — 2 blocked of 2
- identity.ads.roku.com — 1 blocked of 1
### iPad-4 (192.168.68.107)
Location: WashMachine; MAC: DA-77-C3-CE-4D-01; mapping: historical_snapshot.
Queries: 729; blocked: 20; block rate: 2.74%; unique domains: 122.
Top visited (not blocked):
- mask.apple-dns.net — 125
- _dns.resolver.arpa — 51
- mask.icloud.com — 42
- bag.itunes.apple.com — 28
- ocsp2.apple.com — 26
- gdmf.apple.com — 18
- kt-prod.ess.apple.com — 14
- gsp-ssl.ls.apple.com — 14
- ocsp2.g.aaplimg.com — 13
- xp.apple.com — 10
Top blocked:
- partiality.itunes.apple.com — 8 blocked of 8
- cf.iadsdk.apple.com — 8 blocked of 8
- fbs.smoot.apple.com — 2 blocked of 2
- experiments.apple.com — 2 blocked of 2
### localhost (127.0.0.1)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 625; blocked: 0; block rate: 0.00%; unique domains: 36.
Top visited (not blocked):
- 150.68.168.192.in-addr.arpa — 24
- 134.68.168.192.in-addr.arpa — 24
- 129.68.168.192.in-addr.arpa — 24
- 128.68.168.192.in-addr.arpa — 24
- 126.68.168.192.in-addr.arpa — 24
- 125.68.168.192.in-addr.arpa — 24
- 124.68.168.192.in-addr.arpa — 24
- 119.68.168.192.in-addr.arpa — 24
- 116.68.168.192.in-addr.arpa — 24
- 114.68.168.192.in-addr.arpa — 24
Top blocked:
- none
### espressif (192.168.68.131)
Location: Study; MAC: 14-C1-9F-D0-5C-5C; mapping: historical_snapshot.
Queries: 298; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 298
Top blocked:
- none
### espressif (192.168.68.113)
Location: Study; MAC: 14-C1-9F-D0-59-1C; mapping: historical_snapshot.
Queries: 262; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 262
Top blocked:
- none
### Amazon (192.168.68.134)
Location: Office; MAC: A0-D2-B1-A6-EC-BD; mapping: historical_snapshot.
Queries: 175; blocked: 38; block rate: 21.71%; unique domains: 16.
Top visited (not blocked):
- dogvgb9ujhybx.cloudfront.net — 77
- ahu5vu98zzyil.us-east-1.prod.service.minerva.devices.a2z.com — 32
- www.amazon.com — 7
- todo-ta-g7g.amazon.com — 6
- device-messaging-na.amazon.com — 5
- shm.amazon.com — 1
- s3.amazonaws.com — 1
- s3-us-west-1.amazonaws.com — 1
- pins.amazon.com — 1
- kwis-opf-preprod.amazon.com — 1
Top blocked:
- unagi-na.amazon.com — 38 blocked of 38
### Adolfos-iPhone (192.168.68.150)
Location: Office; MAC: 30-35-AD-68-A3-AB; mapping: historical_snapshot.
Queries: 147; blocked: 8; block rate: 5.44%; unique domains: 34.
Top visited (not blocked):
- time-ios.apple.com — 35
- gateway.icloud.com — 15
- gateway.fe2.apple-dns.net — 13
- ocsp.apple.com — 12
- gsp64-ssl.ls.apple.com — 7
- gsp-ssl.ls.apple.com — 7
- p189-keyvalueservice.icloud.com — 4
- iphonesubmissions.apple.com — 4
- gsp10-ssl.apple.com — 4
- bag.itunes.apple.com — 4
Top blocked:
- partiality.itunes.apple.com — 4 blocked of 4
- cf.iadsdk.apple.com — 4 blocked of 4
### MyCloudEX2Ultra (192.168.68.137)
Location: Office; MAC: 00-00-C0-3C-B8-FF; mapping: historical_snapshot.
Queries: 52; blocked: 0; block rate: 0.00%; unique domains: 13.
Top visited (not blocked):
- prod.wdckeystone.com — 8
- prod-proxy.wdckeystone.com — 8
- time.mycloud.com — 6
- google.com — 6
- time.windows.com — 4
- prod-gateway.wdckeystone.com — 4
- config.mycloud.com — 4
- prod-fc14d21a5887149.wdckeystone.com — 2
- prod-cdd1bbf7f41b200.wdckeystone.com — 2
- prod-31cdfc8017b5028.wdckeystone.com — 2
Top blocked:
- none
### E31868152 (192.168.68.128)
Location: Barn; MAC: 80-9F-9B-45-9A-FF; mapping: historical_snapshot.
Queries: 48; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 48
Top blocked:
- none
### F49758774 (192.168.68.125)
Location: Hallway; MAC: C0-E7-BF-DD-C8-2A; mapping: historical_snapshot.
Queries: 48; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 48
Top blocked:
- none
### cloud.reynafamily.com (172.22.0.1)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 23; blocked: 11; block rate: 47.83%; unique domains: 8.
Top visited (not blocked):
- example.com — 5
Top blocked:
- 9gag.com — 4 blocked of 4
- youtube.com — 2 blocked of 5
- instagram.com — 1 blocked of 3
- facebook.com — 1 blocked of 3
- www.youtube.com — 1 blocked of 1
- www.instagram.com — 1 blocked of 1
- www.facebook.com — 1 blocked of 1
### FN-LINK (192.168.68.139)
Location: Barn; MAC: 24-18-C6-B5-4A-DC; mapping: historical_snapshot.
Queries: 3; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- portal-ww.ecouser.net — 3
Top blocked:
- none
### macm1.reynafamily.com (192.168.68.127)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 2; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- gateway.icloud.com — 1
- _dns.resolver.arpa — 1
Top blocked:
- none
### Mac (192.168.68.102)
Location: Office; MAC: 5A-D2-AA-CB-96-08; mapping: historical_snapshot.
Queries: 2; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- local — 1
- _dns.resolver.arpa — 1
Top blocked:
- none
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,579 @@
# Pi-hole DNS usage — 2026-09-07
Window: 2026-09-07T00:00:00-04:00 to 2026-09-08T00:00:00-04:00 (America/New_York)
Generated: 2026-09-08T00:15:48.752637-04:00
Pi-hole: adolforeyna@192.168.68.110 (FTL database, read-only)
Deco mapping source: historical Deco snapshots plus live fallback
Blocked status codes counted: 1=gravity, 4=regex, 5=denylist, 6=external-blocked-ip, 7=external-blocked-null, 8=external-blocked-nxra, 9=gravity-cname, 10=regex-cname, 11=denylist-cname, 18=external-blocked-ede15
## Device summary
| Device | IP | Deco/location | Queries | Blocked | Block rate | Top visited | Top blocked |
|---|---|---|---:|---:|---:|---|---|
| Mac | 192.168.68.112 | Office | 16,351 | 3,711 | 22.70% | `internalfb.com` | `www.internalfb.com` |
| iPhone | 192.168.68.117 | Hallway | 11,707 | 3,688 | 31.50% | `logs.ads.vungle.com` | `ep2.facebook.com` |
| Mac | 192.168.68.111 | Hallway | 11,315 | 1,693 | 14.96% | `ssl.gstatic.com` | `dit.whatsapp.net` |
| Mac | 192.168.68.108 | Hallway | 10,391 | 1,771 | 17.04% | `www.apple.com` | `dit.whatsapp.net` |
| iPhone | 192.168.68.104 | Study | 8,123 | 1,299 | 15.99% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| adolforeynaserver | 192.168.68.110 | Office | 7,340 | 224 | 3.05% | `chatgpt.com` | `telemetry.n8n.io` |
| iPhone | 192.168.68.106 | Hallway | 6,698 | 1,392 | 20.78% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| adolforeyna-iMac11-3 | 192.168.68.124 | WashMachine | 5,191 | 1,080 | 20.81% | `lcp.rosettastone.com` | `cdp.cloud.unity3d.com` |
| 50CasitaTv | 192.168.68.114 | Casita | 3,706 | 3,369 | 90.91% | `nrdp.prod.ftl.netflix.com` | `scribe.logs.roku.com` |
| 50LivingRoom | 192.168.68.100 | Office | 3,035 | 2,975 | 98.02% | `api.roku.com` | `scribe.logs.roku.com` |
| emiserver | 192.168.68.119 | Office | 2,515 | 0 | 0.00% | `api.telegram.org` | `—` |
| aeropi5 | 192.168.68.126 | Office | 2,107 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| aeropi5 | 192.168.68.116 | Office | 2,063 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| iPad | 192.168.68.129 | Hallway | 1,338 | 50 | 3.74% | `mask.apple-dns.net` | `youtubei.googleapis.com` |
| iPhone | 192.168.68.121 | Study | 1,065 | 27 | 2.54% | `mask.apple-dns.net` | `experiments.apple.com` |
| iPad-4 | 192.168.68.107 | WashMachine | 967 | 205 | 21.20% | `mask.apple-dns.net` | `sdk.iad-01.braze.com` |
| localhost | 127.0.0.1 | not mapped | 627 | 0 | 0.00% | `8.8.8.8.in-addr.arpa` | `—` |
| espressif | 192.168.68.105 | Study | 446 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| espressif | 192.168.68.113 | Study | 319 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| Amazon | 192.168.68.134 | Office | 201 | 44 | 21.89% | `dogvgb9ujhybx.cloudfront.net` | `unagi-na.amazon.com` |
| Adolfos-iPhone | 192.168.68.150 | Office | 163 | 8 | 4.91% | `time-ios.apple.com` | `partiality.itunes.apple.com` |
| espressif | 192.168.68.127 | Office | 129 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| MyCloudEX2Ultra | 192.168.68.137 | Office | 50 | 0 | 0.00% | `prod.wdckeystone.com` | `—` |
| E31868152 | 192.168.68.128 | Barn | 48 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| F49758774 | 192.168.68.125 | Hallway | 48 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| Unknown device | 192.168.68.131 | not mapped | 22 | 0 | 0.00% | `podcast.emmint.com` | `—` |
| Mac | 192.168.68.102 | Office | 2 | 0 | 0.00% | `local` | `—` |
| FN-LINK | 192.168.68.139 | Barn | 1 | 0 | 0.00% | `portal-ww.ecouser.net` | `—` |
| Google-Home-Mini | 192.168.68.122 | Office | 1 | 0 | 0.00% | `clients3.google.com` | `—` |
## Per-device detail
### Mac (192.168.68.112)
Location: Office; MAC: 06-79-91-73-6F-6A; mapping: historical_snapshot.
Queries: 16,351; blocked: 3,711; block rate: 22.70%; unique domains: 277.
Top visited (not blocked):
- internalfb.com — 984
- ssl.gstatic.com — 366
- mtalk.google.com — 311
- api.manus.im — 288
- play.google.com — 279
- chat.google.com — 264
- beacons.gcp.gvt2.com — 252
- chat.openai.com — 218
- signaler-pa.clients6.google.com — 213
- prod-dynamite-prod-05-us-signaler-pa.clients6.google.com — 198
Top blocked:
- www.internalfb.com — 1,353 blocked of 3,178
- graph.facebook.com — 835 blocked of 1,836
- graph.prod.facebook.com — 492 blocked of 707
- interngraph.internmc.facebook.com — 276 blocked of 374
- www.facebook.com — 264 blocked of 433
- tokenservice.edge.x2p.facebook.net — 142 blocked of 185
- gateway.internalfb.com — 64 blocked of 97
- fbs.smoot.apple.com — 52 blocked of 52
- time1.facebook.com — 32 blocked of 69
- thrift.edge.x2p.facebook.net — 32 blocked of 56
### iPhone (192.168.68.117)
Location: Hallway; MAC: 62-0F-E1-3A-4C-4B; mapping: multiple_identities_seen.
Queries: 11,707; blocked: 3,688; block rate: 31.50%; unique domains: 1,281.
Top visited (not blocked):
- logs.ads.vungle.com — 225
- impression-east.liftoff.io — 164
- a1838.dscw154.akamai.net — 112
- outlook.office365.com — 90
- xp.g.aaplimg.com — 89
- mmx-ds.cdn.whatsapp.net — 81
- mask.apple-dns.net — 78
- aes.us-east.3px.axp.amazon-adsystem.com — 72
- cdn.liftoff-creatives.io — 71
- fpinit-us-e.edge-itunes-apple.com.akadns.net — 70
Top blocked:
- ep2.facebook.com — 461 blocked of 461
- et-eus.w.inmobi.com — 354 blocked of 354
- firebaselogging-pa.googleapis.com — 329 blocked of 329
- eus-r.w.inmobi.com — 263 blocked of 263
- app-analytics-services.com — 252 blocked of 252
- dit.whatsapp.net — 158 blocked of 158
- unagi-na.amazon.com — 111 blocked of 111
- star.c10r.facebook.com — 108 blocked of 129
- star.fallback.c10r.facebook.com — 108 blocked of 128
- ts.amazon-adsystem.com — 101 blocked of 101
### Mac (192.168.68.111)
Location: Hallway; MAC: 0E-A4-E4-20-5C-1C; mapping: historical_snapshot.
Queries: 11,315; blocked: 1,693; block rate: 14.96%; unique domains: 442.
Top visited (not blocked):
- ssl.gstatic.com — 688
- outlook.cloud.microsoft — 537
- optimizationguide-pa.googleapis.com — 436
- chat.google.com — 418
- signaler-pa.clients6.google.com — 416
- play.google.com — 302
- www.google.com — 292
- c.pub.network — 216
- lb._dns-sd._udp.0.68.168.192.in-addr.arpa — 211
- www.apple.com — 194
Top blocked:
- dit.whatsapp.net — 834 blocked of 834
- word-telemetry.officeapps.live.com — 318 blocked of 318
- bam.nr-data.net — 247 blocked of 256
- track.capitaloneshopping.com — 46 blocked of 46
- unagi.amazon.com — 40 blocked of 40
- sentry.bga.li — 36 blocked of 36
- analytics.google.com — 34 blocked of 34
- www.youtube.com — 22 blocked of 66
- unagi-na.amazon.com — 10 blocked of 10
- rr3---sn-hp57knkl.googlevideo.com — 8 blocked of 8
### Mac (192.168.68.108)
Location: Hallway; MAC: 82-A1-8E-D4-03-7A; mapping: historical_snapshot.
Queries: 10,391; blocked: 1,771; block rate: 17.04%; unique domains: 296.
Top visited (not blocked):
- www.apple.com — 496
- 1.courier-sandbox-push-apple.com.akadns.net — 388
- api.apple-cloudkit.fe2.apple-dns.net — 375
- apple.com — 368
- mmx-ds.cdn.whatsapp.net — 355
- us-sandbox-courier-4.push-apple.com.akadns.net — 328
- chat.openai.com — 322
- chatgpt.com — 314
- cloud.reynafamily.com — 255
- e6858.dsce9.akamaiedge.net — 245
Top blocked:
- dit.whatsapp.net — 1,511 blocked of 1,511
- www.youtube.com — 109 blocked of 124
- slackb.com — 56 blocked of 56
- sentry.bga.li — 16 blocked of 16
- analytics.google.com — 14 blocked of 14
- fbs.smoot.apple.com — 12 blocked of 12
- partiality.itunes.apple.com — 11 blocked of 11
- cf.iadsdk.apple.com — 11 blocked of 11
- ogads-pa.clients6.google.com — 8 blocked of 8
- accounts.youtube.com — 6 blocked of 22
### iPhone (192.168.68.104)
Location: Study; MAC: 62-0F-E1-3A-4C-4B; mapping: historical_snapshot.
Queries: 8,123; blocked: 1,299; block rate: 15.99%; unique domains: 1,286.
Top visited (not blocked):
- mask.apple-dns.net — 183
- outlook.office365.com — 158
- btlr.sharethrough.com — 108
- www.google.com — 74
- bag-cdn.itunes-apple.com.akadns.net — 54
- imap.gmail.com — 53
- ocsp2.apple.com — 46
- mmx-ds.cdn.whatsapp.net — 43
- atm.outlook.mira.tm.svc.cloud.microsoft — 41
- us-east-tlx.3lift.com — 36
Top blocked:
- dit.whatsapp.net — 77 blocked of 77
- cdn.doubleverify.com — 75 blocked of 75
- g2.gumgum.com — 69 blocked of 69
- vast.doubleverify.com — 60 blocked of 60
- choices.truste.com — 47 blocked of 47
- id5-sync.com — 45 blocked of 45
- static.adsafeprotected.com — 34 blocked of 34
- onetag-sys.com — 33 blocked of 33
- hb-analytics.nextmillmedia.com — 31 blocked of 31
- tpt.dotomi.com — 30 blocked of 30
### adolforeynaserver (192.168.68.110)
Location: Office; MAC: 18-60-24-78-DB-E8; mapping: historical_snapshot.
Queries: 7,340; blocked: 224; block rate: 3.05%; unique domains: 44.
Top visited (not blocked):
- chatgpt.com — 3,504
- herdr.dev — 2,080
- media.reynafamily.com — 570
- adolforeynaserver — 300
- acme-v02.api.letsencrypt.org — 184
- ph.n8n.io — 114
- version.goauthentik.io — 48
- api.github.com — 48
- cluster0-shard-00-01.yyalx.mongodb.net — 44
- cluster0-shard-00-02.yyalx.mongodb.net — 40
Top blocked:
- telemetry.n8n.io — 224 blocked of 224
### iPhone (192.168.68.106)
Location: Hallway; MAC: C6-37-18-E7-39-39; mapping: historical_snapshot.
Queries: 6,698; blocked: 1,392; block rate: 20.78%; unique domains: 629.
Top visited (not blocked):
- mask.apple-dns.net — 278
- ts01-b.csa.cloudsink.net — 260
- ts01-b.cloudsink.net — 158
- outlook.office365.com — 158
- mmx-ds.cdn.whatsapp.net — 150
- chat.cdn.whatsapp.net — 128
- www.google.com — 99
- mdm-na2.mobileiron.com — 96
- oauthaccountmanager.googleapis.com — 93
- ocsp2.apple.com — 66
Top blocked:
- dit.whatsapp.net — 267 blocked of 267
- app-analytics-services.com — 93 blocked of 93
- app-measurement.com — 43 blocked of 43
- youtubei.googleapis.com — 37 blocked of 73
- cdp.customer.io — 24 blocked of 24
- www.youtube.com — 20 blocked of 114
- fbs.smoot.apple.com — 20 blocked of 20
- rr7---sn-bvvbaxivnuxqjvhj5nu-hp5z.googlevideo.com — 15 blocked of 25
- rr10---sn-bvvbaxivnuxqjvhj5nu-hp5z.googlevideo.com — 15 blocked of 25
- rr9---sn-bvvbaxivnuxqjvhj5nu-hp56.googlevideo.com — 15 blocked of 23
### adolforeyna-iMac11-3 (192.168.68.124)
Location: WashMachine; MAC: C8-BC-C8-BB-19-2D; mapping: historical_snapshot.
Queries: 5,191; blocked: 1,080; block rate: 20.81%; unique domains: 41.
Top visited (not blocked):
- lcp.rosettastone.com — 1,968
- connectivity-check.ubuntu.com — 581
- chatgpt.com — 516
- push.services.mozilla.com — 144
- firefox.settings.services.mozilla.com — 131
- filters.adtidy.org — 120
- www.recaptcha.net — 119
- www.gstatic.com — 117
- fonts.gstatic.com — 99
- merino.services.mozilla.com — 97
Top blocked:
- cdp.cloud.unity3d.com — 828 blocked of 828
- incoming.telemetry.mozilla.org — 252 blocked of 252
### 50CasitaTv (192.168.68.114)
Location: Casita; MAC: DC-72-23-B1-13-BE; mapping: historical_snapshot.
Queries: 3,706; blocked: 3,369; block rate: 90.91%; unique domains: 18.
Top visited (not blocked):
- nrdp.prod.ftl.netflix.com — 150
- nrdp.push.prod.netflix.com — 100
- api.roku.com — 27
- themes-service.sr.roku.com — 24
- nrdp51-appboot.netflix.com — 17
- mediaservices.cdn-apple.com — 14
- sw-update.cs.roku.com — 1
- longview.sb.roku.com — 1
- lat-services.api.data.roku.com — 1
- hints.voice.roku.com — 1
Top blocked:
- scribe.logs.roku.com — 2,700 blocked of 2,700
- nrdp.logs.netflix.com — 328 blocked of 328
- liberty.logs.roku.com — 192 blocked of 192
- logs.netflix.com — 122 blocked of 122
- cloudservices.roku.com — 24 blocked of 24
- display.ravm.tv — 2 blocked of 2
- identity.ads.roku.com — 1 blocked of 1
### 50LivingRoom (192.168.68.100)
Location: Office; MAC: 84-3E-1D-4F-4A-1D; mapping: historical_snapshot.
Queries: 3,035; blocked: 2,975; block rate: 98.02%; unique domains: 15.
Top visited (not blocked):
- api.roku.com — 25
- themes-service.sr.roku.com — 24
- mediaservices.cdn-apple.com — 2
- configsvc.cs.roku.com — 2
- tis.cti.roku.com — 1
- sw-update.cs.roku.com — 1
- lat-services.api.data.roku.com — 1
- hints.voice.roku.com — 1
- austin.sb.roku.com — 1
- api2.sr.roku.com — 1
Top blocked:
- scribe.logs.roku.com — 2,782 blocked of 2,782
- liberty.logs.roku.com — 190 blocked of 190
- display.ravm.tv — 2 blocked of 2
- identity.ads.roku.com — 1 blocked of 1
### emiserver (192.168.68.119)
Location: Office; MAC: C8-5A-CF-0A-7A-A7; mapping: historical_snapshot.
Queries: 2,515; blocked: 0; block rate: 0.00%; unique domains: 28.
Top visited (not blocked):
- api.telegram.org — 1,066
- chatgpt.com — 878
- herdr.dev — 192
- ec2-89-192-235-234.compute-1.amazonaws.com — 56
- version.goauthentik.io — 48
- cluster0-shard-00-01.yyalx.mongodb.net — 42
- ec2-89-192-235-227.compute-1.amazonaws.com — 39
- ec2-89-192-235-218.compute-1.amazonaws.com — 38
- cluster0-shard-00-02.yyalx.mongodb.net — 30
- cluster0-shard-00-00.yyalx.mongodb.net — 26
Top blocked:
- none
### aeropi5 (192.168.68.126)
Location: Office; MAC: 2C-CF-67-95-2B-F8; mapping: historical_snapshot.
Queries: 2,107; blocked: 0; block rate: 0.00%; unique domains: 14.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,150
- chatgpt.com — 599
- herdr.dev — 204
- cloud.reynafamily.com — 94
- cdn.fwupd.org — 34
- api.snapcraft.io — 12
- git.reynafamily.com — 4
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- 126.68.168.192.in-addr.arpa — 2
Top blocked:
- none
### aeropi5 (192.168.68.116)
Location: Office; MAC: 2C-CF-67-95-2B-F9; mapping: multiple_identities_seen.
Queries: 2,063; blocked: 0; block rate: 0.00%; unique domains: 13.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,147
- chatgpt.com — 584
- herdr.dev — 191
- cloud.reynafamily.com — 94
- cdn.fwupd.org — 22
- api.snapcraft.io — 12
- git.reynafamily.com — 4
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- 126.68.168.192.in-addr.arpa — 2
Top blocked:
- none
### iPad (192.168.68.129)
Location: Hallway; MAC: A2-10-C6-24-C2-0A; mapping: historical_snapshot.
Queries: 1,338; blocked: 50; block rate: 3.74%; unique domains: 226.
Top visited (not blocked):
- mask.apple-dns.net — 262
- _dns.resolver.arpa — 57
- iphone-ld.apple.com — 54
- ocsp2.apple.com — 44
- mask.icloud.com — 44
- iphone-ld.g.aaplimg.com — 42
- ocsp2.g.aaplimg.com — 27
- bag.itunes.apple.com — 20
- kt-prod.ess.apple.com — 18
- gsp-ssl.ls.apple.com — 18
Top blocked:
- youtubei.googleapis.com — 8 blocked of 14
- fbs.smoot.apple.com — 8 blocked of 8
- partiality.itunes.apple.com — 7 blocked of 7
- cf.iadsdk.apple.com — 7 blocked of 7
- redirector.googlevideo.com — 4 blocked of 8
- app-analytics-services.com — 4 blocked of 4
- rr4---sn-bvvbaxivnuxqjvhj5nu-hp5e.googlevideo.com — 3 blocked of 5
- trk.pinterest.com — 2 blocked of 2
- experiments.apple.com — 2 blocked of 2
- collector-pxhyx10rg3.perimeterx.net — 2 blocked of 2
### iPhone (192.168.68.121)
Location: Study; MAC: A6-B0-E1-AF-2F-75; mapping: historical_snapshot.
Queries: 1,065; blocked: 27; block rate: 2.54%; unique domains: 255.
Top visited (not blocked):
- mask.apple-dns.net — 70
- _dns.resolver.arpa — 34
- www.subalert.com — 32
- iphone-ld.apple.com — 30
- mask.icloud.com — 28
- ocsp2.apple.com — 24
- subalert.com — 22
- ocsp2.g.aaplimg.com — 20
- bag.itunes.apple.com — 18
- h3.apis.apple.map.fastly.net — 16
Top blocked:
- experiments.apple.com — 11 blocked of 11
- partiality.itunes.apple.com — 6 blocked of 6
- cf.iadsdk.apple.com — 6 blocked of 6
- iadsdk.apple.com — 2 blocked of 2
- fbs.smoot.apple.com — 2 blocked of 2
### iPad-4 (192.168.68.107)
Location: WashMachine; MAC: DA-77-C3-CE-4D-01; mapping: historical_snapshot.
Queries: 967; blocked: 205; block rate: 21.20%; unique domains: 156.
Top visited (not blocked):
- mask.apple-dns.net — 107
- _dns.resolver.arpa — 53
- mask.icloud.com — 40
- ocsp2.apple.com — 28
- bag.itunes.apple.com — 24
- m.sni.global.fastly.net — 19
- gsp-ssl.ls.apple.com — 18
- ocsp2.g.aaplimg.com — 16
- init-p01md.apple.com — 14
- pancake.apple.com — 12
Top blocked:
- sdk.iad-01.braze.com — 157 blocked of 157
- app-measurement.com — 24 blocked of 24
- partiality.itunes.apple.com — 7 blocked of 7
- cf.iadsdk.apple.com — 7 blocked of 7
- graph.facebook.com — 2 blocked of 2
- firebaselogging-pa.googleapis.com — 2 blocked of 2
- fbs.smoot.apple.com — 2 blocked of 2
- experiments.apple.com — 2 blocked of 2
- banner.youversionapi.com — 2 blocked of 2
### localhost (127.0.0.1)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 627; blocked: 0; block rate: 0.00%; unique domains: 33.
Top visited (not blocked):
- 8.8.8.8.in-addr.arpa — 24
- 150.68.168.192.in-addr.arpa — 24
- 134.68.168.192.in-addr.arpa — 24
- 129.68.168.192.in-addr.arpa — 24
- 128.68.168.192.in-addr.arpa — 24
- 126.68.168.192.in-addr.arpa — 24
- 125.68.168.192.in-addr.arpa — 24
- 124.68.168.192.in-addr.arpa — 24
- 119.68.168.192.in-addr.arpa — 24
- 116.68.168.192.in-addr.arpa — 24
Top blocked:
- none
### espressif (192.168.68.105)
Location: Study; MAC: 14-C1-9F-D1-56-90; mapping: historical_snapshot.
Queries: 446; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 446
Top blocked:
- none
### espressif (192.168.68.113)
Location: Study; MAC: 14-C1-9F-D0-59-1C; mapping: historical_snapshot.
Queries: 319; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 319
Top blocked:
- none
### Amazon (192.168.68.134)
Location: Office; MAC: A0-D2-B1-A6-EC-BD; mapping: historical_snapshot.
Queries: 201; blocked: 44; block rate: 21.89%; unique domains: 8.
Top visited (not blocked):
- dogvgb9ujhybx.cloudfront.net — 89
- ahu5vu98zzyil.us-east-1.prod.service.minerva.devices.a2z.com — 52
- www.amazon.com — 7
- m.media-amazon.com — 4
- todo-ta-g7g.amazon.com — 2
- device-messaging-na.amazon.com — 2
- d18os95hu8sz6h.cloudfront.net — 1
Top blocked:
- unagi-na.amazon.com — 44 blocked of 44
### Adolfos-iPhone (192.168.68.150)
Location: Office; MAC: 30-35-AD-68-A3-AB; mapping: historical_snapshot.
Queries: 163; blocked: 8; block rate: 4.91%; unique domains: 39.
Top visited (not blocked):
- time-ios.apple.com — 36
- gateway.icloud.com — 18
- gateway.fe2.apple-dns.net — 14
- ocsp.apple.com — 11
- gsp64-ssl.ls.apple.com — 8
- gsp-ssl.ls.apple.com — 8
- p189-keyvalueservice.icloud.com — 5
- bag.itunes.apple.com — 5
- xp.apple.com — 4
- metrics.icloud.com — 4
Top blocked:
- partiality.itunes.apple.com — 4 blocked of 4
- cf.iadsdk.apple.com — 4 blocked of 4
### espressif (192.168.68.127)
Location: Office; MAC: 14-C1-9F-D0-5C-5C; mapping: historical_snapshot.
Queries: 129; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 129
Top blocked:
- none
### MyCloudEX2Ultra (192.168.68.137)
Location: Office; MAC: 00-00-C0-3C-B8-FF; mapping: historical_snapshot.
Queries: 50; blocked: 0; block rate: 0.00%; unique domains: 12.
Top visited (not blocked):
- prod.wdckeystone.com — 10
- prod-proxy.wdckeystone.com — 8
- time.windows.com — 4
- time.mycloud.com — 4
- prod-gateway.wdckeystone.com — 4
- prod-7c74fffc718ed01.wdckeystone.com — 4
- google.com — 4
- config.mycloud.com — 4
- prod-701f05f7a9a5fda.wdckeystone.com — 2
- prod-31cdfc8017b5028.wdckeystone.com — 2
Top blocked:
- none
### E31868152 (192.168.68.128)
Location: Barn; MAC: 80-9F-9B-45-9A-FF; mapping: historical_snapshot.
Queries: 48; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 48
Top blocked:
- none
### F49758774 (192.168.68.125)
Location: Hallway; MAC: C0-E7-BF-DD-C8-2A; mapping: historical_snapshot.
Queries: 48; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 48
Top blocked:
- none
### Unknown device (192.168.68.131)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 22; blocked: 0; block rate: 0.00%; unique domains: 13.
Top visited (not blocked):
- podcast.emmint.com — 4
- _dns.resolver.arpa — 3
- init.push.apple.com — 2
- init.itunes.apple.com — 2
- gspe1-ssl.ls.apple.com — 2
- 5-courier2.push.apple.com — 2
- us-se-courier-vs.push-apple.com.akadns.net — 1
- s3.amazonaws.com — 1
- init.push-apple.com.akadns.net — 1
- gateway.icloud.com — 1
Top blocked:
- none
### Mac (192.168.68.102)
Location: Office; MAC: 5A-D2-AA-CB-96-08; mapping: historical_snapshot.
Queries: 2; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- local — 1
- _dns.resolver.arpa — 1
Top blocked:
- none
### FN-LINK (192.168.68.139)
Location: Barn; MAC: 24-18-C6-B5-4A-DC; mapping: historical_snapshot.
Queries: 1; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- portal-ww.ecouser.net — 1
Top blocked:
- none
### Google-Home-Mini (192.168.68.122)
Location: Office; MAC: 48-D6-D5-7B-91-C5; mapping: historical_snapshot.
Queries: 1; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- clients3.google.com — 1
Top blocked:
- none
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,649 @@
# Pi-hole DNS usage — 2026-09-08
Window: 2026-09-08T00:00:00-04:00 to 2026-09-09T00:00:00-04:00 (America/New_York)
Generated: 2026-09-09T00:15:32.158174-04:00
Pi-hole: adolforeyna@192.168.68.110 (FTL database, read-only)
Deco mapping source: historical Deco snapshots plus live fallback
Blocked status codes counted: 1=gravity, 4=regex, 5=denylist, 6=external-blocked-ip, 7=external-blocked-null, 8=external-blocked-nxra, 9=gravity-cname, 10=regex-cname, 11=denylist-cname, 18=external-blocked-ede15
## Device summary
| Device | IP | Deco/location | Queries | Blocked | Block rate | Top visited | Top blocked |
|---|---|---|---:|---:|---:|---|---|
| Mac | 192.168.68.112 | Office | 43,302 | 3,843 | 8.87% | `internalfb.com` | `www.internalfb.com` |
| Mac | 192.168.68.111 | Hallway | 20,048 | 2,230 | 11.12% | `ssl.gstatic.com` | `dit.whatsapp.net` |
| iPhone | 192.168.68.104 | Hallway | 13,967 | 3,187 | 22.82% | `outlook.office365.com` | `dit.whatsapp.net` |
| Mac | 192.168.68.108 | Hallway | 12,461 | 1,480 | 11.88% | `whatsapp.com` | `dit.whatsapp.net` |
| iPhone | 192.168.68.106 | Hallway | 11,005 | 2,025 | 18.40% | `ts01-b.csa.cloudsink.net` | `dit.whatsapp.net` |
| adolforeynaserver | 192.168.68.110 | Office | 6,656 | 208 | 3.12% | `chatgpt.com` | `telemetry.n8n.io` |
| adolforeyna-iMac11-3 | 192.168.68.124 | Study | 5,181 | 941 | 18.16% | `lcp.rosettastone.com` | `cdp.cloud.unity3d.com` |
| Alicia-2022-2 | 192.168.68.117 | Hallway | 4,124 | 531 | 12.88% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| 50CasitaTv | 192.168.68.114 | Casita | 2,393 | 2,177 | 90.97% | `nrdp.prod.ftl.netflix.com` | `scribe.logs.roku.com` |
| emiserver | 192.168.68.119 | Office | 2,094 | 0 | 0.00% | `api.telegram.org` | `—` |
| aeropi5 | 192.168.68.126 | Office | 2,051 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| aeropi5 | 192.168.68.116 | Office | 2,020 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| iPad | 192.168.68.129 | Study | 1,742 | 62 | 3.56% | `mask.apple-dns.net` | `fbs.smoot.apple.com` |
| 50LivingRoom | 192.168.68.100 | Office | 1,647 | 1,576 | 95.69% | `api.roku.com` | `scribe.logs.roku.com` |
| iPhone | 192.168.68.121 | Study | 1,058 | 38 | 3.59% | `mask.apple-dns.net` | `experiments.apple.com` |
| iPad-4 | 192.168.68.107 | WashMachine | 778 | 4 | 0.51% | `mask.apple-dns.net` | `fbs.smoot.apple.com` |
| localhost | 127.0.0.1 | not mapped | 694 | 0 | 0.00% | `8.8.8.8.in-addr.arpa` | `—` |
| espressif | 192.168.68.113 | Study | 419 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| espressif | 192.168.68.105 | Study | 298 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| espressif | 192.168.68.127 | Office | 295 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| Adolfos-iPhone | 192.168.68.150 | Office | 167 | 8 | 4.79% | `time-ios.apple.com` | `partiality.itunes.apple.com` |
| Amazon | 192.168.68.134 | Office | 157 | 36 | 22.93% | `dogvgb9ujhybx.cloudfront.net` | `unagi-na.amazon.com` |
| MyCloudEX2Ultra | 192.168.68.137 | Office | 50 | 0 | 0.00% | `prod.wdckeystone.com` | `—` |
| iot_device | 192.168.68.135 | Office | 50 | 0 | 0.00% | `api.bambulab.com` | `—` |
| E31868152 | 192.168.68.128 | Barn | 48 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| F49758774 | 192.168.68.125 | Hallway | 48 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| Mac-mini-M4 | 192.168.68.130 | Office | 14 | 0 | 0.00% | `7-courier.push.apple.com` | `—` |
| Blink-Device | 192.168.68.131 | WashMachine | 13 | 0 | 0.00% | `ms-cam-u011.immedia-semi.com` | `—` |
| Mac | 192.168.68.102 | Office | 11 | 0 | 0.00% | `login.mso.msidentity.com` | `—` |
| Adolfo-i16 | 192.168.68.132 | Hallway | 10 | 0 | 0.00% | `eu.tectonic.remarkable.com` | `—` |
| phone | 192.168.68.136 | Office | 4 | 0 | 0.00% | `3-courier2.push.apple.com` | `—` |
| Google-Home-Mini | 192.168.68.120 | Hallway | 4 | 0 | 0.00% | `clients4.google.com` | `—` |
| Unknown device | 192.168.68.133 | not mapped | 3 | 0 | 0.00% | `ms-cam-u011.immedia-semi.com` | `—` |
| FN-LINK | 192.168.68.139 | Barn | 1 | 0 | 0.00% | `portal-ww.ecouser.net` | `—` |
| Google-Home-Mini | 192.168.68.122 | Office | 1 | 0 | 0.00% | `clients3.google.com` | `—` |
## Per-device detail
### Mac (192.168.68.112)
Location: Office; MAC: 06-79-91-73-6F-6A; mapping: historical_snapshot.
Queries: 43,302; blocked: 3,843; block rate: 8.87%; unique domains: 553.
Top visited (not blocked):
- internalfb.com — 3,378
- ssl.gstatic.com — 1,329
- play.google.com — 1,030
- api.manus.im — 967
- beacons.gcp.gvt2.com — 831
- chat.google.com — 723
- chromereporting-pa.googleapis.com — 600
- signaler-pa.clients6.google.com — 537
- peoplestack-pa.clients6.google.com — 513
- waa-pa.clients6.google.com — 504
Top blocked:
- www.internalfb.com — 1,159 blocked of 9,608
- graph.facebook.com — 682 blocked of 4,833
- graph.prod.facebook.com — 418 blocked of 782
- interngraph.internmc.facebook.com — 210 blocked of 496
- www.facebook.com — 147 blocked of 392
- us-v20.events.data.microsoft.com — 142 blocked of 146
- tokenservice.edge.x2p.facebook.net — 140 blocked of 182
- gateway.internalfb.com — 128 blocked of 360
- csp.withgoogle.com — 99 blocked of 99
- mobile.pipe.aria.microsoft.com — 86 blocked of 90
### Mac (192.168.68.111)
Location: Hallway; MAC: 0E-A4-E4-20-5C-1C; mapping: historical_snapshot.
Queries: 20,048; blocked: 2,230; block rate: 11.12%; unique domains: 592.
Top visited (not blocked):
- ssl.gstatic.com — 1,118
- lb._dns-sd._udp.0.68.168.192.in-addr.arpa — 982
- outlook.cloud.microsoft — 824
- optimizationguide-pa.googleapis.com — 733
- www.google.com — 677
- chat.google.com — 650
- e6858.dsce9.akamaiedge.net — 597
- usc-word-edit.officeapps.live.com — 534
- play.google.com — 460
- www.apple.com — 407
Top blocked:
- dit.whatsapp.net — 1,047 blocked of 1,051
- word-telemetry.officeapps.live.com — 644 blocked of 646
- bam.nr-data.net — 169 blocked of 193
- excel-telemetry.officeapps.live.com — 82 blocked of 82
- track.capitaloneshopping.com — 56 blocked of 56
- sentry.bga.li — 48 blocked of 48
- ogads-pa.clients6.google.com — 34 blocked of 34
- analytics.google.com — 28 blocked of 28
- ups.analytics.yahoo.com — 12 blocked of 12
- id5-sync.com — 10 blocked of 10
### iPhone (192.168.68.104)
Location: Hallway; MAC: 62-0F-E1-3A-4C-4B; mapping: historical_snapshot.
Queries: 13,967; blocked: 3,187; block rate: 22.82%; unique domains: 1,757.
Top visited (not blocked):
- outlook.office365.com — 216
- mask.apple-dns.net — 207
- mmx-ds.cdn.whatsapp.net — 177
- btlr.sharethrough.com — 116
- www.google.com — 93
- get-bx.g.aaplimg.com — 67
- atm.outlook.mira.tm.svc.cloud.microsoft — 62
- sync.srv.stackadapt.com — 59
- ocsp2.apple.com — 56
- match.sharethrough.com — 54
Top blocked:
- dit.whatsapp.net — 426 blocked of 426
- choices.truste.com — 119 blocked of 119
- cdn.doubleverify.com — 118 blocked of 118
- g2.gumgum.com — 86 blocked of 86
- qvdt3feo.com — 82 blocked of 82
- static.adsafeprotected.com — 79 blocked of 79
- unagi-na.amazon.com — 78 blocked of 78
- id5-sync.com — 72 blocked of 72
- c1.adform.net — 68 blocked of 68
- ups.analytics.yahoo.com — 59 blocked of 59
### Mac (192.168.68.108)
Location: Hallway; MAC: 82-A1-8E-D4-03-7A; mapping: historical_snapshot.
Queries: 12,461; blocked: 1,480; block rate: 11.88%; unique domains: 551.
Top visited (not blocked):
- whatsapp.com — 1,048
- mmx-ds.cdn.whatsapp.net — 546
- chat.openai.com — 516
- www.apple.com — 401
- chatgpt.com — 363
- 1.courier-sandbox-push-apple.com.akadns.net — 348
- api.apple-cloudkit.fe2.apple-dns.net — 342
- ab.chatgpt.com — 320
- mask.apple-dns.net — 314
- apple.com — 299
Top blocked:
- dit.whatsapp.net — 1,180 blocked of 1,184
- slackb.com — 109 blocked of 113
- x.com — 37 blocked of 46
- event.bblmw.com — 15 blocked of 15
- ogads-pa.clients6.google.com — 14 blocked of 14
- www.youtube.com — 10 blocked of 44
- partiality.itunes.apple.com — 10 blocked of 10
- cf.iadsdk.apple.com — 10 blocked of 10
- accounts.youtube.com — 8 blocked of 56
- w3-reporting-nel.reddit.com — 8 blocked of 8
### iPhone (192.168.68.106)
Location: Hallway; MAC: C6-37-18-E7-39-39; mapping: historical_snapshot.
Queries: 11,005; blocked: 2,025; block rate: 18.40%; unique domains: 718.
Top visited (not blocked):
- ts01-b.csa.cloudsink.net — 467
- mask.apple-dns.net — 435
- mmx-ds.cdn.whatsapp.net — 381
- outlook.office365.com — 292
- chat.cdn.whatsapp.net — 287
- ts01-b.cloudsink.net — 234
- www.google.com — 215
- whatsapp.com — 188
- oauthaccountmanager.googleapis.com — 162
- mdm-na2.mobileiron.com — 142
Top blocked:
- dit.whatsapp.net — 644 blocked of 648
- news-app-events.apple.com — 276 blocked of 276
- stocks-analytics-events.apple.com — 257 blocked of 259
- app-analytics-services.com — 111 blocked of 112
- app-measurement.com — 46 blocked of 47
- unagi-na.amazon.com — 46 blocked of 46
- unagi.amazon.com — 44 blocked of 44
- fls-na.amazon.com — 36 blocked of 36
- sdk.iad-05.braze.com — 32 blocked of 32
- cdp.customer.io — 26 blocked of 26
### adolforeynaserver (192.168.68.110)
Location: Office; MAC: 18-60-24-78-DB-E8; mapping: historical_snapshot.
Queries: 6,656; blocked: 208; block rate: 3.12%; unique domains: 25.
Top visited (not blocked):
- chatgpt.com — 3,040
- herdr.dev — 2,016
- media.reynafamily.com — 570
- adolforeynaserver — 304
- acme-v02.api.letsencrypt.org — 168
- ph.n8n.io — 114
- version.goauthentik.io — 48
- api.github.com — 48
- auth.openai.com — 32
- version.immich.cloud — 24
Top blocked:
- telemetry.n8n.io — 208 blocked of 212
### adolforeyna-iMac11-3 (192.168.68.124)
Location: Study; MAC: C8-BC-C8-BB-19-2D; mapping: historical_snapshot.
Queries: 5,181; blocked: 941; block rate: 18.16%; unique domains: 52.
Top visited (not blocked):
- lcp.rosettastone.com — 1,939
- chatgpt.com — 647
- connectivity-check.ubuntu.com — 578
- push.services.mozilla.com — 146
- firefox.settings.services.mozilla.com — 129
- filters.adtidy.org — 120
- www.recaptcha.net — 116
- www.gstatic.com — 114
- merino.services.mozilla.com — 99
- 1a1inqjh.p.qrcdn.net — 96
Top blocked:
- cdp.cloud.unity3d.com — 813 blocked of 822
- incoming.telemetry.mozilla.org — 128 blocked of 128
### Alicia-2022-2 (192.168.68.117)
Location: Hallway; MAC: 24-FD-FA-03-53-0C; mapping: multiple_identities_seen.
Queries: 4,124; blocked: 531; block rate: 12.88%; unique domains: 824.
Top visited (not blocked):
- mask.apple-dns.net — 162
- outlook.office365.com — 104
- imap.gmail.com — 48
- www.google.com — 46
- mmx-ds.cdn.whatsapp.net — 43
- btlr.sharethrough.com — 34
- get-bx.g.aaplimg.com — 33
- ocsp2.apple.com — 32
- bag-cdn.itunes-apple.com.akadns.net — 32
- ocsp2.g.aaplimg.com — 31
Top blocked:
- dit.whatsapp.net — 79 blocked of 79
- unagi-na.amazon.com — 40 blocked of 40
- unagi.amazon.com — 31 blocked of 31
- g2.gumgum.com — 30 blocked of 30
- fls-na.amazon.com — 27 blocked of 27
- ep2.facebook.com — 25 blocked of 25
- events.devcycle.com — 24 blocked of 24
- fbs.smoot.apple.com — 22 blocked of 22
- cdn.doubleverify.com — 22 blocked of 22
- choices.truste.com — 21 blocked of 21
### 50CasitaTv (192.168.68.114)
Location: Casita; MAC: DC-72-23-B1-13-BE; mapping: historical_snapshot.
Queries: 2,393; blocked: 2,177; block rate: 90.97%; unique domains: 27.
Top visited (not blocked):
- nrdp.prod.ftl.netflix.com — 68
- nrdp.push.prod.netflix.com — 55
- api.roku.com — 29
- themes-service.sr.roku.com — 24
- mediaservices.cdn-apple.com — 14
- occ-0-1413-1412.1.nflxso.net — 3
- nrdp51-appboot.netflix.com — 3
- api2.sr.roku.com — 2
- tis.cti.roku.com — 1
- sw-update.cs.roku.com — 1
Top blocked:
- scribe.logs.roku.com — 1,736 blocked of 1,740
- liberty.logs.roku.com — 208 blocked of 210
- nrdp.logs.netflix.com — 161 blocked of 161
- logs.netflix.com — 44 blocked of 44
- cloudservices.roku.com — 25 blocked of 25
- identity.ads.roku.com — 2 blocked of 2
- display.ravm.tv — 1 blocked of 1
### emiserver (192.168.68.119)
Location: Office; MAC: C8-5A-CF-0A-7A-A7; mapping: historical_snapshot.
Queries: 2,094; blocked: 0; block rate: 0.00%; unique domains: 24.
Top visited (not blocked):
- api.telegram.org — 1,097
- chatgpt.com — 692
- herdr.dev — 175
- version.goauthentik.io — 50
- version.immich.cloud — 24
- api.snapcraft.io — 12
- us.i.posthog.com — 6
- cdn.fwupd.org — 6
- sdmntprcentralus.oaiusercontent.com — 4
- motd.ubuntu.com — 4
Top blocked:
- none
### aeropi5 (192.168.68.126)
Location: Office; MAC: 2C-CF-67-95-2B-F8; mapping: historical_snapshot.
Queries: 2,051; blocked: 0; block rate: 0.00%; unique domains: 16.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,136
- chatgpt.com — 603
- herdr.dev — 190
- cloud.reynafamily.com — 90
- api.snapcraft.io — 11
- cdn.fwupd.org — 5
- sdmntprcentralus.oaiusercontent.com — 2
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- motd.ubuntu.com — 2
Top blocked:
- none
### aeropi5 (192.168.68.116)
Location: Office; MAC: 2C-CF-67-95-2B-F9; mapping: multiple_identities_seen.
Queries: 2,020; blocked: 0; block rate: 0.00%; unique domains: 16.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,128
- chatgpt.com — 579
- herdr.dev — 190
- cloud.reynafamily.com — 90
- api.snapcraft.io — 11
- cdn.fwupd.org — 6
- sdmntprcentralus.oaiusercontent.com — 2
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- motd.ubuntu.com — 2
Top blocked:
- none
### iPad (192.168.68.129)
Location: Study; MAC: A2-10-C6-24-C2-0A; mapping: historical_snapshot.
Queries: 1,742; blocked: 62; block rate: 3.56%; unique domains: 194.
Top visited (not blocked):
- mask.apple-dns.net — 391
- _dns.resolver.arpa — 62
- ocsp2.apple.com — 56
- iphone-ld.apple.com — 56
- configuration.ls.apple.com — 56
- get-bx.g.aaplimg.com — 52
- mask.icloud.com — 50
- gsp-ssl.ls.apple.com — 50
- iphone-ld.g.aaplimg.com — 47
- ocsp2.g.aaplimg.com — 38
Top blocked:
- fbs.smoot.apple.com — 26 blocked of 28
- youtubei.googleapis.com — 6 blocked of 11
- partiality.itunes.apple.com — 6 blocked of 6
- cf.iadsdk.apple.com — 6 blocked of 6
- app-analytics-services.com — 4 blocked of 4
- app-measurement.com — 3 blocked of 3
- s.youtube.com — 2 blocked of 6
- trk.pinterest.com — 2 blocked of 2
- experiments.apple.com — 2 blocked of 2
- dit.whatsapp.net — 2 blocked of 2
### 50LivingRoom (192.168.68.100)
Location: Office; MAC: 84-3E-1D-4F-4A-1D; mapping: historical_snapshot.
Queries: 1,647; blocked: 1,576; block rate: 95.69%; unique domains: 14.
Top visited (not blocked):
- api.roku.com — 26
- themes-service.sr.roku.com — 24
- sw-update.cs.roku.com — 2
- mediaservices.cdn-apple.com — 2
- austin.sb.roku.com — 2
- lat-services.api.data.roku.com — 1
- hints.voice.roku.com — 1
- configsvc.cs.roku.com — 1
- api2.sr.roku.com — 1
- api-g2.rokutime.com — 1
Top blocked:
- scribe.logs.roku.com — 1,370 blocked of 1,374
- liberty.logs.roku.com — 202 blocked of 208
- identity.ads.roku.com — 2 blocked of 2
- display.ravm.tv — 2 blocked of 2
### iPhone (192.168.68.121)
Location: Study; MAC: A6-B0-E1-AF-2F-75; mapping: historical_snapshot.
Queries: 1,058; blocked: 38; block rate: 3.59%; unique domains: 154.
Top visited (not blocked):
- mask.apple-dns.net — 101
- iphone-ld.apple.com — 56
- _dns.resolver.arpa — 53
- www.subalert.com — 50
- ocsp2.apple.com — 44
- mask.icloud.com — 44
- iphone-ld.g.aaplimg.com — 42
- subalert.com — 40
- ocsp2.g.aaplimg.com — 26
- bag.itunes.apple.com — 22
Top blocked:
- experiments.apple.com — 26 blocked of 26
- partiality.itunes.apple.com — 5 blocked of 7
- cf.iadsdk.apple.com — 5 blocked of 7
- fbs.smoot.apple.com — 2 blocked of 2
### iPad-4 (192.168.68.107)
Location: WashMachine; MAC: DA-77-C3-CE-4D-01; mapping: historical_snapshot.
Queries: 778; blocked: 4; block rate: 0.51%; unique domains: 132.
Top visited (not blocked):
- mask.apple-dns.net — 147
- _dns.resolver.arpa — 55
- mask.icloud.com — 46
- ocsp2.apple.com — 34
- ocsp2.g.aaplimg.com — 22
- bag.itunes.apple.com — 20
- gsp-ssl.ls.apple.com — 18
- bag-cdn.itunes-apple.com.akadns.net — 18
- init-p01md.apple.com — 16
- gdmf.apple.com — 16
Top blocked:
- fbs.smoot.apple.com — 2 blocked of 2
- experiments.apple.com — 2 blocked of 2
### localhost (127.0.0.1)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 694; blocked: 0; block rate: 0.00%; unique domains: 40.
Top visited (not blocked):
- 8.8.8.8.in-addr.arpa — 24
- 4.4.8.8.in-addr.arpa — 24
- 150.68.168.192.in-addr.arpa — 24
- 134.68.168.192.in-addr.arpa — 24
- 129.68.168.192.in-addr.arpa — 24
- 128.68.168.192.in-addr.arpa — 24
- 127.68.168.192.in-addr.arpa — 24
- 126.68.168.192.in-addr.arpa — 24
- 125.68.168.192.in-addr.arpa — 24
- 124.68.168.192.in-addr.arpa — 24
Top blocked:
- none
### espressif (192.168.68.113)
Location: Study; MAC: 14-C1-9F-D0-59-1C; mapping: historical_snapshot.
Queries: 419; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- time.cloudflare.com — 418
- cdn.tactilityproject.org — 1
Top blocked:
- none
### espressif (192.168.68.105)
Location: Study; MAC: 14-C1-9F-D1-56-90; mapping: historical_snapshot.
Queries: 298; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- time.cloudflare.com — 297
- cdn.tactilityproject.org — 1
Top blocked:
- none
### espressif (192.168.68.127)
Location: Office; MAC: 14-C1-9F-D0-5C-5C; mapping: historical_snapshot.
Queries: 295; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 295
Top blocked:
- none
### Adolfos-iPhone (192.168.68.150)
Location: Office; MAC: 30-35-AD-68-A3-AB; mapping: historical_snapshot.
Queries: 167; blocked: 8; block rate: 4.79%; unique domains: 42.
Top visited (not blocked):
- time-ios.apple.com — 35
- gateway.icloud.com — 18
- gateway.fe2.apple-dns.net — 13
- ocsp.apple.com — 12
- gsp64-ssl.ls.apple.com — 8
- gsp-ssl.ls.apple.com — 8
- init.itunes.apple.com — 6
- p189-keyvalueservice.icloud.com — 5
- xp.apple.com — 4
- iphonesubmissions.apple.com — 4
Top blocked:
- partiality.itunes.apple.com — 4 blocked of 4
- cf.iadsdk.apple.com — 4 blocked of 4
### Amazon (192.168.68.134)
Location: Office; MAC: A0-D2-B1-A6-EC-BD; mapping: historical_snapshot.
Queries: 157; blocked: 36; block rate: 22.93%; unique domains: 10.
Top visited (not blocked):
- dogvgb9ujhybx.cloudfront.net — 75
- ahu5vu98zzyil.us-east-1.prod.service.minerva.devices.a2z.com — 32
- www.amazon.com — 6
- todo-ta-g7g.amazon.com — 2
- device-messaging-na.amazon.com — 2
- sync.datamate.kindle.amazon.dev — 1
- s3.amazonaws.com — 1
- s3-us-west-1.amazonaws.com — 1
- d18os95hu8sz6h.cloudfront.net — 1
Top blocked:
- unagi-na.amazon.com — 36 blocked of 36
### MyCloudEX2Ultra (192.168.68.137)
Location: Office; MAC: 00-00-C0-3C-B8-FF; mapping: historical_snapshot.
Queries: 50; blocked: 0; block rate: 0.00%; unique domains: 12.
Top visited (not blocked):
- prod.wdckeystone.com — 8
- prod-proxy.wdckeystone.com — 8
- prod-gateway.wdckeystone.com — 6
- time.windows.com — 4
- time.mycloud.com — 4
- prod-31cdfc8017b5028.wdckeystone.com — 4
- google.com — 4
- config.mycloud.com — 4
- prod-cdd1bbf7f41b200.wdckeystone.com — 2
- prod-7c74fffc718ed01.wdckeystone.com — 2
Top blocked:
- none
### iot_device (192.168.68.135)
Location: Office; MAC: A0-85-E3-FB-35-5C; mapping: historical_snapshot.
Queries: 50; blocked: 0; block rate: 0.00%; unique domains: 6.
Top visited (not blocked):
- api.bambulab.com — 32
- time.cloudflare.com — 9
- or-cloud-upload-prod.s3.us-west-2.amazonaws.com — 5
- e.bambulab.com — 2
- www.microsoft.com — 1
- us.mqtt.bambulab.com — 1
Top blocked:
- none
### E31868152 (192.168.68.128)
Location: Barn; MAC: 80-9F-9B-45-9A-FF; mapping: historical_snapshot.
Queries: 48; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 48
Top blocked:
- none
### F49758774 (192.168.68.125)
Location: Hallway; MAC: C0-E7-BF-DD-C8-2A; mapping: historical_snapshot.
Queries: 48; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 48
Top blocked:
- none
### Mac-mini-M4 (192.168.68.130)
Location: Office; MAC: D0-11-E5-73-96-5A; mapping: historical_snapshot.
Queries: 14; blocked: 0; block rate: 0.00%; unique domains: 6.
Top visited (not blocked):
- 7-courier.push.apple.com — 3
- 10-courier.push.apple.com — 3
- 0-courier.push.apple.com — 3
- outlook-ww-acdc-fs.trafficmanager.net — 2
- gateway.icloud.com — 2
- mask.apple-dns.net — 1
Top blocked:
- none
### Blink-Device (192.168.68.131)
Location: WashMachine; MAC: 84-28-59-E8-42-80; mapping: historical_snapshot.
Queries: 13; blocked: 0; block rate: 0.00%; unique domains: 3.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 10
- podcast.emmint.com — 2
- _dns.resolver.arpa — 1
Top blocked:
- none
### Mac (192.168.68.102)
Location: Office; MAC: 5A-D2-AA-CB-96-08; mapping: historical_snapshot.
Queries: 11; blocked: 0; block rate: 0.00%; unique domains: 7.
Top visited (not blocked):
- login.mso.msidentity.com — 3
- outlook-ww-acdc-fs.trafficmanager.net — 2
- 130.68.168.192.in-addr.arpa — 2
- www.tm.a.prd.aadg.akadns.net — 1
- local — 1
- e6858.dsce9.akamaiedge.net — 1
- _dns.resolver.arpa — 1
Top blocked:
- none
### Adolfo-i16 (192.168.68.132)
Location: Hallway; MAC: 24-FD-FA-03-53-0C; mapping: historical_snapshot.
Queries: 10; blocked: 0; block rate: 0.00%; unique domains: 4.
Top visited (not blocked):
- eu.tectonic.remarkable.com — 4
- webapp-prod.cloud.remarkable.engineering — 2
- ping.remarkable.com — 2
- dev.tectonic.remarkable.com — 2
Top blocked:
- none
### phone (192.168.68.136)
Location: Office; MAC: 56-68-92-84-12-EE; mapping: historical_snapshot.
Queries: 4; blocked: 0; block rate: 0.00%; unique domains: 3.
Top visited (not blocked):
- 3-courier2.push.apple.com — 2
- us-se-courier-vs.push-apple.com.akadns.net — 1
- _dns.resolver.arpa — 1
Top blocked:
- none
### Google-Home-Mini (192.168.68.120)
Location: Hallway; MAC: E4-F0-42-2E-E0-4E; mapping: historical_snapshot.
Queries: 4; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- clients4.google.com — 2
- clients3.google.com — 2
Top blocked:
- none
### Unknown device (192.168.68.133)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 3; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 3
Top blocked:
- none
### FN-LINK (192.168.68.139)
Location: Barn; MAC: 24-18-C6-B5-4A-DC; mapping: historical_snapshot.
Queries: 1; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- portal-ww.ecouser.net — 1
Top blocked:
- none
### Google-Home-Mini (192.168.68.122)
Location: Office; MAC: 48-D6-D5-7B-91-C5; mapping: historical_snapshot.
Queries: 1; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- clients3.google.com — 1
Top blocked:
- none
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,735 @@
# Pi-hole DNS usage — 2026-09-09
Window: 2026-09-09T00:00:00-04:00 to 2026-09-10T00:00:00-04:00 (America/New_York)
Generated: 2026-09-10T00:15:18.784752-04:00
Pi-hole: adolforeyna@192.168.68.110 (FTL database, read-only)
Deco mapping source: historical Deco snapshots plus live fallback
Blocked status codes counted: 1=gravity, 4=regex, 5=denylist, 6=external-blocked-ip, 7=external-blocked-null, 8=external-blocked-nxra, 9=gravity-cname, 10=regex-cname, 11=denylist-cname, 18=external-blocked-ede15
## Device summary
| Device | IP | Deco/location | Queries | Blocked | Block rate | Top visited | Top blocked |
|---|---|---|---:|---:|---:|---|---|
| Mac | 192.168.68.112 | Hallway | 46,702 | 3,143 | 6.73% | `internalfb.com` | `www.internalfb.com` |
| Mac | 192.168.68.108 | Hallway | 12,891 | 1,096 | 8.50% | `whatsapp.com` | `dit.whatsapp.net` |
| iPhone | 192.168.68.106 | Hallway | 11,816 | 2,269 | 19.20% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| iPhone | 192.168.68.111 | Hallway | 11,375 | 1,575 | 13.85% | `ssl.gstatic.com` | `dit.whatsapp.net` |
| adolforeyna-iMac11-3 | 192.168.68.124 | Study | 6,102 | 1,434 | 23.50% | `lcp.rosettastone.com` | `cdp.cloud.unity3d.com` |
| adolforeynaserver | 192.168.68.110 | Office | 5,998 | 224 | 3.73% | `chatgpt.com` | `telemetry.n8n.io` |
| Dzidula-s-S22 | 192.168.68.117 | Office | 4,214 | 2,277 | 54.03% | `google.com` | `mobile.pipe.aria.microsoft.com` |
| Mac | 192.168.68.140 | Hallway | 3,718 | 521 | 14.01% | `ssl.gstatic.com` | `dit.whatsapp.net` |
| iPhone | 192.168.68.104 | Hallway | 3,359 | 364 | 10.84% | `mask.apple-dns.net` | `dit.whatsapp.net` |
| 50LivingRoom | 192.168.68.100 | Office | 3,195 | 3,099 | 97.00% | `api.roku.com` | `liberty.logs.roku.com` |
| 50CasitaTv | 192.168.68.114 | Casita | 3,051 | 2,623 | 85.97% | `nrdp.push.prod.netflix.com` | `scribe.logs.roku.com` |
| Alicia-2022-2 | 192.168.68.132 | Hallway | 2,644 | 539 | 20.39% | `settings-win.data.microsoft.com` | `mobile.events.data.microsoft.com` |
| aeropi5 | 192.168.68.126 | Office | 2,224 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| aeropi5 | 192.168.68.116 | Office | 2,198 | 0 | 0.00% | `connectivity-check.ubuntu.com` | `—` |
| emiserver | 192.168.68.119 | Office | 1,828 | 0 | 0.00% | `api.telegram.org` | `—` |
| iPad | 192.168.68.129 | Study | 1,749 | 65 | 3.72% | `mask.apple-dns.net` | `fbs.smoot.apple.com` |
| iPhone | 192.168.68.121 | Hallway | 1,455 | 54 | 3.71% | `mask.apple-dns.net` | `experiments.apple.com` |
| iPad-4 | 192.168.68.107 | Hallway | 1,066 | 108 | 10.13% | `mask.apple-dns.net` | `firebaselogging-pa.googleapis.com` |
| localhost | 127.0.0.1 | not mapped | 721 | 0 | 0.00% | `8.8.8.8.in-addr.arpa` | `—` |
| espressif | 192.168.68.105 | Study | 424 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| Adolfos-iPhone | 192.168.68.150 | Office | 352 | 28 | 7.95% | `gateway.fe2.apple-dns.net` | `fbs.smoot.apple.com` |
| espressif | 192.168.68.113 | Office | 292 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| espressif | 192.168.68.127 | Hallway | 263 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| Amazon | 192.168.68.134 | Office | 181 | 32 | 17.68% | `dogvgb9ujhybx.cloudfront.net` | `unagi-na.amazon.com` |
| Adolfo-i16 | 192.168.68.118 | Study | 150 | 22 | 14.67% | `us.lgtvsdp.com` | `us.info.lgsmartad.com` |
| Unknown device | 192.168.68.133 | not mapped | 127 | 3 | 2.36% | `ms-cam-u011.immedia-semi.com` | `app-analytics-services.com` |
| MyCloudEX2Ultra | 192.168.68.137 | Office | 66 | 0 | 0.00% | `prod.wdckeystone.com` | `—` |
| E31868152 | 192.168.68.128 | Barn | 56 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| F49758774 | 192.168.68.125 | Hallway | 48 | 0 | 0.00% | `0.amazon.pool.ntp.org` | `—` |
| iot_device | 192.168.68.135 | Office | 44 | 0 | 0.00% | `time.cloudflare.com` | `—` |
| Blink-Device | 192.168.68.131 | WashMachine | 42 | 0 | 0.00% | `ms-cam-u011.immedia-semi.com` | `—` |
| Mac-mini-M4 | 192.168.68.130 | Office | 20 | 0 | 0.00% | `p140-contacts.icloud.com` | `—` |
| Mac | 192.168.68.102 | Office | 17 | 0 | 0.00% | `atm.outlook.mira.tm.svc.cloud.microsoft` | `—` |
| Unknown device | 192.168.68.136 | not mapped | 4 | 0 | 0.00% | `captive.apple.com` | `—` |
| FN-LINK | 192.168.68.139 | Barn | 2 | 0 | 0.00% | `portal-ww.ecouser.net` | `—` |
| Google-Home-Mini | 192.168.68.120 | Hallway | 2 | 0 | 0.00% | `play.googleapis.com` | `—` |
## Per-device detail
### Mac (192.168.68.112)
Location: Hallway; MAC: 06-79-91-73-6F-6A; mapping: historical_snapshot.
Queries: 46,702; blocked: 3,143; block rate: 6.73%; unique domains: 483.
Top visited (not blocked):
- internalfb.com — 3,816
- ssl.gstatic.com — 1,381
- play.google.com — 1,042
- api.manus.im — 1,006
- chat.google.com — 826
- beacons.gcp.gvt2.com — 818
- chromereporting-pa.googleapis.com — 639
- signaler-pa.clients6.google.com — 506
- waa-pa.clients6.google.com — 451
- google.com — 449
Top blocked:
- www.internalfb.com — 838 blocked of 10,565
- graph.facebook.com — 514 blocked of 5,287
- graph.prod.facebook.com — 292 blocked of 674
- tokenservice.edge.x2p.facebook.net — 183 blocked of 214
- us-v20.events.data.microsoft.com — 167 blocked of 167
- interngraph.internmc.facebook.com — 138 blocked of 418
- gateway.internalfb.com — 103 blocked of 416
- fb.workplace.com — 96 blocked of 856
- edge-chat.workplace.com — 81 blocked of 225
- gateway.workplace.com — 72 blocked of 208
### Mac (192.168.68.108)
Location: Hallway; MAC: 82-A1-8E-D4-03-7A; mapping: historical_snapshot.
Queries: 12,891; blocked: 1,096; block rate: 8.50%; unique domains: 612.
Top visited (not blocked):
- whatsapp.com — 627
- chat.openai.com — 568
- muse.ai — 554
- chatgpt.com — 337
- www.apple.com — 324
- ab.chatgpt.com — 324
- mmx-ds.cdn.whatsapp.net — 292
- 1.courier-sandbox-push-apple.com.akadns.net — 282
- ssl.gstatic.com — 280
- mask.apple-dns.net — 272
Top blocked:
- dit.whatsapp.net — 558 blocked of 560
- slackb.com — 116 blocked of 116
- event.bblmw.com — 84 blocked of 84
- edge-metaclaw-http.c10r.facebook.com — 48 blocked of 86
- perf.bblmw.com — 46 blocked of 46
- ogads-pa.clients6.google.com — 36 blocked of 36
- fbs.smoot.apple.com — 36 blocked of 36
- x.com — 21 blocked of 25
- www.youtube.com — 18 blocked of 72
- analytics.google.com — 18 blocked of 18
### iPhone (192.168.68.106)
Location: Hallway; MAC: 62-0F-E1-3A-4C-4B; mapping: multiple_identities_seen.
Queries: 11,816; blocked: 2,269; block rate: 19.20%; unique domains: 1,140.
Top visited (not blocked):
- mask.apple-dns.net — 357
- ts01-b.csa.cloudsink.net — 351
- outlook.office365.com — 309
- mmx-ds.cdn.whatsapp.net — 267
- ts01-b.cloudsink.net — 194
- chat.cdn.whatsapp.net — 188
- www.google.com — 157
- mdm-na2.mobileiron.com — 114
- bag-cdn.itunes-apple.com.akadns.net — 78
- atm.outlook.mira.tm.svc.cloud.microsoft — 77
Top blocked:
- dit.whatsapp.net — 411 blocked of 413
- stocks-analytics-events.apple.com — 299 blocked of 299
- app-analytics-services.com — 167 blocked of 169
- ep2.facebook.com — 150 blocked of 150
- firebaselogging-pa.googleapis.com — 117 blocked of 119
- news-app-events.apple.com — 111 blocked of 111
- ep7.facebook.com — 110 blocked of 110
- et-eus.w.inmobi.com — 92 blocked of 92
- eus-r.w.inmobi.com — 68 blocked of 68
- iad-usadmm.dotomi.com — 58 blocked of 58
### iPhone (192.168.68.111)
Location: Hallway; MAC: C6-37-18-E7-39-39; mapping: multiple_identities_seen.
Queries: 11,375; blocked: 1,575; block rate: 13.85%; unique domains: 766.
Top visited (not blocked):
- ssl.gstatic.com — 382
- www.google.com — 329
- optimizationguide-pa.googleapis.com — 284
- chat.google.com — 222
- mask.apple-dns.net — 210
- mmx-ds.cdn.whatsapp.net — 172
- outlook.cloud.microsoft — 170
- play.google.com — 156
- signaler-pa.clients6.google.com — 142
- lb._dns-sd._udp.0.68.168.192.in-addr.arpa — 141
Top blocked:
- dit.whatsapp.net — 635 blocked of 635
- excel-telemetry.officeapps.live.com — 188 blocked of 188
- analytics.google.com — 96 blocked of 96
- bam.nr-data.net — 77 blocked of 92
- word-telemetry.officeapps.live.com — 68 blocked of 68
- track.capitaloneshopping.com — 68 blocked of 68
- www.clarity.ms — 42 blocked of 42
- static-tracking.klaviyo.com — 30 blocked of 30
- monorail-edge.shopifysvc.com — 30 blocked of 30
- a.klaviyo.com — 30 blocked of 30
### adolforeyna-iMac11-3 (192.168.68.124)
Location: Study; MAC: C8-BC-C8-BB-19-2D; mapping: historical_snapshot.
Queries: 6,102; blocked: 1,434; block rate: 23.50%; unique domains: 110.
Top visited (not blocked):
- lcp.rosettastone.com — 1,953
- chatgpt.com — 673
- connectivity-check.ubuntu.com — 580
- push.services.mozilla.com — 146
- filters.adtidy.org — 128
- www.recaptcha.net — 119
- www.gstatic.com — 117
- firefox.settings.services.mozilla.com — 114
- fonts.gstatic.com — 103
- merino.services.mozilla.com — 102
Top blocked:
- cdp.cloud.unity3d.com — 824 blocked of 824
- sdk.iad-01.braze.com — 275 blocked of 275
- incoming.telemetry.mozilla.org — 212 blocked of 212
- metrics.ubuntu.com — 116 blocked of 116
- csp-reporting.cloudflare.com — 3 blocked of 3
- ogads-pa.clients6.google.com — 2 blocked of 2
- ads.mozilla.org — 2 blocked of 2
### adolforeynaserver (192.168.68.110)
Location: Office; MAC: 18-60-24-78-DB-E8; mapping: historical_snapshot.
Queries: 5,998; blocked: 224; block rate: 3.73%; unique domains: 37.
Top visited (not blocked):
- chatgpt.com — 2,276
- herdr.dev — 2,016
- media.reynafamily.com — 570
- adolforeynaserver — 300
- acme-v02.api.letsencrypt.org — 202
- ph.n8n.io — 114
- acme-staging-v02.api.letsencrypt.org — 68
- version.goauthentik.io — 48
- api.github.com — 48
- auth.openai.com — 28
Top blocked:
- telemetry.n8n.io — 224 blocked of 224
### Dzidula-s-S22 (192.168.68.117)
Location: Office; MAC: C6-C3-37-60-5C-88; mapping: multiple_identities_seen.
Queries: 4,214; blocked: 2,277; block rate: 54.03%; unique domains: 349.
Top visited (not blocked):
- google.com — 465
- www.google.com — 260
- opcode — 99
- 216.58.202.4.in-addr.arpa — 66
- play.googleapis.com — 40
- connectivitycheck.gstatic.com — 36
- www.goooooooooooooooooooooooooooooooooooooooooooooooooooooooooogle.com — 33
- google.com.onion — 33
- *google.com — 33
- g.whatsapp.net — 28
Top blocked:
- mobile.pipe.aria.microsoft.com — 607 blocked of 607
- mobile.events.data.microsoft.com — 541 blocked of 541
- graph.instagram.com — 502 blocked of 502
- graph-fallback.instagram.com — 100 blocked of 100
- i.instagram.com — 93 blocked of 119
- test-gateway.instagram.com — 82 blocked of 91
- scontent-mia3-3.cdninstagram.com — 50 blocked of 56
- scontent-mia5-1.cdninstagram.com — 48 blocked of 53
- z-m-gateway.facebook.com — 35 blocked of 41
- graph.facebook.com — 25 blocked of 81
### Mac (192.168.68.140)
Location: Hallway; MAC: 0E-A4-E4-20-5C-1C; mapping: historical_snapshot.
Queries: 3,718; blocked: 521; block rate: 14.01%; unique domains: 349.
Top visited (not blocked):
- ssl.gstatic.com — 182
- optimizationguide-pa.googleapis.com — 112
- www.google.com — 103
- usc-word-edit.officeapps.live.com — 74
- play.google.com — 70
- waa-pa.clients6.google.com — 60
- signaler-pa.clients6.google.com — 56
- mmx-ds.cdn.whatsapp.net — 55
- www.apple.com — 45
- zpns.zoom.us — 44
Top blocked:
- dit.whatsapp.net — 212 blocked of 212
- excel-telemetry.officeapps.live.com — 82 blocked of 82
- word-telemetry.officeapps.live.com — 70 blocked of 70
- track.capitaloneshopping.com — 24 blocked of 24
- monorail-edge.shopifysvc.com — 20 blocked of 20
- analytics.google.com — 20 blocked of 20
- www.clarity.ms — 14 blocked of 14
- static-tracking.klaviyo.com — 14 blocked of 14
- a.klaviyo.com — 14 blocked of 14
- bam.nr-data.net — 11 blocked of 26
### iPhone (192.168.68.104)
Location: Hallway; MAC: 62-0F-E1-3A-4C-4B; mapping: historical_snapshot.
Queries: 3,359; blocked: 364; block rate: 10.84%; unique domains: 431.
Top visited (not blocked):
- mask.apple-dns.net — 191
- outlook.office365.com — 188
- mmx-ds.cdn.whatsapp.net — 95
- www.google.com — 64
- chat.cdn.whatsapp.net — 60
- imap.gmail.com — 59
- bag-cdn.itunes-apple.com.akadns.net — 58
- get-bx.g.aaplimg.com — 55
- ocsp2.apple.com — 52
- atm.outlook.mira.tm.svc.cloud.microsoft — 48
Top blocked:
- dit.whatsapp.net — 170 blocked of 170
- fbs.smoot.apple.com — 22 blocked of 22
- cdp.cloud.unity3d.com — 15 blocked of 15
- partiality.itunes.apple.com — 12 blocked of 12
- cf.iadsdk.apple.com — 12 blocked of 12
- app-analytics-services.com — 11 blocked of 11
- firebaselogging-pa.googleapis.com — 7 blocked of 7
- mobile.launchdarkly.com — 4 blocked of 4
- iadsdk.apple.com — 4 blocked of 4
- collector-pxhyx10rg3.perimeterx.net — 3 blocked of 3
### 50LivingRoom (192.168.68.100)
Location: Office; MAC: 84-3E-1D-4F-4A-1D; mapping: historical_snapshot.
Queries: 3,195; blocked: 3,099; block rate: 97.00%; unique domains: 26.
Top visited (not blocked):
- api.roku.com — 30
- themes-service.sr.roku.com — 25
- mediaservices.cdn-apple.com — 4
- austin.sb.roku.com — 4
- api2.sr.roku.com — 4
- sw-update.cs.roku.com — 3
- images.sr.roku.com — 3
- configsvc.cs.roku.com — 3
- navigation.sr.roku.com — 2
- image.roku.com — 2
Top blocked:
- liberty.logs.roku.com — 2,118 blocked of 2,120
- scribe.logs.roku.com — 958 blocked of 960
- cloudservices.roku.com — 21 blocked of 21
- identity.ads.roku.com — 1 blocked of 1
- display.ravm.tv — 1 blocked of 1
### 50CasitaTv (192.168.68.114)
Location: Casita; MAC: DC-72-23-B1-13-BE; mapping: historical_snapshot.
Queries: 3,051; blocked: 2,623; block rate: 85.97%; unique domains: 69.
Top visited (not blocked):
- nrdp.push.prod.netflix.com — 36
- api.roku.com — 31
- cdn-0.nflximg.com — 30
- nrdp.prod.cloud.netflix.com — 28
- nrdp51-appboot.netflix.com — 26
- uiboot.netflix.com — 25
- themes-service.sr.roku.com — 24
- api-global.netflix.com — 24
- mediaservices.cdn-apple.com — 20
- www.youtube.com — 17
Top blocked:
- scribe.logs.roku.com — 2,102 blocked of 2,104
- liberty.logs.roku.com — 200 blocked of 202
- nrdp.logs.netflix.com — 199 blocked of 199
- ichnaea.netflix.com — 30 blocked of 30
- customerevents.netflix.com — 30 blocked of 30
- cloudservices.roku.com — 30 blocked of 30
- logs.netflix.com — 17 blocked of 17
- experiments.apple.com — 6 blocked of 6
- display.ravm.tv — 6 blocked of 6
- identity.ads.roku.com — 2 blocked of 2
### Alicia-2022-2 (192.168.68.132)
Location: Hallway; MAC: E2-60-2B-5D-46-36; mapping: multiple_identities_seen.
Queries: 2,644; blocked: 539; block rate: 20.39%; unique domains: 793.
Top visited (not blocked):
- settings-win.data.microsoft.com — 51
- web.whatsapp.com — 47
- outlook.office365.com — 38
- mask.apple-dns.net — 30
- filedownload.csw.lenovo.com — 23
- clients4.google.com — 22
- mtalk.google.com — 21
- www.msftconnecttest.com — 19
- self.events.data.microsoft.com — 18
- www.google.com — 17
Top blocked:
- mobile.events.data.microsoft.com — 280 blocked of 280
- ipm.avcdn.net — 28 blocked of 28
- shepherd.avcdn.net — 24 blocked of 24
- analytics.avcdn.net — 18 blocked of 18
- analytics.google.com — 12 blocked of 12
- dc.services.visualstudio.com — 11 blocked of 11
- g2.gumgum.com — 10 blocked of 10
- ts.amazon-adsystem.com — 9 blocked of 9
- dit.whatsapp.net — 9 blocked of 9
- default.exp-tas.com — 8 blocked of 8
### aeropi5 (192.168.68.126)
Location: Office; MAC: 2C-CF-67-95-2B-F8; mapping: historical_snapshot.
Queries: 2,224; blocked: 0; block rate: 0.00%; unique domains: 14.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,138
- chatgpt.com — 772
- herdr.dev — 194
- cloud.reynafamily.com — 94
- api.snapcraft.io — 12
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- cdn.fwupd.org — 2
- canonical-bos01.cdn.snapcraftcontent.com — 2
- 126.68.168.192.in-addr.arpa — 2
Top blocked:
- none
### aeropi5 (192.168.68.116)
Location: Office; MAC: 2C-CF-67-95-2B-F9; mapping: historical_snapshot.
Queries: 2,198; blocked: 0; block rate: 0.00%; unique domains: 13.
Top visited (not blocked):
- connectivity-check.ubuntu.com — 1,138
- chatgpt.com — 751
- herdr.dev — 190
- cloud.reynafamily.com — 94
- api.snapcraft.io — 12
- ports.ubuntu.com — 2
- packages.microsoft.com — 2
- cdn.fwupd.org — 2
- canonical-bos01.cdn.snapcraftcontent.com — 2
- 126.68.168.192.in-addr.arpa — 2
Top blocked:
- none
### emiserver (192.168.68.119)
Location: Office; MAC: C8-5A-CF-0A-7A-A7; mapping: historical_snapshot.
Queries: 1,828; blocked: 0; block rate: 0.00%; unique domains: 23.
Top visited (not blocked):
- api.telegram.org — 1,039
- chatgpt.com — 492
- herdr.dev — 178
- version.goauthentik.io — 48
- version.immich.cloud — 24
- api.snapcraft.io — 12
- motd.ubuntu.com — 6
- cdn.fwupd.org — 6
- us.i.posthog.com — 2
- security.ubuntu.com — 2
Top blocked:
- none
### iPad (192.168.68.129)
Location: Study; MAC: A2-10-C6-24-C2-0A; mapping: historical_snapshot.
Queries: 1,749; blocked: 65; block rate: 3.72%; unique domains: 190.
Top visited (not blocked):
- mask.apple-dns.net — 349
- ocsp2.apple.com — 64
- _dns.resolver.arpa — 61
- configuration.ls.apple.com — 58
- apple.com — 54
- iphone-ld.apple.com — 52
- iphone-ld.g.aaplimg.com — 48
- mask.icloud.com — 46
- ocsp2.g.aaplimg.com — 41
- gdmf.apple.com — 34
Top blocked:
- fbs.smoot.apple.com — 35 blocked of 35
- partiality.itunes.apple.com — 7 blocked of 7
- cf.iadsdk.apple.com — 7 blocked of 7
- youtubei.googleapis.com — 6 blocked of 10
- app-measurement.com — 3 blocked of 3
- app-analytics-services.com — 3 blocked of 3
- trk.pinterest.com — 2 blocked of 2
- experiments.apple.com — 2 blocked of 2
### iPhone (192.168.68.121)
Location: Hallway; MAC: A6-B0-E1-AF-2F-75; mapping: historical_snapshot.
Queries: 1,455; blocked: 54; block rate: 3.71%; unique domains: 233.
Top visited (not blocked):
- mask.apple-dns.net — 107
- iphone-ld.apple.com — 64
- _dns.resolver.arpa — 56
- ocsp2.apple.com — 50
- www.subalert.com — 46
- iphone-ld.g.aaplimg.com — 40
- mask.icloud.com — 38
- ocsp2.g.aaplimg.com — 35
- subalert.com — 31
- gdmf.apple.com — 26
Top blocked:
- experiments.apple.com — 28 blocked of 28
- fbs.smoot.apple.com — 10 blocked of 10
- partiality.itunes.apple.com — 7 blocked of 7
- cf.iadsdk.apple.com — 7 blocked of 7
- iadsdk.apple.com — 2 blocked of 2
### iPad-4 (192.168.68.107)
Location: Hallway; MAC: DA-77-C3-CE-4D-01; mapping: historical_snapshot.
Queries: 1,066; blocked: 108; block rate: 10.13%; unique domains: 232.
Top visited (not blocked):
- mask.apple-dns.net — 139
- _dns.resolver.arpa — 51
- mask.icloud.com — 46
- ocsp2.apple.com — 34
- bag.itunes.apple.com — 22
- ocsp2.g.aaplimg.com — 18
- gsp-ssl.ls.apple.com — 18
- bag-cdn.itunes-apple.com.akadns.net — 18
- init-p01md.apple.com — 16
- gdmf.apple.com — 16
Top blocked:
- firebaselogging-pa.googleapis.com — 34 blocked of 34
- sdk.iad-01.braze.com — 14 blocked of 14
- cdp.cloud.unity3d.com — 9 blocked of 9
- app-analytics-services.com — 9 blocked of 9
- partiality.itunes.apple.com — 8 blocked of 8
- cf.iadsdk.apple.com — 8 blocked of 8
- app-measurement.com — 6 blocked of 6
- et-eus.w.inmobi.com — 3 blocked of 3
- config.inmobi.com — 3 blocked of 3
- mads.amazon-adsystem.com — 2 blocked of 2
### localhost (127.0.0.1)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 721; blocked: 0; block rate: 0.00%; unique domains: 41.
Top visited (not blocked):
- 8.8.8.8.in-addr.arpa — 24
- 4.4.8.8.in-addr.arpa — 24
- 150.68.168.192.in-addr.arpa — 24
- 135.68.168.192.in-addr.arpa — 24
- 134.68.168.192.in-addr.arpa — 24
- 129.68.168.192.in-addr.arpa — 24
- 128.68.168.192.in-addr.arpa — 24
- 126.68.168.192.in-addr.arpa — 24
- 125.68.168.192.in-addr.arpa — 24
- 124.68.168.192.in-addr.arpa — 24
Top blocked:
- none
### espressif (192.168.68.105)
Location: Study; MAC: 14-C1-9F-D1-56-90; mapping: historical_snapshot.
Queries: 424; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 424
Top blocked:
- none
### Adolfos-iPhone (192.168.68.150)
Location: Office; MAC: 30-35-AD-68-A3-AB; mapping: historical_snapshot.
Queries: 352; blocked: 28; block rate: 7.95%; unique domains: 74.
Top visited (not blocked):
- gateway.fe2.apple-dns.net — 47
- safebrowsing.googleapis.com — 34
- time-ios.apple.com — 32
- gateway.icloud.com — 18
- p33-bookmarks.icloud.com — 16
- _bookmarkdavs._tcp.p33-bookmarks.icloud.com — 16
- ocsp.apple.com — 14
- mesu.apple.com — 9
- xp.apple.com — 8
- mesu-cdn.origin-apple.com.akadns.net — 8
Top blocked:
- fbs.smoot.apple.com — 20 blocked of 20
- partiality.itunes.apple.com — 4 blocked of 4
- cf.iadsdk.apple.com — 4 blocked of 4
### espressif (192.168.68.113)
Location: Office; MAC: 14-C1-9F-D0-59-1C; mapping: historical_snapshot.
Queries: 292; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- time.cloudflare.com — 290
- cdn.tactilityproject.org — 2
Top blocked:
- none
### espressif (192.168.68.127)
Location: Hallway; MAC: 14-C1-9F-D0-5C-5C; mapping: historical_snapshot.
Queries: 263; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- time.cloudflare.com — 263
Top blocked:
- none
### Amazon (192.168.68.134)
Location: Office; MAC: A0-D2-B1-A6-EC-BD; mapping: historical_snapshot.
Queries: 181; blocked: 32; block rate: 17.68%; unique domains: 12.
Top visited (not blocked):
- dogvgb9ujhybx.cloudfront.net — 73
- ahu5vu98zzyil.us-east-1.prod.service.minerva.devices.a2z.com — 50
- www.amazon.com — 7
- m.media-amazon.com — 6
- todo-ta-g7g.amazon.com — 3
- device-messaging-na.amazon.com — 2
- 7a6e3418b2b39c5852077c212b8b75b4.00995507000024.kindle-cpu.com — 2
- 7a6e3418b2b39c5852077c212b8b75b4.00498807000024.kindle-boot.com — 2
- 7a6e3418b2b39c5852077c212b8b75b4.00019607000024.kindle-mem.com — 2
- s3.amazonaws.com — 1
Top blocked:
- unagi-na.amazon.com — 32 blocked of 32
### Adolfo-i16 (192.168.68.118)
Location: Study; MAC: F8-B9-5A-E0-78-52; mapping: historical_snapshot.
Queries: 150; blocked: 22; block rate: 14.67%; unique domains: 42.
Top visited (not blocked):
- us.lgtvsdp.com — 24
- discovery.meethue.com — 16
- aic-ngfts.lge.com — 12
- aic.cdpsvc.lgtvcommon.com — 7
- www.ueiwsp.com — 6
- lgwebostv — 4
- prov-lg.alphonso.tv — 3
- gfts.lge.com — 3
- yt3.ggpht.com — 2
- www.gstatic.com — 2
Top blocked:
- us.info.lgsmartad.com — 16 blocked of 16
- us.rdx2.lgtvsdp.com — 6 blocked of 6
### Unknown device (192.168.68.133)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 127; blocked: 3; block rate: 2.36%; unique domains: 64.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 27
- youtubei.googleapis.com — 4
- xp.apple.com — 2
- s.mzstatic.com — 2
- rr9---sn-bvvbaxivnuxqjvhj5nu-hp56.googlevideo.com — 2
- rr4---sn-bvvbaxivnuxqjvhj5nu-hp5e.googlevideo.com — 2
- rr4---sn-bvvbaxivnuxqjvhj5nu-hp56.googlevideo.com — 2
- redirector.googlevideo.com — 2
- mesu.apple.com — 2
- mask.icloud.com — 2
Top blocked:
- app-analytics-services.com — 2 blocked of 2
- app-measurement.com — 1 blocked of 1
### MyCloudEX2Ultra (192.168.68.137)
Location: Office; MAC: 00-00-C0-3C-B8-FF; mapping: historical_snapshot.
Queries: 66; blocked: 0; block rate: 0.00%; unique domains: 12.
Top visited (not blocked):
- prod.wdckeystone.com — 10
- prod-proxy.wdckeystone.com — 10
- prod-gateway.wdckeystone.com — 10
- time.mycloud.com — 6
- google.com — 6
- config.mycloud.com — 6
- time.windows.com — 4
- prod-cdd1bbf7f41b200.wdckeystone.com — 4
- prod-15ce3e0b80af991.wdckeystone.com — 4
- prod-fc14d21a5887149.wdckeystone.com — 2
Top blocked:
- none
### E31868152 (192.168.68.128)
Location: Barn; MAC: 80-9F-9B-45-9A-FF; mapping: historical_snapshot.
Queries: 56; blocked: 0; block rate: 0.00%; unique domains: 2.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 52
- litedev.us.ezvizlife.com — 4
Top blocked:
- none
### F49758774 (192.168.68.125)
Location: Hallway; MAC: C0-E7-BF-DD-C8-2A; mapping: historical_snapshot.
Queries: 48; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- 0.amazon.pool.ntp.org — 48
Top blocked:
- none
### iot_device (192.168.68.135)
Location: Office; MAC: A0-85-E3-FB-35-5C; mapping: historical_snapshot.
Queries: 44; blocked: 0; block rate: 0.00%; unique domains: 4.
Top visited (not blocked):
- time.cloudflare.com — 25
- api.bambulab.com — 16
- or-cloud-upload-prod.s3.us-west-2.amazonaws.com — 2
- us-d-master-71spctnsfa8p5xvgkssa.iotcplatform.com — 1
Top blocked:
- none
### Blink-Device (192.168.68.131)
Location: WashMachine; MAC: 84-28-59-E8-42-80; mapping: multiple_identities_seen.
Queries: 42; blocked: 0; block rate: 0.00%; unique domains: 9.
Top visited (not blocked):
- ms-cam-u011.immedia-semi.com — 16
- eu.tectonic.remarkable.com — 10
- ping.remarkable.com — 6
- webapp-prod.cloud.remarkable.engineering — 2
- podcast.emmint.com — 2
- dev.tectonic.remarkable.com — 2
- _dns.resolver.arpa — 2
- s3.amazonaws.com — 1
- gateway.icloud.com — 1
Top blocked:
- none
### Mac-mini-M4 (192.168.68.130)
Location: Office; MAC: D0-11-E5-73-96-5A; mapping: historical_snapshot.
Queries: 20; blocked: 0; block rate: 0.00%; unique domains: 7.
Top visited (not blocked):
- p140-contacts.icloud.com — 3
- 49-courier.push.apple.com — 3
- 44-courier.push.apple.com — 3
- 36-courier.push.apple.com — 3
- 26-courier.push.apple.com — 3
- 10-courier.push.apple.com — 3
- gateway.fe2.apple-dns.net — 2
Top blocked:
- none
### Mac (192.168.68.102)
Location: Office; MAC: 5A-D2-AA-CB-96-08; mapping: historical_snapshot.
Queries: 17; blocked: 0; block rate: 0.00%; unique domains: 8.
Top visited (not blocked):
- atm.outlook.mira.tm.svc.cloud.microsoft — 4
- 1.courier-push-apple.com.akadns.net — 4
- p146-contacts.icloud.com — 3
- cl2.g.aaplimg.com — 2
- ocsp2.g.aaplimg.com — 1
- local — 1
- _dns.resolver.arpa — 1
- 130.68.168.192.in-addr.arpa — 1
Top blocked:
- none
### Unknown device (192.168.68.136)
Location: not mapped; MAC: unknown; mapping: not_in_snapshot_or_live_deco_list.
Queries: 4; blocked: 0; block rate: 0.00%; unique domains: 3.
Top visited (not blocked):
- captive.apple.com — 2
- captive.g.aaplimg.com — 1
- _dns.resolver.arpa — 1
Top blocked:
- none
### FN-LINK (192.168.68.139)
Location: Barn; MAC: 24-18-C6-B5-4A-DC; mapping: historical_snapshot.
Queries: 2; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- portal-ww.ecouser.net — 2
Top blocked:
- none
### Google-Home-Mini (192.168.68.120)
Location: Hallway; MAC: E4-F0-42-2E-E0-4E; mapping: historical_snapshot.
Queries: 2; blocked: 0; block rate: 0.00%; unique domains: 1.
Top visited (not blocked):
- play.googleapis.com — 2
Top blocked:
- none

Some files were not shown because too many files have changed in this diff Show More