Skip to content

Add specs - #1

Merged
grunch merged 3 commits into
mainfrom
001-mostro-p2p-client
Mar 23, 2026
Merged

Add specs#1
grunch merged 3 commits into
mainfrom
001-mostro-p2p-client

Conversation

@grunch

@grunch grunch commented Mar 23, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • New Features

    • Added a Speckit command suite for spec-driven workflows: analyze, checklist, clarify, specify, plan, tasks, implement, and task→issue helpers.
    • Added templates/generators for specs, plans, tasks, checklists, agent files, and constitutions.
  • Documentation

    • Introduced a comprehensive Mostro Mobile v2 specification set: feature spec, plan, tasks, contracts, data model, quickstart, research, design system, and checklists.
  • Chores

    • Added prerequisite and project-management scripts and an initial project constitution.

@coderabbitai

coderabbitai Bot commented Mar 23, 2026

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a1613c4b-5794-4b1c-bdd0-e74da2888655

📥 Commits

Reviewing files that changed from the base of the PR and between ec9c930 and 72a7429.

📒 Files selected for processing (1)
  • .specify/scripts/bash/update-agent-context.sh

Walkthrough

Added a Spec‑Driven Development toolchain: nine speckit command specs, feature scaffolding and plan scripts, template artifacts, a project constitution, agent‑context tooling, and a full Mostro Mobile v2 feature (spec, plan, research, data model, contracts, tasks, quickstart, checklists). No existing source code APIs were changed.

Changes

Cohort / File(s) Summary
Speckit Workflow Commands
.claude/commands/speckit.analyze.md, .claude/commands/speckit.checklist.md, .claude/commands/speckit.clarify.md, .claude/commands/speckit.constitution.md, .claude/commands/speckit.implement.md, .claude/commands/speckit.plan.md, .claude/commands/speckit.specify.md, .claude/commands/speckit.tasks.md, .claude/commands/speckit.taskstoissues.md
New command specifications describing interactive, read-only and write workflows for analysis, checklist generation, clarification sessions, constitution editing, planning, feature/spec creation, task generation, implementation orchestration, and converting tasks → GitHub issues. They define prerequisites, hook semantics, I/O rules, and user prompts.
Bash Infrastructure Scripts
.specify/scripts/bash/common.sh, .specify/scripts/bash/check-prerequisites.sh, .specify/scripts/bash/create-new-feature.sh, .specify/scripts/bash/setup-plan.sh, .specify/scripts/bash/update-agent-context.sh
New shell utilities and CLIs: repo/branch/feature resolution, branch validation, template resolution, JSON/text output helpers, prerequisite checking, feature/branch creation, plan setup, and agent-context file creation/updating. Includes jq/no‑jq fallbacks and robust path handling.
Templates
.specify/templates/agent-file-template.md, .specify/templates/checklist-template.md, .specify/templates/constitution-template.md, .specify/templates/plan-template.md, .specify/templates/spec-template.md, .specify/templates/tasks-template.md
New markdown templates for specs, plans, tasks, checklists, constitution, and agent context consumed by scripts/commands.
Project Constitution & Guidelines
.specify/memory/constitution.md, CLAUDE.md, .specify/CURRENT_FEATURES.md
Added project constitution for Mostro Mobile v2, development guidelines, and a current‑features reference documenting v1 behaviors and constraints.
Feature: 001-mostro-p2p-client — Full artifacts
specs/001-mostro-p2p-client/spec.md, plan.md, research.md, data-model.md, quickstart.md, tasks.md, checklists/requirements.md, contracts/{disputes,identity,messages,nostr,nwc,orders,reputation,types}.md
Complete feature deliverables for the P2P client: draft spec with user stories/requirements/criteria, implementation plan, research, data model, quickstart, ordered tasks, requirements checklist, and detailed contract/type documents for Rust↔Flutter interoperability.
Design System & Ancillary Docs
.specify/DESIGN_SYSTEM.md, .specify/templates/*
New design system reference and supporting templates/documentation for the workflows and feature artifacts.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant SpeckitAnalyze as Speckit.Analyze
    participant PrereqScript as check-prerequisites.sh
    participant FS as FileSystem
    participant Constitution as ConstitutionFile
    participant Analyzer as SemanticAnalyzer

    User->>SpeckitAnalyze: run speckit.analyze ($ARGUMENTS)
    SpeckitAnalyze->>PrereqScript: invoke --json --require-tasks --include-tasks
    PrereqScript-->>SpeckitAnalyze: JSON { FEATURE_DIR, AVAILABLE_DOCS }
    SpeckitAnalyze->>FS: read FEATURE_DIR/spec.md, plan.md, tasks.md
    SpeckitAnalyze->>Constitution: load .specify/memory/constitution.md
    SpeckitAnalyze->>Analyzer: build semantic model & run detection passes
    Analyzer-->>SpeckitAnalyze: findings (severity-classified, bounded)
    SpeckitAnalyze->>User: present Markdown report + suggested next actions
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • Add specs #1 — Overlapping changes to speckit command specs, templates, and the same bash scripts (file-level overlap).

Poem

🐰 I hopped through specs, templates, and scripts tonight,
I stitched plans and tasks till each line looked right,
A constitution, checklists, and a branch born new,
Carrots of structure for the Mostro crew — hooray, review! 🥕

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 57.89% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'Add specs' is overly vague and generic, failing to convey the actual scope of changes which includes specification documents, shell scripts, templates, and numerous targeted fixes. Replace with a more descriptive title that captures the primary change(s), such as 'Add Mostro Mobile v2 specification and tooling infrastructure' or 'Initialize feature specification system with Mostro P2P client specs'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 001-mostro-p2p-client

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 20

🧹 Nitpick comments (10)
.specify/scripts/bash/setup-plan.sh (1)

41-50: Consider checking if plan file already exists before overwriting.

The script unconditionally copies the template to $IMPL_PLAN, potentially overwriting an existing plan file with user content. This may be intentional for a "setup" script, but a warning or confirmation might prevent accidental data loss.

Proposed safeguard
 TEMPLATE=$(resolve_template "plan-template" "$REPO_ROOT") || true
 if [[ -n "$TEMPLATE" ]] && [[ -f "$TEMPLATE" ]]; then
+    if [[ -f "$IMPL_PLAN" ]]; then
+        echo "Warning: $IMPL_PLAN already exists, skipping copy"
+    else
         cp "$TEMPLATE" "$IMPL_PLAN"
         echo "Copied plan template to $IMPL_PLAN"
+    fi
 else
     echo "Warning: Plan template not found"
-    # Create a basic plan file if template doesn't exist
-    touch "$IMPL_PLAN"
+    if [[ ! -f "$IMPL_PLAN" ]]; then
+        touch "$IMPL_PLAN"
+    fi
 fi
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.specify/scripts/bash/setup-plan.sh around lines 41 - 50, The current
template copy unconditionally overwrites $IMPL_PLAN; modify the setup logic in
this script to first check whether the target plan file ($IMPL_PLAN) already
exists and, if so, avoid silently overwriting it (options: skip copy and echo a
warning, create a timestamped backup, or prompt the user); implement the check
around the cp "$TEMPLATE" "$IMPL_PLAN" block (use the existing TEMPLATE variable
and resolve_template call to locate the template) and ensure the script logs the
chosen action (skipped, backed up, or overwritten) so users won’t lose existing
plan content unexpectedly.
specs/001-mostro-p2p-client/contracts/types.md (1)

11-97: Consider adding language specifiers to fenced code blocks.

Static analysis flags these code blocks as lacking a language identifier. Since these are schema definitions rather than executable code, using text or plaintext as the identifier would satisfy the linter while accurately representing the content.

Example fix for one block
 ### OrderKind
-```
+```text
 Buy | Sell
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @specs/001-mostro-p2p-client/contracts/types.md around lines 11 - 97, Add a
language specifier (e.g., "text" or "plaintext") to each fenced code block in
this file so the linter recognizes them as non-executable schema blocks; update
every block such as the Buy | Sell block and the blocks labeled OrderStatus,
TradeRole, BuyerStep, SellerStep, TradeStep, TradeOutcome, MessageType,
DisputeStatus, DisputeResolution, RelayStatus, ConnectionState,
QueuedMessageStatus, CooperativeCancelState, FileType, DownloadStatus, and
WalletStatus by changing the opening totext (or ```plaintext) while
keeping the contents unchanged.


</details>

</blockquote></details>
<details>
<summary>.claude/commands/speckit.taskstoissues.md (1)</summary><blockquote>

`14-30`: **Consider documenting task filtering behavior.**

The outline specifies creating issues "for each task in the list" but doesn't clarify whether this includes:
- Only unchecked tasks (`- [ ]`)
- All tasks regardless of status
- Tasks with specific labels/phases

This could lead to duplicate issues if run multiple times or after partial completion.

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against the current code and only fix it if needed.

In @.claude/commands/speckit.taskstoissues.md around lines 14 - 30, The outline
is ambiguous about which tasks to create issues for and risks duplicates; update
the spec to explicitly define task-filtering behavior (e.g., only unchecked
markdown tasks '- [ ]', all tasks, or tasks matching labels/phases) and add
deduplication rules (e.g., match by task text or embedded task ID) before the
MCP create step so the MCP/GitHub issue creation loop only processes the
intended subset; reference the existing artifacts FEATURE_DIR, AVAILABLE_DOCS
and the tasks list produced by .specify/scripts/bash/check-prerequisites.sh, and
document/configure a flag or parameter used by the Git remote / MCP server step
to control filtering and dedupe logic.
```

</details>

</blockquote></details>
<details>
<summary>specs/001-mostro-p2p-client/contracts/identity.md (1)</summary><blockquote>

`16-21`: **Add language identifier to fenced code blocks.**

Fenced code blocks should specify a language for proper syntax highlighting and linter compliance. For pseudo-code structures, use `text` or `rust` (since the module is in Rust).


<details>
<summary>📝 Proposed fix</summary>

```diff
 **Returns**:
-```
+```text
 IdentityCreationResult {
   public_key: String       # Hex-encoded public key
   mnemonic_words: Vec<String>  # 12-word BIP-39 mnemonic (show once, user must back up)
 }
 ```
```

Apply similar changes to the code blocks on lines 111 and 139.
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against the current code and only fix it if needed.

In `@specs/001-mostro-p2p-client/contracts/identity.md` around lines 16 - 21, The
fenced code blocks in this file lack a language identifier; update the blocks
that define IdentityCreationResult and the similar structures at the other two
locations to include a language tag (e.g., use `text` or `rust`) so linters and
syntax highlighters work correctly—specifically add the language identifier to
the block containing the IdentityCreationResult structure and to the fenced
blocks at the other two occurrences referenced (around the code near lines 111
and 139).
```

</details>

</blockquote></details>
<details>
<summary>.claude/commands/speckit.checklist.md (1)</summary><blockquote>

`241-241`: **Add hyphen to compound modifier.**

"Rate limiting requirements" should be "rate-limiting requirements" when the compound modifier precedes the noun.


<details>
<summary>📝 Proposed fix</summary>

```diff
-- "Are rate limiting requirements quantified with specific thresholds? [Clarity]"
+- "Are rate-limiting requirements quantified with specific thresholds? [Clarity]"
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against the current code and only fix it if needed.

In @.claude/commands/speckit.checklist.md at line 241, The compound modifier
"rate limiting" in the checklist string should be hyphenated; locate the
checklist entry containing the exact text "Are rate limiting requirements
quantified with specific thresholds? [Clarity]" and change it to "Are
rate-limiting requirements quantified with specific thresholds? [Clarity]" so
the compound modifier precedes the noun correctly.
```

</details>

</blockquote></details>
<details>
<summary>.specify/CURRENT_FEATURES.md (1)</summary><blockquote>

`33-33`: **Use inline code to prevent markdown link interpretation.**

The blob structure notation uses square brackets that markdown interprets as a link reference. Wrapping in backticks clarifies this is a format specification.


<details>
<summary>📝 Proposed fix</summary>

```diff
-- Blob structure: [nonce:12][encrypted_data][auth_tag:16]
+- Blob structure: `[nonce:12][encrypted_data][auth_tag:16]`
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against the current code and only fix it if needed.

In @.specify/CURRENT_FEATURES.md at line 33, The blob structure line in
.specify/CURRENT_FEATURES.md uses square brackets which Markdown treats as link
references; update the "Blob structure: [nonce:12][encrypted_data][auth_tag:16]"
line to use inline code formatting (wrap the entire blob specification in
backticks, e.g. `[...]`) so the notation is preserved literally and not parsed
as links.
```

</details>

</blockquote></details>
<details>
<summary>.specify/scripts/bash/update-agent-context.sh (2)</summary><blockquote>

`436-436`: **Remove unused variable `file_ended`.**

This variable is declared but never referenced anywhere in the script.


<details>
<summary>♻️ Proposed fix</summary>

```diff
     local changes_entries_added=false
     local existing_changes_count=0
-    local file_ended=false
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against the current code and only fix it if needed.

In @.specify/scripts/bash/update-agent-context.sh at line 436, The variable
file_ended is declared as "local file_ended=false" but never used; remove this
unused local variable declaration from the script (search for "file_ended" and
delete the "local file_ended=false" line), ensuring no other code depends on it
and run the script's lint/tests to confirm no references remain.
```

</details>

---

`512-512`: **Variable `changes_entries_added` is set but never read.**

This variable is assigned on lines 471 and 512 but its value is never used for any decision or output. Consider removing it or using it for reporting.


<details>
<summary>♻️ Proposed fix (remove if not needed)</summary>

```diff
     local in_tech_section=false
     local in_changes_section=false
     local tech_entries_added=false
-    local changes_entries_added=false
     local existing_changes_count=0
```

And remove the assignments on lines 471 and 512:
```diff
             in_changes_section=true
-            changes_entries_added=true
             continue
```

```diff
         echo "$new_change_entry" >> "$temp_file"
-        changes_entries_added=true
     fi
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against the current code and only fix it if needed.

In @.specify/scripts/bash/update-agent-context.sh at line 512, The variable
changes_entries_added is assigned but never used; remove its declaration and
both assignments to clean up dead code in the script (or, if intended for
reporting, actually increment/use it and emit a summary message). Locate the
symbol changes_entries_added in the update-agent-context.sh script and either
delete all references/assignments to it or implement logic to update and print
its value (e.g., increment where entries are added and echo a summary at the
end) so the variable is meaningful.
```

</details>

</blockquote></details>
<details>
<summary>specs/001-mostro-p2p-client/spec.md (1)</summary><blockquote>

`285-285`: **Add hyphen to compound modifier.**

"NWC compatible wallet" should be hyphenated as "NWC-compatible wallet" when the compound modifier precedes the noun.


<details>
<summary>📝 Proposed fix</summary>

```diff
-- **FR-027**: Users MUST be able to connect a Nostr Wallet Connect (NWC) compatible wallet by pasting a NWC URI.
+- **FR-027**: Users MUST be able to connect a Nostr Wallet Connect (NWC)-compatible wallet by pasting a NWC URI.
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against the current code and only fix it if needed.

In `@specs/001-mostro-p2p-client/spec.md` at line 285, Update the wording of
requirement FR-027 to hyphenate the compound modifier: change the phrase "NWC
compatible wallet" to "NWC-compatible wallet" in the FR-027 line so the compound
modifier correctly precedes the noun; ensure the exact requirement identifier
"FR-027" and the phrase are updated in the specs/001-mostro-p2p-client/spec.md
document.
```

</details>

</blockquote></details>
<details>
<summary>.claude/commands/speckit.implement.md (1)</summary><blockquote>

`25-25`: **Add language identifiers to fenced code blocks.**

Unlabeled fences trigger markdown lint and reduce readability in tooling that supports syntax highlighting.


<details>
<summary>Suggested edit</summary>

```diff
-    ```
+    ```text
...
-    ```
+    ```text
...
-        ```
+        ```text
...
-        ```
+        ```text
```
</details>


Also applies to: 36-36, 180-180, 191-191

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @.claude/commands/speckit.implement.md at line 25, The markdown contains
unlabeled fenced code blocks using plain triple backticks (```); update each
unlabeled fence in .claude/commands/speckit.implement.md (instances around the
current block and also at the locations noted: lines ~36, ~180, ~191) to include
a language identifier (use "text" for these plain examples) so fences become

indentation/spacing is preserved for the blocks around the examples referenced
by the diff markers.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.claude/commands/speckit.implement.md:
- Around line 134-136: The current parsing step "Parse tasks.md structure and
extract: - **Task phases**..." hard-codes phase names (Setup, Tests, Core,
Integration, Polish); change it to detect phase headers dynamically instead:
scan tasks.md for heading patterns (e.g., markdown headings like
/^#{1,6}\s*(.+)/) and treat each matched heading text as a phase name in
document order, allow optional configurable overrides (e.g., a provided phase
list or frontmatter key) and preserve their sequence for dependency rules, and
remove any logic that compares against literal strings "Setup", "Tests", etc.;
update the code that builds the phase list (the "Task phases" extraction logic)
to use the dynamic heading extractor and fall back to a sensible default if no
headings are found.

In @.claude/commands/speckit.plan.md:
- Line 70: Step 4 in .claude/commands/speckit.plan.md currently refers to "Phase
2 planning" but the document only defines Phase 0 and Phase 1; update the text
in Step 4 to read "after Phase 1 planning" (replace the "Phase 2" token) so it
matches the defined Phases section. Locate the Step 4 line that contains "after
Phase 2 planning" and change the phrase to "after Phase 1 planning" (no other
structural changes needed).

In @.claude/commands/speckit.specify.md:
- Around line 116-118: The spec text currently conflicts by both mandating
creation of FEATURE_DIR/checklists/requirements.md in Step 6 and also stating
that checklist creation is a separate command; update the command/spec to choose
one policy and make it explicit: either (A) keep Step 6 and require generating
the checklist file at FEATURE_DIR/checklists/requirements.md (remove any
“separate command” phrasing), or (B) remove the Step 6 mandate and reference the
separate checklist command (e.g., “run the checklist-generation command to
create FEATURE_DIR/checklists/requirements.md”); ensure the wording around
"Specification Quality Validation", the Step 6 paragraph, and any references at
lines 246-247 consistently reflect the chosen option so there is no ambiguity
about when and how requirements.md is created.

In @.specify/scripts/bash/create-new-feature.sh:
- Around line 246-259: Validate BRANCH_NUMBER before using it to compute
FEATURE_NUM and BRANCH_NAME: ensure BRANCH_NUMBER is an integer between 1 and
999 (inclusive) and error out with a clear message if not; specifically, before
FEATURE_NUM=$(printf "%03d" "$((10#$BRANCH_NUMBER))") add a guard that checks
BRANCH_NUMBER is numeric (matches ^[0-9]+$) and within 1..999, printing a
usage/error and exiting non‑zero on failure so invalid values like "foo" or
"1000" fail fast (this relates to variables BRANCH_NUMBER, FEATURE_NUM and
BRANCH_NAME and will keep downstream matchers in common.sh happy).
- Around line 297-307: The script always creates a new
FEATURE_DIR="$SPECS_DIR/$BRANCH_NAME", which can create duplicate numeric-prefix
dirs and break the resolver; instead detect an existing directory in $SPECS_DIR
that shares the numeric prefix of $BRANCH_NAME (extract the prefix before the
first '-') and, if found, set FEATURE_DIR to that existing directory; only mkdir
-p when no existing dir was found; when populating
SPEC_FILE="$FEATURE_DIR/spec.md" use a non-destructive copy (or skip copying) so
you do not overwrite an existing spec.md (e.g., check [ -f "$SPEC_FILE" ] before
cp or use cp -n), and keep using resolve_template and TEMPLATE logic as-is for
creating a new spec when none exists.
- Around line 70-75: The current trim uses xargs which re-tokenizes
FEATURE_DESCRIPTION and breaks on quotes/apostrophes under set -e; replace the
xargs-based trimming with a safe shell-only trimming approach that does not
reparse words — e.g., use POSIX-safe parameter expansion or a printf | sed
pipeline that reads FEATURE_DESCRIPTION as-is and strips leading/trailing
whitespace — then keep the existing empty-check (the if [ -z
"$FEATURE_DESCRIPTION" ] block) unchanged; locate the FEATURE_DESCRIPTION
assignment and its subsequent validation to make this replacement.

In @.specify/scripts/bash/update-agent-context.sh:
- Line 398: The current line uses "local tech_stack=$(format_technology_stack
"$NEW_LANG" "$NEW_FRAMEWORK")" which masks the exit status of
format_technology_stack; change it to declare the local variable first (local
tech_stack) then call format_technology_stack with "$NEW_LANG" and
"$NEW_FRAMEWORK" and assign its output to tech_stack
(tech_stack=$(format_technology_stack ...)) and then check the function's exit
code ($?) so failures from format_technology_stack are not lost.
- Around line 317-319: The three variables escaped_lang, escaped_framework, and
escaped_branch are declared and assigned in the same statement which masks
command-substitution failures under set -e; declare each variable first with
local (e.g., local escaped_lang) and then assign using the command substitution
(e.g., escaped_lang=$(printf ... | sed ...)) for escaped_lang,
escaped_framework, and escaped_branch so any sed/printf error will propagate
instead of being hidden.

In @.specify/templates/plan-template.md:
- Line 6: Update the self-referential sentence that currently reads "See
.specify/templates/plan-template.md for the execution workflow" to point to the
actual command/workflow documentation for filling this template (the
/speckit.plan command) so users aren’t directed back to the same template;
locate the sentence in .specify/templates/plan-template.md and replace the
reference with a clear pointer to the /speckit.plan command or its workflow
docs.

In `@CLAUDE.md`:
- Around line 18-20: Remove the leaked template token "[ONLY COMMANDS FOR ACTIVE
TECHNOLOGIES]" from the "## Commands" section in CLAUDE.md so the line reads a
valid command list (e.g., "cargo test cargo clippy"); specifically locate the
"## Commands" header and the line containing the token and delete the bracketed
token occurrences to prevent the malformed markdown and undefined reference
label.
- Around line 26-29: The Recent Changes section contains a duplicated entry for
"001-mostro-p2p-client" (the line mentioning Rust stable 1.75+, Dart 3.x /
Flutter 3.x, nostr-sdk 0.44+, mostro-core, flutter_rust_bridge 2.x, Riverpod,
go_router); remove the duplicate so the entry appears only once under the "##
Recent Changes" heading and ensure spacing/formatting remains consistent with
the surrounding list.

In `@specs/001-mostro-p2p-client/contracts/messages.md`:
- Around line 80-87: The fenced block for the FileDownloadResult type lacks a
language identifier and there is a duplicated heading "## Streams"; update the
code fence around FileDownloadResult to include a language (e.g., ```text) and
rename the duplicate "## Streams" heading to a distinct title like "##
Attachment Streams" to avoid anchor conflicts; ensure you update both
occurrences where FileDownloadResult and the duplicate heading appear and keep
the schema name FileDownloadResult unchanged.
- Around line 5-7: The spec contradicts itself about which key encrypts
attachments: the top-level text states P2P chat uses sharedKey (ECDH) and
admin/dispute chat uses tradeKey (BIP-32), but the send_file description says
“key from shared trade key,” creating ambiguity; update the send_file and any
other references (e.g., lines 64-65) to explicitly name the correct key
(sharedKey for peer-to-peer messages, tradeKey for admin/dispute messages),
reference NIP-59 Gift Wrapped for attachment formatting, and ensure all
occurrences consistently use the exact identifiers sharedKey or tradeKey so
implementers know which key (ECDH-derived sharedKey vs BIP-32-derived tradeKey)
to use for attachment encryption.

In `@specs/001-mostro-p2p-client/contracts/nostr.md`:
- Around line 84-90: The fenced code block that shows the MostroSettings struct
(containing mostro_pubkey, expiration_hours, expiration_seconds) is missing a
language identifier; update the opening fence to include a language (e.g.,
change ``` to ```text) so the block becomes a fenced code block with a language
identifier and satisfies MD040.

In `@specs/001-mostro-p2p-client/contracts/orders.md`:
- Around line 182-186: The TradeTimeoutInfo struct currently uses OrderStatus
for its state field which is incorrect for active trade timeout progression;
update the schema so TradeTimeoutInfo { trade_id: String, seconds_remaining:
u32, state: TradeState } (replace OrderStatus with TradeState), and regenerate
any API models/docs or adjust consumers that reference TradeTimeoutInfo to use
the TradeState type instead; ensure the identifier TradeTimeoutInfo and the
field name state are the ones changed.

In `@specs/001-mostro-p2p-client/contracts/reputation.md`:
- Around line 49-54: Add fence language identifiers to the Markdown code blocks
that describe the RatingInfo and RatingReceivedEvent structures so they pass
lint MD040; locate the blocks that list fields like "trade_id", "score",
"is_mine", "created_at" (RatingInfo) and the block with "trade_id", "score",
"from_pubkey" (RatingReceivedEvent) and change their opening triple-backtick to
include a language token (e.g., ```text) for both occurrences (also update the
similar blocks at lines noted in the comment).

In `@specs/001-mostro-p2p-client/data-model.md`:
- Around line 250-252: The spec currently lists encryption_key as stored
plaintext; change the data model so that raw symmetric keys are never persisted:
replace or augment the encryption_key field with an encrypted key blob (e.g.,
encryption_key_encrypted or key_material_blob) plus derivation/metadata fields
(KDF/salt/iter/count, key_id, kms_reference or wrapping_key_id) and keep the
plaintext symmetric key only in-memory at runtime; also clarify encryption_nonce
remains a stored 12-byte nonce and ensure download_status stays
unchanged—document that decryption requires the encrypted key blob + metadata
and that plaintext keys must be ephemeral.

In `@specs/001-mostro-p2p-client/research.md`:
- Around line 110-123: The fenced ASCII state-machine block beginning with
"Pending" and showing states like WaitingBuyerInvoice, WaitingPayment, Active,
FiatSent, SettledHoldInvoice, Success, Dispute, Expired, Canceled, and
CooperativelyCanceled lacks a language tag; add "text" to the opening
triple-backtick fence (i.e., change ``` to ```text) so the code fence is
properly annotated and markdownlint MD040 is satisfied.

In `@specs/001-mostro-p2p-client/spec.md`:
- Around line 20-25: The numbered acceptance scenarios are out of
sequence—specifically the line beginning "Given a buyer with a connected NWC
wallet, When a hold invoice is presented..." is labeled 6 but should be
renumbered so the list reads 1–6 sequentially; update the numeric prefixes so
the current "6." becomes "3.", shift the existing "3.", "4.", "5." to "4.",
"5.", "6." respectively, and verify the full sequence of scenario headers is 1
through 6.

In `@specs/001-mostro-p2p-client/tasks.md`:
- Line 387: The line stating "No test tasks generated" is contradictory with
defined test tasks T098–T103; update the note to accurately reflect that test
tasks exist (e.g., replace the sentence with a brief summary like "Test tasks
T098–T103 defined" or remove the incorrect sentence), and ensure any surrounding
documentation or tooling hints reference the actual tasks T098–T103 so reviewers
and execution tooling aren't misled; locate the phrase "No test tasks generated"
and change it to match the presence of T098–T103.

---

Nitpick comments:
In @.claude/commands/speckit.checklist.md:
- Line 241: The compound modifier "rate limiting" in the checklist string should
be hyphenated; locate the checklist entry containing the exact text "Are rate
limiting requirements quantified with specific thresholds? [Clarity]" and change
it to "Are rate-limiting requirements quantified with specific thresholds?
[Clarity]" so the compound modifier precedes the noun correctly.

In @.claude/commands/speckit.implement.md:
- Line 25: The markdown contains unlabeled fenced code blocks using plain triple
backticks (```); update each unlabeled fence in
.claude/commands/speckit.implement.md (instances around the current block and
also at the locations noted: lines ~36, ~180, ~191) to include a language
identifier (use "text" for these plain examples) so fences become ```text;
ensure the matching closing fences remain unchanged and that indentation/spacing
is preserved for the blocks around the examples referenced by the diff markers.

In @.claude/commands/speckit.taskstoissues.md:
- Around line 14-30: The outline is ambiguous about which tasks to create issues
for and risks duplicates; update the spec to explicitly define task-filtering
behavior (e.g., only unchecked markdown tasks '- [ ]', all tasks, or tasks
matching labels/phases) and add deduplication rules (e.g., match by task text or
embedded task ID) before the MCP create step so the MCP/GitHub issue creation
loop only processes the intended subset; reference the existing artifacts
FEATURE_DIR, AVAILABLE_DOCS and the tasks list produced by
.specify/scripts/bash/check-prerequisites.sh, and document/configure a flag or
parameter used by the Git remote / MCP server step to control filtering and
dedupe logic.

In @.specify/CURRENT_FEATURES.md:
- Line 33: The blob structure line in .specify/CURRENT_FEATURES.md uses square
brackets which Markdown treats as link references; update the "Blob structure:
[nonce:12][encrypted_data][auth_tag:16]" line to use inline code formatting
(wrap the entire blob specification in backticks, e.g. `[...]`) so the notation
is preserved literally and not parsed as links.

In @.specify/scripts/bash/setup-plan.sh:
- Around line 41-50: The current template copy unconditionally overwrites
$IMPL_PLAN; modify the setup logic in this script to first check whether the
target plan file ($IMPL_PLAN) already exists and, if so, avoid silently
overwriting it (options: skip copy and echo a warning, create a timestamped
backup, or prompt the user); implement the check around the cp "$TEMPLATE"
"$IMPL_PLAN" block (use the existing TEMPLATE variable and resolve_template call
to locate the template) and ensure the script logs the chosen action (skipped,
backed up, or overwritten) so users won’t lose existing plan content
unexpectedly.

In @.specify/scripts/bash/update-agent-context.sh:
- Line 436: The variable file_ended is declared as "local file_ended=false" but
never used; remove this unused local variable declaration from the script
(search for "file_ended" and delete the "local file_ended=false" line), ensuring
no other code depends on it and run the script's lint/tests to confirm no
references remain.
- Line 512: The variable changes_entries_added is assigned but never used;
remove its declaration and both assignments to clean up dead code in the script
(or, if intended for reporting, actually increment/use it and emit a summary
message). Locate the symbol changes_entries_added in the update-agent-context.sh
script and either delete all references/assignments to it or implement logic to
update and print its value (e.g., increment where entries are added and echo a
summary at the end) so the variable is meaningful.

In `@specs/001-mostro-p2p-client/contracts/identity.md`:
- Around line 16-21: The fenced code blocks in this file lack a language
identifier; update the blocks that define IdentityCreationResult and the similar
structures at the other two locations to include a language tag (e.g., use
`text` or `rust`) so linters and syntax highlighters work correctly—specifically
add the language identifier to the block containing the IdentityCreationResult
structure and to the fenced blocks at the other two occurrences referenced
(around the code near lines 111 and 139).

In `@specs/001-mostro-p2p-client/contracts/types.md`:
- Around line 11-97: Add a language specifier (e.g., "text" or "plaintext") to
each fenced code block in this file so the linter recognizes them as
non-executable schema blocks; update every block such as the Buy | Sell block
and the blocks labeled OrderStatus, TradeRole, BuyerStep, SellerStep, TradeStep,
TradeOutcome, MessageType, DisputeStatus, DisputeResolution, RelayStatus,
ConnectionState, QueuedMessageStatus, CooperativeCancelState, FileType,
DownloadStatus, and WalletStatus by changing the opening ``` to ```text (or
```plaintext) while keeping the contents unchanged.

In `@specs/001-mostro-p2p-client/spec.md`:
- Line 285: Update the wording of requirement FR-027 to hyphenate the compound
modifier: change the phrase "NWC compatible wallet" to "NWC-compatible wallet"
in the FR-027 line so the compound modifier correctly precedes the noun; ensure
the exact requirement identifier "FR-027" and the phrase are updated in the
specs/001-mostro-p2p-client/spec.md document.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: edeb6f9e-4821-4502-bc52-91fe82af98bc

📥 Commits

Reviewing files that changed from the base of the PR and between cbba9ce and 2b2bf8c.

📒 Files selected for processing (38)
  • .claude/commands/speckit.analyze.md
  • .claude/commands/speckit.checklist.md
  • .claude/commands/speckit.clarify.md
  • .claude/commands/speckit.constitution.md
  • .claude/commands/speckit.implement.md
  • .claude/commands/speckit.plan.md
  • .claude/commands/speckit.specify.md
  • .claude/commands/speckit.tasks.md
  • .claude/commands/speckit.taskstoissues.md
  • .specify/CURRENT_FEATURES.md
  • .specify/memory/constitution.md
  • .specify/scripts/bash/check-prerequisites.sh
  • .specify/scripts/bash/common.sh
  • .specify/scripts/bash/create-new-feature.sh
  • .specify/scripts/bash/setup-plan.sh
  • .specify/scripts/bash/update-agent-context.sh
  • .specify/templates/agent-file-template.md
  • .specify/templates/checklist-template.md
  • .specify/templates/constitution-template.md
  • .specify/templates/plan-template.md
  • .specify/templates/spec-template.md
  • .specify/templates/tasks-template.md
  • CLAUDE.md
  • specs/001-mostro-p2p-client/checklists/requirements.md
  • specs/001-mostro-p2p-client/contracts/disputes.md
  • specs/001-mostro-p2p-client/contracts/identity.md
  • specs/001-mostro-p2p-client/contracts/messages.md
  • specs/001-mostro-p2p-client/contracts/nostr.md
  • specs/001-mostro-p2p-client/contracts/nwc.md
  • specs/001-mostro-p2p-client/contracts/orders.md
  • specs/001-mostro-p2p-client/contracts/reputation.md
  • specs/001-mostro-p2p-client/contracts/types.md
  • specs/001-mostro-p2p-client/data-model.md
  • specs/001-mostro-p2p-client/plan.md
  • specs/001-mostro-p2p-client/quickstart.md
  • specs/001-mostro-p2p-client/research.md
  • specs/001-mostro-p2p-client/spec.md
  • specs/001-mostro-p2p-client/tasks.md

Comment thread .claude/commands/speckit.implement.md
Comment thread .claude/commands/speckit.plan.md Outdated
Comment thread .claude/commands/speckit.specify.md Outdated
Comment thread .specify/scripts/bash/create-new-feature.sh
Comment thread .specify/scripts/bash/create-new-feature.sh
Comment thread specs/001-mostro-p2p-client/contracts/reputation.md Outdated
Comment thread specs/001-mostro-p2p-client/data-model.md
Comment thread specs/001-mostro-p2p-client/research.md Outdated
Comment thread specs/001-mostro-p2p-client/spec.md Outdated
Comment thread specs/001-mostro-p2p-client/tasks.md Outdated
…view

- Fill plan.md with technical context, constitution check, and project structure
- Fix shell scripts: safe whitespace trim, branch number validation, spec dir
  dedup, split local+assign for proper error propagation, remove unused vars
- Add markdown fence language identifiers across all contract files
- Fix spec acceptance scenario numbering (1-6 sequential)
- Replace plaintext encryption_key with encrypted key blob in data-model
- Fix TradeTimeoutInfo.state type from OrderStatus to TradeStep
- Clarify sharedKey vs tradeKey usage for attachment encryption
- Rename duplicate Streams heading to Attachment Streams in messages contract
- Clean up CLAUDE.md: remove template tokens, deduplicate entries
- Add overwrite protection to setup-plan.sh and create-new-feature.sh
- Add task filtering and dedup rules to taskstoissues command
- Fix contradictory "No test tasks generated" note (T098-T103 exist)
- Dynamic phase detection in implement command instead of hardcoded names
- Fix Phase 2 reference to Phase 1 in plan command
- Resolve checklist creation policy contradiction in specify command
@grunch

grunch commented Mar 23, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Mar 23, 2026

Copy link
Copy Markdown
Contributor
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (4)
specs/001-mostro-p2p-client/data-model.md (2)

284-304: Add language identifier to relationships code block.

Same MD040 issue as above.

📝 Suggested fix
 ## Relationships

-```
+```text
 Identity (1) ──── (*) Trade
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@specs/001-mostro-p2p-client/data-model.md` around lines 284 - 304, The fenced
code block showing the entity relationships (lines containing Identity, Trade,
Order, Message, Dispute, FileAttachment, Rating, NwcWallet, Relay, Settings,
MessageQueue) must include a language identifier to satisfy MD040; update the
opening fence from ``` to ```text (or another appropriate language) so the block
is ```text Identity (1) ──── (*) Trade ... ``` and save.

58-72: Add language identifier to fenced code block.

The state machine diagram code block lacks a language identifier, which triggers markdownlint MD040.

📝 Suggested fix
 **State machine**:
-```
+```text
 Pending
 ├─→ WaitingBuyerInvoice
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@specs/001-mostro-p2p-client/data-model.md` around lines 58 - 72, The fenced
code block under the "State machine" section is missing a language identifier
which triggers markdownlint MD040; update the opening triple-backtick that
currently appears before the state diagram to include a language identifier
(e.g., ```text or ```dot) so the block becomes ```text (or another appropriate
identifier) and leave the block contents unchanged; look for the "State machine"
heading and the triple-backtick-delimited diagram to apply the change.
.specify/scripts/bash/create-new-feature.sh (1)

144-147: Consider separating declaration and assignment to preserve return values.

ShellCheck SC2155: When local and command substitution are combined, the exit status of the subshell is masked by local's success. If get_highest_from_branches or get_highest_from_specs ever returns non-zero to signal an error, it would be silently ignored.

♻️ Suggested fix
-    local highest_branch=$(get_highest_from_branches)
+    local highest_branch
+    highest_branch=$(get_highest_from_branches)

-    local highest_spec=$(get_highest_from_specs "$specs_dir")
+    local highest_spec
+    highest_spec=$(get_highest_from_specs "$specs_dir")
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.specify/scripts/bash/create-new-feature.sh around lines 144 - 147, Declare
the variables first and assign the command substitutions in separate statements
to avoid masking the commands' exit statuses: change the combined "local
highest_branch=$(get_highest_from_branches)" and "local
highest_spec=$(get_highest_from_specs "$specs_dir")" into separate declaration
and assignment for highest_branch and highest_spec so that failures from
get_highest_from_branches and get_highest_from_specs are preserved and can be
checked (referencing functions get_highest_from_branches, get_highest_from_specs
and variables highest_branch, highest_spec).
.claude/commands/speckit.taskstoissues.md (1)

27-29: Consider specifying gh CLI availability check.

The command uses gh issue list for deduplication (line 28) and implies gh CLI availability, but doesn't specify how to handle cases where the GitHub CLI is not installed or not authenticated. Adding a prerequisite check would prevent confusing failures.

📝 Suggested addition after line 23
 > [!CAUTION]
 > ONLY PROCEED TO NEXT STEPS IF THE REMOTE IS A GITHUB URL

+1. **Verify GitHub CLI availability**: Run `gh auth status` to confirm the CLI is installed and authenticated. If not authenticated, prompt the user to run `gh auth login` first.
+
 1. **Filter tasks**: Only process unchecked tasks (`- [ ]`). Skip tasks already marked complete (`- [x]` or `- [X]`).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.claude/commands/speckit.taskstoissues.md around lines 27 - 29, Add a
prerequisite check for the GitHub CLI before using "gh issue list": verify the
"gh" binary is available and authenticated (e.g., attempt "gh auth status" or
check PATH), and if not present or unauthenticated, fail fast with a clear
message or fall back to an alternative (call the GitHub API or skip
deduplication). Update the documentation around the "gh issue list"
deduplication step to state this requirement and the expected behavior when "gh"
is missing or not logged in so the speckit.taskstoissues workflow doesn't error
silently.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.claude/commands/speckit.specify.md:
- Around line 75-77: The PowerShell example incorrectly references the Bash
script `create-new-feature.sh` and uses Bash-style flags; update the example to
either remove the PowerShell variant or show a correct PowerShell invocation
that runs the Bash script via WSL/Git Bash and preserves the Bash flags (e.g.,
call the script through `wsl`/`bash -c` or explicitly invoke the shell) and use
`--json` and `--short-name` (not `-Json`/`-ShortName`), or replace it with a
true PowerShell-native example; locate the `create-new-feature.sh` example and
change the second line accordingly.

In @.specify/scripts/bash/update-agent-context.sh:
- Line 514: The variable changes_entries_added is assigned but never used;
remove its declaration/assignment to clean up dead code (search for the symbol
changes_entries_added in update-agent-context.sh and delete the line setting it
and any related unused references), or if the original intent was to track added
change entries mirror the pattern used by tech_entries_added by setting and
checking changes_entries_added in the same validation/conditional
blocks—preferably remove the unused variable assignment to keep the script tidy.

---

Nitpick comments:
In @.claude/commands/speckit.taskstoissues.md:
- Around line 27-29: Add a prerequisite check for the GitHub CLI before using
"gh issue list": verify the "gh" binary is available and authenticated (e.g.,
attempt "gh auth status" or check PATH), and if not present or unauthenticated,
fail fast with a clear message or fall back to an alternative (call the GitHub
API or skip deduplication). Update the documentation around the "gh issue list"
deduplication step to state this requirement and the expected behavior when "gh"
is missing or not logged in so the speckit.taskstoissues workflow doesn't error
silently.

In @.specify/scripts/bash/create-new-feature.sh:
- Around line 144-147: Declare the variables first and assign the command
substitutions in separate statements to avoid masking the commands' exit
statuses: change the combined "local
highest_branch=$(get_highest_from_branches)" and "local
highest_spec=$(get_highest_from_specs "$specs_dir")" into separate declaration
and assignment for highest_branch and highest_spec so that failures from
get_highest_from_branches and get_highest_from_specs are preserved and can be
checked (referencing functions get_highest_from_branches, get_highest_from_specs
and variables highest_branch, highest_spec).

In `@specs/001-mostro-p2p-client/data-model.md`:
- Around line 284-304: The fenced code block showing the entity relationships
(lines containing Identity, Trade, Order, Message, Dispute, FileAttachment,
Rating, NwcWallet, Relay, Settings, MessageQueue) must include a language
identifier to satisfy MD040; update the opening fence from ``` to ```text (or
another appropriate language) so the block is ```text Identity (1) ──── (*)
Trade ... ``` and save.
- Around line 58-72: The fenced code block under the "State machine" section is
missing a language identifier which triggers markdownlint MD040; update the
opening triple-backtick that currently appears before the state diagram to
include a language identifier (e.g., ```text or ```dot) so the block becomes
```text (or another appropriate identifier) and leave the block contents
unchanged; look for the "State machine" heading and the
triple-backtick-delimited diagram to apply the change.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 40aa54a6-a943-4400-8213-8dbeb42365a8

📥 Commits

Reviewing files that changed from the base of the PR and between 2b2bf8c and ec9c930.

📒 Files selected for processing (23)
  • .claude/commands/speckit.checklist.md
  • .claude/commands/speckit.implement.md
  • .claude/commands/speckit.plan.md
  • .claude/commands/speckit.specify.md
  • .claude/commands/speckit.taskstoissues.md
  • .specify/CURRENT_FEATURES.md
  • .specify/DESIGN_SYSTEM.md
  • .specify/scripts/bash/create-new-feature.sh
  • .specify/scripts/bash/setup-plan.sh
  • .specify/scripts/bash/update-agent-context.sh
  • .specify/templates/plan-template.md
  • CLAUDE.md
  • specs/001-mostro-p2p-client/contracts/identity.md
  • specs/001-mostro-p2p-client/contracts/messages.md
  • specs/001-mostro-p2p-client/contracts/nostr.md
  • specs/001-mostro-p2p-client/contracts/orders.md
  • specs/001-mostro-p2p-client/contracts/reputation.md
  • specs/001-mostro-p2p-client/contracts/types.md
  • specs/001-mostro-p2p-client/data-model.md
  • specs/001-mostro-p2p-client/plan.md
  • specs/001-mostro-p2p-client/research.md
  • specs/001-mostro-p2p-client/spec.md
  • specs/001-mostro-p2p-client/tasks.md
✅ Files skipped from review due to trivial changes (14)
  • CLAUDE.md
  • .specify/DESIGN_SYSTEM.md
  • .specify/scripts/bash/setup-plan.sh
  • specs/001-mostro-p2p-client/contracts/reputation.md
  • .specify/templates/plan-template.md
  • specs/001-mostro-p2p-client/contracts/types.md
  • specs/001-mostro-p2p-client/plan.md
  • specs/001-mostro-p2p-client/contracts/nostr.md
  • .claude/commands/speckit.plan.md
  • .specify/CURRENT_FEATURES.md
  • specs/001-mostro-p2p-client/research.md
  • specs/001-mostro-p2p-client/contracts/orders.md
  • specs/001-mostro-p2p-client/contracts/identity.md
  • specs/001-mostro-p2p-client/contracts/messages.md

Comment on lines +75 to +77
- Bash example: `.specify/scripts/bash/create-new-feature.sh "$ARGUMENTS" --json --short-name "user-auth" "Add user authentication"`
- PowerShell example: `.specify/scripts/bash/create-new-feature.sh "$ARGUMENTS" -Json -ShortName "user-auth" "Add user authentication"`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

PowerShell example references a Bash script.

Line 76 shows a PowerShell example with -Json and -ShortName flags, but the script is create-new-feature.sh (a Bash script). PowerShell would use different syntax to invoke a shell script, and the flag style shown doesn't match the Bash script's argument parser.

Consider either removing the PowerShell example or clarifying that PowerShell users should invoke the Bash script via WSL/Git Bash with the standard --json flags.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.claude/commands/speckit.specify.md around lines 75 - 77, The PowerShell
example incorrectly references the Bash script `create-new-feature.sh` and uses
Bash-style flags; update the example to either remove the PowerShell variant or
show a correct PowerShell invocation that runs the Bash script via WSL/Git Bash
and preserves the Bash flags (e.g., call the script through `wsl`/`bash -c` or
explicitly invoke the shell) and use `--json` and `--short-name` (not
`-Json`/`-ShortName`), or replace it with a true PowerShell-native example;
locate the `create-new-feature.sh` example and change the second line
accordingly.

Comment thread .specify/scripts/bash/update-agent-context.sh Outdated
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@grunch
grunch merged commit af4c952 into main Mar 23, 2026
1 check was pending
@grunch
grunch deleted the 001-mostro-p2p-client branch March 23, 2026 09:56
codaMW pushed a commit to codaMW/app that referenced this pull request Jul 30, 2026
…form

First phase of docs/cashu/README.md. Pure dependency PR, as specified: no
features, no behaviour change, nothing Cashu-related is reachable at runtime.

0.13.1 -> 0.14.1 compiles with zero source changes on native and wasm; the
suite passes unmodified. What 0.14 adds is the frozen Cashu protocol surface:
Action::{AddCashuEscrow, CashuEscrowLocked, CashuPmSignature},
Payload::{CashuLockProof, CashuSignatures} and five CantDoReason variants.

The phase's other deliverable was to verify the wire form rather than trust
§2's illustrative JSON. Done, and pinned as tests (rust/src/mostro/cashu_wire.rs)
so an upstream rename fails our suite instead of a live trade: Action is
kebab-case, Payload snake_case (so the discriminator is `cashu_lock_proof`),
CashuLockProof's field names are as documented, and fee_token is
skip_serializing_if=Option::is_none — a node charging no fee produces the
pre-0.14 form byte-for-byte. §2's example turned out to be accurate.

One finding changes the plan. The escrow request (Mostro -> seller after a
take) is not merely undocumented, it is absent from mostro-core 0.14.1: the
Cashu fields live on the daemon-internal Order and NOT on SmallOrder, which is
what payloads actually carry, and there is no payload variant for the request.
So C5's seller side cannot be implemented without inventing a wire format.
A test asserts this, so the day upstream adds the carrier the suite goes red
and points at the decision. Risk MostroP2P#1 updated from "not yet published" to
"confirmed absent", with the blast radius scoped: only C5's seller side.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant