Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

All notable changes to Context are documented here.

## 0.7.73 - 2026-10-19

- Plugin host discovery now preserves the inherited PATH, matching the environment used to launch commands, and safely quotes executable names.
- Permission-sensitive production submission tests use a native temporary filesystem so shared development mounts do not change their assertions.

## 0.7.72 - 2026-10-15

- Settling a source update or a revision queue no longer leaves `knowledge/structure.yaml` stale. When citations were relocated or repository content references advanced, the structure kept its previous input hash, so `verify` reported "Structure is stale; run Close" until Close ran again. The hash is now recomputed with the rewritten references; a structure that was already stale stays stale for Close.
Expand Down
30 changes: 15 additions & 15 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "context",
"version": "0.7.72",
"version": "0.7.73",
"packageManager": "bun@1.3.9",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion packages/context-cli/context-workflow/provider.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
schema: agent-graph.provider.v1
id: c4a/context
version: 0.7.72
version: 0.7.73
name: Context workflow
description: Internal work contract for Context knowledge workspaces.
graphs:
Expand Down
2 changes: 1 addition & 1 deletion packages/context-cli/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/context-cli",
"description": "Local runtime and Agent integration for traceable knowledge production",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
19 changes: 19 additions & 0 deletions packages/context-cli/src/__tests__/pluginCommandAvailable.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { expect, test } from "bun:test";
import { mkdtemp, writeFile, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { commandAvailable } from "../project/pluginInstallTargets.js";

test("host discovery uses inherited PATH and treats command names literally", async () => {
const root = await mkdtemp(join(tmpdir(), "context-plugin-path-"));
const previous = process.env.PATH;
try {
await writeFile(join(root, "context test host"), "#!/bin/sh\nexit 0\n", { mode: 0o755 });
process.env.PATH = `${root}:${previous ?? "/usr/bin:/bin"}`;
expect(await commandAvailable("context test host")).toBe(true);
expect(await commandAvailable("missing-host; true")).toBe(false);
} finally {
process.env.PATH = previous;
await rm(root, { recursive: true, force: true });
}
});
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { afterEach, expect, test } from "bun:test";
import { chmod, cp, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
import { join, resolve } from "node:path";
import { tmpdir } from "node:os";
import YAML from "yaml";
import { execFileSync, spawnSync } from "node:child_process";
import { completeProductionSubmission, productionSourceBaseline } from "../project/productionSubmission.js";
Expand Down Expand Up @@ -34,8 +35,7 @@ import { registerKnowledgeMaintenance, observeKnowledgeMaintenance, maintenanceR
const roots: string[] = [];
afterEach(async () => { for (const root of roots.splice(0)) await rm(root, { recursive: true, force: true }); });

async function fixture(initialize = false) {
const parent = resolve(".tmp/production-submission-tests");
async function fixture(initialize = false, parent = resolve(".tmp/production-submission-tests")) {
await mkdir(parent, { recursive: true });
const outer = await mkdtemp(join(parent, "case-"));
roots.push(outer);
Expand Down Expand Up @@ -333,7 +333,8 @@ test("changed long-term scope blocks pending acceptance without discarding accep
});

test("accepted production reaches actual Review apply without a Provider compile or revision batch", async () => {
const f = await fixture(true);
// Permission failure checks need native filesystem semantics, not a host bind mount.
const f = await fixture(true, join(tmpdir(), "context-production-submission-tests"));
// Isolate formal version discovery from the parent repository's ignored .tmp.
execFileSync("git", ["init", "--quiet"], { cwd: f.root });
await expect(readProductionReviewCandidates(f.root)).rejects.toThrow("Complete the current production stage");
Expand Down
2 changes: 1 addition & 1 deletion packages/context-cli/src/project/indexerBaseContracts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { bundledMarkdownReaderQuestionContracts } from
"./indexerBaseMarkdownAuthoringCatalog.js";

const BASE_CONTRACT_VERSION = "1.1.0";
export const BUNDLED_INDEXER_PARSER_PACKAGE_VERSION = "0.7.72";
export const BUNDLED_INDEXER_PARSER_PACKAGE_VERSION = "0.7.73";
const BUNDLED_PARSER_REQUIREMENTS = buildIndexerParserCapabilityRequirements(
BUNDLED_INDEXER_PARSER_PACKAGE_VERSION,
);
Expand Down
3 changes: 2 additions & 1 deletion packages/context-cli/src/project/pluginInstallTargets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ async function runExternalOptional(command: string, args: readonly string[]): Pr
}

export async function commandAvailable(command: string): Promise<boolean> {
return runExternalOptional("sh", ["-lc", `command -v ${command} >/dev/null 2>&1`]);
// Probe the same inherited PATH used by execFile; login profiles can replace it.
return runExternalOptional("sh", ["-c", `command -v ${shellQuote(command)} >/dev/null 2>&1`]);
}

async function claudePluginInstalled(pluginId: string): Promise<boolean> {
Expand Down
2 changes: 1 addition & 1 deletion packages/context/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/context",
"description": "Declarative SDK for Context knowledge sources, workflows, review, and package outputs",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/core",
"description": "Shared extraction types, schemas, and utilities for Context",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/dev-cli/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/dev-cli",
"description": "Developer menu for Context build, verification, link, and release preparation",
"version": "0.7.72",
"version": "0.7.73",
"private": true,
"type": "module",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion packages/extract-contract/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/extract-contract",
"description": "OpenAPI and GraphQL contract catalog adapter for Context",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/extract-go/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/extract-go",
"description": "Go extraction plugin and structural index for Context",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/extract-mdx/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/extract-mdx",
"description": "MDX component and example catalog bridge for Context",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/extract-proto/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/extract-proto",
"description": "Protocol Buffers IDL catalog parser for Context",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/extract-rush/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/extract-rush",
"description": "Rush workspace structural index for Context",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/extract-sql/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/extract-sql",
"description": "Dialect-bound lightweight SQL evidence adapter for Context",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/extract-style/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/extract-style",
"description": "Lightweight CSS and SCSS evidence adapter for Context",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/extract-thrift/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/extract-thrift",
"description": "Apache Thrift IDL catalog parser for Context",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/extract-ts/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/extract-ts",
"description": "TypeScript and JavaScript extraction plugin for the Context ExtractionResult v2 contract",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/extract/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/extract",
"description": "Language-plugin framework and repository runner for Context code evidence",
"version": "0.7.72",
"version": "0.7.73",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion packages/tui/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@c4a/tui",
"description": "Shared terminal UI components (Ink + React) for Context development tools",
"version": "0.7.72",
"version": "0.7.73",
"private": true,
"type": "module",
"license": "MIT",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "c4a",
"description": "Start or continue a project-local knowledge workspace through one graph-routed entry.",
"version": "0.7.72",
"version": "0.7.73",
"author": {
"name": "c4a"
},
Expand Down
4 changes: 2 additions & 2 deletions plugins/context/repo-install/codex/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "c4a",
"version": "0.7.72",
"version": "0.7.73",
"description": "Start or continue a project-local knowledge workspace through one graph-routed entry.",
"author": { "name": "c4a" },
"homepage": "https://github.com/context4ai/c4a",
Expand All @@ -10,7 +10,7 @@
"skills": "./skills/",
"interface": {
"displayName": "C4A Context",
"shortDescription": "Initialize and advance a local, source-linked project knowledge workspace.\nv0.7.72",
"shortDescription": "Initialize and advance a local, source-linked project knowledge workspace.\nv0.7.73",
"longDescription": "Create a Context workspace and use agent-guided next steps to register sources, run extraction, review candidates, build package outputs, and verify health without silently mutating source repositories.",
"developerName": "c4a",
"category": "Productivity",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "c4a",
"displayName": "C4A Context",
"version": "0.7.72",
"version": "0.7.73",
"description": "Start or continue a project-local knowledge workspace through one graph-routed entry.",
"author": {
"name": "Context4AI",
Expand Down
Loading