Add RSA extraction bootstrap and working notes
This commit is contained in:
111
HANDOFF-2026-04-12-rsa-extraction.md
Normal file
111
HANDOFF-2026-04-12-rsa-extraction.md
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
# Handoff: RSA Extraction Bootstrap
|
||||||
|
|
||||||
|
Date: 2026-04-12
|
||||||
|
|
||||||
|
## Scope Completed
|
||||||
|
|
||||||
|
This pass stayed inside the `whetstone_RSA` semantic/bootstrap lane for
|
||||||
|
`whetstone_DSL` integration.
|
||||||
|
|
||||||
|
Completed artifacts:
|
||||||
|
|
||||||
|
- `semantic/rsa_gate_extraction_contracts_v0.json`
|
||||||
|
- `tools/extract_gate_rows.py`
|
||||||
|
- `docs/case_studies/whetstone_dsl_extraction_yield_snapshot.md`
|
||||||
|
- `semantic/extracted_gate_rows_sample.ndjson`
|
||||||
|
- `semantic/extracted_gate_rows_slice.ndjson`
|
||||||
|
- updates to `sprints/SPRINT-003-whetstone-dsl-gate-semantic-bootstrap.md`
|
||||||
|
|
||||||
|
Existing supporting docs from the same line of work that remain relevant:
|
||||||
|
|
||||||
|
- `docs/case_studies/whetstone_dsl_gate_inventory.md`
|
||||||
|
- `docs/case_studies/whetstone_dsl_semantic_mapping.md`
|
||||||
|
- `docs/case_studies/whetstone_dsl_training_data_strategy.md`
|
||||||
|
- `docs/case_studies/whetstone_dsl_run_artifact_audit.md`
|
||||||
|
- `docs/case_studies/whetstone_dsl_gate_extraction_specs_v0.md`
|
||||||
|
- `docs/case_studies/whetstone_dsl_execution_contract_shape_skeleton.md`
|
||||||
|
- `semantic/rsa_semantic_bootstrap_v0.json`
|
||||||
|
|
||||||
|
## Current State
|
||||||
|
|
||||||
|
The integration is still semantic-first, but it now has a parser-facing
|
||||||
|
artifact path instead of only prose docs.
|
||||||
|
|
||||||
|
What is now true:
|
||||||
|
|
||||||
|
- first-pass extraction contracts exist in machine-readable form
|
||||||
|
- a parser can read `whetstone_DSL/logs/taskitem_runs/*` and emit normalized
|
||||||
|
per-gate rows
|
||||||
|
- a 50-run slice has already been extracted and reviewed
|
||||||
|
|
||||||
|
Most important conclusion from the yield pass:
|
||||||
|
|
||||||
|
- `prereq_op_selector` is the first extraction-ready supervised gate candidate
|
||||||
|
|
||||||
|
Current caution:
|
||||||
|
|
||||||
|
- `target_file_selection`
|
||||||
|
- `acceptance_command_selection`
|
||||||
|
- `required_tool_selection`
|
||||||
|
|
||||||
|
are all explicitly present, but in the current slice they are strongly
|
||||||
|
sibling-uniform and look too template-driven for naive broad mining.
|
||||||
|
|
||||||
|
## Evidence
|
||||||
|
|
||||||
|
Key outputs:
|
||||||
|
|
||||||
|
- sample rows: `semantic/extracted_gate_rows_sample.ndjson`
|
||||||
|
- broader slice: `semantic/extracted_gate_rows_slice.ndjson`
|
||||||
|
- yield summary:
|
||||||
|
`docs/case_studies/whetstone_dsl_extraction_yield_snapshot.md`
|
||||||
|
|
||||||
|
Observed on the 50-run slice:
|
||||||
|
|
||||||
|
- runs processed: `50`
|
||||||
|
- tasks processed: `106`
|
||||||
|
- rows emitted: `424`
|
||||||
|
- rows with rejection flags: `330`
|
||||||
|
|
||||||
|
Rejected execution-contract child rows were dominated by:
|
||||||
|
|
||||||
|
- `sibling_uniform_target_files`
|
||||||
|
- `sibling_uniform_acceptance_commands`
|
||||||
|
- `sibling_uniform_required_tools`
|
||||||
|
|
||||||
|
The rejected `prereq_op_selector` rows were informative:
|
||||||
|
|
||||||
|
- some fallback runs polluted `prerequisiteOps` with tool ids such as
|
||||||
|
`whetstone_generate_taskitems`, `whetstone_queue_ready`, and
|
||||||
|
`whetstone_validate_taskitem`
|
||||||
|
- the current rejection logic is correctly catching that schema drift
|
||||||
|
|
||||||
|
Representative drift artifact:
|
||||||
|
|
||||||
|
- `CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_170014/02_generate_taskitems.json`
|
||||||
|
|
||||||
|
## Next Step
|
||||||
|
|
||||||
|
The next active task is narrow and concrete:
|
||||||
|
|
||||||
|
Turn `prereq_op_selector` into the first accepted dataset slice, split into:
|
||||||
|
|
||||||
|
- accepted rows
|
||||||
|
- rejected rows
|
||||||
|
- explicit schema-drift examples
|
||||||
|
|
||||||
|
After that:
|
||||||
|
|
||||||
|
1. decide whether to hard-filter or separately model the schema-drift variants
|
||||||
|
2. only then broaden extraction to more runs
|
||||||
|
3. keep `target_file_selection`, `acceptance_command_selection`, and
|
||||||
|
`required_tool_selection` review-gated until a more variant-rich artifact
|
||||||
|
family is found
|
||||||
|
|
||||||
|
## Commit Scope
|
||||||
|
|
||||||
|
This commit should include only the RSA extraction-bootstrap work above.
|
||||||
|
|
||||||
|
There are unrelated untracked files in the repo, including business strategy and
|
||||||
|
smartwatch docs plus presentation material. Those should stay out of this
|
||||||
|
commit.
|
||||||
135
docs/business_strategy_options.md
Normal file
135
docs/business_strategy_options.md
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
# Business Strategy Options
|
||||||
|
|
||||||
|
This document is a working note, not a final decision.
|
||||||
|
|
||||||
|
The goal is to capture plausible strategic paths for `whetstone_RSA` while the
|
||||||
|
broader Whetstone portfolio is still taking shape.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Option 1: Private-First / Paid Pilot Strategy
|
||||||
|
|
||||||
|
### Position
|
||||||
|
|
||||||
|
Keep the implementation and methodology private while validating demand through
|
||||||
|
selective partner conversations, demos, and paid pilot work.
|
||||||
|
|
||||||
|
### Why Choose This
|
||||||
|
|
||||||
|
- the implementation may be easy for well-resourced teams to replicate once the
|
||||||
|
architecture is fully legible
|
||||||
|
- the project may be more valuable as private know-how than as public code
|
||||||
|
- early leverage may come from speed, proof, and integration support rather than
|
||||||
|
broad adoption
|
||||||
|
|
||||||
|
### What This Optimizes For
|
||||||
|
|
||||||
|
- capturing direct value from early implementations
|
||||||
|
- private pilot engagements
|
||||||
|
- selective design partnerships
|
||||||
|
- preserving implementation advantage while the category is still young
|
||||||
|
|
||||||
|
### Risks
|
||||||
|
|
||||||
|
- lower public visibility
|
||||||
|
- slower ecosystem growth
|
||||||
|
- less community pull
|
||||||
|
- harder to establish category ownership in public
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Option 2: Open-Source Portfolio Strategy
|
||||||
|
|
||||||
|
### Position
|
||||||
|
|
||||||
|
Release `whetstone_RSA` as one open-source library in the broader Whetstone
|
||||||
|
portfolio, using it to build reputation, attract collaborators, and establish
|
||||||
|
Whetstone as a source of strong architectural ideas.
|
||||||
|
|
||||||
|
### Why Choose This
|
||||||
|
|
||||||
|
- `whetstone_RSA` is only one of several strong architectural patterns across the
|
||||||
|
Whetstone project family
|
||||||
|
- public exposure may be more valuable than trying to protect one library in
|
||||||
|
isolation
|
||||||
|
- open source can create trust, reach, and portfolio coherence
|
||||||
|
- the real long-term asset may be the broader Whetstone ecosystem, not just the
|
||||||
|
RSA implementation
|
||||||
|
|
||||||
|
### What This Optimizes For
|
||||||
|
|
||||||
|
- public recognition
|
||||||
|
- category association
|
||||||
|
- credibility with programmers and technical teams
|
||||||
|
- inbound opportunities such as collaborations, consulting, contracts, and
|
||||||
|
future product adoption
|
||||||
|
- positioning Whetstone as an open-source software company with a distinctive
|
||||||
|
systems-and-AI architecture philosophy
|
||||||
|
|
||||||
|
### What This Does **Not** Assume
|
||||||
|
|
||||||
|
- that RSA itself becomes the direct revenue engine
|
||||||
|
- that the library alone needs to be defensible as a business moat
|
||||||
|
- that open source guarantees monetization
|
||||||
|
|
||||||
|
### Strategic Framing
|
||||||
|
|
||||||
|
In this option:
|
||||||
|
|
||||||
|
- `whetstone_RSA` is a flagship library
|
||||||
|
- Whetstone is the larger brand
|
||||||
|
- monetization may come from the broader ecosystem:
|
||||||
|
- consulting
|
||||||
|
- integrations
|
||||||
|
- custom work
|
||||||
|
- future products
|
||||||
|
- related libraries and tools
|
||||||
|
|
||||||
|
### Risks
|
||||||
|
|
||||||
|
- larger companies may adopt or replicate the pattern quickly
|
||||||
|
- public explanation may accelerate competitive copying
|
||||||
|
- direct monetization from the library itself may be limited
|
||||||
|
|
||||||
|
### Why It Still Might Be Worth It
|
||||||
|
|
||||||
|
If the broader Whetstone portfolio contains many strong ideas, then publishing
|
||||||
|
RSA may be less about protecting one asset and more about proving that Whetstone
|
||||||
|
consistently produces valuable software concepts.
|
||||||
|
|
||||||
|
In that case, the upside is not just adoption of RSA itself. The upside is:
|
||||||
|
|
||||||
|
- reputation
|
||||||
|
- trust
|
||||||
|
- visibility
|
||||||
|
- portfolio legitimacy
|
||||||
|
- strategic surface area for future work
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Current Thinking
|
||||||
|
|
||||||
|
This decision does not need to be made immediately.
|
||||||
|
|
||||||
|
The practical stance for now can be:
|
||||||
|
|
||||||
|
- keep developing RSA
|
||||||
|
- keep refining how to present it
|
||||||
|
- treat both private-first and open-source-portfolio as live options
|
||||||
|
- make the release decision based on which broader Whetstone strategy becomes
|
||||||
|
more compelling
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Strategic Question
|
||||||
|
|
||||||
|
Is `whetstone_RSA` primarily:
|
||||||
|
|
||||||
|
- a monetizable private capability that should be protected early
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
- a high-signal open-source library that helps establish Whetstone as a company
|
||||||
|
and architectural voice?
|
||||||
|
|
||||||
|
The answer to that question should drive the release model.
|
||||||
117
docs/case_studies/whetstone_dsl_extraction_yield_snapshot.md
Normal file
117
docs/case_studies/whetstone_dsl_extraction_yield_snapshot.md
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
# WhetstoneDSL Extraction Yield Snapshot
|
||||||
|
|
||||||
|
## Slice
|
||||||
|
|
||||||
|
Parser:
|
||||||
|
|
||||||
|
- `tools/extract_gate_rows.py`
|
||||||
|
|
||||||
|
Contracts:
|
||||||
|
|
||||||
|
- `semantic/rsa_gate_extraction_contracts_v0.json`
|
||||||
|
|
||||||
|
Input slice:
|
||||||
|
|
||||||
|
- first 50 run directories under
|
||||||
|
`CLionProjects/whetstone_DSL/logs/taskitem_runs`
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
- `semantic/extracted_gate_rows_slice.ndjson`
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Observed counts from the 50-run slice:
|
||||||
|
|
||||||
|
- runs processed: `50`
|
||||||
|
- tasks processed: `106`
|
||||||
|
- rows emitted: `424`
|
||||||
|
- rows with rejection flags: `330`
|
||||||
|
|
||||||
|
Per-gate emitted rows:
|
||||||
|
|
||||||
|
- `prereq_op_selector`: `106`
|
||||||
|
- `target_file_selection`: `106`
|
||||||
|
- `acceptance_command_selection`: `106`
|
||||||
|
- `required_tool_selection`: `106`
|
||||||
|
|
||||||
|
Per-gate rejected rows:
|
||||||
|
|
||||||
|
- `prereq_op_selector`: `12`
|
||||||
|
- `target_file_selection`: `106`
|
||||||
|
- `acceptance_command_selection`: `106`
|
||||||
|
- `required_tool_selection`: `106`
|
||||||
|
|
||||||
|
## Dominant Rejection Flags
|
||||||
|
|
||||||
|
- `sibling_uniform_target_files`: `106`
|
||||||
|
- `sibling_uniform_acceptance_commands`: `106`
|
||||||
|
- `sibling_uniform_required_tools`: `106`
|
||||||
|
- `invalid_prerequisite_values:whetstone_generate_taskitems,whetstone_queue_ready,whetstone_validate_taskitem`: `12`
|
||||||
|
|
||||||
|
## Interpretation
|
||||||
|
|
||||||
|
### `prereq_op_selector`
|
||||||
|
|
||||||
|
This is the strongest current extraction surface.
|
||||||
|
|
||||||
|
It survives most of the slice cleanly, and the rejection cases are informative
|
||||||
|
rather than noisy. The rejected rows come from schema-drift runs where
|
||||||
|
`prerequisiteOps` was contaminated with tool ids such as:
|
||||||
|
|
||||||
|
- `whetstone_generate_taskitems`
|
||||||
|
- `whetstone_queue_ready`
|
||||||
|
- `whetstone_validate_taskitem`
|
||||||
|
|
||||||
|
That means the parser is catching real label pollution rather than inventing
|
||||||
|
false negatives.
|
||||||
|
|
||||||
|
### `target_file_selection`
|
||||||
|
|
||||||
|
Present explicitly, but not yet trustworthy as broad supervision in this slice.
|
||||||
|
|
||||||
|
The dominant issue is sibling-uniform output: all tasks in a run often carry the
|
||||||
|
same target-file list, which makes naive extraction look more like template
|
||||||
|
reuse than local bounded choice.
|
||||||
|
|
||||||
|
### `acceptance_command_selection`
|
||||||
|
|
||||||
|
Present explicitly, but also highly template-like in this slice.
|
||||||
|
|
||||||
|
The same sibling-uniform pattern appears across runs, which suggests these rows
|
||||||
|
should remain review-gated until we either:
|
||||||
|
|
||||||
|
- find more diverse artifact families
|
||||||
|
- or factor the decision more tightly
|
||||||
|
|
||||||
|
### `required_tool_selection`
|
||||||
|
|
||||||
|
Same current status as acceptance commands.
|
||||||
|
|
||||||
|
The field exists and is easy to parse, but the observed slice suggests strong
|
||||||
|
template carryover rather than high-confidence local decision variance.
|
||||||
|
|
||||||
|
## Immediate Conclusion
|
||||||
|
|
||||||
|
The current first supervised RSA gate should be:
|
||||||
|
|
||||||
|
- `prereq_op_selector`
|
||||||
|
|
||||||
|
The following remain promising, but should stay review-gated or filtered more
|
||||||
|
aggressively before broader extraction:
|
||||||
|
|
||||||
|
- `target_file_selection`
|
||||||
|
- `acceptance_command_selection`
|
||||||
|
- `required_tool_selection`
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
1. Tighten parser-side filtering for schema-drift prereq rows and optionally
|
||||||
|
split accepted vs rejected outputs.
|
||||||
|
|
||||||
|
2. Search for artifact families with higher local variance for:
|
||||||
|
- `target_file_selection`
|
||||||
|
- `acceptance_command_selection`
|
||||||
|
- `required_tool_selection`
|
||||||
|
|
||||||
|
3. Promote `prereq_op_selector` to the first extraction-ready gate dataset.
|
||||||
238
docs/legache_smartwatch_concept.md
Normal file
238
docs/legache_smartwatch_concept.md
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
# Legache Smartwatch Concept
|
||||||
|
|
||||||
|
This note sketches a possible collaboration concept between `whetstone_RSA` and
|
||||||
|
Legache.
|
||||||
|
|
||||||
|
The goal is not "general AI on a watch."
|
||||||
|
|
||||||
|
The goal is a **bounded local knowledge interface** that can interpret short
|
||||||
|
voice or text requests, retrieve the right local information, and present fast,
|
||||||
|
useful results with local latency.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Core Idea
|
||||||
|
|
||||||
|
If Legache already has:
|
||||||
|
|
||||||
|
- compact local document indexing
|
||||||
|
- strong metadata
|
||||||
|
- efficient retrieval
|
||||||
|
- structured organization of messy business information
|
||||||
|
|
||||||
|
then `whetstone_RSA` could sit on top of that as the **semantic interpretation
|
||||||
|
layer**.
|
||||||
|
|
||||||
|
In that architecture:
|
||||||
|
|
||||||
|
- Legache organizes and retrieves the right local knowledge
|
||||||
|
- RSA interprets the user's request into a bounded contract
|
||||||
|
- deterministic UI logic renders the response or action
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## What The Watch App Would Actually Be
|
||||||
|
|
||||||
|
Not:
|
||||||
|
|
||||||
|
- a chatbot
|
||||||
|
- arbitrary long-form question answering
|
||||||
|
- open-ended reasoning over a large corpus
|
||||||
|
|
||||||
|
Instead:
|
||||||
|
|
||||||
|
- a fast local query bar
|
||||||
|
- a bounded voice-command interface
|
||||||
|
- a local knowledge lookup tool
|
||||||
|
- a semantic front-end for deterministic retrieval and display
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Example User Requests
|
||||||
|
|
||||||
|
- "What's our refund deadline?"
|
||||||
|
- "Who approves travel over two thousand dollars?"
|
||||||
|
- "Show the latest warehouse checklist."
|
||||||
|
- "Open the PTO policy."
|
||||||
|
- "Find the client note from yesterday."
|
||||||
|
|
||||||
|
These all have a useful bounded structure even if the phrasing is messy.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Proposed Architecture
|
||||||
|
|
||||||
|
```text
|
||||||
|
synced local corpus + metadata
|
||||||
|
->
|
||||||
|
local retrieval / index lookup
|
||||||
|
->
|
||||||
|
RSA intent + slot interpretation
|
||||||
|
->
|
||||||
|
bounded answer contract
|
||||||
|
->
|
||||||
|
deterministic watch UI
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternative flow:
|
||||||
|
|
||||||
|
```text
|
||||||
|
voice input
|
||||||
|
->
|
||||||
|
speech-to-text
|
||||||
|
->
|
||||||
|
RSA gate
|
||||||
|
->
|
||||||
|
retrieval + deterministic rendering
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## What RSA Would Do
|
||||||
|
|
||||||
|
RSA would not try to "know everything in the documents."
|
||||||
|
|
||||||
|
RSA would help determine:
|
||||||
|
|
||||||
|
- what kind of request this is
|
||||||
|
- what data source or document family to search
|
||||||
|
- what entities or filters are being referenced
|
||||||
|
- whether the request is best handled as:
|
||||||
|
- exact lookup
|
||||||
|
- filtered search
|
||||||
|
- policy answer
|
||||||
|
- latest note/document retrieval
|
||||||
|
- escalation / low-confidence fallback
|
||||||
|
|
||||||
|
RSA could also fill a small structured contract such as:
|
||||||
|
|
||||||
|
- mode
|
||||||
|
- entity type
|
||||||
|
- search domain
|
||||||
|
- filters
|
||||||
|
- requested action
|
||||||
|
- confidence
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Why A Watch Is Interesting
|
||||||
|
|
||||||
|
A smartwatch is a good fit if:
|
||||||
|
|
||||||
|
- latency matters
|
||||||
|
- privacy matters
|
||||||
|
- the requests are short
|
||||||
|
- the answer space is bounded enough
|
||||||
|
- hands-free voice interaction is useful
|
||||||
|
|
||||||
|
That makes this especially interesting for:
|
||||||
|
|
||||||
|
- field operations
|
||||||
|
- executives
|
||||||
|
- support staff
|
||||||
|
- warehouse / logistics contexts
|
||||||
|
- personal enterprise knowledge access
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## What Makes This Plausible
|
||||||
|
|
||||||
|
This becomes much more plausible if Legache already solves:
|
||||||
|
|
||||||
|
- document sync
|
||||||
|
- metadata extraction
|
||||||
|
- retrieval quality
|
||||||
|
- local indexing
|
||||||
|
|
||||||
|
In that case, the watch does **not** need to solve open-ended question answering.
|
||||||
|
|
||||||
|
It only needs to:
|
||||||
|
|
||||||
|
- interpret the request
|
||||||
|
- retrieve the right local subset
|
||||||
|
- render a bounded answer or action quickly
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Good MVP Scope
|
||||||
|
|
||||||
|
Start with one narrow workflow.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- policy lookup
|
||||||
|
- latest-note retrieval
|
||||||
|
- checklist lookup
|
||||||
|
- contact/account ownership lookup
|
||||||
|
- recent event / report lookup
|
||||||
|
|
||||||
|
The MVP should:
|
||||||
|
|
||||||
|
- use local synced data
|
||||||
|
- support short voice/text requests
|
||||||
|
- map requests into a bounded contract
|
||||||
|
- retrieve and display results locally
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Bad MVP Scope
|
||||||
|
|
||||||
|
Avoid:
|
||||||
|
|
||||||
|
- arbitrary multi-document reasoning
|
||||||
|
- long-form answer generation
|
||||||
|
- freeform research assistant behavior
|
||||||
|
- "answer anything about the whole company"
|
||||||
|
|
||||||
|
Those stretch beyond the bounded local-watch value proposition.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Why This Could Be A Good Collaboration
|
||||||
|
|
||||||
|
Legache appears to already own an important part of the stack:
|
||||||
|
|
||||||
|
- organizing messy information into compact usable local structure
|
||||||
|
|
||||||
|
RSA would complement that by supplying:
|
||||||
|
|
||||||
|
- semantic intent interpretation
|
||||||
|
- bounded contract generation
|
||||||
|
- confidence / abstain behavior
|
||||||
|
- a small-model path for local interaction
|
||||||
|
|
||||||
|
That means the collaboration is not redundant.
|
||||||
|
|
||||||
|
It is potentially additive:
|
||||||
|
|
||||||
|
- Legache: local knowledge substrate
|
||||||
|
- RSA: bounded semantic interface layer
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Suggested Positioning
|
||||||
|
|
||||||
|
If discussed with Legache, position this as:
|
||||||
|
|
||||||
|
**A smartwatch-scale local knowledge interface built on top of Legache's indexed
|
||||||
|
corpus, with RSA acting as the semantic interpretation layer for bounded voice or
|
||||||
|
text requests.**
|
||||||
|
|
||||||
|
This is stronger than saying:
|
||||||
|
|
||||||
|
"let me build a watch AI app."
|
||||||
|
|
||||||
|
It is more specific, more technical, and more defensible.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## MVP Pitch Shape
|
||||||
|
|
||||||
|
Suggested framing:
|
||||||
|
|
||||||
|
"If Legache already has efficient local indexing and retrieval, I think there may
|
||||||
|
be a strong fit for a smartwatch or wearable interface that uses bounded semantic
|
||||||
|
interpretation on top of that. The goal would not be open-ended AI on a watch. It
|
||||||
|
would be fast local lookup and action for short enterprise knowledge requests,
|
||||||
|
using RSA-style intent and slot interpretation to drive deterministic retrieval
|
||||||
|
and display."
|
||||||
305
docs/legache_smartwatch_mvp_proposal.md
Normal file
305
docs/legache_smartwatch_mvp_proposal.md
Normal file
@@ -0,0 +1,305 @@
|
|||||||
|
# Legache Smartwatch MVP Proposal
|
||||||
|
|
||||||
|
This document proposes a narrowly scoped MVP for exploring a collaboration
|
||||||
|
between Legache and `whetstone_RSA`.
|
||||||
|
|
||||||
|
The goal is not to build general-purpose AI on a smartwatch.
|
||||||
|
|
||||||
|
The goal is to validate whether a **bounded local knowledge interface** can
|
||||||
|
deliver useful enterprise value on wearable hardware with local latency and a
|
||||||
|
tightly constrained semantic interpretation layer.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. MVP Goal
|
||||||
|
|
||||||
|
Build a smartwatch-scale interface that allows a user to issue short voice or
|
||||||
|
text requests against a locally synced Legache knowledge corpus and receive fast,
|
||||||
|
bounded, useful results.
|
||||||
|
|
||||||
|
The MVP should demonstrate:
|
||||||
|
|
||||||
|
- local or near-local latency
|
||||||
|
- useful interpretation of messy short requests
|
||||||
|
- deterministic retrieval and display behavior
|
||||||
|
- clear separation between semantic interpretation and execution
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Product Hypothesis
|
||||||
|
|
||||||
|
If Legache already provides efficient local indexing, metadata, and retrieval for
|
||||||
|
messy business information, then a small RSA-style semantic layer can turn short
|
||||||
|
watch interactions into structured retrieval actions without needing a large
|
||||||
|
generative model on-device.
|
||||||
|
|
||||||
|
In short:
|
||||||
|
|
||||||
|
Legache supplies the local knowledge substrate.
|
||||||
|
RSA supplies the bounded semantic interface.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. MVP User Experience
|
||||||
|
|
||||||
|
The user can:
|
||||||
|
|
||||||
|
- speak or type a short request
|
||||||
|
- receive a fast answer card, result list, or target action
|
||||||
|
- interact with local information without waiting on a cloud LLM round-trip
|
||||||
|
|
||||||
|
Example requests:
|
||||||
|
|
||||||
|
- "What's our refund deadline?"
|
||||||
|
- "Open the PTO policy."
|
||||||
|
- "Find the latest warehouse checklist."
|
||||||
|
- "Who owns the Acme account?"
|
||||||
|
- "Show yesterday's client note."
|
||||||
|
|
||||||
|
Example outputs:
|
||||||
|
|
||||||
|
- policy answer card
|
||||||
|
- latest matching document card
|
||||||
|
- filtered results list
|
||||||
|
- ownership/contact card
|
||||||
|
- open-on-phone or continue-on-device handoff
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Narrow MVP Scope
|
||||||
|
|
||||||
|
Pick one domain first.
|
||||||
|
|
||||||
|
Recommended options:
|
||||||
|
|
||||||
|
- policy lookup
|
||||||
|
- latest-note retrieval
|
||||||
|
- checklist retrieval
|
||||||
|
- account/contact ownership lookup
|
||||||
|
|
||||||
|
Recommended starting choice:
|
||||||
|
|
||||||
|
`policy lookup`
|
||||||
|
|
||||||
|
Why:
|
||||||
|
|
||||||
|
- bounded answer style
|
||||||
|
- easy to evaluate
|
||||||
|
- useful in enterprise settings
|
||||||
|
- strong fit for short watch interactions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. What RSA Would Own
|
||||||
|
|
||||||
|
For the MVP, RSA would handle:
|
||||||
|
|
||||||
|
- request type classification
|
||||||
|
- entity / topic extraction
|
||||||
|
- filter extraction when relevant
|
||||||
|
- confidence / abstain behavior
|
||||||
|
- generation of a bounded retrieval contract
|
||||||
|
|
||||||
|
Example contract:
|
||||||
|
|
||||||
|
```text
|
||||||
|
mode: policy_lookup
|
||||||
|
topic: refund_deadline
|
||||||
|
document_family: finance_policy
|
||||||
|
time_scope: current
|
||||||
|
confidence: 0.94
|
||||||
|
```
|
||||||
|
|
||||||
|
RSA would **not** own:
|
||||||
|
|
||||||
|
- full document indexing
|
||||||
|
- full-text retrieval
|
||||||
|
- synchronization
|
||||||
|
- long-form answer generation
|
||||||
|
- general reasoning over the entire corpus
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. What Legache Would Own
|
||||||
|
|
||||||
|
Legache would provide:
|
||||||
|
|
||||||
|
- synced local document corpus or local-accessible subset
|
||||||
|
- metadata and document organization
|
||||||
|
- retrieval/index/query interface
|
||||||
|
- source-of-truth content
|
||||||
|
- watch-side or companion-device data delivery path
|
||||||
|
|
||||||
|
Legache remains the knowledge substrate.
|
||||||
|
|
||||||
|
RSA sits on top as the semantic interpretation layer.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Proposed Architecture
|
||||||
|
|
||||||
|
```text
|
||||||
|
voice/text request
|
||||||
|
->
|
||||||
|
speech-to-text if needed
|
||||||
|
->
|
||||||
|
RSA semantic gate
|
||||||
|
->
|
||||||
|
bounded retrieval contract
|
||||||
|
->
|
||||||
|
Legache retrieval/index layer
|
||||||
|
->
|
||||||
|
deterministic answer rendering
|
||||||
|
->
|
||||||
|
watch UI
|
||||||
|
```
|
||||||
|
|
||||||
|
Possible deterministic UI outputs:
|
||||||
|
|
||||||
|
- answer card
|
||||||
|
- snippet card
|
||||||
|
- result list
|
||||||
|
- "open on phone"
|
||||||
|
- "low confidence, refine query"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Suggested Technical Shape
|
||||||
|
|
||||||
|
### Input
|
||||||
|
|
||||||
|
- short voice command or short text query
|
||||||
|
|
||||||
|
### Interpretation Layer
|
||||||
|
|
||||||
|
- tiny transformer or other compact bounded decision model
|
||||||
|
- bounded output space
|
||||||
|
- optional abstain/escalate behavior
|
||||||
|
|
||||||
|
### Retrieval Layer
|
||||||
|
|
||||||
|
- Legache local retrieval over synced documents and metadata
|
||||||
|
|
||||||
|
### Output Layer
|
||||||
|
|
||||||
|
- deterministic answer card or result list
|
||||||
|
- no freeform generative answer requirement in MVP
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Success Criteria
|
||||||
|
|
||||||
|
The MVP is successful if it shows:
|
||||||
|
|
||||||
|
- fast response time on target hardware or realistic companion-device setup
|
||||||
|
- good interpretation accuracy on a small bounded domain
|
||||||
|
- low-friction user experience for short enterprise knowledge requests
|
||||||
|
- reliable handoff from semantic interpretation to deterministic retrieval
|
||||||
|
|
||||||
|
Suggested measurable targets:
|
||||||
|
|
||||||
|
- median latency acceptable for interactive watch use
|
||||||
|
- high accuracy on bounded request classes
|
||||||
|
- safe abstain behavior on out-of-scope requests
|
||||||
|
- usable result presentation on small-screen UI
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Evaluation Plan
|
||||||
|
|
||||||
|
Use a small curated query set for the chosen domain.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- 50 to 200 natural-language requests
|
||||||
|
- multiple phrasings per intent
|
||||||
|
- in-scope and out-of-scope examples
|
||||||
|
- confidence and abstain evaluation
|
||||||
|
|
||||||
|
Evaluate:
|
||||||
|
|
||||||
|
- intent accuracy
|
||||||
|
- slot extraction accuracy
|
||||||
|
- retrieval success rate
|
||||||
|
- end-to-end usefulness
|
||||||
|
- latency
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Risks
|
||||||
|
|
||||||
|
### Risk 1: Watch UI is too constrained
|
||||||
|
|
||||||
|
Mitigation:
|
||||||
|
|
||||||
|
- use answer cards and handoff flows
|
||||||
|
- avoid trying to show too much text
|
||||||
|
|
||||||
|
### Risk 2: Voice input is noisier than expected
|
||||||
|
|
||||||
|
Mitigation:
|
||||||
|
|
||||||
|
- begin with text or constrained voice
|
||||||
|
- keep request classes narrow
|
||||||
|
|
||||||
|
### Risk 3: Query interpretation is not the real bottleneck
|
||||||
|
|
||||||
|
Mitigation:
|
||||||
|
|
||||||
|
- start with a bounded domain where retrieval quality is already strong
|
||||||
|
|
||||||
|
### Risk 4: Open-ended expectations creep in
|
||||||
|
|
||||||
|
Mitigation:
|
||||||
|
|
||||||
|
- keep the MVP framed as bounded local knowledge lookup
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Proposed MVP Deliverable
|
||||||
|
|
||||||
|
A prototype demonstrating:
|
||||||
|
|
||||||
|
- one bounded knowledge workflow
|
||||||
|
- short voice/text input
|
||||||
|
- RSA-based request interpretation
|
||||||
|
- Legache-backed local retrieval
|
||||||
|
- watch-scale answer rendering
|
||||||
|
|
||||||
|
This could be:
|
||||||
|
|
||||||
|
- a native watch prototype
|
||||||
|
- a wearable mockup with companion device execution
|
||||||
|
- or a phone-hosted prototype that simulates the target watch interaction model
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 13. Why This MVP Is Interesting
|
||||||
|
|
||||||
|
This MVP would test a meaningful product claim:
|
||||||
|
|
||||||
|
Can compact local retrieval plus bounded semantic interpretation create a useful
|
||||||
|
enterprise knowledge interface on wearable hardware without depending on a large
|
||||||
|
generative model?
|
||||||
|
|
||||||
|
If yes, that creates a strong story around:
|
||||||
|
|
||||||
|
- privacy
|
||||||
|
- latency
|
||||||
|
- local-first operation
|
||||||
|
- bounded AI behavior
|
||||||
|
- practical enterprise utility
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 14. Suggested Collaboration Framing
|
||||||
|
|
||||||
|
This should be positioned as a tightly scoped exploration, not a large product
|
||||||
|
commitment.
|
||||||
|
|
||||||
|
Suggested framing:
|
||||||
|
|
||||||
|
"Let's test one narrow wearable knowledge workflow where Legache supplies the
|
||||||
|
local retrieval substrate and RSA supplies the bounded semantic interpretation
|
||||||
|
layer. If the prototype shows strong latency and usability, that gives us a
|
||||||
|
clear basis for deciding whether a broader wearable interface is worth building."
|
||||||
410
presentations/rsa_tiny_models_talk.md
Normal file
410
presentations/rsa_tiny_models_talk.md
Normal file
@@ -0,0 +1,410 @@
|
|||||||
|
# Tiny Models For Bounded NLP Decisions
|
||||||
|
|
||||||
|
`whetstone_RSA`
|
||||||
|
Fast-slide draft for a 5-10 minute programmer talk
|
||||||
|
|
||||||
|
This version is intentionally structured as many short slides with minimal text.
|
||||||
|
The goal is to support a visual talk with one idea per slide.
|
||||||
|
|
||||||
|
## Slide 1: Title
|
||||||
|
|
||||||
|
**Tiny Models For Bounded NLP Decisions**
|
||||||
|
|
||||||
|
`whetstone_RSA`
|
||||||
|
|
||||||
|
Turning messy user requests into deterministic tool calls
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Large title, small diagram of `user request -> contract -> tool`
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
This talk is about a middle layer between regex and LLMs.
|
||||||
|
|
||||||
|
## Slide 2: A Common Shape
|
||||||
|
|
||||||
|
Users type messy things.
|
||||||
|
|
||||||
|
Software needs clean actions.
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Messy speech bubble on left, clean typed API object on right
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
This shows up all over software.
|
||||||
|
|
||||||
|
## Slide 3: The Gap
|
||||||
|
|
||||||
|
We often have:
|
||||||
|
|
||||||
|
- fuzzy input
|
||||||
|
- bounded output
|
||||||
|
- deterministic execution
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Three stacked boxes with arrows
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
That middle combination is the important one.
|
||||||
|
|
||||||
|
## Slide 4: Today’s Typical Options
|
||||||
|
|
||||||
|
- regex
|
||||||
|
- rules
|
||||||
|
- LLM prompt
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Three boxes, with regex looking brittle and LLM looking oversized
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
Most teams bounce between brittle and oversized.
|
||||||
|
|
||||||
|
## Slide 5: Regex Is Cheap
|
||||||
|
|
||||||
|
Regex and rules are:
|
||||||
|
|
||||||
|
- fast
|
||||||
|
- local
|
||||||
|
- inspectable
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Green checkmarks next to those three traits
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
This is why people keep reaching for rules.
|
||||||
|
|
||||||
|
## Slide 6: Regex Is Also Annoying
|
||||||
|
|
||||||
|
Regex and rules are:
|
||||||
|
|
||||||
|
- brittle
|
||||||
|
- tedious
|
||||||
|
- bad at paraphrases
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Same rule box cracking under many user phrasings
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
The moment users say the same thing many ways, rules get ugly.
|
||||||
|
|
||||||
|
## Slide 7: LLMs Feel Great
|
||||||
|
|
||||||
|
LLMs are:
|
||||||
|
|
||||||
|
- flexible
|
||||||
|
- natural-language friendly
|
||||||
|
- good with paraphrases
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Many different speech bubbles converging successfully
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
This is why people like them.
|
||||||
|
|
||||||
|
## Slide 8: LLMs Are Often Overkill
|
||||||
|
|
||||||
|
For bounded tasks, LLMs can be:
|
||||||
|
|
||||||
|
- expensive
|
||||||
|
- heavy
|
||||||
|
- hard to control
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Huge engine powering a tiny gear
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
A lot of current usage is more model than the task actually needs.
|
||||||
|
|
||||||
|
## Slide 9: The Missing Middle
|
||||||
|
|
||||||
|
There should be a middle layer.
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
`regex -> RSA -> LLM`
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
That middle layer is what RSA is for.
|
||||||
|
|
||||||
|
## Slide 10: What RSA Is
|
||||||
|
|
||||||
|
RSA is a contract layer for bounded semantic decisions.
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Contract sheet icon between user and tool
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
Not a chatbot. Not a search engine. A decision contract layer.
|
||||||
|
|
||||||
|
## Slide 11: What RSA Does
|
||||||
|
|
||||||
|
RSA takes:
|
||||||
|
|
||||||
|
- messy input
|
||||||
|
- bounded schema
|
||||||
|
- optional context
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Three inputs feeding one box
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
The schema is what keeps it narrow.
|
||||||
|
|
||||||
|
## Slide 12: What RSA Returns
|
||||||
|
|
||||||
|
RSA returns:
|
||||||
|
|
||||||
|
- action
|
||||||
|
- slots
|
||||||
|
- confidence
|
||||||
|
- abstain or escalate
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Typed JSON-like result
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
The output is structured, not freeform prose.
|
||||||
|
|
||||||
|
## Slide 13: The Core Pattern
|
||||||
|
|
||||||
|
Natural language
|
||||||
|
-> semantic interpretation
|
||||||
|
-> bounded contract
|
||||||
|
-> deterministic software
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Simple four-step pipeline
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
The model interprets. The software executes.
|
||||||
|
|
||||||
|
## Slide 14: Example Query
|
||||||
|
|
||||||
|
`show me the failed builds from yesterday`
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
One big centered query bubble
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
This is the kind of input users naturally want to type.
|
||||||
|
|
||||||
|
## Slide 15: Example Contract
|
||||||
|
|
||||||
|
Becomes:
|
||||||
|
|
||||||
|
- action: `search_builds`
|
||||||
|
- status: `failed`
|
||||||
|
- date: `yesterday`
|
||||||
|
- confidence: `0.93`
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Search query transformed into structured object
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
This is not generation. It is semantic interpretation into a contract.
|
||||||
|
|
||||||
|
## Slide 16: Example Execution
|
||||||
|
|
||||||
|
Then ordinary software:
|
||||||
|
|
||||||
|
- runs the query
|
||||||
|
- renders the results
|
||||||
|
- logs the action
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Database, search, and UI boxes after the contract
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
Once the contract exists, it is just normal software again.
|
||||||
|
|
||||||
|
## Slide 17: Why This Can Stay Tiny
|
||||||
|
|
||||||
|
The output is bounded.
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Huge input cloud mapped into a small action menu
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
The model does not need to generate arbitrary text.
|
||||||
|
|
||||||
|
## Slide 18: This Is Closer To Classical NLP
|
||||||
|
|
||||||
|
- intent classification
|
||||||
|
- entity extraction
|
||||||
|
- slot filling
|
||||||
|
- query interpretation
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Old-school NLP pipeline icons
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
This is often closer to smart search than to modern chatbot behavior.
|
||||||
|
|
||||||
|
## Slide 19: Search Bar Example
|
||||||
|
|
||||||
|
Make a search/help bar feel intelligent.
|
||||||
|
|
||||||
|
Stay local.
|
||||||
|
|
||||||
|
Stay bounded.
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Application search bar with local chip or small-device icon
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
This is one of the clearest examples for programmers.
|
||||||
|
|
||||||
|
## Slide 20: Search Bar Inputs
|
||||||
|
|
||||||
|
Users type:
|
||||||
|
|
||||||
|
- `where do I change export settings`
|
||||||
|
- `find the failed import from last week`
|
||||||
|
- `how do I reset my API token`
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Three stacked queries in a fake app UI
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
These are messy, but the outputs are still bounded.
|
||||||
|
|
||||||
|
## Slide 21: Search Bar Outputs
|
||||||
|
|
||||||
|
RSA decides:
|
||||||
|
|
||||||
|
- mode
|
||||||
|
- entity
|
||||||
|
- filters
|
||||||
|
- confidence
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Four labeled output chips
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
It interprets what subsystem should run and how.
|
||||||
|
|
||||||
|
## Slide 22: Search Bar Execution
|
||||||
|
|
||||||
|
Deterministic systems then:
|
||||||
|
|
||||||
|
- open settings
|
||||||
|
- run filtered search
|
||||||
|
- show help docs
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Three deterministic destination panels
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
RSA interprets the request and fills the structured call.
|
||||||
|
|
||||||
|
## Slide 23: Where Else This Fits
|
||||||
|
|
||||||
|
- command palettes
|
||||||
|
- workflow routing
|
||||||
|
- support triage
|
||||||
|
- tool selection
|
||||||
|
- template selection
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Grid of small app examples
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
Same shape, different domain.
|
||||||
|
|
||||||
|
## Slide 24: WhetstoneDSL / WHIMP
|
||||||
|
|
||||||
|
This fits:
|
||||||
|
|
||||||
|
- `whetstone_DSL`
|
||||||
|
- `WHIMP`
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Two case-study boxes with arrows into RSA
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
Those systems have many bounded decisions that are painful to express as pure rules.
|
||||||
|
|
||||||
|
## Slide 25: A Lot Of “LLM Workflows” Are Really This
|
||||||
|
|
||||||
|
- classification
|
||||||
|
- routing
|
||||||
|
- extraction
|
||||||
|
- slot filling
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Big prompt window collapsing into four small tasks
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
A lot of LLM spend is really being used as fuzzy routing over deterministic software.
|
||||||
|
|
||||||
|
## Slide 26: The Enterprise Angle
|
||||||
|
|
||||||
|
Many teams use giant prompts and context windows
|
||||||
|
|
||||||
|
for tasks that are actually bounded.
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Huge prompt box compared to small contract box
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
That is the efficiency argument.
|
||||||
|
|
||||||
|
## Slide 27: The Careful Claim
|
||||||
|
|
||||||
|
RSA does **not** replace all LLM reasoning.
|
||||||
|
|
||||||
|
RSA replaces bounded semantic decisions.
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Two circles: `bounded decisions` inside scope, `open-ended reasoning` outside scope
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
Keep the claim narrow and defensible.
|
||||||
|
|
||||||
|
## Slide 28: Large Context Caveat
|
||||||
|
|
||||||
|
RSA is best when the decision can use:
|
||||||
|
|
||||||
|
- compact context
|
||||||
|
- retrieved context
|
||||||
|
- distilled context
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Large document pile reduced to a few selected cards
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
For large-context tasks, pair RSA with retrieval or preprocessing.
|
||||||
|
|
||||||
|
## Slide 29: Another Example Near The Edge
|
||||||
|
|
||||||
|
Script generation can sometimes be:
|
||||||
|
|
||||||
|
- template selection
|
||||||
|
- slot filling
|
||||||
|
- deterministic rendering
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Prompt -> template -> filled script
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
Some “code generation” is really hidden template filling.
|
||||||
|
|
||||||
|
## Slide 30: The Main Idea
|
||||||
|
|
||||||
|
Use a tiny model only where deterministic software still needs help.
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Small model block at the routing boundary only
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
That is the whole philosophy.
|
||||||
|
|
||||||
|
## Slide 31: Closing
|
||||||
|
|
||||||
|
`whetstone_RSA` makes software semantically smarter
|
||||||
|
|
||||||
|
without turning everything into a chatbot.
|
||||||
|
|
||||||
|
Visual idea:
|
||||||
|
Final pipeline graphic, clean and minimal
|
||||||
|
|
||||||
|
Speaker notes:
|
||||||
|
That is the punchline I want people to leave with.
|
||||||
24
semantic/extracted_gate_rows_sample.ndjson
Normal file
24
semantic/extracted_gate_rows_sample.ndjson
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["high_confidence_clear_path"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"needs_architect_review": true, "needs_resolve_dependencies": false, "needs_validate_intake": true, "source_values": ["validate-intake", "architect-review"]}, "decision_provenance": "direct_bundled", "gate_id": "prereq_op_selector", "rejection_flags": [], "run_id": "01a_fallback_intake_spec_20260226_162113", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["high_confidence_clear_path"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"]}, "decision_provenance": "direct_bundled", "gate_id": "target_file_selection", "rejection_flags": ["sibling_uniform_target_files"], "run_id": "01a_fallback_intake_spec_20260226_162113", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["high_confidence_clear_path"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"acceptance_commands": ["step615_test", "step616_test", "step682_test"]}, "decision_provenance": "direct_bundled", "gate_id": "acceptance_command_selection", "rejection_flags": ["sibling_uniform_acceptance_commands"], "run_id": "01a_fallback_intake_spec_20260226_162113", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "prerequisite_ops": ["validate-intake", "architect-review"], "reasons": ["high_confidence_clear_path"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"required_tools": ["whetstone_generate_taskitems", "whetstone_queue_ready", "whetstone_validate_taskitem"]}, "decision_provenance": "direct_bundled", "gate_id": "required_tool_selection", "rejection_flags": ["sibling_uniform_required_tools"], "run_id": "01a_fallback_intake_spec_20260226_162113", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["depends_on_prior_tasks"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"needs_architect_review": false, "needs_resolve_dependencies": true, "needs_validate_intake": true, "source_values": ["validate-intake", "resolve-dependencies"]}, "decision_provenance": "direct_bundled", "gate_id": "prereq_op_selector", "rejection_flags": [], "run_id": "01a_fallback_intake_spec_20260226_162113", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["depends_on_prior_tasks"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"]}, "decision_provenance": "direct_bundled", "gate_id": "target_file_selection", "rejection_flags": ["sibling_uniform_target_files"], "run_id": "01a_fallback_intake_spec_20260226_162113", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["depends_on_prior_tasks"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"acceptance_commands": ["step615_test", "step616_test", "step682_test"]}, "decision_provenance": "direct_bundled", "gate_id": "acceptance_command_selection", "rejection_flags": ["sibling_uniform_acceptance_commands"], "run_id": "01a_fallback_intake_spec_20260226_162113", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "prerequisite_ops": ["validate-intake", "resolve-dependencies"], "reasons": ["depends_on_prior_tasks"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"required_tools": ["whetstone_generate_taskitems", "whetstone_queue_ready", "whetstone_validate_taskitem"]}, "decision_provenance": "direct_bundled", "gate_id": "required_tool_selection", "rejection_flags": ["sibling_uniform_required_tools"], "run_id": "01a_fallback_intake_spec_20260226_162113", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162113/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["high_confidence_clear_path"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"needs_architect_review": true, "needs_resolve_dependencies": false, "needs_validate_intake": true, "source_values": ["validate-intake", "architect-review"]}, "decision_provenance": "direct_bundled", "gate_id": "prereq_op_selector", "rejection_flags": [], "run_id": "01a_fallback_intake_spec_20260226_162422", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["high_confidence_clear_path"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"]}, "decision_provenance": "direct_bundled", "gate_id": "target_file_selection", "rejection_flags": ["sibling_uniform_target_files"], "run_id": "01a_fallback_intake_spec_20260226_162422", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["high_confidence_clear_path"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"acceptance_commands": ["step615_test", "step616_test", "step682_test"]}, "decision_provenance": "direct_bundled", "gate_id": "acceptance_command_selection", "rejection_flags": ["sibling_uniform_acceptance_commands"], "run_id": "01a_fallback_intake_spec_20260226_162422", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "prerequisite_ops": ["validate-intake", "architect-review"], "reasons": ["high_confidence_clear_path"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"required_tools": ["whetstone_generate_taskitems", "whetstone_queue_ready", "whetstone_validate_taskitem"]}, "decision_provenance": "direct_bundled", "gate_id": "required_tool_selection", "rejection_flags": ["sibling_uniform_required_tools"], "run_id": "01a_fallback_intake_spec_20260226_162422", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["depends_on_prior_tasks"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"needs_architect_review": false, "needs_resolve_dependencies": true, "needs_validate_intake": true, "source_values": ["validate-intake", "resolve-dependencies"]}, "decision_provenance": "direct_bundled", "gate_id": "prereq_op_selector", "rejection_flags": [], "run_id": "01a_fallback_intake_spec_20260226_162422", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["depends_on_prior_tasks"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"]}, "decision_provenance": "direct_bundled", "gate_id": "target_file_selection", "rejection_flags": ["sibling_uniform_target_files"], "run_id": "01a_fallback_intake_spec_20260226_162422", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["depends_on_prior_tasks"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"acceptance_commands": ["step615_test", "step616_test", "step682_test"]}, "decision_provenance": "direct_bundled", "gate_id": "acceptance_command_selection", "rejection_flags": ["sibling_uniform_acceptance_commands"], "run_id": "01a_fallback_intake_spec_20260226_162422", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "prerequisite_ops": ["validate-intake", "resolve-dependencies"], "reasons": ["depends_on_prior_tasks"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"required_tools": ["whetstone_generate_taskitems", "whetstone_queue_ready", "whetstone_validate_taskitem"]}, "decision_provenance": "direct_bundled", "gate_id": "required_tool_selection", "rejection_flags": ["sibling_uniform_required_tools"], "run_id": "01a_fallback_intake_spec_20260226_162422", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162422/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["high_confidence_clear_path"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"needs_architect_review": true, "needs_resolve_dependencies": false, "needs_validate_intake": true, "source_values": ["validate-intake", "architect-review"]}, "decision_provenance": "direct_bundled", "gate_id": "prereq_op_selector", "rejection_flags": [], "run_id": "01a_fallback_intake_spec_20260226_162423", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["high_confidence_clear_path"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"]}, "decision_provenance": "direct_bundled", "gate_id": "target_file_selection", "rejection_flags": ["sibling_uniform_target_files"], "run_id": "01a_fallback_intake_spec_20260226_162423", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["high_confidence_clear_path"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"acceptance_commands": ["step615_test", "step616_test", "step682_test"]}, "decision_provenance": "direct_bundled", "gate_id": "acceptance_command_selection", "rejection_flags": ["sibling_uniform_acceptance_commands"], "run_id": "01a_fallback_intake_spec_20260226_162423", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 85, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": [], "milestone_id": "milestone-1", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "prerequisite_ops": ["validate-intake", "architect-review"], "reasons": ["high_confidence_clear_path"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-1", "title": "Intake Foundation Primary"}, "decision_label": {"required_tools": ["whetstone_generate_taskitems", "whetstone_queue_ready", "whetstone_validate_taskitem"]}, "decision_provenance": "direct_bundled", "gate_id": "required_tool_selection", "rejection_flags": ["sibling_uniform_required_tools"], "run_id": "01a_fallback_intake_spec_20260226_162423", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-1"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["depends_on_prior_tasks"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"needs_architect_review": false, "needs_resolve_dependencies": true, "needs_validate_intake": true, "source_values": ["validate-intake", "resolve-dependencies"]}, "decision_provenance": "direct_bundled", "gate_id": "prereq_op_selector", "rejection_flags": [], "run_id": "01a_fallback_intake_spec_20260226_162423", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["depends_on_prior_tasks"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"]}, "decision_provenance": "direct_bundled", "gate_id": "target_file_selection", "rejection_flags": ["sibling_uniform_target_files"], "run_id": "01a_fallback_intake_spec_20260226_162423", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "reasons": ["depends_on_prior_tasks"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"acceptance_commands": ["step615_test", "step616_test", "step682_test"]}, "decision_provenance": "direct_bundled", "gate_id": "acceptance_command_selection", "rejection_flags": ["sibling_uniform_acceptance_commands"], "run_id": "01a_fallback_intake_spec_20260226_162423", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
|
{"decision_context": {"ambiguity_count": 0, "ambiguity_signals": [], "confidence": 81, "conflict_signals": {"ambiguousRequirementCount": 0, "conflictCount": 0, "hasConflicts": false}, "dependency_task_ids": ["task-1"], "milestone_id": "milestone-2", "normalized_requirements": [{"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "follow architecture gate requirements from sprint plan", "requirementId": "constraint-1", "sourceLine": 4}, {"ambiguous": false, "anchor": "constraints", "kind": "constraint", "normalizedText": "keep changes deterministic and test backed", "requirementId": "constraint-2", "sourceLine": 5}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "existing editor src modules and mcp toolchain", "requirementId": "dependency-1", "sourceLine": 8}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "whetstone mcp stable binary and workspace config", "requirementId": "dependency-2", "sourceLine": 9}, {"ambiguous": false, "anchor": "dependencies", "kind": "dependency", "normalizedText": "datasets project benchmarks challenging fullstack multifile 2026 02 26 jsonl", "requirementId": "dependency-3", "sourceLine": 10}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "all sprint step tests pass", "requirementId": "acceptance-1", "sourceLine": 13}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "no regression in existing mcp tool behavior", "requirementId": "acceptance-2", "sourceLine": 14}, {"ambiguous": false, "anchor": "acceptance-criteria", "kind": "acceptance", "normalizedText": "generated task queue is ready or blockers are explicit", "requirementId": "acceptance-3", "sourceLine": 15}], "parsed_spec": {"acceptanceCriteria": [{"anchor": "acceptance-criteria", "line": 13, "sectionTitle": "Acceptance Criteria", "text": "All sprint step tests pass"}, {"anchor": "acceptance-criteria", "line": 14, "sectionTitle": "Acceptance Criteria", "text": "No regression in existing MCP tool behavior"}, {"anchor": "acceptance-criteria", "line": 15, "sectionTitle": "Acceptance Criteria", "text": "Generated task queue is ready or blockers are explicit"}], "constraints": [{"anchor": "constraints", "line": 4, "sectionTitle": "Constraints", "text": "Follow architecture gate requirements from sprint plan"}, {"anchor": "constraints", "line": 5, "sectionTitle": "Constraints", "text": "Keep changes deterministic and test-backed"}], "dependencies": [{"anchor": "dependencies", "line": 8, "sectionTitle": "Dependencies", "text": "Existing editor/src modules and MCP toolchain"}, {"anchor": "dependencies", "line": 9, "sectionTitle": "Dependencies", "text": "whetstone_mcp stable binary and workspace config"}, {"anchor": "dependencies", "line": 10, "sectionTitle": "Dependencies", "text": "datasets/project_benchmarks/challenging_fullstack_multifile_2026-02-26.jsonl"}], "goals": [], "sections": [{"anchor": "goals", "headingLine": 1, "title": "Goals"}, {"anchor": "constraints", "headingLine": 3, "title": "Constraints"}, {"anchor": "dependencies", "headingLine": 7, "title": "Dependencies"}, {"anchor": "acceptance-criteria", "headingLine": 12, "title": "Acceptance Criteria"}, {"anchor": "semantic-planning-packet-auto-extracted", "headingLine": 19, "title": "Semantic Planning Packet (Auto-Extracted)"}]}, "prerequisite_ops": ["validate-intake", "resolve-dependencies"], "reasons": ["depends_on_prior_tasks"], "target_files": ["editor/src/mcp/RegisterArchitectIntakeTools.h", "editor/src/mcp/RegisterValidationTools.h", "tools/mcp/run_sprint_taskitem_pipeline.sh"], "task_id": "task-2", "title": "Execution Readiness Primary"}, "decision_label": {"required_tools": ["whetstone_generate_taskitems", "whetstone_queue_ready", "whetstone_validate_taskitem"]}, "decision_provenance": "direct_bundled", "gate_id": "required_tool_selection", "rejection_flags": ["sibling_uniform_required_tools"], "run_id": "01a_fallback_intake_spec_20260226_162423", "source_artifacts": ["/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/01_intake.json", "/home/bill/Documents/CLionProjects/whetstone_DSL/logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/02_generate_taskitems.json", "/home/bill/Documents/whetstone_RSA/semantic/rsa_gate_extraction_contracts_v0.json"], "task_id": "task-2"}
|
||||||
424
semantic/extracted_gate_rows_slice.ndjson
Normal file
424
semantic/extracted_gate_rows_slice.ndjson
Normal file
File diff suppressed because one or more lines are too long
468
semantic/rsa_gate_extraction_contracts_v0.json
Normal file
468
semantic/rsa_gate_extraction_contracts_v0.json
Normal file
@@ -0,0 +1,468 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "whetstone-rsa/gate-extraction-contracts-v0",
|
||||||
|
"title": "RSA Gate Extraction Contracts V0",
|
||||||
|
"version": "0.1.0-bootstrap",
|
||||||
|
"status": "bootstrap_source_of_truth",
|
||||||
|
"notes": [
|
||||||
|
"This file defines machine-readable extraction contracts for mining RSA-aligned gate rows from surviving whetstone_DSL artifacts.",
|
||||||
|
"Contracts are gate-native rather than taskitem-native.",
|
||||||
|
"This artifact records what context may be used, what labels are valid, how provenance should be tagged, and when a candidate row must be rejected."
|
||||||
|
],
|
||||||
|
"enums": {
|
||||||
|
"provenance_class": [
|
||||||
|
"direct_explicit",
|
||||||
|
"direct_bundled",
|
||||||
|
"reconstructed",
|
||||||
|
"untrusted"
|
||||||
|
],
|
||||||
|
"label_shape": [
|
||||||
|
"enum",
|
||||||
|
"factorized_boolean_slots",
|
||||||
|
"ordered_string_list"
|
||||||
|
],
|
||||||
|
"artifact_role": [
|
||||||
|
"primary_context",
|
||||||
|
"primary_label_source",
|
||||||
|
"supporting_context",
|
||||||
|
"audit_only"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"entities": {
|
||||||
|
"ExtractionContract": {
|
||||||
|
"purpose": "Defines how one RSA gate should be extracted from historical artifacts.",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"name": "gate_id",
|
||||||
|
"type": "string",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "status",
|
||||||
|
"type": "string",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "source_artifacts",
|
||||||
|
"type": "array<object>",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "source_fields",
|
||||||
|
"type": "object",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "allowed_context_fields",
|
||||||
|
"type": "array<string>",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "forbidden_context_fields",
|
||||||
|
"type": "array<string>",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "label_shape",
|
||||||
|
"type": "enum:label_shape",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "label_schema",
|
||||||
|
"type": "object",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "default_provenance",
|
||||||
|
"type": "enum:provenance_class",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rejection_rules",
|
||||||
|
"type": "array<string>",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "blocking_issue",
|
||||||
|
"type": "string",
|
||||||
|
"required": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"global_rules": {
|
||||||
|
"row_fields": [
|
||||||
|
"gate_id",
|
||||||
|
"decision_context",
|
||||||
|
"decision_label",
|
||||||
|
"decision_provenance",
|
||||||
|
"source_artifacts",
|
||||||
|
"rejection_flags"
|
||||||
|
],
|
||||||
|
"reject_when": [
|
||||||
|
"candidate label depends on downstream execution results",
|
||||||
|
"candidate label is inferred only from post-hoc failure or success",
|
||||||
|
"candidate label shape does not match the RSA gate contract",
|
||||||
|
"required pre-decision context is missing",
|
||||||
|
"artifact mixes unrelated tasks without isolatable per-task context"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"contracts": {
|
||||||
|
"prereq_op_selector": {
|
||||||
|
"status": "first_pass_extractable",
|
||||||
|
"source_artifacts": [
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/01_intake.json",
|
||||||
|
"role": "primary_context"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/02_generate_taskitems.json",
|
||||||
|
"role": "primary_label_source"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/04_validate_taskitem.json",
|
||||||
|
"role": "audit_only"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source_fields": {
|
||||||
|
"context_fields": [
|
||||||
|
"01_intake.json.normalizedRequirements",
|
||||||
|
"01_intake.json.parsedSpec",
|
||||||
|
"01_intake.json.conflictSignals",
|
||||||
|
"01_intake.json.ambiguitySignals",
|
||||||
|
"02_generate_taskitems.json.tasks[*].title",
|
||||||
|
"02_generate_taskitems.json.tasks[*].milestoneId",
|
||||||
|
"02_generate_taskitems.json.tasks[*].dependencyTaskIds",
|
||||||
|
"02_generate_taskitems.json.tasks[*].confidence",
|
||||||
|
"02_generate_taskitems.json.tasks[*].ambiguityCount",
|
||||||
|
"02_generate_taskitems.json.tasks[*].reasons"
|
||||||
|
],
|
||||||
|
"label_fields": [
|
||||||
|
"02_generate_taskitems.json.tasks[*].prerequisiteOps"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"allowed_context_fields": [
|
||||||
|
"task title",
|
||||||
|
"local task intent",
|
||||||
|
"dependency ids",
|
||||||
|
"local ambiguity signals",
|
||||||
|
"local conflict signals",
|
||||||
|
"normalized requirements",
|
||||||
|
"milestone grouping"
|
||||||
|
],
|
||||||
|
"forbidden_context_fields": [
|
||||||
|
"acceptance commands",
|
||||||
|
"target files",
|
||||||
|
"required tools",
|
||||||
|
"downstream execution results",
|
||||||
|
"validation pass/fail outcome",
|
||||||
|
"generated code"
|
||||||
|
],
|
||||||
|
"label_shape": "factorized_boolean_slots",
|
||||||
|
"label_schema": {
|
||||||
|
"slots": [
|
||||||
|
{
|
||||||
|
"name": "needs_validate_intake",
|
||||||
|
"source_value": "validate-intake",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "needs_architect_review",
|
||||||
|
"source_value": "architect-review",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "needs_resolve_dependencies",
|
||||||
|
"source_value": "resolve-dependencies",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"accepted_source_values": [
|
||||||
|
"validate-intake",
|
||||||
|
"architect-review",
|
||||||
|
"resolve-dependencies"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_provenance": "direct_bundled",
|
||||||
|
"rejection_rules": [
|
||||||
|
"prerequisiteOps contains values outside the accepted slot vocabulary",
|
||||||
|
"task cannot be isolated from sibling tasks in the artifact",
|
||||||
|
"confidence or dependency signals are missing and context becomes too thin",
|
||||||
|
"list appears post-processed rather than source-emitted"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"target_file_selection": {
|
||||||
|
"status": "first_pass_extractable",
|
||||||
|
"source_artifacts": [
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/01_intake.json",
|
||||||
|
"role": "primary_context"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/02_generate_taskitems.json",
|
||||||
|
"role": "primary_label_source"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/datasets/example_run_specs/*",
|
||||||
|
"role": "supporting_context"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source_fields": {
|
||||||
|
"context_fields": [
|
||||||
|
"01_intake.json.normalizedRequirements",
|
||||||
|
"01_intake.json.parsedSpec",
|
||||||
|
"02_generate_taskitems.json.tasks[*].title",
|
||||||
|
"02_generate_taskitems.json.tasks[*].milestoneId",
|
||||||
|
"02_generate_taskitems.json.tasks[*].dependencyTaskIds",
|
||||||
|
"02_generate_taskitems.json.tasks[*].reasons"
|
||||||
|
],
|
||||||
|
"label_fields": [
|
||||||
|
"02_generate_taskitems.json.tasks[*].executionContract.targetFiles"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"allowed_context_fields": [
|
||||||
|
"task title",
|
||||||
|
"local task intent",
|
||||||
|
"relevant normalized requirements",
|
||||||
|
"milestone grouping",
|
||||||
|
"dependency ids",
|
||||||
|
"scenario family metadata"
|
||||||
|
],
|
||||||
|
"forbidden_context_fields": [
|
||||||
|
"acceptance commands",
|
||||||
|
"required tools",
|
||||||
|
"execution specificity score",
|
||||||
|
"validation diagnostics",
|
||||||
|
"downstream worker assignment",
|
||||||
|
"final implementation output"
|
||||||
|
],
|
||||||
|
"label_shape": "ordered_string_list",
|
||||||
|
"label_schema": {
|
||||||
|
"field": "target_files",
|
||||||
|
"item_type": "repo_path",
|
||||||
|
"ordered": true,
|
||||||
|
"non_empty": true
|
||||||
|
},
|
||||||
|
"default_provenance": "direct_bundled",
|
||||||
|
"rejection_rules": [
|
||||||
|
"targetFiles list is empty",
|
||||||
|
"targetFiles include unrelated repository surfaces not justified by task text",
|
||||||
|
"targetFiles appear copied across all sibling tasks without local variation",
|
||||||
|
"targetFiles depend on downstream implementation or validation feedback"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"acceptance_command_selection": {
|
||||||
|
"status": "first_pass_extractable_with_review",
|
||||||
|
"source_artifacts": [
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/01_intake.json",
|
||||||
|
"role": "primary_context"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/02_generate_taskitems.json",
|
||||||
|
"role": "primary_label_source"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/04_validate_taskitem.json",
|
||||||
|
"role": "audit_only"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source_fields": {
|
||||||
|
"context_fields": [
|
||||||
|
"01_intake.json.normalizedRequirements",
|
||||||
|
"02_generate_taskitems.json.tasks[*].title",
|
||||||
|
"02_generate_taskitems.json.tasks[*].milestoneId",
|
||||||
|
"02_generate_taskitems.json.tasks[*].executionContract.targetFiles"
|
||||||
|
],
|
||||||
|
"label_fields": [
|
||||||
|
"02_generate_taskitems.json.tasks[*].executionContract.acceptanceCommands"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"allowed_context_fields": [
|
||||||
|
"task title",
|
||||||
|
"local task intent",
|
||||||
|
"target files",
|
||||||
|
"normalized requirements that imply verification surface"
|
||||||
|
],
|
||||||
|
"forbidden_context_fields": [
|
||||||
|
"validation outcome",
|
||||||
|
"execution success or failure",
|
||||||
|
"downstream generated code",
|
||||||
|
"execution specificity score used as a target proxy"
|
||||||
|
],
|
||||||
|
"label_shape": "ordered_string_list",
|
||||||
|
"label_schema": {
|
||||||
|
"field": "acceptance_commands",
|
||||||
|
"item_type": "command_id",
|
||||||
|
"ordered": true,
|
||||||
|
"non_empty": true
|
||||||
|
},
|
||||||
|
"default_provenance": "direct_bundled",
|
||||||
|
"rejection_rules": [
|
||||||
|
"acceptanceCommands are obvious template defaults unrelated to task surface",
|
||||||
|
"acceptanceCommands require information only known after code edits",
|
||||||
|
"acceptanceCommands are inconsistent with target files or implied verification surface"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required_tool_selection": {
|
||||||
|
"status": "first_pass_extractable_with_review",
|
||||||
|
"source_artifacts": [
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/01_intake.json",
|
||||||
|
"role": "primary_context"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/02_generate_taskitems.json",
|
||||||
|
"role": "primary_label_source"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/04_validate_taskitem.json",
|
||||||
|
"role": "audit_only"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source_fields": {
|
||||||
|
"context_fields": [
|
||||||
|
"01_intake.json.normalizedRequirements",
|
||||||
|
"02_generate_taskitems.json.tasks[*].title",
|
||||||
|
"02_generate_taskitems.json.tasks[*].prerequisiteOps",
|
||||||
|
"02_generate_taskitems.json.tasks[*].executionContract.targetFiles"
|
||||||
|
],
|
||||||
|
"label_fields": [
|
||||||
|
"02_generate_taskitems.json.tasks[*].executionContract.requiredTools"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"allowed_context_fields": [
|
||||||
|
"task title",
|
||||||
|
"local task intent",
|
||||||
|
"prerequisite ops",
|
||||||
|
"target files",
|
||||||
|
"normalized requirements"
|
||||||
|
],
|
||||||
|
"forbidden_context_fields": [
|
||||||
|
"validation-recommended tools as label source",
|
||||||
|
"downstream execution traces",
|
||||||
|
"final worker selection"
|
||||||
|
],
|
||||||
|
"label_shape": "ordered_string_list",
|
||||||
|
"label_schema": {
|
||||||
|
"field": "required_tools",
|
||||||
|
"item_type": "tool_id",
|
||||||
|
"ordered": true,
|
||||||
|
"non_empty": true
|
||||||
|
},
|
||||||
|
"default_provenance": "direct_bundled",
|
||||||
|
"rejection_rules": [
|
||||||
|
"requiredTools are clearly framework boilerplate with no task-local variation",
|
||||||
|
"requiredTools include post-hoc validator recommendations instead of generation-time selections",
|
||||||
|
"requiredTools cannot be mapped to a stable tool registry"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"verification_type": {
|
||||||
|
"status": "second_pass_reconstruction_target",
|
||||||
|
"source_artifacts": [
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*/02_generate_taskitems.json",
|
||||||
|
"role": "supporting_context"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source_fields": {
|
||||||
|
"context_fields": [
|
||||||
|
"02_generate_taskitems.json.tasks[*].title",
|
||||||
|
"02_generate_taskitems.json.tasks[*].executionContract.targetFiles",
|
||||||
|
"02_generate_taskitems.json.tasks[*].executionContract.acceptanceCommands"
|
||||||
|
],
|
||||||
|
"label_fields": []
|
||||||
|
},
|
||||||
|
"allowed_context_fields": [
|
||||||
|
"target files",
|
||||||
|
"acceptance commands",
|
||||||
|
"task title",
|
||||||
|
"normalized requirements"
|
||||||
|
],
|
||||||
|
"forbidden_context_fields": [
|
||||||
|
"downstream validation outcome",
|
||||||
|
"downstream execution result"
|
||||||
|
],
|
||||||
|
"label_shape": "enum",
|
||||||
|
"label_schema": {
|
||||||
|
"accepted_values": [
|
||||||
|
"unit",
|
||||||
|
"schema",
|
||||||
|
"docs",
|
||||||
|
"smoke"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_provenance": "reconstructed",
|
||||||
|
"rejection_rules": [
|
||||||
|
"verification type cannot be inferred without leaking downstream results"
|
||||||
|
],
|
||||||
|
"blocking_issue": "No audited artifact yet shows verification_type as a clean standalone field."
|
||||||
|
},
|
||||||
|
"worker_type": {
|
||||||
|
"status": "second_pass_artifact_search_required",
|
||||||
|
"source_artifacts": [
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*",
|
||||||
|
"role": "supporting_context"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source_fields": {
|
||||||
|
"context_fields": [],
|
||||||
|
"label_fields": []
|
||||||
|
},
|
||||||
|
"allowed_context_fields": [
|
||||||
|
"routing-time task metadata only"
|
||||||
|
],
|
||||||
|
"forbidden_context_fields": [
|
||||||
|
"final execution outputs",
|
||||||
|
"post-hoc review outcome"
|
||||||
|
],
|
||||||
|
"label_shape": "enum",
|
||||||
|
"label_schema": {
|
||||||
|
"accepted_values": [
|
||||||
|
"implementer",
|
||||||
|
"reviewer",
|
||||||
|
"architect",
|
||||||
|
"qa"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_provenance": "reconstructed",
|
||||||
|
"rejection_rules": [
|
||||||
|
"no clean serialized worker label is present in the artifact family"
|
||||||
|
],
|
||||||
|
"blocking_issue": "No clean serialized worker_type label found yet in audited taskitem-generation artifacts."
|
||||||
|
},
|
||||||
|
"cpp_raising_profile": {
|
||||||
|
"status": "second_pass_artifact_search_required",
|
||||||
|
"source_artifacts": [
|
||||||
|
{
|
||||||
|
"path_glob": "CLionProjects/whetstone_DSL/logs/taskitem_runs/*",
|
||||||
|
"role": "supporting_context"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source_fields": {
|
||||||
|
"context_fields": [],
|
||||||
|
"label_fields": []
|
||||||
|
},
|
||||||
|
"allowed_context_fields": [
|
||||||
|
"raising-time IR and tool invocation context"
|
||||||
|
],
|
||||||
|
"forbidden_context_fields": [
|
||||||
|
"post-hoc build outcome used as the label source"
|
||||||
|
],
|
||||||
|
"label_shape": "enum",
|
||||||
|
"label_schema": {
|
||||||
|
"accepted_values": [
|
||||||
|
"safe-first",
|
||||||
|
"perf-first",
|
||||||
|
"interop-first"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_provenance": "untrusted",
|
||||||
|
"rejection_rules": [
|
||||||
|
"no clean serialized raising profile label is present in the artifact family"
|
||||||
|
],
|
||||||
|
"blocking_issue": "No clean serialized cpp_raising_profile label found yet in audited generic taskitem corpora."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -246,6 +246,8 @@ Status:
|
|||||||
- extraction rules for `prereq_op_selector` and execution-contract child
|
- extraction rules for `prereq_op_selector` and execution-contract child
|
||||||
decisions captured in
|
decisions captured in
|
||||||
`docs/case_studies/whetstone_dsl_gate_extraction_specs_v0.md`
|
`docs/case_studies/whetstone_dsl_gate_extraction_specs_v0.md`
|
||||||
|
- machine-readable extraction contracts captured in
|
||||||
|
`semantic/rsa_gate_extraction_contracts_v0.json`
|
||||||
|
|
||||||
### Deliverable D: Artifact-grounded extraction path
|
### Deliverable D: Artifact-grounded extraction path
|
||||||
|
|
||||||
@@ -258,10 +260,13 @@ Status:
|
|||||||
- audit captured in `docs/case_studies/whetstone_dsl_run_artifact_audit.md`
|
- audit captured in `docs/case_studies/whetstone_dsl_run_artifact_audit.md`
|
||||||
- first extraction rules captured in
|
- first extraction rules captured in
|
||||||
`docs/case_studies/whetstone_dsl_gate_extraction_specs_v0.md`
|
`docs/case_studies/whetstone_dsl_gate_extraction_specs_v0.md`
|
||||||
|
- parser-facing extraction contracts captured in
|
||||||
|
`semantic/rsa_gate_extraction_contracts_v0.json`
|
||||||
|
|
||||||
## Active Next Task
|
## Active Next Task
|
||||||
|
|
||||||
Turn the first extraction specs into machine-readable extraction contracts for:
|
Use `semantic/rsa_gate_extraction_contracts_v0.json` to draft the first
|
||||||
|
artifact parser for:
|
||||||
|
|
||||||
- `prereq_op_selector`
|
- `prereq_op_selector`
|
||||||
- `target_file_selection`
|
- `target_file_selection`
|
||||||
@@ -270,6 +275,48 @@ Turn the first extraction specs into machine-readable extraction contracts for:
|
|||||||
|
|
||||||
Status:
|
Status:
|
||||||
|
|
||||||
|
- complete
|
||||||
|
- parser implemented in `tools/extract_gate_rows.py`
|
||||||
|
- sample output generated in `semantic/extracted_gate_rows_sample.ndjson`
|
||||||
|
|
||||||
|
## Next Active Task
|
||||||
|
|
||||||
|
Run the parser over a broader taskitem-run slice and review extraction yield by:
|
||||||
|
|
||||||
|
- gate id
|
||||||
|
- provenance class
|
||||||
|
- rejection-flag frequency
|
||||||
|
|
||||||
|
Status:
|
||||||
|
|
||||||
|
- complete for first 50-run slice
|
||||||
|
- output captured in `semantic/extracted_gate_rows_slice.ndjson`
|
||||||
|
- yield review captured in
|
||||||
|
`docs/case_studies/whetstone_dsl_extraction_yield_snapshot.md`
|
||||||
|
|
||||||
|
## Updated Working Conclusion
|
||||||
|
|
||||||
|
The first extraction-ready dataset candidate is:
|
||||||
|
|
||||||
|
- `prereq_op_selector`
|
||||||
|
|
||||||
|
The following remain explicit but review-gated due to strong sibling-uniform
|
||||||
|
template behavior in the current slice:
|
||||||
|
|
||||||
|
- `target_file_selection`
|
||||||
|
- `acceptance_command_selection`
|
||||||
|
- `required_tool_selection`
|
||||||
|
|
||||||
|
## Next Active Task
|
||||||
|
|
||||||
|
Turn `prereq_op_selector` into the first accepted dataset slice, with:
|
||||||
|
|
||||||
|
- accepted rows
|
||||||
|
- rejected rows
|
||||||
|
- explicit schema-drift examples
|
||||||
|
|
||||||
|
Status:
|
||||||
|
|
||||||
- partially complete
|
- partially complete
|
||||||
- `prereq_op_selector` is now represented as structured/factorized in
|
- `prereq_op_selector` is now represented as structured/factorized in
|
||||||
`semantic/rsa_semantic_bootstrap_v0.json`
|
`semantic/rsa_semantic_bootstrap_v0.json`
|
||||||
|
|||||||
292
tools/extract_gate_rows.py
Normal file
292
tools/extract_gate_rows.py
Normal file
@@ -0,0 +1,292 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Any, Dict, Iterable, List, Tuple
|
||||||
|
|
||||||
|
|
||||||
|
FIRST_PASS_GATES = {
|
||||||
|
"prereq_op_selector",
|
||||||
|
"target_file_selection",
|
||||||
|
"acceptance_command_selection",
|
||||||
|
"required_tool_selection",
|
||||||
|
}
|
||||||
|
REPO_ROOT = Path(__file__).resolve().parent.parent
|
||||||
|
|
||||||
|
|
||||||
|
def load_json(path: Path) -> Dict[str, Any]:
|
||||||
|
with path.open("r", encoding="utf-8") as fh:
|
||||||
|
return json.load(fh)
|
||||||
|
|
||||||
|
|
||||||
|
def iter_run_dirs(root: Path) -> Iterable[Path]:
|
||||||
|
for child in sorted(root.iterdir()):
|
||||||
|
if not child.is_dir():
|
||||||
|
continue
|
||||||
|
if (child / "01_intake.json").exists() and (child / "02_generate_taskitems.json").exists():
|
||||||
|
yield child
|
||||||
|
|
||||||
|
|
||||||
|
def nonempty_list(value: Any) -> List[Any]:
|
||||||
|
if isinstance(value, list):
|
||||||
|
return value
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
def task_context(intake: Dict[str, Any], task: Dict[str, Any]) -> Dict[str, Any]:
|
||||||
|
return {
|
||||||
|
"normalized_requirements": intake.get("normalizedRequirements", []),
|
||||||
|
"parsed_spec": intake.get("parsedSpec", {}),
|
||||||
|
"conflict_signals": intake.get("conflictSignals", []),
|
||||||
|
"ambiguity_signals": intake.get("ambiguitySignals", []),
|
||||||
|
"task_id": task.get("taskId"),
|
||||||
|
"title": task.get("title"),
|
||||||
|
"milestone_id": task.get("milestoneId"),
|
||||||
|
"dependency_task_ids": nonempty_list(task.get("dependencyTaskIds")),
|
||||||
|
"confidence": task.get("confidence"),
|
||||||
|
"ambiguity_count": task.get("ambiguityCount"),
|
||||||
|
"reasons": nonempty_list(task.get("reasons")),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def build_sibling_maps(tasks: List[Dict[str, Any]]) -> Dict[str, Dict[str, int]]:
|
||||||
|
target_counts: Dict[str, int] = {}
|
||||||
|
acceptance_counts: Dict[str, int] = {}
|
||||||
|
tool_counts: Dict[str, int] = {}
|
||||||
|
for task in tasks:
|
||||||
|
contract = task.get("executionContract", {})
|
||||||
|
targets = tuple(nonempty_list(contract.get("targetFiles")))
|
||||||
|
acceptance = tuple(nonempty_list(contract.get("acceptanceCommands")))
|
||||||
|
tools = tuple(nonempty_list(contract.get("requiredTools")))
|
||||||
|
if targets:
|
||||||
|
target_counts[json.dumps(targets)] = target_counts.get(json.dumps(targets), 0) + 1
|
||||||
|
if acceptance:
|
||||||
|
acceptance_counts[json.dumps(acceptance)] = acceptance_counts.get(json.dumps(acceptance), 0) + 1
|
||||||
|
if tools:
|
||||||
|
tool_counts[json.dumps(tools)] = tool_counts.get(json.dumps(tools), 0) + 1
|
||||||
|
return {
|
||||||
|
"targets": target_counts,
|
||||||
|
"acceptance": acceptance_counts,
|
||||||
|
"tools": tool_counts,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def base_row(
|
||||||
|
gate_id: str,
|
||||||
|
run_dir: Path,
|
||||||
|
task: Dict[str, Any],
|
||||||
|
contract_path: Path,
|
||||||
|
provenance: str,
|
||||||
|
) -> Dict[str, Any]:
|
||||||
|
return {
|
||||||
|
"gate_id": gate_id,
|
||||||
|
"run_id": run_dir.name,
|
||||||
|
"task_id": task.get("taskId"),
|
||||||
|
"decision_context": {},
|
||||||
|
"decision_label": {},
|
||||||
|
"decision_provenance": provenance,
|
||||||
|
"source_artifacts": [
|
||||||
|
str(run_dir / "01_intake.json"),
|
||||||
|
str(run_dir / "02_generate_taskitems.json"),
|
||||||
|
str(contract_path),
|
||||||
|
],
|
||||||
|
"rejection_flags": [],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def extract_prereq_row(
|
||||||
|
run_dir: Path,
|
||||||
|
intake: Dict[str, Any],
|
||||||
|
task: Dict[str, Any],
|
||||||
|
contract_path: Path,
|
||||||
|
) -> Dict[str, Any]:
|
||||||
|
row = base_row("prereq_op_selector", run_dir, task, contract_path, "direct_bundled")
|
||||||
|
prereqs = nonempty_list(task.get("prerequisiteOps"))
|
||||||
|
accepted = {"validate-intake", "architect-review", "resolve-dependencies"}
|
||||||
|
invalid = sorted(op for op in prereqs if op not in accepted)
|
||||||
|
row["decision_context"] = task_context(intake, task)
|
||||||
|
row["decision_label"] = {
|
||||||
|
"needs_validate_intake": "validate-intake" in prereqs,
|
||||||
|
"needs_architect_review": "architect-review" in prereqs,
|
||||||
|
"needs_resolve_dependencies": "resolve-dependencies" in prereqs,
|
||||||
|
"source_values": prereqs,
|
||||||
|
}
|
||||||
|
if invalid:
|
||||||
|
row["rejection_flags"].append(f"invalid_prerequisite_values:{','.join(invalid)}")
|
||||||
|
if not row["decision_context"]["title"]:
|
||||||
|
row["rejection_flags"].append("missing_task_title")
|
||||||
|
if row["decision_context"]["confidence"] is None:
|
||||||
|
row["rejection_flags"].append("missing_confidence")
|
||||||
|
return row
|
||||||
|
|
||||||
|
|
||||||
|
def extract_target_files_row(
|
||||||
|
run_dir: Path,
|
||||||
|
intake: Dict[str, Any],
|
||||||
|
task: Dict[str, Any],
|
||||||
|
contract_path: Path,
|
||||||
|
sibling_maps: Dict[str, Dict[str, int]],
|
||||||
|
sibling_count: int,
|
||||||
|
) -> Dict[str, Any]:
|
||||||
|
row = base_row("target_file_selection", run_dir, task, contract_path, "direct_bundled")
|
||||||
|
execution_contract = task.get("executionContract", {})
|
||||||
|
targets = nonempty_list(execution_contract.get("targetFiles"))
|
||||||
|
row["decision_context"] = task_context(intake, task)
|
||||||
|
row["decision_label"] = {
|
||||||
|
"target_files": targets,
|
||||||
|
}
|
||||||
|
if not targets:
|
||||||
|
row["rejection_flags"].append("empty_target_files")
|
||||||
|
if sibling_count > 1 and targets:
|
||||||
|
key = json.dumps(tuple(targets))
|
||||||
|
if sibling_maps["targets"].get(key, 0) == sibling_count:
|
||||||
|
row["rejection_flags"].append("sibling_uniform_target_files")
|
||||||
|
return row
|
||||||
|
|
||||||
|
|
||||||
|
def extract_acceptance_row(
|
||||||
|
run_dir: Path,
|
||||||
|
intake: Dict[str, Any],
|
||||||
|
task: Dict[str, Any],
|
||||||
|
contract_path: Path,
|
||||||
|
sibling_maps: Dict[str, Dict[str, int]],
|
||||||
|
sibling_count: int,
|
||||||
|
) -> Dict[str, Any]:
|
||||||
|
row = base_row("acceptance_command_selection", run_dir, task, contract_path, "direct_bundled")
|
||||||
|
execution_contract = task.get("executionContract", {})
|
||||||
|
commands = nonempty_list(execution_contract.get("acceptanceCommands"))
|
||||||
|
row["decision_context"] = task_context(intake, task)
|
||||||
|
row["decision_context"]["target_files"] = nonempty_list(execution_contract.get("targetFiles"))
|
||||||
|
row["decision_label"] = {
|
||||||
|
"acceptance_commands": commands,
|
||||||
|
}
|
||||||
|
if not commands:
|
||||||
|
row["rejection_flags"].append("empty_acceptance_commands")
|
||||||
|
if not row["decision_context"]["target_files"]:
|
||||||
|
row["rejection_flags"].append("missing_target_files_context")
|
||||||
|
if sibling_count > 1 and commands:
|
||||||
|
key = json.dumps(tuple(commands))
|
||||||
|
if sibling_maps["acceptance"].get(key, 0) == sibling_count:
|
||||||
|
row["rejection_flags"].append("sibling_uniform_acceptance_commands")
|
||||||
|
return row
|
||||||
|
|
||||||
|
|
||||||
|
def extract_required_tools_row(
|
||||||
|
run_dir: Path,
|
||||||
|
intake: Dict[str, Any],
|
||||||
|
task: Dict[str, Any],
|
||||||
|
contract_path: Path,
|
||||||
|
sibling_maps: Dict[str, Dict[str, int]],
|
||||||
|
sibling_count: int,
|
||||||
|
) -> Dict[str, Any]:
|
||||||
|
row = base_row("required_tool_selection", run_dir, task, contract_path, "direct_bundled")
|
||||||
|
execution_contract = task.get("executionContract", {})
|
||||||
|
tools = nonempty_list(execution_contract.get("requiredTools"))
|
||||||
|
row["decision_context"] = task_context(intake, task)
|
||||||
|
row["decision_context"]["prerequisite_ops"] = nonempty_list(task.get("prerequisiteOps"))
|
||||||
|
row["decision_context"]["target_files"] = nonempty_list(execution_contract.get("targetFiles"))
|
||||||
|
row["decision_label"] = {
|
||||||
|
"required_tools": tools,
|
||||||
|
}
|
||||||
|
if not tools:
|
||||||
|
row["rejection_flags"].append("empty_required_tools")
|
||||||
|
if sibling_count > 1 and tools:
|
||||||
|
key = json.dumps(tuple(tools))
|
||||||
|
if sibling_maps["tools"].get(key, 0) == sibling_count:
|
||||||
|
row["rejection_flags"].append("sibling_uniform_required_tools")
|
||||||
|
return row
|
||||||
|
|
||||||
|
|
||||||
|
def extract_rows_from_run(run_dir: Path, contract_path: Path) -> Tuple[List[Dict[str, Any]], Dict[str, int]]:
|
||||||
|
intake = load_json(run_dir / "01_intake.json")
|
||||||
|
generated = load_json(run_dir / "02_generate_taskitems.json")
|
||||||
|
tasks = nonempty_list(generated.get("tasks"))
|
||||||
|
sibling_maps = build_sibling_maps(tasks)
|
||||||
|
rows: List[Dict[str, Any]] = []
|
||||||
|
stats = {"runs": 1, "tasks": len(tasks), "rows": 0, "rejected_rows": 0}
|
||||||
|
sibling_count = len(tasks)
|
||||||
|
for task in tasks:
|
||||||
|
gate_rows = [
|
||||||
|
extract_prereq_row(run_dir, intake, task, contract_path),
|
||||||
|
extract_target_files_row(run_dir, intake, task, contract_path, sibling_maps, sibling_count),
|
||||||
|
extract_acceptance_row(run_dir, intake, task, contract_path, sibling_maps, sibling_count),
|
||||||
|
extract_required_tools_row(run_dir, intake, task, contract_path, sibling_maps, sibling_count),
|
||||||
|
]
|
||||||
|
for row in gate_rows:
|
||||||
|
rows.append(row)
|
||||||
|
stats["rows"] += 1
|
||||||
|
if row["rejection_flags"]:
|
||||||
|
stats["rejected_rows"] += 1
|
||||||
|
return rows, stats
|
||||||
|
|
||||||
|
|
||||||
|
def parse_args() -> argparse.Namespace:
|
||||||
|
parser = argparse.ArgumentParser(description="Extract RSA gate rows from whetstone_DSL taskitem runs.")
|
||||||
|
parser.add_argument(
|
||||||
|
"--contracts",
|
||||||
|
default="semantic/rsa_gate_extraction_contracts_v0.json",
|
||||||
|
help="Path to the extraction contract JSON.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--taskitem-runs-root",
|
||||||
|
required=True,
|
||||||
|
help="Root directory containing whetstone_DSL taskitem run folders.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--output",
|
||||||
|
required=True,
|
||||||
|
help="Output NDJSON path for extracted rows.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--limit-runs",
|
||||||
|
type=int,
|
||||||
|
default=0,
|
||||||
|
help="Optional limit on how many run directories to process.",
|
||||||
|
)
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
args = parse_args()
|
||||||
|
contract_path = Path(args.contracts)
|
||||||
|
if not contract_path.is_absolute():
|
||||||
|
contract_path = (REPO_ROOT / contract_path).resolve()
|
||||||
|
contracts = load_json(contract_path)
|
||||||
|
missing = FIRST_PASS_GATES.difference(contracts.get("contracts", {}).keys())
|
||||||
|
if missing:
|
||||||
|
raise SystemExit(f"missing first-pass gate contracts: {sorted(missing)}")
|
||||||
|
|
||||||
|
runs_root = Path(args.taskitem_runs_root).resolve()
|
||||||
|
output_path = Path(args.output).resolve()
|
||||||
|
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
rows: List[Dict[str, Any]] = []
|
||||||
|
totals = {"runs": 0, "tasks": 0, "rows": 0, "rejected_rows": 0}
|
||||||
|
for index, run_dir in enumerate(iter_run_dirs(runs_root), start=1):
|
||||||
|
if args.limit_runs and index > args.limit_runs:
|
||||||
|
break
|
||||||
|
run_rows, run_stats = extract_rows_from_run(run_dir, contract_path)
|
||||||
|
rows.extend(run_rows)
|
||||||
|
for key, value in run_stats.items():
|
||||||
|
totals[key] += value
|
||||||
|
|
||||||
|
with output_path.open("w", encoding="utf-8") as fh:
|
||||||
|
for row in rows:
|
||||||
|
fh.write(json.dumps(row, sort_keys=True) + "\n")
|
||||||
|
|
||||||
|
summary = {
|
||||||
|
"contracts_path": str(contract_path),
|
||||||
|
"runs_root": str(runs_root),
|
||||||
|
"output_path": str(output_path),
|
||||||
|
"runs_processed": totals["runs"],
|
||||||
|
"tasks_processed": totals["tasks"],
|
||||||
|
"rows_emitted": totals["rows"],
|
||||||
|
"rows_with_rejection_flags": totals["rejected_rows"],
|
||||||
|
}
|
||||||
|
print(json.dumps(summary, indent=2, sort_keys=True))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
Reference in New Issue
Block a user