Skip to main content

Python parser for scry-spec v1.0 markers

Project description

scry-parse

Python parser for the scry-spec marker format. Conformant with scry-spec v1.0.5.

Install

uv pip install scry-parse
# or:
pip install scry-parse

Usage

from scry_parse import (
    parse_markers,
    validate_marker,
    check_cycles,
    mint_id,
    BASELINE_KINDS,
    BASELINE_STATUSES,
)

# Parse markers from file content
with open("my_file.md") as f:
    content = f.read()

result = parse_markers(content)

# Access by type
for entry in result.entries:
    print(entry.id, entry.kind, entry.summary)

for anchor in result.anchors:
    print(anchor.name, anchor.description)

for binding in result.bindings:
    print(binding.local_id, binding.ref)

# Or iterate all markers together
for marker in result.markers:
    print(type(marker).__name__, marker)

# Validate a parsed marker
vr = validate_marker(result.entries[0])
if not vr.valid:
    print(vr.errors)
if vr.warnings:
    print(vr.warnings)

# Detect cycles in depends_on relationships (FR12)
cycle_errors = check_cycles(result.entries)
if cycle_errors:
    for err in cycle_errors:
        print(err)  # "cycle detected: design.a~... → design.b~... → design.a~..."

# Generate a new marker ID
entry_id = mint_id("design", "auth-flow")           # random hash
entry_id = mint_id("design", "auth-flow", content)  # deterministic hash from content

Supported comment styles

Comment-prefix detection is automatic via YAML-key inference — no language hint required.

Line comments

Style Example
HTML/Markdown <!-- @scry.entry ... @scry.entry.end -->
Python/Shell # @scry.entry ... # @scry.entry.end
TypeScript/JS // @scry.entry ... // @scry.entry.end
SQL -- @scry.entry ... -- @scry.entry.end
Lisp ;; @scry.entry ... ;; @scry.entry.end

Block comments (v1.0.1+)

Style Example
JSDoc / Java /** @scry.entry ... * @scry.entry.end */ with * continuation
C / C++ /* @scry.entry ... @scry.entry.end */
OCaml (* @scry.entry ... @scry.entry.end *)
Haskell {- @scry.entry ... @scry.entry.end -}
PowerShell <# @scry.entry ... @scry.entry.end #>

Example JSDoc marker:

/**
 * @scry.entry
 * id: design.auth-flow~a1b2c3d4
 * kind: design
 * summary: JWT auth middleware
 * status: active
 * @scry.entry.end
 */

Public API

Symbol Description
parse_markers(content, language=None, file="") Parse all scry markers from text. Returns ParseResult.
validate_marker(marker) Validate a marker against spec rules. Returns ValidationResult.
check_cycles(markers) Detect cycles in depends_on graph. Returns list[str] of error messages.
mint_id(kind, name, content=None) Generate a spec-conformant marker ID.
BASELINE_KINDS Tuple of standard kind values from scry-spec v1.0.
BASELINE_STATUSES Tuple of standard status values (draft, active, deprecated).

Dataclasses

  • ParseResultentries: list[EntryMarker], anchors: list[AnchorMarker], bindings: list[BindingMarker], markers property (all three combined)
  • EntryMarkerid, kind, summary, status, weight, tags, rationale, applies, seeded_questions, depends_on, implements, supersedes, file, span
  • AnchorMarkername, description, seeded_questions, file, span
  • BindingMarkerlocal_id, ref, comment, file, offset, span
  • ValidationResultvalid, errors, warnings

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scry_parse-1.0.9.tar.gz (37.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scry_parse-1.0.9-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file scry_parse-1.0.9.tar.gz.

File metadata

  • Download URL: scry_parse-1.0.9.tar.gz
  • Upload date:
  • Size: 37.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.10","id":"oracular","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for scry_parse-1.0.9.tar.gz
Algorithm Hash digest
SHA256 00bf2c7c7caf9d9f222d293ad030bb1985d5805cd1359ae67297a0495037eb2e
MD5 94cc3ea358c5416b8d10fe861009f094
BLAKE2b-256 eddc9b147dfb0b3c8923c24e29ceddf7a83e69184a3e2c31b0dd18d62947950c

See more details on using hashes here.

File details

Details for the file scry_parse-1.0.9-py3-none-any.whl.

File metadata

  • Download URL: scry_parse-1.0.9-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.10","id":"oracular","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for scry_parse-1.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 a4d76a1e40886da1a32e4fd536526ab5dccb1f585bf4b65558fa972036d79664
MD5 9dbeec89ac1e679dbaa1093ca0bfb579
BLAKE2b-256 f6f7ca0a54f5f4170512390791e75f6c7f56b38c69ac30afde1d9ddf5f661da6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page