Skip to content

docs(feature-aelf-core): spec memo for #439 - #456

Merged
robotrocketscience merged 1 commit into
mainfrom
feat/issue-439-cli-core
May 6, 2026
Merged

docs(feature-aelf-core): spec memo for #439#456
robotrocketscience merged 1 commit into
mainfrom
feat/issue-439-cli-core

Conversation

@yoshi280

@yoshi280 yoshi280 commented May 6, 2026

Copy link
Copy Markdown
Collaborator

Spec memo for #439aelf core CLI. Closes the recovery-inventory line at docs/ROADMAP.md v2.0.0 row (core / unlock / delete / confirm (CLI surface)).

What this PR is

Docs-only. New file at docs/feature-aelf-core.md. Converts the bare issue acceptance sketch into a buildable contract: definition of "core", default thresholds with justifications, CLI shape, output shape, implementation sketch, and test plan.

No code, no schema, no flag wiring. This PR moves #439 from needs-spec to spec-ready.

Definition of "core" (issue acceptance #1)

A belief is core if any of:

  1. lock_level != 'none' (locked).
  2. corroboration_count >= 2 (independently re-ingested from ≥2 distinct sources).
  3. posterior_mean >= 2/3 AND alpha + beta >= 4 (multi-event majority-positive Beta-Bernoulli).

The three signals are independent, each operator-tunable via a flag. Defaults are justified in the memo against the Beta(1,1) prior and the structure of belief_corroborations.

Rejected alternatives:

  • "All locked" — duplicates aelf locked. No new information.
  • "Top-K by composite score" — introduces tuning concerns and obscures why a belief is core.
  • "Locked OR corroborated only" — discards posterior-evidence beliefs that have legitimately accumulated evidence without an explicit lock or independent source.

CLI contract

aelf core [--json]
          [--limit N]
          [--min-corroboration N]   default 2
          [--min-posterior FLOAT]   default 2/3
          [--min-alpha-beta N]      default 4
          [--locked-only]
          [--no-locked]

--locked-only and --no-locked are mutually exclusive (argparse exit 2).

Output

Text — one line per belief, locked-first sort matching aelf locked:

<id> [LOCK,CORR=3,α=4.0,β=1.0,μ=0.800]: <content one-line>

Tag block omits non-signalling fields. --json emits a list with signals: ["lock", "corroboration", "posterior"] so the operator can see why each row is included.

Implementation (issue acceptance #2-4)

_cmd_core in src/aelfrice/cli.py composes existing API:

  • store.list_locked_beliefs() for the locked subset.
  • store.list_belief_ids() + store.get_belief() walk for the corroboration / posterior subsets.

No new store method. Memo argues the N+1 pattern is fine at v2.0 store sizes (target ~10⁴ beliefs, low-ms walk) since aelf core is a research-line / operator verb, not a per-turn hot path. Promote to a single SQL query later if measurement justifies it.

Reconciliation

  • vs. aelf locked: locked = L0 only (lock_level != 'none'); core = L0 ∪ corroborated ∪ high-posterior. core --locked-only is equivalent to locked modulo output formatting.
  • vs. aelf wonder: wonder surfaces consolidation candidates (beliefs that look like they should merge); core surfaces currently load-bearing beliefs (already anchoring retrieval). Different verbs, different intents.
  • vs. PageRank: original issue body mentions "high-PageRank" — graph-centrality infrastructure isn't in the store as of v2.0. Deferred per "Out of scope" in the memo, not blocking.

Substrate

All on main as of 985c367:

  • src/aelfrice/cli.py:_cmd_locked — output-shape and store-open precedent.
  • src/aelfrice/cli.py:_cmd_unlock — argparse / store-open / exit-code precedent for sibling verbs.
  • src/aelfrice/store.py:list_locked_beliefs — reused.
  • src/aelfrice/store.py:list_belief_ids + get_belief — used for the candidate walk.
  • src/aelfrice/models.py:Beliefalpha, beta, lock_level, corroboration_count fields all already populated by _row_to_belief.

No new dependencies. No schema changes.

Test plan

  • Discretion grep on diff vs github/main — clean.
  • Commit SSH-signed (G).
  • CI matrix green (docs-only).
  • Reviewer: confirm three-signal definition is the right scope; sanity-check the MIN_CORROBORATION=2, MIN_POSTERIOR=2/3, MIN_ALPHA_BETA=4 defaults; confirm PageRank deferral is acceptable.

Out of scope (deferred)

  • PageRank weighting — needs a graph-centrality pass first.
  • Hibernation-aware filter — flag for later if operator needs it.
  • aelf core --explain <id> — useful follow-up verb.

Refs

Summary by Sourcery

Document the aelf core CLI as an implementation-ready feature spec defining its purpose, core-belief criteria, CLI contract, and behavior within the belief store ecosystem.

Documentation:

  • Add an implementation spec for the aelf core CLI covering definition of core beliefs, tunable thresholds, CLI flags, and text/JSON output formats.
  • Describe how aelf core relates to existing commands (locked, unlock, wonder) and defer advanced signals like PageRank and hibernation-aware filtering.
  • Outline a future-focused test plan and integration points for the eventual aelf core implementation and slash command wiring.

Summary by CodeRabbit

  • Documentation
    • Added comprehensive documentation for the aelf core CLI feature, including feature specifications, core beliefs and signals definitions, CLI contract and output formats, implementation details covering command flows and helper predicates, CLI flag interactions, and a complete test plan.

@sourcery-ai

sourcery-ai Bot commented May 6, 2026

Copy link
Copy Markdown

Reviewer's Guide

Adds a full implementation spec for the planned aelf core CLI command, defining what qualifies a belief as "core", the CLI and output contracts, implementation approach using existing store APIs, and a future test plan, all in a new docs file with no code changes.

Sequence diagram for the aelf core CLI execution path

sequenceDiagram
    actor Operator
    participant AelfCLI as aelf_core_CLI
    participant Store as BeliefStore
    participant Emitter as CoreEmitter

    Operator->>AelfCLI: run aelf core [flags]
    AelfCLI->>Store: _open_store()
    activate Store

    alt no_locked is false
        AelfCLI->>Store: list_locked_beliefs()
        Store-->>AelfCLI: locked_beliefs
    else no_locked is true
        AelfCLI-->>AelfCLI: locked_beliefs = []
    end

    AelfCLI-->>AelfCLI: candidates = []

    alt locked_only is false
        AelfCLI->>Store: list_belief_ids()
        Store-->>AelfCLI: belief_id_list
        loop for each belief_id
            AelfCLI->>Store: get_belief(belief_id)
            Store-->>AelfCLI: belief
            alt belief is None or belief.lock_level != none
                AelfCLI-->>AelfCLI: skip (locked handled above)
            else belief qualifies
                AelfCLI-->>AelfCLI: add to candidates
            end
        end
    else locked_only is true
        AelfCLI-->>AelfCLI: skip candidate walk
    end

    AelfCLI->>Store: close()
    deactivate Store

    AelfCLI->>Emitter: _emit(locked_beliefs, candidates, args, out)
    activate Emitter
    Emitter-->>Emitter: dedupe by id, sort, apply limit
    alt json flag set
        Emitter-->>Operator: JSON list with signals
    else text output
        Emitter-->>Operator: formatted text lines
    end
    deactivate Emitter
Loading

Flow diagram for qualifying a belief as core

flowchart TD
    Start([Start]) --> CheckLocked{lock_level != none?}

    CheckLocked -->|yes| Core[Mark as core via lock signal]
    CheckLocked -->|no| CheckCorr{corroboration_count >= MIN_CORROBORATION?}

    CheckCorr -->|yes| Core
    CheckCorr -->|no| CheckPosterior{posterior_mean >= MIN_POSTERIOR?}

    CheckPosterior -->|no| NotCore[Belief is not core]
    CheckPosterior -->|yes| CheckAlphaBeta{alpha + beta >= MIN_ALPHA_BETA?}

    CheckAlphaBeta -->|yes| Core
    CheckAlphaBeta -->|no| NotCore

    Core --> End([End])
    NotCore --> End
Loading

File-Level Changes

Change Details Files
Document the functional and technical spec for the new aelf core CLI command that surfaces load-bearing beliefs from the belief store.
  • Define the three independent signals (lock, corroboration, high posterior) that qualify a belief as core and justify their default thresholds against the Beta-Bernoulli model and corroboration semantics.
  • Specify the CLI interface for aelf core, including flags for JSON output, result limiting, threshold tuning, and mutually exclusive locked-only vs no-locked modes with exit code behavior.
  • Describe the text and JSON output formats, including the tag block fields and the signals array that explains why each belief is included.
  • Outline the intended implementation of _cmd_core in the CLI module using existing store methods (list_locked_beliefs, list_belief_ids, get_belief), including sorting, deduping, and rationale for accepting an N+1 pattern at current scale.
  • Provide reconciliation against related commands (aelf locked, aelf wonder) and PageRank-based alternatives, plus a proposed test plan and explicitly deferred future enhancements like PageRank weighting, hibernation-aware filters, and an --explain sub-verb.
docs/feature-aelf-core.md

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@github-actions github-actions Bot added the docs label May 6, 2026
@coderabbitai

coderabbitai Bot commented May 6, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@robotrocketscience has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 20 minutes and 22 seconds before requesting another review.

To continue reviewing without waiting, purchase usage credits in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 7d5345ef-5e7d-49eb-a2d5-3b8a7b3cd7ef

📥 Commits

Reviewing files that changed from the base of the PR and between 68101da and e623072.

📒 Files selected for processing (1)
  • docs/feature-aelf-core.md
📝 Walkthrough

Walkthrough

A comprehensive feature specification document for the aelf core CLI is added, detailing the purpose of exposing load-bearing beliefs, signal thresholds and posterior computation, command contract including flags and output formats (text and JSON), implementation flow, and test plan sketches.

Changes

aelf Core Feature Specification

Layer / File(s) Summary
Feature Purpose & Definition
docs/feature-aelf-core.md (lines 1–39)
Feature header metadata, purpose statement, definition of "core" beliefs by three criteria (Locked, Corroborated, High posterior), and rationale for chosen signals.
Threshold Defaults
docs/feature-aelf-core.md (lines 40–66)
Default threshold values for corroboration, posterior, and alpha-beta parameters with selection rationale; scope clarification and comparison to related features.
CLI Contract
docs/feature-aelf-core.md (lines 69–93)
Command synopsis, full flags table (--json, --limit, --min-*, --locked-only, --no-locked), defaults, and mutual-exclusion behavior.
Output Format Specification
docs/feature-aelf-core.md (lines 102–147)
Text output format with signal annotation key (LOCK, CORR, α, β, μ), empty store case, and JSON output schema with signals field meaning.
Implementation & Integration
docs/feature-aelf-core.md (lines 149–201)
_cmd_core flow (store opening, locking retrieval, filtering, emission), _qualifies and _emit helper notes, design rationale for no new store method, and slash-command integration.
Test Plan & Provenance
docs/feature-aelf-core.md (lines 203–269)
Test scenarios (default output, JSON, flags, mutual exclusion, limits, thresholds), slash-command tests, out-of-scope deferred items, and related issue references.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~15 minutes

Suggested labels

attn:review, docs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'docs(feature-aelf-core): spec memo for #439' clearly and specifically summarizes the main change: adding documentation for the aelf core CLI feature specification.
Description check ✅ Passed The PR description is comprehensive and includes a summary, linked issue (#439), type of change (docs), test plan checklist, and detailed implementation notes. It follows the repository template structure and provides substantial context for reviewers.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/issue-439-cli-core

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


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.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Hey - I've found 1 issue, and left some high level feedback:

  • The semantics of "disabling" the numeric thresholds are a bit ambiguous: with MIN_CORROBORATION defined as corroboration_count >= MIN_CORROBORATION, setting --min-corroboration 0 would make the signal always fire rather than disable it; consider spelling out the exact interpretation of 0 for each flag (e.g., 0 means the signal is never considered vs. always passes) and how that interacts with the core definition.
  • For the posterior signal, it would help to be explicit about precedence when --min-posterior and --min-alpha-beta are set inconsistently (e.g., --min-posterior 0.0 --min-alpha-beta 4): document whether either being at the "disabled" value disables the whole posterior signal or whether both must pass for the signal to count.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- The semantics of "disabling" the numeric thresholds are a bit ambiguous: with `MIN_CORROBORATION` defined as `corroboration_count >= MIN_CORROBORATION`, setting `--min-corroboration 0` would make the signal always fire rather than disable it; consider spelling out the exact interpretation of 0 for each flag (e.g., 0 means the signal is never considered vs. always passes) and how that interacts with the `core` definition.
- For the posterior signal, it would help to be explicit about precedence when `--min-posterior` and `--min-alpha-beta` are set inconsistently (e.g., `--min-posterior 0.0 --min-alpha-beta 4`): document whether either being at the "disabled" value disables the whole posterior signal or whether both must pass for the signal to count.

## Individual Comments

### Comment 1
<location path="docs/feature-aelf-core.md" line_range="87" />
<code_context>
+| `--limit N` | none | Cap result count after filtering / sort. |
+| `--min-corroboration N` | `2` | Threshold for the corroboration signal. `0` disables. |
+| `--min-posterior FLOAT` | `0.6666...` | Threshold for posterior-mean signal. `0.0` disables. |
+| `--min-alpha-beta N` | `4` | Co-gate on posterior signal — rules out single-event case. |
+| `--locked-only` | off | Equivalent to setting both other signals to "disabled". |
+| `--no-locked` | off | Suppress the locked subset (debug — surface only the corroboration / posterior subsets). |
</code_context>
<issue_to_address>
**nitpick (typo):** Minor grammar nit: consider "rules out the single-event case"

Consider adding "the" before "single-event case" for smoother wording: `Co-gate on posterior signal — rules out the single-event case.`

```suggestion
| `--min-alpha-beta N` | `4` | Co-gate on posterior signal — rules out the single-event case. |
```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment thread docs/feature-aelf-core.md
| `--limit N` | none | Cap result count after filtering / sort. |
| `--min-corroboration N` | `2` | Threshold for the corroboration signal. `0` disables. |
| `--min-posterior FLOAT` | `0.6666...` | Threshold for posterior-mean signal. `0.0` disables. |
| `--min-alpha-beta N` | `4` | Co-gate on posterior signal — rules out single-event case. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nitpick (typo): Minor grammar nit: consider "rules out the single-event case"

Consider adding "the" before "single-event case" for smoother wording: Co-gate on posterior signal — rules out the single-event case.

Suggested change
| `--min-alpha-beta N` | `4` | Co-gate on posterior signal — rules out single-event case. |
| `--min-alpha-beta N` | `4` | Co-gate on posterior signal — rules out the single-event case. |

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick comments (4)
docs/feature-aelf-core.md (4)

71-79: ⚡ Quick win

Add language specifier to fenced code block.

The CLI usage example should specify a language for proper syntax highlighting and markdown compliance.

📝 Suggested fix
-```
+```bash
 aelf core [--json]
           [--limit N]

As per coding guidelines, static analysis tool markdownlint-cli2 reports: "Fenced code blocks should have a language specified (MD040)".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/feature-aelf-core.md` around lines 71 - 79, The fenced code block
showing the CLI usage lacks a language specifier; update the block that contains
the aelf core usage (the lines starting with "aelf core [--json]" through
"--no-locked") to include a language tag (e.g., "bash") on the opening fence so
the block becomes a fenced bash code block for proper syntax highlighting and to
satisfy MD040.

108-118: ⚡ Quick win

Add language specifier to text output example.

The example output block should specify a language for proper markdown rendering.

📝 Suggested fix
-```
+```text
 <belief-id> [LOCK,CORR=3,α=4.0,β=1.0,μ=0.800]: <content one-line>
</details>

As per coding guidelines, static analysis tool markdownlint-cli2 reports: "Fenced code blocks should have a language specified (MD040)".

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

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @docs/feature-aelf-core.md around lines 108 - 118, The fenced code block
showing the belief example lacks a language tag; update the block delimiter
around " [LOCK,CORR=3,α=4.0,β=1.0,μ=0.800]: " to
include a language (e.g., change totext) so markdownlint MD040 is
satisfied and the example renders correctly; ensure the surrounding example and
any references to the tag fields (LOCK, CORR, α, β, μ) remain
unchanged.


</details>

---

`208-210`: _⚡ Quick win_

**Add language specifier to doc update example.**

The markdown table example should have a language tag for consistency.



<details>
<summary>📝 Suggested fix</summary>

```diff
-```
+```markdown
 | `core [--json] [--limit N] [--min-corroboration N] [--min-posterior FLOAT] [--min-alpha-beta N] [--locked-only] [--no-locked]` | (v2.0+, `#439`) Surface load-bearing beliefs: locked ∪ {corroboration ≥ 2} ∪ {posterior ≥ 2/3 with α+β ≥ 4}. Read-only. |
 ```
```
</details>

As per coding guidelines, static analysis tool markdownlint-cli2 reports: "Fenced code blocks should have a language specified (MD040)".

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

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @docs/feature-aelf-core.md around lines 208 - 210, Add a language specifier
to the fenced code block containing the command/table example so markdownlint
MD040 is satisfied: update the triple-backtick fence that currently precedes the
line with core [--json] [--limit N] ... to include a language tag (e.g.,
markdown) and keep the closing unchanged; this change is in the
docs/feature-aelf-core.md example block.


</details>

---

`119-125`: _⚡ Quick win_

**Add language specifier to empty-store output example.**

The example should specify a language for consistency with markdown best practices.



<details>
<summary>📝 Suggested fix</summary>

```diff
-```
+```text
 no core beliefs
 ```
```
</details>

As per coding guidelines, static analysis tool markdownlint-cli2 reports: "Fenced code blocks should have a language specified (MD040)".

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

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @docs/feature-aelf-core.md around lines 119 - 125, Update the fenced code
block shown under "Empty store / no matches" (the block containing "no core
beliefs") to include a language specifier (e.g., add "text" after the opening
backticks -> ```text) so the example complies with markdownlint rule MD040;
ensure the closing backticks remain unchanged.


</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>🤖 Prompt for all review comments with AI agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In @docs/feature-aelf-core.md:

  • Around line 71-79: The fenced code block showing the CLI usage lacks a
    language specifier; update the block that contains the aelf core usage (the
    lines starting with "aelf core [--json]" through "--no-locked") to include a
    language tag (e.g., "bash") on the opening fence so the block becomes a fenced
    bash code block for proper syntax highlighting and to satisfy MD040.
  • Around line 108-118: The fenced code block showing the belief example lacks a
    language tag; update the block delimiter around "
    [LOCK,CORR=3,α=4.0,β=1.0,μ=0.800]: " to include a language
    (e.g., change totext) so markdownlint MD040 is satisfied and the example
    renders correctly; ensure the surrounding example and any references to the tag
    fields (LOCK, CORR, α, β, μ) remain unchanged.
  • Around line 208-210: Add a language specifier to the fenced code block
    containing the command/table example so markdownlint MD040 is satisfied: update
    the triple-backtick fence that currently precedes the line with core [--json] [--limit N] ... to include a language tag (e.g., markdown) and keep the closing unchanged; this change is in the docs/feature-aelf-core.md example
    block.
  • Around line 119-125: Update the fenced code block shown under "Empty store /
    no matches" (the block containing "no core beliefs") to include a language
    specifier (e.g., add "text" after the opening backticks -> ```text) so the
    example complies with markdownlint rule MD040; ensure the closing backticks
    remain unchanged.

</details>

---

<details>
<summary>ℹ️ Review info</summary>

<details>
<summary>⚙️ Run configuration</summary>

**Configuration used**: Path: .coderabbit.yaml

**Review profile**: CHILL

**Plan**: Pro

**Run ID**: `c294d93b-4f62-41ee-97d3-47648686ff6a`

</details>

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 985c367630bdfb1c22d36ab00d760b5c9b68ee09 and 68101dafe2370d11009ca624bb553bbb902d5f72.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `docs/feature-aelf-core.md`

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

@github-actions github-actions Bot added the attn:merge-conflict PR branch needs rebase label May 6, 2026
@github-actions

github-actions Bot commented May 6, 2026

Copy link
Copy Markdown

This PR is now behind main. Rebase locally so your commit signatures stay intact:

git fetch origin && git checkout 'feat/issue-439-cli-core' && git rebase origin/main
# resolve conflicts if any, then
git push --force-with-lease

Auto-rebase was removed because the bot has no signing key; rebasing as the bot strips author signatures and the required_signatures rule on main then blocks the merge. See #341.

@yoshi280

yoshi280 commented May 6, 2026

Copy link
Copy Markdown
Collaborator Author

[claim:review:Toug:2026-05-06T20:58:49Z]

@robotrocketscience
robotrocketscience force-pushed the feat/issue-439-cli-core branch from 68101da to fe2dd96 Compare May 6, 2026 20:59
@robotrocketscience
robotrocketscience force-pushed the feat/issue-439-cli-core branch from fe2dd96 to e623072 Compare May 6, 2026 21:00
@robotrocketscience
robotrocketscience merged commit e623072 into main May 6, 2026
15 checks passed
@robotrocketscience
robotrocketscience deleted the feat/issue-439-cli-core branch May 6, 2026 21:01
@yoshi280

yoshi280 commented May 6, 2026

Copy link
Copy Markdown
Collaborator Author

[release:review:Toug:2026-05-06T21:01:30Z]

@yoshi280 yoshi280 removed the attn:merge-conflict PR branch needs rebase label May 6, 2026
robotrocketscience added a commit that referenced this pull request May 7, 2026
Sourcery flagged a semantics mismatch: help text said '0 disables'
but the implementation reads as 'threshold = 0 admits any
non-negative value'. Existing test
test_core_disabled_posterior_and_corr_includes_all_nonprior asserts
b-thin (posterior-only candidate) is included with --min-posterior 0.0
--min-alpha-beta 0, which only holds under the lowering reading — so
the implementation is intentional and the test pins it; only the help
text was misleading.

Reword help to 'lower to widen lens — 0 admits …' so the documented
behavior matches code + existing test. No semantics change.

Spec memo (docs/feature-aelf-core.md, PR #456) flag table also says
'0 disables'; that is a separate doc-edit follow-up — not flipped here
to keep this PR focused on the Sourcery findings.
robotrocketscience added a commit that referenced this pull request May 7, 2026
Sourcery flagged a semantics mismatch: help text said '0 disables'
but the implementation reads as 'threshold = 0 admits any
non-negative value'. Existing test
test_core_disabled_posterior_and_corr_includes_all_nonprior asserts
b-thin (posterior-only candidate) is included with --min-posterior 0.0
--min-alpha-beta 0, which only holds under the lowering reading — so
the implementation is intentional and the test pins it; only the help
text was misleading.

Reword help to 'lower to widen lens — 0 admits …' so the documented
behavior matches code + existing test. No semantics change.

Spec memo (docs/feature-aelf-core.md, PR #456) flag table also says
'0 disables'; that is a separate doc-edit follow-up — not flipped here
to keep this PR focused on the Sourcery findings.
robotrocketscience added a commit that referenced this pull request May 7, 2026
Sourcery flagged a semantics mismatch: help text said '0 disables'
but the implementation reads as 'threshold = 0 admits any
non-negative value'. Existing test
test_core_disabled_posterior_and_corr_includes_all_nonprior asserts
b-thin (posterior-only candidate) is included with --min-posterior 0.0
--min-alpha-beta 0, which only holds under the lowering reading — so
the implementation is intentional and the test pins it; only the help
text was misleading.

Reword help to 'lower to widen lens — 0 admits …' so the documented
behavior matches code + existing test. No semantics change.

Spec memo (docs/feature-aelf-core.md, PR #456) flag table also says
'0 disables'; that is a separate doc-edit follow-up — not flipped here
to keep this PR focused on the Sourcery findings.
robotrocketscience added a commit that referenced this pull request May 8, 2026
Sourcery flagged a semantics mismatch: help text said '0 disables'
but the implementation reads as 'threshold = 0 admits any
non-negative value'. Existing test
test_core_disabled_posterior_and_corr_includes_all_nonprior asserts
b-thin (posterior-only candidate) is included with --min-posterior 0.0
--min-alpha-beta 0, which only holds under the lowering reading — so
the implementation is intentional and the test pins it; only the help
text was misleading.

Reword help to 'lower to widen lens — 0 admits …' so the documented
behavior matches code + existing test. No semantics change.

Spec memo (docs/feature-aelf-core.md, PR #456) flag table also says
'0 disables'; that is a separate doc-edit follow-up — not flipped here
to keep this PR focused on the Sourcery findings.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants