Skip to content

Plainweave 1.2.0 — peer-facts CLI parity, web a11y, seam hardening, producer gated-live, workflow skill#7

Merged
tachyon-beep merged 3 commits into
mainfrom
feat/seam-hardening-blockers-345
Jun 29, 2026
Merged

Plainweave 1.2.0 — peer-facts CLI parity, web a11y, seam hardening, producer gated-live, workflow skill#7
tachyon-beep merged 3 commits into
mainfrom
feat/seam-hardening-blockers-345

Conversation

@tachyon-beep

@tachyon-beep tachyon-beep commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Brings the full 1.2.0-line work to main and cuts the release.

What's in 1.2.0

  • CLI peer-facts paritywardline-peer-facts + requirements-enrichment over the CLI (previously MCP-only); the latter is now consumed live by Warpline as the 4th consult_federation member (Warpline PDR-0008, validated end-to-end in PDR-017).
  • Operator web UI — UX + accessibility overhaul (PDR-016) — site-kit tokens; contrast / focus-ring / target-size fixes; readable visited primary anchors (a WCAG AA regression); toasts dismiss on every page.
  • Federation seam hardening (PDR-018) — frozen degraded-state contract for loomweave_catalog.v1, a Filigree-seam contract test, and ADR-006 fact-kind documentation + coverage.
  • plainweave-workflow skill pack — federation-standard agent skill (the filigree infrastructure), authored in-package at src/plainweave/skills/, shipped as package data and dogfooded into the repo skill trees.
  • Wheel-build fix (PDR-017) — removed the redundant force-include block that broke uv build (collided on web/static/.gitkeep); a clean uv tool install again advertises every CLI verb. This is also what failed the v1.1.0 release build.

Release mechanics

  • _version.py bumped 1.1.0 → 1.2.0; CHANGELOG [1.2.0] finalized; README refreshed.
  • Verified with the exact release gate: make ci green (390 passed, 91.18% cov); uv build produces plainweave-1.2.0 sdist + wheel with the skill packaged.
  • On merge, tag v1.2.0 triggers release.yml → build + PyPI publish (Trusted Publishing; v1.0.0 published green through this same workflow).

🤖 Generated with Claude Code

… degraded-state pins (PDR-018)

Retires the last 3 named production blockers plainweave-side. Test-and-docs only —
zero src/plainweave/*.py changes; the seam BEHAVIOR already exists, this freezes/pins it.

- #5 Filigree: tests/contracts/test_filigree_contract.py pins open_linked_work as
  reserved-but-never-emitted (absence is the in-band linked_work_facts_unavailable
  warning, never empty-but-ok), filigree_issue trace opacity + canonical relations, and
  the dossier's verdict-free advisory boundary (key + whitelisted-value scan — the dossier
  legitimately carries lifecycle "approved"/"rejected" values, so the peer-facts scanner
  doesn't apply).
- #4 Legis: behavioral coverage for orphaned_entity_link (previously zero); ADR-006
  annotated with the 8-of-11 emission status (active/waived_finding_linked superseded by
  the dedicated wardline_peer_facts producer; open_linked_work handed off to Filigree);
  doc-staleness fix (the legis consumer now exists).
- #3 Loomweave: tests/loomweave_contract.py validate_loomweave_catalog + degraded golden,
  pinning the cardinal no-silent-clean invariant — an unavailable adapter never returns a
  clean-empty page and never advertises positive coverage/pagination while down.

Every new test mutation-proven red-first. make ci green (390 tests, 91.18% cov, mypy
--strict + ruff); wardline scan 0 active; legis cross-repo preflight oracle stayed green
(28 passed — additive, no plainweave obligation). Adversarially reviewed (3 lenses:
decorative-test, no-silent-clean/boundary, claim-honesty); all findings applied. Owner-gated
Filigree open_linked_work handoff authored (docs/handoffs/2026-06-29-filigree-linked-work-facts.md).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1086187368

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


from typing import Any

LOOMWEAVE_ADAPTER_STATUSES = {"available", "unavailable"}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Include the degraded adapter status in the catalog contract

When the Loomweave DB exists but lacks the catalog schema or SEI tables, the existing producer returns adapter_status["status"] == "degraded" (covered by tests/test_loomweave_adapter.py:128-160). This new validator rejects that already-supported partial state, so any contract check over live MCP output for a schema-missing or SEI-unsupported catalog fails even though the producer is correctly carrying degradation in-band. Please include degraded in the allowed vocabulary and apply the appropriate no-silent-clean expectations to it.

Useful? React with 👍 / 👎.

"""The real producer over a root with no Loomweave db: an unavailable adapter, an
empty page, and a degraded reason carried in-band (no silent-clean)."""
data = _data(_surface(tmp_path).plainweave_loomweave_catalog_list(limit=50, offset=0))
validate_loomweave_catalog(data)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Compare the live degraded envelope to the golden

In the no-Loomweave-DB scenario this only runs the live payload through the structural validator, so the committed catalog-degraded.json can drift from the producer without failing the test; for example, changing the live degraded code/message away from loomweave_db_missing still passes because the validator only requires code/message keys. If this fixture is meant to be a golden pin, load it here and compare live output to it after normalizing path-sensitive fields.

Useful? React with 👍 / 👎.

is reserved vocab the local-only producer never constructs today, so it must never appear
as an empty-but-ok fact list when a future live Filigree join lands (sibling-gated)."""
service = service_for(tmp_path)
requirement_id = approve_requirement(service)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Seed a Filigree trace before guarding open_linked_work

This test claims to pin that the local-only producer never emits open_linked_work, but its setup only creates a requirement and no filigree_issue trace. If a future change incorrectly translates existing local Filigree traces into open_linked_work facts while still leaving the unavailable warning, this contract stays green; add a scoped requirement with a Filigree trace before asserting that the reserved fact is absent.

Useful? React with 👍 / 👎.

tachyon-beep and others added 2 commits June 30, 2026 00:01
…e (PDR-017)

The [tool.hatch.build.targets.wheel.force-include] block re-mapped
web/templates + web/static, which packages = ["src/plainweave"] already
vendors under the src-layout, colliding on web/static/.gitkeep and
breaking `uv build --wheel`. Removing it lets the wheel build once with
every web asset shipped exactly once.

Load-bearing: a clean `uv tool install` was producing a stale binary
without the `requirements-enrichment` verb, darkening warpline's
requirements federation member (it read `disabled` despite both sides'
code being correct).

Records PDR-017 (requirements-enrichment producer validated live
end-to-end against the Warpline consumer, PDR-0008) and the producer
implementation handoff.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…low skill

Cut 1.2.0: bump _version.py 1.1.0 → 1.2.0, finalize the [1.2.0] CHANGELOG
section (CLI peer-facts parity, web UX + a11y overhaul PDR-016, federation
seam hardening PDR-018, wheel-build fix PDR-017), and refresh the README.

Add the plainweave-workflow agent skill following the federation-standard
infrastructure (the filigree pattern): authored in-package at
src/plainweave/skills/plainweave-workflow/ (SKILL.md + two reference sheets),
shipped as package data via packages=["src/plainweave"], and dogfooded into
the repo's .claude/ + .agents/ skill trees.

Verified locally with the exact release gate: make ci green (390 passed,
91.18% cov) and `uv build` produces plainweave-1.2.0 sdist+wheel with the
skill files packaged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@tachyon-beep tachyon-beep changed the title test(seams): harden Loomweave/Legis/Filigree seams — contract tests + degraded-state pins (PDR-018) Plainweave 1.2.0 — peer-facts CLI parity, web a11y, seam hardening, producer gated-live, workflow skill Jun 29, 2026
@tachyon-beep tachyon-beep merged commit 50afcd6 into main Jun 29, 2026
1 check passed
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