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
2 changes: 1 addition & 1 deletion .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "pinmind",
"version": "0.8.2",
"version": "0.9.0",
"description": "Adaptive RU/EN task controller with deterministic routing, outcome contracts, and verified evidence.",
"author": {
"name": "Pinmind Project"
Expand Down
2 changes: 1 addition & 1 deletion .grok-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "pinmind",
"version": "0.8.2",
"version": "0.9.0",
"description": "Adaptive RU/EN task controller with deterministic routing, outcome contracts, and verified evidence.",
"author": {
"name": "Pinmind Project"
Expand Down
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,28 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/2.0.0/), and

## [Unreleased]

## [0.9.0] - 2026-08-19

### Removed

- Token-usage receipts, `usage record`, `usage.json`, `token-usage.md`, and
token sections in reports. The kernel no longer stores or prints token
counts.

### Changed

- Router classifies by speech act before nouns. Critique, inspection, and
"think about" stay `audit` even when the sentence mentions code or
optimization. `чтобы он был более человечный` is not product-desire.
- Always-loaded `SKILL.md` is one screen. Work-loop and routing essays stay in
their reference files.
- Kernel router lives in `scripts/lib/route.mjs`. `core.mjs` re-exports it.

### Added

- Eight speech-act routing regressions. The deterministic route corpus is now
455 cases.

## [0.8.2] - 2026-08-19

### Added
Expand Down
4 changes: 2 additions & 2 deletions LANGUAGE_ROUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Language routing and activation evaluation

Status: Phase A is included in the stable `0.6` line, following its experimental introduction in `0.5.0-experimental`. The current `0.8.2` source has a **447-case deterministic routing regression corpus**, **64 closed-schema language-evaluation cases** (32 development and 32 frozen release-gate cases), and **28 host-activation fixtures**. The local evaluator and release gate are implemented; fresh-host selection and end-task utility remain separate, unproven layers. The release split is a fixed regression gate, not a statistically independent benchmark. This document does not claim that ChatGPT, Codex, or Grok will activate Pinmind for every possible phrase.
Status: Phase A is included in the stable `0.6` line, following its experimental introduction in `0.5.0-experimental`. The current `0.9.0` source has a **455-case deterministic routing regression corpus**, **64 closed-schema language-evaluation cases** (32 development and 32 frozen release-gate cases), and **28 host-activation fixtures**. The local evaluator and release gate are implemented; fresh-host selection and end-task utility remain separate, unproven layers. The release split is a fixed regression gate, not a statistically independent benchmark. This document does not claim that ChatGPT, Codex, or Grok will activate Pinmind for every possible phrase.

## Decision

Expand Down Expand Up @@ -137,7 +137,7 @@ Selection observations require a fresh ChatGPT chat or Codex thread and concrete

### Phase A — phrase corpus and evaluator (implemented)

1. The 447-case deterministic router corpus and 28 host-activation fixtures remain compatibility and host-boundary coverage; they are not substitutes for the split language corpus.
1. The 455-case deterministic router corpus and 28 host-activation fixtures remain compatibility and host-boundary coverage; they are not substitutes for the split language corpus.
2. `language-dev.json` and `language-release.json` contain 64 original or sanitized cases, 32 validated pairs, closed provenance, and non-overlapping prompt hashes.
3. `scripts/evaluate-language-routing.mjs` reports exact decisions, authority, mutation boundaries, pair agreement, unsafe downgrades, and locale/phenomenon slices. The frozen release gate requires 100% agreement.
4. Grow only from reviewed real misses; do not generate hundreds merely to raise a count. Keep the smaller representative host subset in `activation-smoke.json`.
Expand Down
2 changes: 1 addition & 1 deletion PRIVACY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Privacy

Pinmind `0.8.2` is a skills-only plugin. It provides local instructions, a bundled kernel, and offline AEP and language-routing evaluation corpora; it has no account system, connector, MCP server, telemetry service, or project-operated network endpoint.
Pinmind `0.9.0` is a skills-only plugin. It provides local instructions, a bundled kernel, and offline AEP and language-routing evaluation corpora; it has no account system, connector, MCP server, telemetry service, or project-operated network endpoint.

Pinmind processes only the task context and files made available by the active ChatGPT or Codex host. Data handling by that host and by any separately enabled tool is governed by the corresponding provider and user configuration.

Expand Down
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Pinmind is a Russian-and-English workflow controller packaged as a Grok skill and a Codex App plugin. It classifies non-trivial work, including colloquial and lightly misspelled Russian, applies a process proportional to risk, composes specialist skills, and requires current evidence before calling a task complete.

Current stable version: `0.8.2`.
Current stable version: `0.9.0`.

- GitHub repository marketplace: included in this repository.
- Universal Plugins Directory: **not listed yet**. ChatGPT catalog steps apply only after OpenAI approval and a live listing check.
Expand All @@ -16,14 +16,14 @@ Current stable version: `0.8.2`.
1. Add the pinned stable repository marketplace:

```bash
codex plugin marketplace add iammedved/Pinmind --ref v0.8.2
codex plugin marketplace add iammedved/Pinmind --ref v0.9.0
```

2. Start Codex, run `/plugins`, select **Pinmind Project**, and install **Pinmind**.
3. Start a new Codex session.
4. Run `/skills` and confirm that `pinmind` is available.

The repository marketplace is separate from OpenAI's universal Plugins Directory. Pinning `v0.8.2` selects this exact stable release; omit `--ref` only when you intentionally want the latest repository state.
The repository marketplace is separate from OpenAI's universal Plugins Directory. Pinning `v0.9.0` selects this exact stable release; omit `--ref` only when you intentionally want the latest repository state.

### Codex CLI: upgrade or reinstall a reviewed revision

Expand Down Expand Up @@ -64,7 +64,7 @@ grok plugin install . --trust

Start a new Grok session. Pinmind should appear in `/skills`. The host still chooses implicit activation; `$pinmind` or `@Pinmind` is the reliable trigger for critical work.

Start a new Codex session and send:
Send:

```text
$pinmind Audit this repository without changing files. Determine the route first and report only verified findings.
Expand Down Expand Up @@ -177,7 +177,7 @@ publish or display Codex cachebuster build metadata.

The stable public line starts at `0.6.0`. Backward-compatible fixes use patch
versions such as `0.6.1`, `0.6.2`, `0.6.3`, `0.8.1`, and `0.8.2`; backward-compatible feature releases use a
new minor such as `0.7.0` or `0.8.0`. Existing experimental tags are immutable history and
new minor such as `0.7.0`, `0.8.0`, or `0.9.0`. Existing experimental tags are immutable history and
are never moved to newer commits.

## Validation
Expand Down Expand Up @@ -218,6 +218,7 @@ node --test tests/language-routing-evaluator.test.mjs
node --test tests/release-verification.test.mjs
node scripts/validate-plugin-skill.mjs
node --check skills/pinmind/scripts/lib/core.mjs
node --check skills/pinmind/scripts/lib/route.mjs
node --check skills/pinmind/scripts/pinmind.mjs
node scripts/check-release-identity.mjs
node scripts/check-repository-diff.mjs
Expand Down
2 changes: 1 addition & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Verified baseline

The released public baseline is `v0.8.2`; see [CHANGELOG.md](CHANGELOG.md). It
The released public baseline is `v0.9.0`; see [CHANGELOG.md](CHANGELOG.md). It
provides deterministic post-activation routing, local run-state containment and
recovery diagnostics, baseline/freshness evidence, read-only `final check`, and
explicit `finalize`. It also includes the reviewed P0 routing contrasts, required
Expand Down
128 changes: 128 additions & 0 deletions evals/fixtures/routes.json
Original file line number Diff line number Diff line change
Expand Up @@ -7792,5 +7792,133 @@
"signalsInclude": [
"intent:change"
]
},
{
"name": "p083-speech-critique-inconsistencies-ru",
"input": {
"text": "покритикуй pinmind найти возможные не состыковки в тексте или в коде, продумай как можно было бы сделать проще и легче, подумай над оптимизацией кода, чтобы он был более человечный, а не ИИшный с присущим ему AI-slop"
},
"expected": "audit",
"pluginVersion": "0.8.3",
"surface": "public-route-cli",
"disposition": "human-authored",
"clarity": "clear",
"needsHumanConfirmation": false,
"signalsInclude": [
"intent:inspect",
"intent:think"
],
"signalsExclude": [
"intent:implement-directive",
"intent:change",
"intent:unrecognized"
]
},
{
"name": "p083-speech-think-simpler-ru",
"input": {
"text": "продумай как можно было бы сделать проще и легче"
},
"expected": "audit",
"pluginVersion": "0.8.3",
"surface": "public-route-cli",
"disposition": "human-authored",
"signalsInclude": [
"intent:think"
],
"signalsExclude": [
"intent:unrecognized",
"intent:change"
]
},
{
"name": "p083-speech-think-optimize-human-ru",
"input": {
"text": "подумай над оптимизацией кода, чтобы он был более человечный, а не ИИшный"
},
"expected": "audit",
"pluginVersion": "0.8.3",
"surface": "public-route-cli",
"disposition": "human-authored",
"signalsInclude": [
"intent:think"
],
"signalsExclude": [
"intent:implement-directive",
"intent:change"
]
},
{
"name": "p083-speech-quality-clause-not-desire-ru",
"input": {
"text": "чтобы он был более человечный"
},
"expected": "audit",
"pluginVersion": "0.8.3",
"surface": "public-route-cli",
"disposition": "human-authored",
"needsHumanConfirmation": true,
"signalsExclude": [
"intent:product-desire",
"intent:implement-directive"
]
},
{
"name": "p083-speech-find-inconsistencies-in-code-ru",
"input": {
"text": "найди несостыковки в тексте или в коде"
},
"expected": "audit",
"pluginVersion": "0.8.3",
"surface": "public-route-cli",
"disposition": "human-authored",
"signalsInclude": [
"intent:inspect"
],
"signalsExclude": [
"intent:change"
]
},
{
"name": "p083-speech-think-optimize-en",
"input": {
"text": "think about optimizing the code so it is more human, not AI-slop"
},
"expected": "audit",
"pluginVersion": "0.8.3",
"surface": "public-route-cli",
"disposition": "human-authored",
"signalsInclude": [
"intent:think"
],
"signalsExclude": [
"intent:change"
]
},
{
"name": "p083-speech-optimize-imperative-en",
"input": {
"text": "optimize the code to make it more human and less AI-slop"
},
"expected": "software-change",
"pluginVersion": "0.8.3",
"surface": "public-route-cli",
"disposition": "human-authored",
"signalsInclude": [
"intent:change"
]
},
{
"name": "p083-speech-audit-inconsistencies-en",
"input": {
"text": "Audit pinmind, find inconsistencies, think how to simplify the code so it feels more human"
},
"expected": "audit",
"pluginVersion": "0.8.3",
"surface": "public-route-cli",
"disposition": "human-authored",
"signalsExclude": [
"intent:change"
]
}
]
16 changes: 12 additions & 4 deletions evals/release-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"frozenInputs": [
{
"role": "router",
"path": "skills/pinmind/scripts/lib/core.mjs",
"sha256": "8bffc441e4921c2842c056d11feac9cf2b88181ab3861f5c033eaebe6891794d"
"path": "skills/pinmind/scripts/lib/route.mjs",
"sha256": "13afa103911b8b3ac41f683bc7540d84c58bbde6158d6af15082a309eb1ecbed"
},
{
"role": "language-schema-validator",
Expand All @@ -31,7 +31,7 @@
{
"role": "unsafe-negative-regressions",
"path": "evals/fixtures/routes.json",
"sha256": "84022417631cf34eaa19956b95547b9ebf667998a963010c7746082ec1075134"
"sha256": "bbe14873c7c41c4b8ee59a58dadef5bf7a589288e6f78edd1a8b3b4007deb6d0"
}
],
"commands": [
Expand Down Expand Up @@ -111,6 +111,14 @@
"skills/pinmind/scripts/lib/core.mjs"
]
},
{
"id": "route-syntax",
"argv": [
"node",
"--check",
"skills/pinmind/scripts/lib/route.mjs"
]
},
{
"id": "cli-syntax",
"argv": [
Expand Down Expand Up @@ -158,7 +166,7 @@
}
],
"fixtureCases": {
"routes": 447,
"routes": 455,
"activation": 28,
"aepDev": 8,
"aepRelease": 8,
Expand Down
3 changes: 2 additions & 1 deletion scripts/verify-release.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ const INVENTORY_KEYS = new Set(['testFiles', 'fixtureCases']);
const TEST_FILE_KEYS = new Set(['path', 'topLevelDeclarations']);

export const EXPECTED_FROZEN_INPUTS = Object.freeze([
['router', 'skills/pinmind/scripts/lib/core.mjs'],
['router', 'skills/pinmind/scripts/lib/route.mjs'],
['language-schema-validator', 'scripts/evaluate-language-routing.mjs'],
['github-web-flow-key', 'scripts/keys/github-web-flow.gpg'],
['development-corpus', 'evals/fixtures/language-dev.json'],
Expand All @@ -66,6 +66,7 @@ export const EXPECTED_COMMANDS = Object.freeze([
Object.freeze({ id: 'release-tests', argv: Object.freeze(['node', '--test', 'tests/release-verification.test.mjs']) }),
Object.freeze({ id: 'plugin-skill-validator', argv: Object.freeze(['node', 'scripts/validate-plugin-skill.mjs']) }),
Object.freeze({ id: 'core-syntax', argv: Object.freeze(['node', '--check', 'skills/pinmind/scripts/lib/core.mjs']) }),
Object.freeze({ id: 'route-syntax', argv: Object.freeze(['node', '--check', 'skills/pinmind/scripts/lib/route.mjs']) }),
Object.freeze({ id: 'cli-syntax', argv: Object.freeze(['node', '--check', 'skills/pinmind/scripts/pinmind.mjs']) }),
Object.freeze({ id: 'release-identity', argv: Object.freeze(['node', 'scripts/check-release-identity.mjs']) }),
Object.freeze({ id: 'diff-check', argv: Object.freeze(['node', 'scripts/check-repository-diff.mjs']) }),
Expand Down
Loading