---
title: "Knowledge Council"
description: "/council aggregates labeled engine votes. Stance differ, evidence, tension, three topics, AI synthesis off. Not a sixth engine."
locale: "en"
---
# Knowledge Council

`/council` is the pack page for `lib/evolvement/knowledge-council.ts`. The council **does not invent chart math**. Each ready system casts a family vote from `lib/evolvement/council-mappings.json` (`schema_version`, `source`, `rationale` on every entry). `daily-calendar.ts` imports that JSON. There are no leftover magic family tables in TypeScript.

`ring-config.evolvement.council` selects topics and the threshold:

- `minAgreeingSystems`: **3**
- `showDissent`: **true**
- `aiSynthesis`: **false**
- `topics`: `today_practice`, `week_focus`, `decision_style`

## Topics

| Topic | Question | Voters |
|-------|----------|--------|
| `today_practice` | What to do today | Personal Day, matrix center, hall, name `fullExpression`, HD type |
| `week_focus` | This week's emphasis | Personal Month, hall season, matrix year corner |
| `decision_style` | How to decide, not what to do | HD Authority, Life Path, Soul Urge |

All three topics have **`polarity: false`**. Non-winning ready systems use stance **`differ`**, never `oppose`. `oppose` is reserved (`opposeReservedFor`) for future polar topics.

## How a winner is chosen

`aggregateCouncilVotes` returns:

- `agreeing` / `differing` / `dissenting` / `abstained`
- `evidence[]`: `{ systemId, familyKey, evidenceKeys[], confidence }`
- `tension`: second-largest family and its systems
- `weights`: **confidence-weighted** family scores, not plain plurality
- `metThreshold` when at least `minAgreeingSystems` independent systems support the winning family
- `recommendationKey` pointing at `familyPractice.{initiate|relate|express|structure|change|care|reflect|build|complete}`

Families are an overlay so five engines can talk without mixing formulas. They are not a prediction and not a sixth chart.

Missing inputs → **abstain**. Human Design still pending tz → abstain, not a fake Projector.

## Page and mirror

Pack `/council` shows topic tabs, per-system evidence (translated keys), agreed / differed / abstained, and a growth-edge tension card. It must not print raw `support` / `differ` as the only UI. The Cosmic Mirror council card is the compact version of the same object. Bot `/council` prints today's practice and agreeing system names.

## AI synthesis (off)

`lib/evolvement/council-synthesis.ts` can call Layer 1 `createLLMClientAsync().complete(prompt)` when `aiSynthesis` is true. Allowed prompt inputs: labeled votes, evidence keys, translated meaning strings. **Forbidden:** vault body, diary, raw names, raw birth dates beyond what the votes already contain. Output is one paragraph plus systems relied on, cached in `n9life_council_log.synthesis`. Default remains **off**.

Truth lens: `n9life-knowledge-council-orchestrator`.

> **Error**
> If a future change passes `n9life_aspirations_vault` rows into `aggregateCouncilVotes` or the synthesis prompt, that is a firewall failure. Fail the task rather than ship it.

  
- [n9life/today-and-calendar](/docs/n9life/today-and-calendar.md) — Same-workflow: today API writes n9life_council_log

  
- [n9life/numerology](/docs/n9life/numerology.md) — Depends-on: Personal Day and Life Path voters

  
- [n9life/human-design](/docs/n9life/human-design.md) — Depends-on: type and authority voters

  
- [n9life/vault-and-privacy](/docs/n9life/vault-and-privacy.md) — Depends-on: vault is not a voter
