# Barkday™ MASTER-NOTE.md (v2025-10-08 Consolidated Edition)
## Table of Contents
1. Executive Summary & Purpose
2. Core Logic & Aging Model
3. Breed Expansion & Hybrid Cohorts
4. Paid Tier Architecture & Hosting Gate
5. Monetization, Limits & Abuse Prevention
6. Certificate & Branding System
7. Security & Hosting Transition
8. Quality Assurance & Governance
9. Open Items & Forward Plan
10. Appendix — Sample Schemas & Snippets
---
### **1. Executive Summary & Purpose**
Barkday™ is a progressive web application (PWA) that helps dog owners celebrate, plan, and better understand their pets’ “dog-year” birthdays.
The project began as a single-page calculator and evolved into a full data-driven experience with breed-specific health, training, and enrichment recommendations.
The current public build runs on **GitHub Pages** for open testing.
The commercial release will transition to **private API-hosted data** where proprietary JSON files (recommendations, hybrid logic, affiliate lists, etc.) are fetched based on each user’s paid-tier credentials.
Primary goals:
* Deliver accurate, enjoyable, and personalized results instantly in-browser (no user accounts required for free tier).
* Protect proprietary data sets and design logic once monetized.
* Maintain a single codebase that can serve all tiers by switching endpoints and unlock flags at runtime.
* Present Barkday™ as both a utility and a keepsake—each calculation can generate a printable **certificate-style PDF**.
---
### **2. Core Logic & Aging Model (v0)**
#### **2.1 Overview**
Dog-to-human aging is modeled using a hybrid exponential curve tuned per breed group.
Age “bands” represent developmental stages; recommendations are stored by group × band.
Fallback logic ensures a valid plan for any combination of known/unknown breed.
#### **2.2 Primary Data Files**
| File | Purpose |
| --------------------- | -------------------------------------------------------- |
| `breed_groups.json` | Maps AKC/FCI group names to canonical clusters. |
| `breed_aliases.json` | Normalizes user input (synonyms, alternate spellings). |
| `breed_taxonomy.json` | Connects canonical breeds to their group and meta-group. |
| `reco-breed.json` | Per-breed recommendation sets. |
| `reco-banded.json` | Group × age-band fallback recommendations. |
| `rules_library.json` | Governs tone, category ordering, and formatting rules. |
Each JSON file uses version query tags (`?v=YYYY-MM-DD-N`) for cache-busting.
#### **2.3 Computation Flow**
```js
// Pseudocode from app.js (simplified)
function computeDogAge(dob) {
const now = new Date();
const ageDays = (now - dob) / 864e5;
const ageYears = ageDays / 365.25;
const humanEquivalent = 16 * Math.log(ageYears + 1) + 31; // example curve
return { ageYears, humanEquivalent };
}
```
The UI presents both *dog years* (chronological) and *human-equivalent years* (behavioral maturity).
#### **2.4 Grouping Logic**
If a user specifies a known breed:
```js
group = taxonomy[breed].group;
```
If not, Barkday™ falls back to group dropdown selection → default `reco-banded` entry.
✅ **Implemented:** automatic fallback prevents “empty plan” placeholders.
⚙️ **Future refinement:** per-breed curve coefficients sourced from ongoing veterinary datasets.
---
### **3. Breed Expansion & Hybrid Cohorts (v1)**
#### **3.1 Purpose**
Designer and hybrid breeds represent a multibillion-dollar market.
To remain relevant, Barkday™ must map cross-breed DNA results to intelligent averages of parent group traits.
#### **3.2 Hybrid Algorithm**
```js
// Example weighting for hybrid breeds
function hybridProfile(parents){
let total = 0, result = {};
for (const p of parents){
const g = taxonomy[p.breed].group;
result[g] = (result[g]||0) + p.percent;
total += p.percent;
}
for (const g in result) result[g] = +(result[g]/total).toFixed(2);
return result; // e.g. { "Sporting":0.6, "Working":0.4 }
}
```
Recommendations are blended across the weighted groups.
#### **3.3 Designer Cohort Registry**
* Each designer type (e.g., Labradoodle) references its parent breeds.
* Aliases file contains all known commercial spellings.
* Mixed inputs still resolve to a valid meta-group for `reco-banded` lookup.
✅ **Implemented:** alias resolution for hybrids.
⚙️ **Future:** automated weighting from DNA imports (e.g., Embark, Wisdom Panel).
---
### **4. Paid Tier Architecture & Hosting Gate (v2)**
#### **4.1 Single Codebase Model**
The web app remains one build; pay tiers only change *which endpoints* the data fetches from.
```js
const BASE = isPaid ? 'https://api.barkday.app/v1/' :
'https://candidquality.github.io/Barkday/data/';
fetch(`${BASE}reco-breed.json`);
```
#### **4.2 Tier Levels**
| Tier | Access | Storage | Notes |
| ------------- | -------------------- | ------------ | ------------------------------------------ |
| Free | Local data only | 5 saved dogs | Uses public GitHub JSONs |
| Plus | Fetch via API key | 20 dogs | Adds premium breed data |
| Pro / Breeder | Full API + analytics | Unlimited | Enables litter tracking, export, reminders |
#### **4.3 Security Model**
* All proprietary JSON files move off GitHub once live.
* Requests validated by API key or token; each tier limited by key scope.
* Core UI functions stay identical; only data sources differ.
* Keys are **never stored in the app**—only short-lived tokens returned from login.
#### **4.4 Monetization Hooks**
* Upgrade banner appears when user reaches save-limit.
* Certificate print screen remains available in all tiers.
* Gift ideas are visible to everyone. Premium may include optional partner perks (e.g., discounts/coupons), not paywalled access to gifts.
✅ **Implemented:** structural separation and version-tag fetches.
⚙️ **Future:** integrate Stripe or Play Store billing endpoint for token refresh.
---
## **Barkday™ MASTER-NOTE.md (v2025-10-08 Consolidated Edition)**
### **Sections 5 – 7**
*(Monetization & Abuse Prevention → Certificate System → Security & Hosting)*
---
### **5. Monetization, Limits & Abuse Prevention (v3)**
#### **5.1 Overview**
The free version allows a maximum of 5 saved dog records in `localStorage`.
This encourages upgrades while still allowing functional use.
```js
// app.js excerpt
const MAX_FREE = 5;
if (!isPaid && saved.length >= MAX_FREE) {
alert("Save limit reached — upgrade to Barkday™ Plus for more!");
return;
}
```
#### **5.2 Record Identification and Integrity**
Each record (run) receives a unique timestamp ID (`ts`) when created.
This ID becomes the “Certificate #” and QR payload for PDF export.
```js
const run = {
ts: Date.now(), // unique key
dog: dogName,
dob: dobISO,
group: group,
...
};
localStorage.setItem("barkday.runs.v1", JSON.stringify(allRuns));
```
✅ Implemented: Unique identifier generated at creation.
⚙️ Future: Server-side hash signing for paid records.
#### **5.3 Anti-Circumvention Logic**
* Local save limit tracked via array length.
* Deleting or reinstalling will lose records, but certificate hash remains embedded in PDF for future import.
* Re-imports detect duplicate `ts` and merge gracefully.
```js
function importRun(data){
const exists = store.find(r=>r.ts===data.ts);
if(!exists) store.push(data);
}
```
✅ Implemented: Duplicate run merge by timestamp.
⚙️ Future: Rate-limit or IP log for API-tier users.
---
### **6. Certificate & Branding System**
#### **6.1 Purpose**
Every Barkday™ record can produce a printable PDF certificate representing the dog’s next birthday plan.
#### **6.2 Layout**
Header → Dog profile + DNA breeds → QR + Certificate # → Body plan → Fixed footer.
The latest version (`app-pdf.js v8`) implements a professional, single-page layout:
* Fixed header (top logo and dog info)
* Two wide columns of plan content
* Fixed footer (bottom margin 80 px)
✅ Implemented in v8.
#### **6.3 Branding Standards**
* Always display name as **Barkday™** (one word, capital B).
* Logo should appear at top-left; QR at top-right.
* Font and kerning set for print clarity (11–12 pt main text).
#### **6.4 Certificate Number & QR**
```js
const certNo = run.id || run.hash || run.ts;
const qrText = JSON.stringify({ v:'1', id:String(certNo) });
const qrDataURL = await renderQRCodeToDataURL(qrText); // local lib or network PNG → dataURL
doc.addImage(qrDataURL,'PNG', qrX, qrY, qrSize, qrSize);
tx("Certificate #", qrX+qrSize/2-26, qrY+qrSize+10, 9, true);
tx(certNo, qrX+qrSize/2-28, qrY+qrSize+22, 10);
```
✅ Implemented: Certificate # label and ID below QR.
⚙️ Future: Embed encrypted import payload to re-load record in app.
#### **6.5 Logo Loading**
```js
try {
const svg = await fetch('barkday-logo-vector.svg').then(r=>r.text());
await doc.svg(svg,{x:M,y:headerTop,width:logoW,height:logoH});
} catch {
doc.rect(M,headerTop,logoW,logoH);
tx("Barkday™", M+10, headerTop+48, 12, true);
}
```
✅ Implemented: Failsafe logo placeholder.
⚙️ Future: Use signed asset path for private build.
#### **6.6 Footer Content**
```
Barkday™ — Generated locally
Privacy: Barkday™ stores data only on this device.
Disclaimer: General guidance only — not veterinary advice.
```
Fixed position ~72 px above page bottom.
---
### **7. Security & Hosting Transition**
#### **7.1 Current Stage**
* Public GitHub Pages site used for testing and feedback.
* All JSON data in `/data/` folder is open for read-only testing.
* Browser localStorage persists user records only on device.
#### **7.2 Target Architecture**
When monetized, Barkday™ will move to a private host with tiered API keys.
```js
const API = "https://api.barkday.app/v1/";
fetch(`${API}reco-breed.json?key=${userKey}`);
```
* Each tier key grants access only to its data scope.
* Keys expire periodically; tokens refreshed via auth endpoint.
* Data served over HTTPS only and CORS locked to official domains.
✅ Planned for Phase II (deployment transition).
#### **7.3 Intellectual Property Protection**
* Proprietary JSON files moved off public repos.
* All exported records include hash but not raw data payloads.
* Barkday™ logo and name filed for trademark protection.
#### **7.4 Offline Behavior**
Free version remains functional offline; cached via PWA service worker.
Paid tiers require API reachability for data fetch.
⚙️ Future consideration: Encrypted local cache for offline premium use.
---
### **Sections 8–10**
*(Quality Assurance → Open Items → Appendix)*
---
### **8. Quality Assurance & Governance**
#### **8.1 QA Workflow**
All releases follow a manual QA pass before commit to GitHub main.
Testing covers:
| Area | Test | Status |
| ------------- | -------------------------------------------- | ------------------------------------------ |
| UI | Responsive layout, dark mode readability | ✅ |
| Data | Breed dropdowns load full taxonomy | ✅ |
| Save | localStorage operations limited to 5 entries | ✅ |
| PDF | Generates on both desktop and Android Chrome | ✅ |
| Offline | PWA loads when cached | ⚙️ pending formal SW cache manifest review |
| Accessibility | Tab order, ARIA roles | ⚙️ in progress |
#### **8.2 Versioning & CHANGELOG**
Each file’s cache-bust string (`?v=YYYY-MM-DD-N`) doubles as version tag.
Example:
```html
```
The **CHANGELOG.md** records visible build milestones:
```
2025-10-06-2 app.js: stable release, JSON v-sync, placeholder removed
2025-10-08-v8 app-pdf.js: final certificate layout
```
#### **8.3 MAINTAINERS Policy**
* Primary maintainer: project owner (you).
* Secondary AI assistant: documentation & automation support.
* All code merges occur through reviewed pull requests.
* Proprietary assets never pushed to public repos.
* GitHub remains testing ground only; production build moved to private host.
#### **8.4 Release Steps**
1. Verify all JSONs pretty-printed and schema-consistent.
2. Run browser console to confirm no `fetch` or `SyntaxError`.
3. Confirm PWA manifest valid.
4. Commit → push → verify GitHub Pages rebuild.
5. Update `CHANGELOG.md` with summary.
---
### **9. Open Items & Forward Plan**
| Category | Action | Priority |
| ------------------- | ----------------------------------------------------- | -------- |
| **Affiliate Data** | Implement curated gift lists per breed/age. | Medium |
| **DNA Imports** | Parse Embark/Wisdom exports for hybrid weighting. | High |
| **Paid Tier API** | Deploy private JSON API with key validation. | High |
| **Offline Mode** | Service worker for premium cache fallback. | Medium |
| **UI Polish** | Theme color selector & confetti timing adjustments. | Low |
| **Accessibility** | Add full ARIA labels and keyboard nav. | Medium |
| **Mobile Printing** | Optimize Android print dialog scaling. | Medium |
| **Analytics** | Add anonymized usage counters (local opt-in). | Low |
| **Legal** | Finalize trademark submission Barkday™. | Done |
| **Docs** | Merge and maintain single MASTER-NOTE.md (this file). | Done |
---
### **10. Appendix — Sample Schemas & Snippets**
#### **10.1 Example reco-banded.json Entry**
```json
{
"Working / Herding": {
"puppy_1_6": {
"Training & Enrichment": [
"Channel motion focus into tasks (targeting, flank cues)",
"Short, frequent reps; end while engagement is high"
],
"Health & Wellness": [
"Protect thin skin with padded beds",
"Monitor for cold sensitivity"
]
}
}
}
```
#### **10.2 app.js Save Payload (Simplified)**
```js
{
"dog": "Finn",
"dob": "2024-07-04",
"group": "Working / Herding",
"weight": 55,
"chewer": "Normal",
"smooth": true,
"ts": 1728394847000,
"kpi": {
"hy": 3.94,
"dogAge": "0y 3m",
"nextDate": "Thu Oct 09 2025",
"nextAge": 4
}
}
```
#### **10.3 Certificate Layout Constants (app-pdf.js)**
```js
const W=792, H=612, M=36;
const RULE=[210,210,210];
const footerTop = H - 72;
```
#### **10.4 Future Private API Endpoint Structure**
```
GET /v1/data/breeds
GET /v1/data/reco?group=Working%20/%20Herding&band=puppy_1_6
GET /v1/data/gifts?tier=pro
```
All requests require `Authorization: Bearer ` in paid tiers.
---
# Barkday™ MASTER-NOTE — Addendum (2025-10-09)
This addendum records **new decisions** made after the `MASTER-NOTE.md (v2025-10-08)`
so nothing is lost while the owner is mobile. These items should be merged back into
the next full revision of the Master Note.
---
## A. Bark Day Milestone Model (15 + 9) — Clarified & Final
- **Bark Days** are the **dog-year birthdays**, not human months.
- We surface **24 milestones** in the early life stage:
- **15 Bark Days** in the first human year
- **9 Bark Days** in the second human year
- Implementation uses **precomputed schedules** (human-years since DOB at each Bark Day index `k = 1..24`) per curve.
- We avoid on-device numeric inversion for reliability and performance.
### A.1 Curves Registry (new file: `data/curves.json`)
```json
{
"curves": {
"group_default_v1": {
"label": "Group default (smoothed 15/9)",
"barkdays": { "1": 0.07, "2": 0.13, "...": "...", "24": 2.10 },
"source": "AKC 15/9 smoothed (internal fit)",
"notes": "Human years at each Bark Day index (1..24)"
},
"breed:LABRADOR_RETRIEVER:v1": {
"label": "Labrador Retriever (v1)",
"barkdays": { "1": 0.075, "2": 0.14, "...": "...", "24": 2.05 },
"source": "Breed-specific study (DOI TBD)",
"notes": "Distinct 2nd-year profile vs default"
}
},
"defaults": {
"group_curve": "group_default_v1",
"overrides": {
"Labrador Retriever": "breed:LABRADOR_RETRIEVER:v1"
}
}
}
```
- **Future-proofing:** Add additional curves as peer‑reviewed data appears.
- **Display:** When an override is used, show a discreet note: “Using [Curve Label]”.
### A.2 Converting to dates
For Bark Day `k`, compute human years `t_k` from `curves.json`, then:
```
date_k = DOB + t_k * 365.25 days
```
---
## B. Breed Size Scaling (Age-Banding Factor) — NEW
We will modulate the Bark Day schedule by a **breed scaling factor** `S` where **1.00** is baseline.
- Small breeds → **S < 1.00** (faster early development); example: **Chihuahua S = 0.88**
- Large/Giant breeds → **S > 1.00** (slower early development); example: **Mastiff S = 1.16**
- Range: **0.80–1.20** reserved; current working band **0.88–1.16**.
### B.1 Application of S
For a given Bark Day index `k` with default human-years `t_k` from the selected curve:
```
t_k_scaled = t_k * S
date_k = DOB + t_k_scaled * 365.25 days
```
- **Mixed breeds:** compute a **weighted S** from components (max 3 parents):
`S_mix = Σ (w_i * S_breed_i)` with Σw = 1.0
- **Designer breeds with explicit curve:** If a breed override provides its own schedule,
apply **S = 1.00** unless that curve’s documentation specifies otherwise.
### B.2 Storage
Add to taxonomy a `size_scale` field per breed (fallback at group level):
```json
{
"Chihuahua": { "group": "Toy / Companion", "size_scale": 0.88 },
"English Mastiff": { "group": "Working / Herding", "size_scale": 1.16 },
"...": { "group": "Sporting" }
}
```
For missing values, use group median or default `1.00`.
---
## C. Mixed-Breed Blending (up to 3 components) — Finalized
- Accept **up to 3** breeds with percentages.
- **Priority order of sources at Bark Day k:**
1) **Breed-level** Bark Day content (if present; weighted union)
2) **Group-level** Bark Day defaults (`reco-barkday-banded.json` at index k)
3) **Trait inserts** (`trait-inserts-barkday.json` expanded for k)
4) **Universal puppy** (`universal-puppy-barkday.json` at k)
- **Deduplicate** bullets and **cap 3–5** per lane for printability.
```js
// Sketch
function resolvePlan({breeds, group, k, traits}) {
const breedBlocks = weightedBreedBlocksAtK(breeds, k); // union by weight
const groupBlock = RECO_BARKDAY_BANDED[group][String(k)] || {};
const traitAdds = resolveTraitInserts(traits, k);
const puppyAdds = UNIVERSAL_PUPPY_BARKDAY[String(k)] || {};
let plan = mergeAll([breedBlocks, groupBlock]);
plan = mergeAdditive(plan, traitAdds);
plan = mergeAdditive(plan, puppyAdds);
return clampItemsPerLane(dedupe(plan), {min:3, max:5});
}
```
---
## D. Data Files — Bark Day–centric (new & confirmed)
- **NEW:** `reco-barkday-banded.json` — group defaults for Bark Days 1..24
- **NEW:** `trait-inserts-barkday.json` — cluster/range-based inserts (e.g., brachy, coat_care_high, giant_growth, noise_sensitive)
- **NEW:** `universal-puppy-barkday.json` — universal early-life inserts 1..24
- **NEW (planned):** `curves.json` — per-curve Bark Day schedules; defaults + overrides (e.g., Labrador Retriever)
> These files exist alongside the current adult **banded** and **per-breed** sets. Bark Day files are checked first for k=1..24.
---
## E. PDF / UI Notes — Confirmations
- Header phrasing: **“Next Bark Day Plan — turning {k} on {DATE}”** (no “dog years” wording).
- Barkday™ brand: single word, capital B; ™ symbol shown where appropriate.
- Certificate area: QR at right; **“Certificate #”** label above unique ID; Labrador curve note if applied.
---
## F. Outreach (breed clubs & registries) — Question Set
We will contact clubs and specialty registries with this standardized request (see long-form email in previous message). Key areas we’ll ask for per-breed truth:
1) Growth/maturity timeline for first 2 human years (behavioral + skeletal)
2) Early red flags owners should recognize (breed-specific)
3) Exercise surfaces/dose limits by early Bark Days
4) Socialization priorities; fear-period timing
5) Core training focus owners often miss (recall, impulse control, engagement)
6) Health screenings/upfront exams recommended by 24 months
7) Orthopedic/respiratory/derm risks + prevention tips
8) Thermal tolerance & coat-care realities
9) Nutrition specifics (growth diet, Ca:P notes, BCS targets)
10) Grooming/handling basics to start immediately
11) Gear advisories (e.g., harness vs collar for brachy)
12) Enrichment styles that match drives
13) Environmental risks (stairs, slick floors, water, prey drive)
14) Official standards/resources and peer-reviewed references
15) Contact for review prior to publication
---
## G. Open Items / TODOs (to carry into next Master Note revision)
- [ ] Generate `data/curves.json` with **group_default_v1** schedule and **Labrador v1** override.
- [ ] Add `size_scale` per breed (taxonomy) and compute mixed-scale `S_mix` for schedule.
- [ ] Implement Bark Day resolver in `app.js` (loader + blending + PDF header update).
- [ ] Begin content authoring for **Bark Days 1..24** in `reco-barkday-banded.json` (start with Working/Herding, Toy/Companion, Terrier).
- [ ] Author **trait inserts** for brachy, giant_growth, coat_care_high, noise_sensitive, independence_high.
- [ ] Outreach to clubs using the question set; store responses and citations for future curves.
- [ ] When peer-reviewed curves publish, add to `curves.json` and credit sources.
- [ ] QA checklist additions: verify no placeholder lanes; cap bullets 3–5; PDF remains single-page.
---
*This addendum is intended to be merged back into the main `MASTER-NOTE.md` during the next editing session. Keep both files in `/docs/` until merged.*
# Barkday™ MASTER-NOTE — Addendum (2025-10-09 • v2)
This update locks a critical rule about **breed-specific curves** and how they override the default 15/9 model.
---
## A. Piecewise Breed Curves (Override From a Start Bark Day Onward)
**Rule:** If a peer‑reviewed, breed‑specific curve exists, it **inherits** the default
first-year Bark Days (1–15) *unless the study provides its own first-year values*, and then
**overrides from a specified start point onward** (typically Bark Day 16 = human month 13).
The override **continues forward** (year 2 and beyond) using that breed’s data. We do **not**
revert to the default after year 2.
- Default site-wide cadence for breeds without data: **15 in year 1 + 9 in year 2**, via `group_default_v1`.
- **Labrador Retriever**: identical to default for **Bark Days 1..15**; **diverges at Bark Day 16** and
continues with the lab-specific schedule for all later Bark Days.
- Future breeds: same mechanism — piecewise override from the curve’s documented start point (Bark Day index or human-year threshold).
### A.1 Curves Registry — Schema (supports partial overrides)
```json
{
"curves": {
"group_default_v1": {
"label": "Group default (smoothed 15/9)",
"barkdays": { "1": 0.07, "2": 0.13, "...": "...", "24": 2.10 },
"source": "AKC 15/9 smoothed (internal fit)",
"notes": "Human years since DOB at each Bark Day index (1..24)."
},
"breed:LABRADOR_RETRIEVER:v1": {
"label": "Labrador Retriever (v1)",
"inherits": "group_default_v1",
"override_start": { "barkday": 16 },
"barkdays_override": { "16": 1.05, "17": 1.12, "...": "...", "24": 2.05 },
"extend": "table", // how to continue if more Bark Days are defined later
"source": "Breed-specific study (DOI TBD)",
"notes": "Overrides from Bark Day 16 onward; does not revert."
}
},
"defaults": {
"group_curve": "group_default_v1",
"overrides": {
"Labrador Retriever": "breed:LABRADOR_RETRIEVER:v1"
}
}
}
```
**Loader behavior:**
1) Read chosen curve ID (breed override or default).
2) If `override_start` exists, take `inherits` for indices below that start, then apply `barkdays_override` from the start onward.
3) If both define the same index, the **override wins**.
**Display:** When a breed override is applied, show:
“Using **{Curve Label}** from Bark Day {start} onward.”
---
## B. Size Scaling Factor `S` (±0.2) With Overrides
- **Baseline S = 1.00**. Example working values: **Chihuahua S = 0.88**, **Mastiff S = 1.16**.
- **Application:** If a breed uses the **default** curve, scale all Bark Day times:
`t_k_scaled = t_k * S` → `date_k = DOB + t_k_scaled * 365.25 days`.
- **When a breed has its own curve override:** We assume the curve already reflects size for that breed.
→ **Do not apply S** to the overridden segment **unless** the curve entry explicitly sets `"apply_scale": true`.
Schema extension (optional, per breed or per default):
```json
{
"curves": {
"breed:LABRADOR_RETRIEVER:v1": {
"inherits": "group_default_v1",
"override_start": { "barkday": 16 },
"barkdays_override": { "...": "..." },
"apply_scale": false
}
}
}
```
**Mixed-breed scaling:** Weighted factor across up to 3 breeds:
`S_mix = Σ (w_i * S_breed_i)` (fallback to group or 1.00 when missing).
---
## C. Bark Day Resolver (restate, Bark Day–centric)
Priority at Bark Day `k`:
1) Breed-level Bark Day content (weighted union for mixed), if present.
2) Group Bark Day defaults (`reco-barkday-banded.json` at `k`).
3) Trait inserts (`trait-inserts-barkday.json`, ranges expanded to include `k`).
4) Universal puppy (`universal-puppy-barkday.json` at `k`).
→ Deduplicate + cap **3–5 bullets** per lane.
**Curves selection:**
- Choose curve: breed override (if any) else default.
- Build `t_k` table (piecewise inherit/override).
- Apply `S` only if allowed for this curve/segment (see above).
- Convert to dates; set “Next Bark Day Plan — turning {k} on {DATE}”.
---
## D. TODOs to merge into next MASTER-NOTE revision
- [ ] Add `curves.json` with piecewise override schema (above).
- [ ] Populate **Labrador** `barkdays_override` (Bark Days 16..24) from the study.
- [ ] Add `size_scale` values to taxonomy; compute `S_mix` for mixed breeds.
- [ ] Implement loader in `app.js`: curve selection, piecewise inherit/override, conditional scaling.
- [ ] Update PDF header note to reflect curve override usage when applicable.
### **End of Document**
> Barkday™ — because every dog deserves their day.
---