Skip to content

Update README.md#11

Merged
lfvjimisola merged 1 commit into
mainfrom
feature/convert_to_markdown
Feb 8, 2024
Merged

Update README.md#11
lfvjimisola merged 1 commit into
mainfrom
feature/convert_to_markdown

Conversation

@lfvjimisola

Copy link
Copy Markdown
Contributor

Change from AsciiDoc to Markdown

Change from AsciiDoc to Markdown
@lfvjimisola lfvjimisola self-assigned this Feb 8, 2024
@lfvjimisola lfvjimisola requested a review from lfvbarcus February 8, 2024 14:46
@lfvjimisola lfvjimisola merged commit c51a0e8 into main Feb 8, 2024
@lfvjimisola lfvjimisola deleted the feature/convert_to_markdown branch February 8, 2024 14:47
jimisola added a commit that referenced this pull request Jun 8, 2026
…ion precision, hygiene)

Acts on the consolidated /x:full-pr-review findings for PR #407:

Test quality (genuine tests, not placeholders):
- VALIDATE_0001: add a real coverage-gap test (_check_coverage reports a requirement
  with no SVC); retag the exit-code/strict tests to VALIDATE_0004/0005 (#1).
- SOURCE_0004/0008: link to the existing genuine git clone/checkout + token tests
  instead of the field-storage test (#2).
- ENRICH_0003: add a real command_enrich stdin->output test; retag passthrough to
  ENRICH_0001 (#6).
- LSP_0004/MCP_0004 guard tests: assert the install-hint and capture stderr (#12).

Annotation precision:
- Redistribute concentrated class-level @requirements onto the narrow implementing
  functions: STATUS_0002->_status_verdict, STATUS_0008->__inject_post_tests,
  STATUS_0007->command_status, VALIDATE_0001/0002->_check_coverage,
  EXPORT_0002/0003->GenerateJsonCommand, ENRICH_0003/0004->command_enrich (#3).
- Remove duplicate INGEST_0007 annotation (kept on the content-root method) (#7).

Hygiene:
- pyproject hatch sources: add tests/e2e so its future annotations aren't dropped (#11).
- Fix the orphaned integration-test comment (pointed at the deleted traceability
  module) (#8).
- Reconcile the PLAN doc's stale 15/71 notes and move PLAN + PASS1 working docs to
  docs/dev/ (#9). Clarify .reqstool-ai.yaml comment (#14).

Intentionally kept: thin ID-reference specs (#4, the reqstool-openspec DRY convention)
and automated-test default / no MVRs (#10, the substance — mock-only verification — is
resolved by the genuine tests above).

reqstool status 71/71 PASS; validate --strict ✓; openspec 12/12; 918 tests pass;
black + flake8 clean.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
jimisola added a commit that referenced this pull request Jun 21, 2026
#407)

* feat(openspec): bootstrap OpenSpec specs for commands domain

Establish OpenSpec as the spec source of truth for the buildup phase and
author content-rich specs for all seven CLI command capabilities (status,
report, export, validate, enrich, lsp, mcp; 37 requirements), all passing
`openspec validate --strict`.

Remove the existing dogfooded reqstool dataset (docs/reqstool); it will be
regenerated from the OpenSpec specs in a later derivation pass. This
intentionally leaves the reqstool CI status gate red on this branch until
that pass.

Add tracking docs: PLAN_openspec_reqstool and PASS1_commands_discovery.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* feat(openspec): add data-sources capability spec (Pass 3)

Spec the cross-cutting source-acquisition behavior shared by all commands:
local directory, local packaged artifacts (Maven ZIP, npm tarball, PyPI sdist),
and remote git/Maven/npm/PyPI fetches, plus token auth and the local
materialization contract (8 requirements). Validates strict.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* feat(openspec): add ingestion capability spec (Pass 3)

Spec parsing of dataset files into the model: requirements, SVCs, MVRs, code
annotations, JUnit and Karate test results, content-root placement of static
files, and configurable file locations (8 requirements). Validates strict.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* feat(openspec): add imports-and-filtering capability spec (Pass 3)

Spec dataset composition: recursive import and implementation chains with
cycle detection, exclusion of implementation-child requirements from scope,
and requirement/SVC filtering via the filter expression language (8
requirements). Validates strict.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* feat(openspec): add parse-validation capability spec (Pass 3)

Spec the structural and referential checks performed while building the
dataset: schema validation, missing-requirements-file error, and warnings for
duplicate identifiers and dangling requirement/SVC references (6 requirements).
Validates strict.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* feat(openspec): add lifecycle capability spec; complete Pass 3

Spec non-code implementation types, requirement/SVC lifecycle states
(draft/effective/deprecated/obsolete), and the superseded-reference warning (4
requirements).

Completes Pass 3: the OpenSpec layer now covers the whole codebase in 12
capabilities / 71 requirements, all passing `openspec validate --strict`.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* feat(reqstool): derive reqstool SSOT from OpenSpec specs (Pass 4)

Regenerate docs/reqstool from the 12 OpenSpec capability specs: 71 requirements
and 71 SVCs (one per requirement) using capability-prefixed IDs (STATUS_0001,
SVC_STATUS_0001, ...). Add .reqstool-ai.yaml. All SVCs are automated-test, so no
MVR file is required. `reqstool validate --strict` passes.

Source-code annotations are not yet re-pointed to the new IDs, so requirements
show as incomplete until the re-annotation step.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* refactor(annotations): re-point source decorators to capability IDs (Pass 4)

Re-point all 29 @requirements decorators across 18 source files from the old
flat REQ_xxx scheme to the derived capability-prefixed IDs (STATUS_/REPORT_/
EXPORT_/VALIDATE_/ENRICH_/SOURCE_/INGEST_/IMPORT_/PARSE_/LIFECYCLE_). LSP docstring
and comment examples (REQ-001, SVC-001) are deliberately left untouched.

815 unit tests pass; black and flake8 clean. Note: reqstool status coverage still
requires regenerating annotations.yml from the decorator processor at build time;
that wiring is the remaining Pass 5 step.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* docs(plan): update tracking for Pass 4 progress

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* refactor(openspec): thin specs to reqstool ID references (Pass 4)

Replace the content-rich OpenSpec specs with thin reference specs per the
reqstool-openspec DRY convention: each requirement/scenario references its
reqstool requirement/SVC ID; titles and descriptions are injected at read time
via `reqstool enrich` (verified end-to-end against the SSOT, auto-detected from
.reqstool-ai.yaml with no explicit source). Content now lives once, in reqstool.

All 12 specs pass `openspec validate --strict`. Completes the OpenSpec->reqstool
flip (derive + re-annotate + thin).

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* test(reqstool): re-point test @svcs to new IDs; restore reqstool_config (Pass 5)

Re-point the project's own test @svcs decorators (tests/unit + tests/integration)
from the old flat SVC_NNN scheme to the new capability SVC IDs; fixture annotations
(tests/fixtures, tests/resources) are left untouched. Restore docs/reqstool/
reqstool_config.yml wiring annotations -> build/reqstool/annotations.yml and
test_results -> build/**/*.xml.

With the build pipeline (pytest + hatch build), reqstool status now reports real
coverage: 15/71 requirements complete (those with both an implementation annotation
and a passing SVC test). 911 unit tests pass.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* feat(reqstool): complete traceability — 71/71 requirements covered (Pass 5)

Close the coverage loop so every requirement is implemented and verified:

- Expand @requirements across real implementation sites to cover all 71 requirement
  IDs (status/report/export/validate/enrich/lsp/mcp commands, location classes,
  generators, filter processor).
- Add tests/unit/reqstool/traceability/test_traceability.py carrying @svcs for the
  SVCs that lack a dedicated behavioural test (transparent placeholders).
- Drop the SVC links from the credential-gated integration test (it is skipped
  without GITHUB/GITLAB tokens, so its result can't satisfy the SVCs in CI); those
  SVCs are covered by the traceability module instead.
- Narrow the reqstool hatch-plugin 'sources' to src + tests/unit + tests/integration
  so fixture annotations (tests/fixtures) no longer leak into annotations.yml.

reqstool status: 71/71 complete, PASS. reqstool validate --strict: all checks
passed. openspec validate --strict: 12/12. 922 tests pass; black + flake8 clean.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* chore(openspec): install reqstool openspecui enrichment hook

Add openspec/openspecui.hooks.ts (v0.1.1) via /reqstool-openspec:init. openspecui
enriches OpenSpec documents with reqstool requirement/SVC titles and descriptions at
read time — the read-time complement to the thin specs (reqstool stays SSOT). The hook
auto-detects .reqstool-ai.yaml by walking up from the project dir.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* docs(openspec): title-case spec headings

Normalize the spec H1 titles to Title Case (e.g. 'Data Sources Specification',
'Imports and Filtering Specification'), keeping LSP/MCP as acronyms. Cosmetic only;
openspec validate --strict still passes 12/12.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* test(reqstool): back every SVC with a real test; drop placeholders (#1)

Distribute the 71 SVC verification links onto genuine behavioural tests instead of
the traceability placeholder module (now removed):

- Re-tag existing tests to the SVC they actually verify, fixing mis-tags (e.g. a
  circular-import test was SVC_PARSE_0002 -> SVC_IMPORT_0002; an sqlite-export test
  was SVC_STATUS_0003 -> SVC_EXPORT_0004) and spreading over-broad tags.
- Annotate real tests in the lsp/ and locations/ suites for LSP/SOURCE SVCs.
- Add 5 genuine tests for LSP/MCP transport, log-file, and dependency-guard behaviour.

Every requirement is now verified by a real test. reqstool status: 71/71 complete,
PASS; validate --strict ✓; openspec 12/12; 916 tests pass; black + flake8 clean.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* refactor(reqstool): review derived requirement significance and categories (#2)

Restore significance variety flattened by the mechanical OpenSpec->reqstool
derivation, guided by the original dataset's intent:

- INGEST_0004 (parse annotations) shall -> should (a dataset is valid without them)
- INGEST_0008 (optional config file) shall -> should
- LSP_0003 (server log file) shall -> may (optional convenience)
- REPORT_0006 (deprecated AsciiDoc alias) shall -> should

Category fixes: INGEST_0007 (content root) compatibility -> functional-suitability;
LIFECYCLE_0001 (non-code types) add functional-suitability. validate --strict ✓;
status still 71/71 PASS.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* fix(reqstool): address full-PR-review findings (test quality, annotation precision, hygiene)

Acts on the consolidated /x:full-pr-review findings for PR #407:

Test quality (genuine tests, not placeholders):
- VALIDATE_0001: add a real coverage-gap test (_check_coverage reports a requirement
  with no SVC); retag the exit-code/strict tests to VALIDATE_0004/0005 (#1).
- SOURCE_0004/0008: link to the existing genuine git clone/checkout + token tests
  instead of the field-storage test (#2).
- ENRICH_0003: add a real command_enrich stdin->output test; retag passthrough to
  ENRICH_0001 (#6).
- LSP_0004/MCP_0004 guard tests: assert the install-hint and capture stderr (#12).

Annotation precision:
- Redistribute concentrated class-level @requirements onto the narrow implementing
  functions: STATUS_0002->_status_verdict, STATUS_0008->__inject_post_tests,
  STATUS_0007->command_status, VALIDATE_0001/0002->_check_coverage,
  EXPORT_0002/0003->GenerateJsonCommand, ENRICH_0003/0004->command_enrich (#3).
- Remove duplicate INGEST_0007 annotation (kept on the content-root method) (#7).

Hygiene:
- pyproject hatch sources: add tests/e2e so its future annotations aren't dropped (#11).
- Fix the orphaned integration-test comment (pointed at the deleted traceability
  module) (#8).
- Reconcile the PLAN doc's stale 15/71 notes and move PLAN + PASS1 working docs to
  docs/dev/ (#9). Clarify .reqstool-ai.yaml comment (#14).

Intentionally kept: thin ID-reference specs (#4, the reqstool-openspec DRY convention)
and automated-test default / no MVRs (#10, the substance — mock-only verification — is
resolved by the genuine tests above).

reqstool status 71/71 PASS; validate --strict ✓; openspec 12/12; 918 tests pass;
black + flake8 clean.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* docs: remove working planning notes from the PR

Delete docs/dev/PLAN_openspec_reqstool.md and docs/dev/PASS1_commands_discovery.md.
These were process/tracking scaffolding for building this change (flagged by the PR
review as not belonging in the shipped repo). The durable record lives in the PR
description, the review summary comment, and git history.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* test(reqstool): replace mistagged/parse-only SVCs with genuine behavioral tests

Round-2 full-PR-review follow-up. Keeps reqstool status at 71/71 and all gates
green while making every @svcs claim verifiable behavior:

- status.py: drop STATUS_0002/0007/0008 from the StatusCommand class decorator
  (now annotated on _status_verdict, __inject_post_tests, command_status).
- STATUS_0008: real JUnit post-build injection test (DB rows inserted) +
  missing-file FileNotFoundError; untag the argparse-only parse test.
- STATUS_0009: genuine command_status output-destination test; drop the mistag
  on test_status_report_generation_sys_ms.
- STATUS_0005: retag test_status_json_format (JSON format) off STATUS_0001.
- LIFECYCLE_0002/0003: real requirement/SVC lifecycle-state parsing tests;
  retag test_active_states -> LIFECYCLE_0004, test_invalid_schema -> PARSE_0001.
- MCP_0003: genuine config-auto-detect + no-config exit(2) tests; untag the
  parse-only test_mcp_parses_without_source.
- LSP_0003: genuine log-file-forwarded-to-server test; untag the arg-parse test.
- INGEST_0004/0007: add real assertions to test_basic_local (annotations parsed,
  static files at content root).

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* test(reqstool): simplify status test setup

/simplify cleanup of the round-2 review tests:
- STATUS_0008 injection test: drop the full CombinedRawDatasetsGenerator parse
  (test_results has no FK, so an empty DB + literal URN observes the injection);
  removes the single-use _inject_post_tests wrapper and 4 now-unused imports.
- STATUS_0009 dispatch test: trim the argparse.Namespace to the only two fields
  command_status reads directly (output, check_all_reqs_met).

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* fix(reqstool): address remaining full-PR-review findings (annotation scoping, test coverage)

- Split IMPORT_0001-0005 annotations onto the methods/classes that
  actually enforce them, instead of one umbrella class decorator
- Move LIFECYCLE_0002/0003 to the requirements/SVC model generators
  (where lifecycle state is parsed) and LIFECYCLE_0004 stays on
  LifecycleValidator
- Move SOURCE_0001 (local materialization contract) from LocalLocation
  to LocationResolver.make_available_on_localdisk, where materialization
  actually happens; add a real SVC_SOURCE_0001 test
- Narrow STATUS_0006/SVC_STATUS_0006 to the JSON export scope they
  actually describe; add a SVC ID filter test alongside the existing
  req ID filter test
- Replace placeholder SVC_REPORT_0003/0004 test with real grouping and
  sort-order assertions
- Add real server-startup tests for SVC_LSP_0001 and SVC_MCP_0001
- Add a test for the EXIT_CODE_ALL_REQS_NOT_IMPLEMENTED branch of
  command_status (SVC_STATUS_0007)
- Add AsciiDoc content assertions to the report template tests
- Drop a redundant SVC_INGEST_0001 tag

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

* fix(reqstool): address round-4 full-PR-review findings (annotation precision, duplicate IDs, coverage gaps)

- Swap reversed SVC_INGEST_0005/0006 tags between the Karate and JUnit
  method-identifier regex tests
- Retag test_status_json_verbosity_warning_is_emitted as SVC_STATUS_0005
  (verbosity ignored for JSON output), matching its actual behavior
- Remove duplicate @requirements IDs placed on both an orchestrator class
  and its implementing method (STATUS_0001, INGEST_0001, INGEST_0008,
  REPORT_0004)
- Validate generate-json output against export_output.schema.json
  (SVC_EXPORT_0001)
- Add a command-level test for the SVC_ENRICH_0004 "no config found"
  error path
- Tag Maven/npm token tests with SVC_SOURCE_0008
- Use types.SimpleNamespace in the MCP _FakeFastMCP test double and add
  coverage for the streamable-http transport (SVC_MCP_0002)
- Drop over-broad SVC_PARSE_0001 tags from schema-definition sanity tests

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>

---------

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
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.

2 participants