pluribus-context 0.3.19 → 0.3.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.21 - 2026-05-19
|
|
4
|
+
|
|
5
|
+
- Extended `pluribus audit --fidelity-report` with `effectiveContext` evidence so monorepo reviewers can see that built-in targets currently prove repo-root context only, not root→subpath inheritance or path isolation.
|
|
6
|
+
- Added an explicit `effective-context-is-repo-root` warning and `no-path-scope-evidence` semantic marker to avoid treating generated root instruction files as proof of subdirectory behavior.
|
|
7
|
+
- Updated the community review packet and portability fidelity docs to frame monorepo path scope as an evidence question: what context does the agent actually load from `apps/client/`?
|
|
8
|
+
|
|
9
|
+
## 0.3.20 - 2026-05-18
|
|
10
|
+
|
|
11
|
+
- Added a 60-second native-vs-fallback smoke to the community review packet so directory/list reviewers can see Bob native `.bob/rules/*.md` differ from OpenClaw/AGENTS.md generic fallback.
|
|
12
|
+
- Extended `npm run review:smoke` to execute that fidelity demo against the published npm package and assert `nativeDiscoverySurface`, `genericFallback`, and `manualActivationRequired` fields.
|
|
13
|
+
|
|
3
14
|
## [Unreleased]
|
|
4
15
|
|
|
5
16
|
All notable changes to Pluribus are documented here.
|
|
@@ -91,6 +91,25 @@ Expected result:
|
|
|
91
91
|
- `sync --dry-run` previews generated context files without writing them.
|
|
92
92
|
- `audit --ci` may exit `1` before generated files are synced; that is expected when outputs are missing or drifted.
|
|
93
93
|
|
|
94
|
+
## 60-second native-vs-fallback smoke
|
|
95
|
+
|
|
96
|
+
Use this when reviewing the fidelity-audit positioning. It demonstrates the difference between a native tool discovery surface and a generic fallback in a clean directory:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
mkdir pluribus-fidelity && cd pluribus-fidelity
|
|
100
|
+
npx --yes pluribus-context@latest init --name "Fidelity review" --description "Native vs fallback smoke" --tools bob,openclaw
|
|
101
|
+
npx --yes pluribus-context@latest sync
|
|
102
|
+
npx --yes pluribus-context@latest audit --json --fidelity-report --output fidelity.json
|
|
103
|
+
node -e "const r=require('./fidelity.json'); console.log(r.fidelityReport.targets.map(t => ({ toolId: t.toolId, file: t.files[0], nativeDiscoverySurface: t.nativeDiscoverySurface, genericFallback: t.genericFallback, manualActivationRequired: t.manualActivationRequired, effectiveContextScope: t.effectiveContext?.scope })))"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Expected result:
|
|
107
|
+
|
|
108
|
+
- Bob writes `.bob/rules/pluribus.md` and reports `nativeDiscoverySurface: ".bob/rules/*.md"`, `genericFallback: false`, `manualActivationRequired: false`.
|
|
109
|
+
- OpenClaw writes `AGENTS.md` and reports `nativeDiscoverySurface: "AGENTS.md"`, `genericFallback: true`, `manualActivationRequired: false`.
|
|
110
|
+
- Both targets report `effectiveContext.scope: "repo-root"` and `pathScoped: false`; for monorepos this is a warning that subdirectory inheritance/isolation still needs a separate smoke.
|
|
111
|
+
- This is the core Pluribus distinction for reviewers: generated file exists is not enough; the report should show whether the target uses native discovery or a generic fallback, and what effective context scope has actually been proven.
|
|
112
|
+
|
|
94
113
|
## Useful links
|
|
95
114
|
|
|
96
115
|
- npm package: <https://www.npmjs.com/package/pluribus-context>
|
|
@@ -77,7 +77,7 @@ Pluribus is intentionally narrower than a skill registry or memory layer:
|
|
|
77
77
|
- `pluribus.md` keeps the claim in one reviewed source of truth.
|
|
78
78
|
- `sync --dry-run` previews target-specific outputs before writing files.
|
|
79
79
|
- generated files carry a warning header so manual edits are visible.
|
|
80
|
-
- `audit --json --fidelity-report` gives CI/reviewers a machine-readable check for missing/drifted outputs plus target-by-target section loss, activation shape, native discovery surface, resolution anchor, generic fallback status, and portability warnings.
|
|
80
|
+
- `audit --json --fidelity-report` gives CI/reviewers a machine-readable check for missing/drifted outputs plus target-by-target section loss, activation shape, native discovery surface, resolution anchor, generic fallback status, effective context scope, and portability warnings.
|
|
81
81
|
- remote imports are opt-in, locked, cached, and digest-checked before becoming shared context.
|
|
82
82
|
|
|
83
83
|
That does **not** prove runtime behavior. You still need tool-specific smoke tests for load order, path/glob activation, available tools, MCP servers, and permission semantics.
|
|
@@ -90,9 +90,10 @@ For each selected target, the JSON report includes:
|
|
|
90
90
|
- `resolutionAnchor` — where the generated surface is resolved from today (`repo-root` for built-in targets).
|
|
91
91
|
- `genericFallback` — whether the output is a broad agent fallback surface rather than a target-specific native surface.
|
|
92
92
|
- `manualActivationRequired` — whether Pluribus knows the output requires manual activation after generation. Built-in project-wide targets are currently `false`; future scoped/skill targets may differ.
|
|
93
|
-
- `
|
|
93
|
+
- `effectiveContext` — what Pluribus can prove about the context a target receives. Built-in targets currently report `scope: repo-root`, `pathScoped: false`, `inheritance: none-modeled`, and `overrideBehavior: none-modeled`; this is explicit evidence that monorepo path inheritance/isolation still needs a separate smoke.
|
|
94
|
+
- `semanticDifference` — a compact list such as `section-loss`, `project-wide-only`, `no-path-scope-evidence`, or `generic-agent-file` so reviewers can distinguish “file exists” from “same behavior is preserved.”
|
|
94
95
|
|
|
95
|
-
These fields are intentionally boring. They help reviewers catch cases like “installed files exist but the agent will not discover them,”
|
|
96
|
+
These fields are intentionally boring. They help reviewers catch cases like “installed files exist but the agent will not discover them,” “two targets share a generic file but do not actually have the same loading semantics,” or “root and subfolder instruction files exist but nobody has proven the effective context for `apps/client/`.”
|
|
96
97
|
|
|
97
98
|
## Suggested workflow for maintainers
|
|
98
99
|
|
|
@@ -100,7 +101,8 @@ These fields are intentionally boring. They help reviewers catch cases like “i
|
|
|
100
101
|
2. Generate target outputs with `sync --dry-run` and inspect semantic loss.
|
|
101
102
|
3. Keep target-native instructions when a semantic cannot be represented everywhere.
|
|
102
103
|
4. Commit a small audit artifact (`pluribus audit --json --fidelity-report --output reports/pluribus-audit.json`) when you want CI/review evidence.
|
|
103
|
-
5.
|
|
104
|
+
5. For monorepos, treat `effectiveContext.scope: repo-root` as a warning, not proof. Add a target-specific smoke for the path you care about, for example `apps/client/` should load root + client context but not `apps/auth/` rules.
|
|
105
|
+
6. Update the claim whenever a new target is added, a tool changes capability names, a subdirectory context is introduced, or a permission/security default changes.
|
|
104
106
|
|
|
105
107
|
## Feedback wanted
|
|
106
108
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pluribus-context",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.21",
|
|
4
4
|
"description": "AI context/rules sync and fidelity audit CLI for CLAUDE.md, Claude Code, Cursor rules, Copilot instructions, OpenClaw, Windsurf, Continue, Zed, Bob, and semantic drift.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://github.com/caioribeiroclw-pixel/pluribus#readme",
|
package/src/commands/audit.js
CHANGED
|
@@ -294,6 +294,8 @@ function buildFidelityReport({ cwd, sections, tools, loadSkill }) {
|
|
|
294
294
|
const discovery = inferDiscovery(toolId, outputFiles)
|
|
295
295
|
const represented = presentSections.filter((name) => representedSections.has(name.toLowerCase()))
|
|
296
296
|
|
|
297
|
+
const effectiveContext = inferEffectiveContext(toolId, outputFiles)
|
|
298
|
+
|
|
297
299
|
return {
|
|
298
300
|
toolId,
|
|
299
301
|
files: outputFiles,
|
|
@@ -302,7 +304,8 @@ function buildFidelityReport({ cwd, sections, tools, loadSkill }) {
|
|
|
302
304
|
genericFallback: discovery.genericFallback,
|
|
303
305
|
manualActivationRequired: discovery.manualActivationRequired,
|
|
304
306
|
activation,
|
|
305
|
-
|
|
307
|
+
effectiveContext,
|
|
308
|
+
semanticDifference: summarizeSemanticDifference({ unsupportedSections, activation, discovery, effectiveContext }),
|
|
306
309
|
representedSections: represented,
|
|
307
310
|
unsupportedSections,
|
|
308
311
|
}
|
|
@@ -327,6 +330,14 @@ function buildFidelityReport({ cwd, sections, tools, loadSkill }) {
|
|
|
327
330
|
})
|
|
328
331
|
}
|
|
329
332
|
|
|
333
|
+
if (targets.some((target) => target.effectiveContext?.scope === 'repo-root')) {
|
|
334
|
+
warnings.push({
|
|
335
|
+
code: 'effective-context-is-repo-root',
|
|
336
|
+
target: '*',
|
|
337
|
+
message: 'Effective context evidence is repo-root only; Pluribus does not currently prove root→subpath inheritance, overrides, or path isolation for monorepos.',
|
|
338
|
+
})
|
|
339
|
+
}
|
|
340
|
+
|
|
330
341
|
const advancedSections = ['workflow', 'context', 'examples', 'anti-patterns'].filter((name) => lowerPresentSections.has(name))
|
|
331
342
|
if (advancedSections.length > 0 && warnings.some((warning) => warning.code === 'section-not-rendered-by-target')) {
|
|
332
343
|
warnings.push({
|
|
@@ -387,7 +398,19 @@ function inferDiscovery(toolId, outputFiles) {
|
|
|
387
398
|
}
|
|
388
399
|
}
|
|
389
400
|
|
|
390
|
-
function
|
|
401
|
+
function inferEffectiveContext(toolId, outputFiles) {
|
|
402
|
+
return {
|
|
403
|
+
scope: 'repo-root',
|
|
404
|
+
pathScoped: false,
|
|
405
|
+
inheritance: 'none-modeled',
|
|
406
|
+
overrideBehavior: 'none-modeled',
|
|
407
|
+
isolationEvidence: 'not-modeled',
|
|
408
|
+
entrypoints: outputFiles,
|
|
409
|
+
note: `${toolId} output is audited as repo-root context only; verify subdirectory load order separately in monorepos.`,
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
function summarizeSemanticDifference({ unsupportedSections, activation, discovery, effectiveContext }) {
|
|
391
414
|
const differences = []
|
|
392
415
|
|
|
393
416
|
if (unsupportedSections.length > 0) {
|
|
@@ -398,6 +421,10 @@ function summarizeSemanticDifference({ unsupportedSections, activation, discover
|
|
|
398
421
|
differences.push('project-wide-only')
|
|
399
422
|
}
|
|
400
423
|
|
|
424
|
+
if (effectiveContext?.pathScoped === false) {
|
|
425
|
+
differences.push('no-path-scope-evidence')
|
|
426
|
+
}
|
|
427
|
+
|
|
401
428
|
if (discovery.genericFallback) {
|
|
402
429
|
differences.push('generic-agent-file')
|
|
403
430
|
}
|
|
@@ -422,10 +449,13 @@ function printFidelityReport(report) {
|
|
|
422
449
|
const discovery = target.nativeDiscoverySurface
|
|
423
450
|
? `; surface: ${target.nativeDiscoverySurface}`
|
|
424
451
|
: ''
|
|
452
|
+
const scope = target.effectiveContext?.scope
|
|
453
|
+
? `; effective context: ${target.effectiveContext.scope}`
|
|
454
|
+
: ''
|
|
425
455
|
const semantics = target.semanticDifference?.length
|
|
426
456
|
? `; semantic: ${target.semanticDifference.join(', ')}`
|
|
427
457
|
: ''
|
|
428
|
-
console.log(` • ${target.toolId}: ${target.activation.kind}${discovery}${unsupported}${semantics}`)
|
|
458
|
+
console.log(` • ${target.toolId}: ${target.activation.kind}${discovery}${scope}${unsupported}${semantics}`)
|
|
429
459
|
}
|
|
430
460
|
|
|
431
461
|
for (const warning of report.warnings) {
|
package/src/utils/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '0.3.
|
|
1
|
+
export const VERSION = '0.3.21'
|