@ultimat3/flags
Advanced tools
+6
-1
@@ -121,3 +121,8 @@ # @ultimat3/flags — boundary | ||
| - Nothing calls `flagsReport()` yet. It is the projection an `x flags [--json]` command and an MCP | ||
| `flags.list` tool should read; neither exists. | ||
| `flags.list` tool should read; neither exists. `projection.ts`'s own header said the opposite | ||
| until 12.0.0 — it named the CLI, the MCP tool and the manifest as readers — and the manifest was | ||
| never a candidate: it is derived from SOURCE, while `allFlags()` is runtime state an app's imports | ||
| fill, so a manifest build would publish an empty list. That is `@ultimat3/http`'s `appErrorStatus()`, | ||
| deleted for the same reason. A CLI command is the one reachable consumer, because `loadApp` runs | ||
| first. | ||
@@ -124,0 +129,0 @@ ## Commands |
+2
-2
| { | ||
| "name": "@ultimat3/flags", | ||
| "version": "11.3.0", | ||
| "version": "12.0.0", | ||
| "description": "Feature flags: permanent switches, and temporary ones that cannot be forgotten", | ||
@@ -34,4 +34,4 @@ "license": "MIT", | ||
| "dependencies": { | ||
| "@ultimat3/core": "11.3.0" | ||
| "@ultimat3/core": "12.0.0" | ||
| } | ||
| } |
+7
-3
@@ -165,5 +165,9 @@ # @ultimat3/flags | ||
| `flagsReport()` returns every declared flag with its kind, expiry, owner and whether it is expired, | ||
| sorted by key, plus the expired keys lifted out. It is the one shape `x flags --json`, an MCP tool | ||
| and the manifest should all read, so none of them recomputes "expired". | ||
| sorted by key, plus the expired keys lifted out. | ||
| **Offered, not published.** Nothing reads it yet: there is no `x flags` command, no `flags` section | ||
| in the manifest and no MCP tool, and this file claimed all three until 12.0.0. The manifest is not a | ||
| consumer it can ever have — a manifest is derived from source and this reads a registry an app's own | ||
| imports fill at runtime — so the one reachable surface is a CLI command, which loads the app first. | ||
| ## What it owns | ||
@@ -180,3 +184,3 @@ | ||
| | `src/evaluate.ts` | `isEnabled()` — the one way to ask | | ||
| | `src/projection.ts` | `flagsReport()` for the CLI, MCP and the manifest | | ||
| | `src/projection.ts` | `flagsReport()` — the shape a CLI command would print; nothing reads it yet | | ||
| | `src/errors.ts` | this package's X_* codes | | ||
@@ -183,0 +187,0 @@ |
+17
-3
@@ -1,4 +0,18 @@ | ||
| // Single responsibility: the declared flags as data — one JSON-safe shape for `x flags --json`, | ||
| // the MCP tool and the manifest, so all three answer "what is expired?" identically instead of | ||
| // each computing it. Same rule as `listErrorCodes()`: the projection lives with the registry. | ||
| // Single responsibility: the declared flags as data — one JSON-safe shape, so no surface has to | ||
| // compute "what is expired?" for itself. Same rule as `listErrorCodes()`: the projection lives | ||
| // with the registry. | ||
| // | ||
| // OFFERED, not published (`As of 2026-08-24`). This header used to state that `x flags --json`, | ||
| // an MCP tool and the manifest all read it. **None of the three exists**: there is no `x flags` | ||
| // command, `ARRAY_SECTIONS` in `@ultimat3/manifest` has no `flags` section, no MCP tool names one, | ||
| // and `flagsReport` has zero callers outside this package's own test. `packages/flags/CLAUDE.md` | ||
| // has always said so; only this file stated the plan as fact, which is the shape | ||
| // `@ultimat3/ai`'s `agent-facts.ts` names — the SHAPE a surface would publish, never a row any | ||
| // surface carries. | ||
| // | ||
| // And one of the three could never have been the consumer it named: a manifest is a build artefact | ||
| // derived from SOURCE, while `allFlags()` is process-global runtime state filled by the app's own | ||
| // imports — so in a CLI process that has not loaded the app this answers `{ flags: [], expired: [] | ||
| // }`, which is `@ultimat3/http`'s deleted `appErrorStatus()` exactly. A CLI command is the reachable | ||
| // consumer, because `loadApp` imports the app's modules before the command runs. | ||
@@ -5,0 +19,0 @@ import type { FlagKind } from './flag'; |
65092
2.82%876
1.62%194
2.11%+ Added
- Removed
Updated