feat(consulting): Rob BODi fitness-lane operating floor — get, talk, move clients - #656
Conversation
…move
The first landed increment of the niche-funnel engine (FUNNEL-ENGINE.md):
Rob's fitness lane rebuilt as a runnable floor from his own recovered BODi
substrate (Archive4T, 2026-04-25 corpus — gap map, production stack,
attractor law, agent fleet, residual-blockers ledger).
- ROB-BODI-OPERATING-FLOOR.md — get clients (content-led, inbound-only;
hashtag scraping formally retired), talk to clients (six conversation
tracks, all human-fired), move them (stage map + daily/weekly/monthly
cadence + Rob's own KPIs)
- instances/rob-fitness.yaml — machine-readable instance config: offer
ladder w/ affiliate disclosure, L0-L4 stages each with entry/exit/
artifact/human-gate, Teamzy attribution fields, owed slots
- templates/talk-tracks-fitness.md — the six tracks + graceful exits;
affiliate link stays a declared {{slot}} until Rob provides it
- templates/capture-form-fitness.md — the promised L2 capture-form
template, with the niche swap-table for Jessica/John F. reuse
- validate-funnel.py — Engine Rules #1-7 (completeness, gated stages,
manual mode, no cold-pressure tactics, slot integrity, offer integrity,
engagement link); negative-tested; wired into the engine done predicate
- rob.yaml — two newly recovered owed atoms homed (Teamzy field schema,
reel/short links for the L0 inventory) + operating-floor pointer
Gates: ruff check+format clean; validate-funnel 1/1; validate-consulting
5/5; git diff --check clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 87a6cb41cd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| def _negated(line: str) -> bool: | ||
| """A line that forbids a tactic is not a violation of it.""" | ||
| stripped = line.strip().strip("-\"' ").lower() | ||
| return stripped.startswith(("no ", "not ", "never ")) or "never" in stripped |
There was a problem hiding this comment.
Negate only the matched keyword clause
If a live YAML scalar contains both a disclaimer and an unsafe instruction, e.g. Never scrape; enable auto-send for warm leads, _negated returns true for the entire value, so the Rule #3/#4 loops skip every matched keyword in that scalar and --fleet can report a pass. That makes the new predicate unable to enforce the manual/no-cold-pressure boundary whenever configs are written as paragraphs or combined sentences.
Useful? React with 👍 / 👎.
| ## Done predicate (this floor) | ||
|
|
||
| ```bash | ||
| python organs/consulting/funnel/validate-funnel.py --quiet \ |
There was a problem hiding this comment.
Pass a target to the funnel validator
As written, this done predicate invokes the new funnel validator with neither --fleet nor an instance path; the script's argument handling only builds targets in those cases, so --quiet alone exits through the no-target branch with status 2 before the consulting validation runs. Anyone following this floor's predicate from the repo root will get a failing check even when the shipped instance is valid.
Useful? React with 👍 / 👎.
| for token in sorted(set(SLOT_RE.findall(raw))): | ||
| if token not in owed_set: |
There was a problem hiding this comment.
Verify owed slots against the engagement record
When an instance adds a placeholder and also lists that name in owed_slots, this check passes without confirming the linked engagement actually records the owed human atom. That lets a future config satisfy Rule #5 entirely inside the same file (and silently fabricate a missing affiliate/link/form slot), even though the schema comment requires each slot to correspond to an owed atom in the engagement record.
Useful? React with 👍 / 👎.
| elif isinstance(node, dict): | ||
| for value in node.values(): | ||
| out.extend(_walk_strings(value)) |
There was a problem hiding this comment.
Include YAML keys in prohibited-term scans
If a live tactic is encoded in a key name, e.g. cadence: {auto_send: daily} or a stage field named bulk_dm, _walk_strings only descends into mapping values, so Rule #3/#4 never sees the prohibited term and --fleet can pass. Since these instance files are configuration, key names are part of the live config surface and need to be scanned or schema-validated too.
Useful? React with 👍 / 👎.
| delivery: "{{ROB_AFFILIATE_LINK}} — slot stays empty until Rob provides his personal link" | ||
| - tier: "vip" | ||
| name: "VIP coaching group" | ||
| price: "monthly, set by Rob" |
There was a problem hiding this comment.
Specify the paid VIP offer price
For Rob's current instance, the committed engine and engagement records still name concrete L3 prices ($300/mo cohort and $500 physical+app), but the machine-readable offer config leaves the VIP price as monthly, set by Rob. Anything consuming this instance as the authoritative offer ladder cannot render or compare that paid tier, and Rule #6 still considers it fully specified, so the shipped config is not actually executable for this offer.
Useful? React with 👍 / 👎.
What this is
The first landed increment the niche-funnel engine promised (#649): Rob's BODi fitness lane as a runnable operating floor — how he gets clients, what he says to them, and how each one moves L0→L4. Built from Rob's own recovered substrate (
Archive4T:/workspace-backup/organvm/_agent/hokage-chess/docs/substrate/bodi/— gap map, production stack, attractor law, residual-blockers ledger), not invented.Contents
organs/consulting/funnel/ROB-BODI-OPERATING-FLOOR.mdorgans/consulting/funnel/instances/rob-fitness.yamlorgans/consulting/funnel/templates/talk-tracks-fitness.mdorgans/consulting/funnel/templates/capture-form-fitness.mdorgans/consulting/funnel/validate-funnel.pyorgans/consulting/FUNNEL-ENGINE.mdorgans/consulting/engagements/rob.yamlBoundary (unchanged, enforced by predicate)
Every outbound act is fired by Rob's own hand; scraping/bulk-DM tactics are formally
retired_tacticsand Rule #4 rejects them in any live config; the offer track carries plain affiliate disclosure (BODi is 1-level affiliate since 2025-01-01).Gates (all local, all green)
ruff check+ruff format --checkon the new script: cleanvalidate-funnel.py --fleet: 1/1 PASS (+ negative test exits 1 with all rule classes firing)validate-consulting.py --fleet: 5/5 PASS — Concordiagit diff --check: cleanNon-website-sensitive (organs/** only — no deploy-trigger paths).
🤖 Generated with Claude Code