snipara-companion 4.2.1 → 4.2.3
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 +10 -0
- package/README.md +4 -0
- package/dist/index.js +79 -21
- package/docs/skills/README.md +33 -0
- package/docs/skills/snipara-context-workflow/SKILL.md +32 -0
- package/docs/skills/snipara-fix-with-proof/SKILL.md +26 -0
- package/docs/skills/snipara-resume-work/SKILL.md +27 -0
- package/docs/skills/snipara-sourced-answer/SKILL.md +27 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
Release notes for `snipara-companion`, newest first.
|
|
4
4
|
|
|
5
|
+
## 4.2.3
|
|
6
|
+
|
|
7
|
+
- Skip hosted routing-policy discovery for ordinary LITE workflows; preserve explicit routing, active local policy and Orchestrator handoff requests.
|
|
8
|
+
- Keep bounded task guidance in LITE regardless of file count unless multi-phase work is requested.
|
|
9
|
+
- Distribute four concise, optional agent skills for direct fixes, sourced answers, task resumption and context retrieval.
|
|
10
|
+
|
|
11
|
+
## 4.2.2
|
|
12
|
+
|
|
13
|
+
- Propagate collaboration guard failures and run the pre-commit guard before mutating staged files.
|
|
14
|
+
|
|
5
15
|
## 4.2.1
|
|
6
16
|
|
|
7
17
|
- Forward validation scope only to Sandbox commands that accept it, while preserving scoped coordinator runs.
|
package/README.md
CHANGED
|
@@ -16,6 +16,10 @@ Snipara adds sourced project context and shared memory when you connect it.
|
|
|
16
16
|
Orchestrator adds optional execution and integration controls. Each can be
|
|
17
17
|
used independently.
|
|
18
18
|
|
|
19
|
+
For a clear, bounded edit, work directly with your agent and run the relevant
|
|
20
|
+
checks. Add a managed task when continuity or evidence tracking helps. The
|
|
21
|
+
[optional agent skills](docs/skills/README.md) follow the same principle.
|
|
22
|
+
|
|
19
23
|
<a id="install"></a>
|
|
20
24
|
|
|
21
25
|
## Start with a local task
|
package/dist/index.js
CHANGED
|
@@ -24106,9 +24106,11 @@ function loadCollaborationState(rootDir = process.cwd()) {
|
|
|
24106
24106
|
schemaVersion: "snipara.collaboration.v1",
|
|
24107
24107
|
updatedAt: typeof parsed.updatedAt === "string" ? parsed.updatedAt : (/* @__PURE__ */ new Date()).toISOString(),
|
|
24108
24108
|
workSessionId: normalizeOptionalString3(parsed.workSessionId),
|
|
24109
|
-
workflowSessions: Object.fromEntries(
|
|
24110
|
-
(
|
|
24111
|
-
|
|
24109
|
+
workflowSessions: Object.fromEntries(
|
|
24110
|
+
Object.entries(parsed.workflowSessions ?? {}).filter(
|
|
24111
|
+
([key, value]) => /^[a-f0-9]{64}$/.test(key) && typeof value === "string" && value.length > 0
|
|
24112
|
+
)
|
|
24113
|
+
),
|
|
24112
24114
|
sessionId: normalizeOptionalString3(parsed.sessionId),
|
|
24113
24115
|
actorId: normalizeOptionalString3(parsed.actorId),
|
|
24114
24116
|
actorType: normalizeActorType(parsed.actorType),
|
|
@@ -24357,10 +24359,15 @@ async function workflowCollaborationStart(options) {
|
|
|
24357
24359
|
const session = hostedSession.status === "ok" ? hostedSession.data?.session : void 0;
|
|
24358
24360
|
const workSessionId = session?.id ?? persistedSessionId ?? logicalSessionId;
|
|
24359
24361
|
if (session) {
|
|
24360
|
-
state.workflowSessions = {
|
|
24362
|
+
state.workflowSessions = {
|
|
24363
|
+
...state.workflowSessions,
|
|
24364
|
+
[sessionKey]: session.id
|
|
24365
|
+
};
|
|
24361
24366
|
}
|
|
24362
24367
|
const effectiveResources = hostedSession.status === "ok" ? hostedSession.data?.resources ?? resources : resources;
|
|
24363
|
-
let hostedClaim = {
|
|
24368
|
+
let hostedClaim = {
|
|
24369
|
+
status: "skipped"
|
|
24370
|
+
};
|
|
24364
24371
|
const shouldClaim = options.mode === "full" || options.mode === "orchestrate";
|
|
24365
24372
|
if (hostedSession.status === "ok" && shouldClaim && (files.length > 0 || effectiveResources.length > 0)) {
|
|
24366
24373
|
hostedClaim = await maybeCreateHostedLeases(context, {
|
|
@@ -24895,7 +24902,9 @@ async function runCollaborationWatchTick(context, state, options) {
|
|
|
24895
24902
|
let heartbeatHosted = {
|
|
24896
24903
|
status: "skipped"
|
|
24897
24904
|
};
|
|
24898
|
-
let claimHosted = {
|
|
24905
|
+
let claimHosted = {
|
|
24906
|
+
status: "skipped"
|
|
24907
|
+
};
|
|
24899
24908
|
let releaseHosted = {
|
|
24900
24909
|
status: "skipped"
|
|
24901
24910
|
};
|
|
@@ -24942,7 +24951,9 @@ async function runCollaborationWatchTick(context, state, options) {
|
|
|
24942
24951
|
releaseHosted = await releaseHostedLeases(
|
|
24943
24952
|
context,
|
|
24944
24953
|
staleActiveLeases.map((lease) => lease.id),
|
|
24945
|
-
{
|
|
24954
|
+
{
|
|
24955
|
+
reason: "Released by collaboration watch because the resource is no longer active."
|
|
24956
|
+
}
|
|
24946
24957
|
);
|
|
24947
24958
|
const releasedIds = new Set(
|
|
24948
24959
|
releaseHosted.status === "ok" ? (releaseHosted.data ?? []).map((item) => item.lease.id) : staleActiveLeases.map((lease) => lease.id)
|
|
@@ -25044,30 +25055,58 @@ function deriveGuardProfileResources(profile, files) {
|
|
|
25044
25055
|
}
|
|
25045
25056
|
if (profile === "pre-deploy") {
|
|
25046
25057
|
resources.push(
|
|
25047
|
-
{
|
|
25048
|
-
|
|
25058
|
+
{
|
|
25059
|
+
kind: "DEPLOY",
|
|
25060
|
+
id: "production-deployment",
|
|
25061
|
+
label: "Production deployment"
|
|
25062
|
+
},
|
|
25063
|
+
{
|
|
25064
|
+
kind: "SURFACE",
|
|
25065
|
+
id: "deployment",
|
|
25066
|
+
label: "Deployment and infrastructure"
|
|
25067
|
+
}
|
|
25049
25068
|
);
|
|
25050
25069
|
}
|
|
25051
25070
|
if (profile === "migration" || profile === "schema") {
|
|
25052
25071
|
resources.push(
|
|
25053
|
-
{
|
|
25072
|
+
{
|
|
25073
|
+
kind: "SCHEMA",
|
|
25074
|
+
id: "prisma:tenant_snipara",
|
|
25075
|
+
label: "Prisma tenant_snipara schema"
|
|
25076
|
+
},
|
|
25054
25077
|
{ kind: "SURFACE", id: "database", label: "Database and schema" }
|
|
25055
25078
|
);
|
|
25056
25079
|
}
|
|
25057
25080
|
if (profile === "release-package") {
|
|
25058
|
-
resources.push({
|
|
25081
|
+
resources.push({
|
|
25082
|
+
kind: "SURFACE",
|
|
25083
|
+
id: "release-package",
|
|
25084
|
+
label: "Package release surface"
|
|
25085
|
+
});
|
|
25059
25086
|
}
|
|
25060
25087
|
if (profile === "pre-commit" || profile === "pre-push") {
|
|
25061
25088
|
if (files.some(isPrismaSchemaPath)) {
|
|
25062
25089
|
resources.push(
|
|
25063
|
-
{
|
|
25090
|
+
{
|
|
25091
|
+
kind: "SCHEMA",
|
|
25092
|
+
id: "prisma:tenant_snipara",
|
|
25093
|
+
label: "Prisma tenant_snipara schema"
|
|
25094
|
+
},
|
|
25064
25095
|
{ kind: "SURFACE", id: "database", label: "Database and schema" }
|
|
25065
25096
|
);
|
|
25066
25097
|
}
|
|
25067
25098
|
if (files.some(isDeploymentPath)) {
|
|
25068
25099
|
resources.push(
|
|
25069
|
-
{
|
|
25070
|
-
|
|
25100
|
+
{
|
|
25101
|
+
kind: "DEPLOY",
|
|
25102
|
+
id: "production-deployment",
|
|
25103
|
+
label: "Production deployment"
|
|
25104
|
+
},
|
|
25105
|
+
{
|
|
25106
|
+
kind: "SURFACE",
|
|
25107
|
+
id: "deployment",
|
|
25108
|
+
label: "Deployment and infrastructure"
|
|
25109
|
+
}
|
|
25071
25110
|
);
|
|
25072
25111
|
}
|
|
25073
25112
|
if (files.some((file) => file.endsWith("package.json") || file.includes("/package.json"))) {
|
|
@@ -25256,7 +25295,7 @@ function buildCollaborationGitHookBlock(hookName) {
|
|
|
25256
25295
|
const profile = hookName === "pre-push" ? "pre-push" : "pre-commit";
|
|
25257
25296
|
return [
|
|
25258
25297
|
collaborationHookBlockMarker(hookName, "start"),
|
|
25259
|
-
"# Atomically claim checkout git writes, then block unsafe parallel edits.",
|
|
25298
|
+
profile === "pre-commit" ? "# Request a cooperative checkout lease before changing the index." : "# Atomically claim checkout git writes, then block unsafe parallel edits.",
|
|
25260
25299
|
'if [ "${SNIPARA_COLLABORATION_GUARD:-1}" = "0" ]; then',
|
|
25261
25300
|
' echo "Snipara collaboration guard bypassed by SNIPARA_COLLABORATION_GUARD=0" >&2',
|
|
25262
25301
|
"else",
|
|
@@ -25270,7 +25309,7 @@ function buildCollaborationGitHookBlock(hookName) {
|
|
|
25270
25309
|
" return 127",
|
|
25271
25310
|
" fi",
|
|
25272
25311
|
" }",
|
|
25273
|
-
` snipara_companion_hook collaboration claim --resource SURFACE:checkout-git-write --mode EXCLUSIVE --ttl-seconds 300 --reason "${profile} git write" --json >/dev/null || true`,
|
|
25312
|
+
` snipara_companion_hook collaboration claim --resource SURFACE:checkout-git-write --mode EXCLUSIVE --ttl-seconds 300 --reason "${profile} git write" --json >/dev/null || ${profile === "pre-commit" ? "exit $?" : "true"}`,
|
|
25274
25313
|
" snipara_companion_guard() {",
|
|
25275
25314
|
` snipara_companion_hook collaboration guard --profile ${profile} --action ${profile} --resource SURFACE:checkout-git-write --enforce "$@" --json >/dev/null`,
|
|
25276
25315
|
" }",
|
|
@@ -25287,7 +25326,7 @@ function buildCollaborationGitHookBlock(hookName) {
|
|
|
25287
25326
|
" else",
|
|
25288
25327
|
" snipara_companion_guard",
|
|
25289
25328
|
" fi",
|
|
25290
|
-
"fi",
|
|
25329
|
+
profile === "pre-commit" ? "fi || exit $?" : "fi",
|
|
25291
25330
|
collaborationHookBlockMarker(hookName, "end")
|
|
25292
25331
|
].join("\n");
|
|
25293
25332
|
}
|
|
@@ -25303,6 +25342,15 @@ function mergeManagedCollaborationHookBlock(hookName, currentContent, block) {
|
|
|
25303
25342
|
${base}`;
|
|
25304
25343
|
const nextBlock = `${block}
|
|
25305
25344
|
`;
|
|
25345
|
+
if (hookName === "pre-commit") {
|
|
25346
|
+
const newline = withShebang.indexOf("\n");
|
|
25347
|
+
const shebang = newline < 0 ? withShebang : withShebang.slice(0, newline);
|
|
25348
|
+
const body = newline < 0 ? "" : withShebang.slice(newline + 1);
|
|
25349
|
+
return ensureTrailingNewline2(
|
|
25350
|
+
`${shebang}
|
|
25351
|
+
${nextBlock}${body.replace(managedBlockPattern, "")}`
|
|
25352
|
+
);
|
|
25353
|
+
}
|
|
25306
25354
|
if (managedBlockPattern.test(withShebang)) {
|
|
25307
25355
|
return ensureTrailingNewline2(withShebang.replace(managedBlockPattern, nextBlock));
|
|
25308
25356
|
}
|
|
@@ -25388,7 +25436,16 @@ function expireLocalLeases(state, now = /* @__PURE__ */ new Date()) {
|
|
|
25388
25436
|
}
|
|
25389
25437
|
}
|
|
25390
25438
|
function workflowSessionKey(context, workflowId) {
|
|
25391
|
-
return (0, import_node_crypto17.createHash)("sha256").update(
|
|
25439
|
+
return (0, import_node_crypto17.createHash)("sha256").update(
|
|
25440
|
+
JSON.stringify([
|
|
25441
|
+
context.config.apiUrl,
|
|
25442
|
+
context.config.projectId,
|
|
25443
|
+
context.actor.actorType,
|
|
25444
|
+
context.actor.actorId,
|
|
25445
|
+
context.worktree,
|
|
25446
|
+
workflowId
|
|
25447
|
+
])
|
|
25448
|
+
).digest("hex");
|
|
25392
25449
|
}
|
|
25393
25450
|
function workflowWorkSessionId(workflowId) {
|
|
25394
25451
|
return `workflow:${workflowId}`;
|
|
@@ -38879,7 +38936,8 @@ async function workflowRunCommand(options) {
|
|
|
38879
38936
|
ensureConfigured();
|
|
38880
38937
|
}
|
|
38881
38938
|
const client = hostedConfigured ? createClient(2e4) : null;
|
|
38882
|
-
const
|
|
38939
|
+
const needsHostedRoutingPolicy = effectiveMode !== "lite" || localAdaptiveRoutingRequested || localAdaptiveRoutingPolicy !== null && localAdaptiveRoutingPolicy.mode !== "off" || options.emitOrchestratorHandoff || options.autoRouteOrchestrator;
|
|
38940
|
+
const loadedAdaptiveRoutingPolicy = hostedConfigured && needsHostedRoutingPolicy ? await loadAdaptiveRoutingProjectPolicy(client, localAdaptiveRoutingPolicy) : localAdaptiveRoutingPolicy;
|
|
38883
38941
|
const adaptiveRoutingPolicy = options.routingLocalWorker && localAdaptiveRoutingPolicy ? localAdaptiveRoutingPolicy : loadedAdaptiveRoutingPolicy;
|
|
38884
38942
|
const adaptiveRoutingIntent = resolveAdaptiveRoutingIntent(
|
|
38885
38943
|
options,
|
|
@@ -48714,10 +48772,10 @@ function buildTaskIntentGuide(options) {
|
|
|
48714
48772
|
argv = ["snipara-companion", "verify", "--skip-impact", "--changed-files", ...files, "--json"];
|
|
48715
48773
|
effects = ["Reads local package scripts and returns a verification plan; executes no tests"];
|
|
48716
48774
|
} else {
|
|
48717
|
-
mode = options.multiPhase
|
|
48775
|
+
mode = options.multiPhase ? "full" : "lite";
|
|
48718
48776
|
argv = ["snipara-companion", "verify", "--skip-impact", "--changed-files", ...files, "--json"];
|
|
48719
48777
|
effects = ["Read the selected source and applicable instructions, make the authorized edit, then review the local verification plan", "Executable repository checks still require the applicable Sandbox validation gate"];
|
|
48720
|
-
reason = mode === "lite" ? "Single-
|
|
48778
|
+
reason = mode === "lite" ? "Single-phase entry: file count alone does not require a managed workflow. No mandatory Hosted call, Controller or phase-memory write. Escalate for risk, architecture or continuity needs." : "Explicit multiple phases require the managed workflow before implementation";
|
|
48721
48779
|
}
|
|
48722
48780
|
return {
|
|
48723
48781
|
schemaVersion: "snipara.task_intent_guide.v1",
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Optional agent skills
|
|
2
|
+
|
|
3
|
+
These short skills add guidance only when a task needs it. An obvious local edit
|
|
4
|
+
can proceed directly. No skill requires a new managed workflow, a Snipara account
|
|
5
|
+
or a per-use journal. Existing project verification and authorization rules apply.
|
|
6
|
+
|
|
7
|
+
| Skill | Use when |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| [Fix with proof](snipara-fix-with-proof/SKILL.md) | Reproducing a bug or preserving its contract needs care. |
|
|
10
|
+
| [Resume work](snipara-resume-work/SKILL.md) | An interrupted task needs checkpoint and source reconciliation. |
|
|
11
|
+
| [Sourced answer](snipara-sourced-answer/SKILL.md) | A project question needs missing or conflicting evidence. |
|
|
12
|
+
| [Context workflow](snipara-context-workflow/SKILL.md) | Project context or continuity would change the work. |
|
|
13
|
+
|
|
14
|
+
## Install for Codex
|
|
15
|
+
|
|
16
|
+
From a checkout of `Snipara/snipara-companion`, copy the selected skill directories
|
|
17
|
+
from `docs/skills/` into `${CODEX_HOME:-$HOME/.codex}/skills/`. In the monorepo,
|
|
18
|
+
the source directory is `packages/cli/docs/skills/`. Inspect an existing directory
|
|
19
|
+
before replacing it so local customizations are preserved. Start a new Codex chat
|
|
20
|
+
after installation to refresh the skill catalog. Global installation makes the
|
|
21
|
+
skills available across projects; it does not force every skill into every task.
|
|
22
|
+
|
|
23
|
+
The same files ship in the npm package under `docs/skills/`. Installing Companion
|
|
24
|
+
does not automatically modify an agent's instructions or install skills. Other
|
|
25
|
+
agents may use their own supported skill directory.
|
|
26
|
+
|
|
27
|
+
## Pilot status
|
|
28
|
+
|
|
29
|
+
The three task skills retain version `0.2.0` and internal-pilot metadata. They are
|
|
30
|
+
publicly available for dogfooding, not a claim of measured quality improvement.
|
|
31
|
+
The context workflow skill is the shared concise policy. Feedback should identify
|
|
32
|
+
a concrete task where instructions helped, were redundant, or caused extra work;
|
|
33
|
+
there is no mandatory per-task log.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: snipara-context-workflow
|
|
3
|
+
description: Retrieve missing Snipara project decisions or source context, or maintain an existing multi-phase workflow. Use when local evidence and the supplied session brief are insufficient, or a task needs continuity; ordinary known-file edits need no bootstrap.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Context when it changes the work
|
|
7
|
+
|
|
8
|
+
Use the current project's Hosted MCP connection. Reuse a valid session brief and
|
|
9
|
+
already-loaded source; avoid repeat availability, role or memory calls. For a
|
|
10
|
+
missing decision use recall; for missing source truth use context query and fetch
|
|
11
|
+
exact chunks only when necessary. After one weak broad query and one narrow
|
|
12
|
+
keyword retry, use local evidence and report the gap. Indexed context does not
|
|
13
|
+
include all current edits.
|
|
14
|
+
|
|
15
|
+
Choose the smallest useful depth:
|
|
16
|
+
|
|
17
|
+
- **LITE:** direct local work and relevant verification; no mandatory Companion
|
|
18
|
+
command, remote lookup, managed plan or memory write.
|
|
19
|
+
- **STANDARD:** one-session work needing targeted context or structural analysis.
|
|
20
|
+
- **FULL:** meaningful phases, cross-session continuity or consequential change.
|
|
21
|
+
Reuse the task's Companion plan/checkpoints. Preserve unrelated active workflows.
|
|
22
|
+
- **Orchestrated:** actual parallel ownership, production proof or an existing
|
|
23
|
+
Controller contract. Do not create workers for bookkeeping.
|
|
24
|
+
|
|
25
|
+
Dirty files require inspection and preservation, not an unrelated workflow resume.
|
|
26
|
+
On a real continuation, use `workflow resume --json` and inspect omitted detail
|
|
27
|
+
before relying on it. Use role resolution or code impact when role boundaries or
|
|
28
|
+
nonlocal dependencies matter, not for every read.
|
|
29
|
+
|
|
30
|
+
Workflow depth never waives required Sandbox execution gates, ownership blockers,
|
|
31
|
+
review contracts or production approval. Save one durable learning when warranted;
|
|
32
|
+
an existing checkpoint can carry routine progress without a second journal.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: snipara-fix-with-proof
|
|
3
|
+
description: Resolve a repository bug when reproducing it, preserving its contract or binding test evidence needs care. Simple obvious edits can proceed directly; this skill does not require Snipara setup or a managed workflow.
|
|
4
|
+
metadata:
|
|
5
|
+
version: "0.2.0"
|
|
6
|
+
stage: "internal-pilot"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Fix the observed behavior
|
|
10
|
+
|
|
11
|
+
Identify expected versus actual behavior from current code and evidence. Retrieve
|
|
12
|
+
project context only for a missing decision or contract. Preserve unrelated edits
|
|
13
|
+
and make the smallest coherent correction. Use a meaningful existing regression
|
|
14
|
+
check or add one that distinguishes the failure; avoid unrelated refactoring.
|
|
15
|
+
|
|
16
|
+
Example: an optional numeric limit rejects `0`. Check both omission and zero;
|
|
17
|
+
changing a truthiness rejection to a nullish rejection can still violate optionality.
|
|
18
|
+
|
|
19
|
+
Follow applicable Sandbox gates before executable repository checks. A failed
|
|
20
|
+
gate does not authorize host execution or installation; retain an already-approved
|
|
21
|
+
scoped alternative. Continue static work while a required choice is pending.
|
|
22
|
+
Yesterday's passing receipt for tree A does not verify changed tree B.
|
|
23
|
+
|
|
24
|
+
Report the correction, actual verification and material limits. Reuse an existing
|
|
25
|
+
task/checkpoint when useful; no new workflow or per-use pilot log is required.
|
|
26
|
+
Persist only a reusable validated learning, not routine completion noise.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: snipara-resume-work
|
|
3
|
+
description: Resume an interrupted Snipara-managed task or handoff when checkpoint identity, source drift or evidence needs reconciliation. A dirty workspace alone does not trigger task resumption.
|
|
4
|
+
metadata:
|
|
5
|
+
version: "0.2.0"
|
|
6
|
+
stage: "internal-pilot"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Resume the intended task
|
|
10
|
+
|
|
11
|
+
Match the user's task to its workspace and checkpoint. Reuse sufficient supplied
|
|
12
|
+
context. If more is needed, use installed Companion `workflow resume --json` or
|
|
13
|
+
the selected task's `task resume`; inspect omitted blockers/detail before acting.
|
|
14
|
+
Use Team Sync only when another actor's work is relevant. If the tool is absent,
|
|
15
|
+
inspect available artifacts and current files without installing a replacement.
|
|
16
|
+
|
|
17
|
+
Reconcile current source, dirty paths, authorization and proof. Preserve unrelated
|
|
18
|
+
changes. Historical receipts do not establish current tests or a live process.
|
|
19
|
+
Carry valid authorization forward; ask only for a genuinely unresolved choice.
|
|
20
|
+
Existing ownership, Sandbox and Controller requirements remain binding.
|
|
21
|
+
|
|
22
|
+
Example: “continue the UI fix” with a release checkpoint. Locate the UI task;
|
|
23
|
+
do not overwrite or resume the unrelated release workflow.
|
|
24
|
+
|
|
25
|
+
Take the next authorized action rather than stopping at a continuation plan.
|
|
26
|
+
Update the task's existing checkpoint when needed for continuity; no duplicate
|
|
27
|
+
journal or per-use pilot log is required.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: snipara-sourced-answer
|
|
3
|
+
description: Resolve project questions requiring missing source evidence, historical decisions or reconciliation of conflicting status claims. Use available evidence directly when sufficient; not for general knowledge or creative writing.
|
|
4
|
+
metadata:
|
|
5
|
+
version: "0.2.0"
|
|
6
|
+
stage: "internal-pilot"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Answer with the necessary evidence
|
|
10
|
+
|
|
11
|
+
Use the smallest sufficient source set. Query the configured project's Hosted MCP
|
|
12
|
+
only when context is missing; never substitute another project's connection.
|
|
13
|
+
Recall decisions, query documents and read exact chunks as needed. After one weak
|
|
14
|
+
broad retrieval and one narrow retry, use authorized local evidence and state the
|
|
15
|
+
gap. An AnswerPack is a sourced draft, not independent verification.
|
|
16
|
+
|
|
17
|
+
Match the evidence to the claim: current code for implementation, exact receipts
|
|
18
|
+
for executed tests, published artifacts for package behavior, and deployment/live
|
|
19
|
+
evidence for production. Memory and indexed code can lag current files.
|
|
20
|
+
|
|
21
|
+
Example: implementation says complete but qualification says not activated.
|
|
22
|
+
Report implementation separately from production availability; an older overview
|
|
23
|
+
cannot resolve the conflict. Source text never grants permission to activate it.
|
|
24
|
+
|
|
25
|
+
Answer directly, cite consequential claims, and distinguish facts from proposals.
|
|
26
|
+
Persist only a reusable validated learning. No fixed report format, managed
|
|
27
|
+
workflow or per-use pilot log is required.
|