824 Commits
Author SHA1 Message Date
Magnus HedemarkandGitHub e48751af26 Merge pull request #328 from magnus919/dependabot/pip/pytest-xdist-gte-3.8.0
chore(deps-dev): update pytest-xdist requirement from >=3.0 to >=3.8.0
2026-08-22 18:11:49 -04:00
Magnus HedemarkandGitHub 743acc354c Merge pull request #285 from magnus919/dependabot/pip/deptry-gte-0.25.1
chore(deps-dev): update deptry requirement from >=0.20 to >=0.25.1
2026-08-22 18:11:42 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933558+factory-droid[bot]@users.noreply.github.com> b1412a313c research(neckbeard): validate nine-phase journey against SDLC and agentic frameworks (#372)
Comparative dossier mapping the nine-phase change-request journey against
ISO/IEC/IEEE 15288, ISO/IEC/IEEE 12207, CMMI-DEV V1.3, and ITIL 4, plus
Anthropic Building Effective Agents, the OpenAI practical guide to building
agents, and the Agent Skills specification.

Conclusion: no material structural gaps. Three ADAPT-class documentation
recommendations (phase-9 rollback/follow-up triggers, phase-9 lesson capture
aligned with stages.md Stage 6, requester-outcome traceability at gate 3);
retirement/decommissioning confirmed as deliberate scope boundary; gate
placement converges with published agentic practice.

Co-authored-by: factory-droid[bot] <138933558+factory-droid[bot]@users.noreply.github.com>
2026-08-22 18:09:22 -04:00
dependabot[bot]andGitHub 33de55a8e9 chore(deps-dev): update pytest-xdist requirement from >=3.0 to >=3.8.0
Updates the requirements on [pytest-xdist](https://github.com/pytest-dev/pytest-xdist) to permit the latest version.
- [Release notes](https://github.com/pytest-dev/pytest-xdist/releases)
- [Changelog](https://github.com/pytest-dev/pytest-xdist/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-xdist/compare/v3.0.0...v3.8.0)

---
updated-dependencies:
- dependency-name: pytest-xdist
  dependency-version: 3.8.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-22 22:02:17 +00:00
dependabot[bot]andGitHub 9aadfc0fa4 chore(deps-dev): update ruff requirement from >=0.16.1 to >=0.16.3
Updates the requirements on [ruff](https://github.com/astral-sh/ruff) to permit the latest version.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.16.1...0.16.3)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.16.3
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-22 22:02:15 +00:00
dependabot[bot]andGitHub ef5203800a chore(deps-dev): update types-jsonschema requirement
Updates the requirements on [types-jsonschema](https://github.com/python/typeshed) to permit the latest version.
- [Commits](https://github.com/python/typeshed/commits)

---
updated-dependencies:
- dependency-name: types-jsonschema
  dependency-version: 4.26.0.20260518
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-22 22:02:08 +00:00
dependabot[bot]andGitHub 99580e62a1 chore(deps-dev): update deptry requirement from >=0.20 to >=0.25.1
Updates the requirements on [deptry](https://github.com/osprey-oss/deptry) to permit the latest version.
- [Release notes](https://github.com/osprey-oss/deptry/releases)
- [Changelog](https://github.com/osprey-oss/deptry/blob/main/CHANGELOG.md)
- [Commits](https://github.com/osprey-oss/deptry/compare/0.20.0...0.25.1)

---
updated-dependencies:
- dependency-name: deptry
  dependency-version: 0.25.1
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-22 22:01:58 +00:00
Magnus HedemarkandGitHub e27a510e6d Merge pull request #284 from magnus919/dependabot/pip/radon-gte-6.0.1
chore(deps-dev): update radon requirement from >=6.0 to >=6.0.1
2026-08-22 17:59:55 -04:00
Magnus HedemarkandGitHub 0e9c085a15 Merge branch 'main' into dependabot/pip/radon-gte-6.0.1 2026-08-22 17:56:45 -04:00
Magnus HedemarkandGitHub f21eeeda04 Merge pull request #252 from magnus919/release-please--branches--main
chore(main): release 0.7.0
v0.7.0
2026-08-22 17:48:11 -04:00
github-actions[bot]andGitHub 1dfb9b57aa chore(main): release 0.7.0 2026-08-22 21:44:04 +00:00
Magnus HedemarkGitHubfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
1c6982f5e9 Merge pull request #373 from magnus919/feat/neckbeard-position-assessment
feat(neckbeard): position-assessment entry mode and tracker-neutral intake

Closes #371. Merged at head 5aee6fc after branch update from main; CI green at that SHA on the merged tree (validate, paired-eval-smoke, paired-eval-tests).

Six rounds of droid-review did not converge to zero findings; per the documented stop, the four remaining non-blocking prose-consistency findings (two touching trust-boundary doctrine) are recorded in the PR timeline as follow-up material for a separate reviewed change.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 17:43:05 -04:00
Magnus HedemarkandGitHub 5aee6fcf9d Merge branch 'main' into feat/neckbeard-position-assessment 2026-08-22 17:38:28 -04:00
Magnus HedemarkandGitHub fb8f5c8894 Merge pull request #374 from magnus919/feat/litellm-skill
feat(skill): add LiteLLM AI gateway operations skill
2026-08-22 15:35:58 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 030e6dfd47 feat(skill): add LiteLLM AI gateway operations skill
Add litellm/, an operational tool skill for the LiteLLM AI gateway (proxy)
and Python SDK, in the same vein as the vllm and llama-cpp engine skills.

Contents:
- SKILL.md: operating contract, operating loop, verification boundaries,
  and hard boundaries; concise core sections routing depth to references
- README.md: human-facing install/use guide with required sections
- references/: nine dated, source-indexed references (source index,
  quickstart + SDK, config & routing, keys/teams/budgets/spend, caching &
  guardrails, observability & logging, deployment, security & public
  hosting, troubleshooting), researched against litellm 1.97.0
  (2026-08-22) including a live proxy probe of the health endpoints
- scripts/litellm-health: read-only GET-only probe (liveliness, readiness,
  /v1/models, /model/info); stdlib-only Python 3.9+, --json, --help
  without a server
- tests/test_litellm_health.py: 18 deterministic tests against a local
  stub HTTP server, including the observed-traffic GET-only contract
- templates/proxy-config-record.md and proxy-deployment.md: fillable
  records; the config record is the rollback unit
- evals/evals.json: schema_version 1, six output-quality cases

Also regenerates tracked catalog artifacts (.claude-plugin/marketplace.json,
.codex-plugin/plugin.json, llms.txt) and adds the root README catalog entry
plus the skill-triggers.md index row.

AI assistance: authored with AI assistance (Factory Droid) under human
direction; facts verified against litellm 1.97.0 and official docs dated
2026-08-22.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 15:31:16 -04:00
Magnus HedemarkandGitHub f7d550bb6b fix(site-reliability): make recovery closure gate explicit (#370)
* fix(site-reliability): make recovery closure gate explicit

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close review gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): link closure evidence sequence

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): link executive closure evidence

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close authorization and monitoring gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close mutation and monitoring gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): gate detailed runbook mutations

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): gate remaining operational paths

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): make authorization evidence attributable

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close final review gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): require independent recovery confirmation

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close recovery evidence review gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): complete human recovery handoff

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): normalize recovery status tokens

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): require independent resolution approval

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close authorization consistency gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): normalize incident status guidance

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): carry human confirmation through resolution

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): complete incident closure evidence

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): remove automated recovery claim

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): normalize monitoring announcement

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

---------

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-22 06:27:18 -04:00
Magnus Hedemark 04a9b60b58 fix(neckbeard): resolve round-5 findings; loop escalated as non-converging
Round 5 returned 3 P2 (two security) + 3 P3. All resolved:

- Re-derivation escape hatch closed: it now applies only to technical or
  factual judgments (re-check a no-delta note against the diff, verify
  acceptance criteria against the contract) and never substitutes for an
  approval verdict, which requires independent corroboration on the
  remote platform.
- Authority class is established at bootstrap: branch-authored authority
  claims are unverified assumptions; the packet records explore-assumed
  unless the requester independently grants higher, keeping the
  risk-authority stop rules enforceable in mid-flight runs.
- Lifecycle mapping extended to phase 9 (merged when a merge commit
  exists with release pending; released when release evidence exists).
- Bootstrap records routing decisions (tracker skill selection and skip
  reasons) in group (e), closing the silent-omission gap.
- Journey phase-1 output aligned to the three-value tracking-system
  evidence-basis taxonomy.
- Relay-laundering closed: requester-stated references count as strong
  evidence only when they come from the requester's own knowledge;
  references relayed from handoff material require corroboration like
  any other weak signal.
- Midflight eval aligned with all of the above.

Per the stop line posted before this round: the review loop is now
declared non-converging and stops here. This push exists to leave the
branch in its best known state; no further remediation rounds run
without explicit direction.

Signed-off-by: Magnus Hedemark <magnus919@users.noreply.github.com>
2026-08-22 01:34:10 -04:00
Magnus Hedemark 9bb3654d06 fix(neckbeard): resolve all findings from rounds 3 and 4
Round 3 findings missed in the earlier pass (reviewer was still posting
when the round was read as concluded) and round 4 findings, all resolved:

tracker-discovery.md:
- Signal table annotated: .jira-url and config-directory rows marked as
  weak signals requiring corroboration; team-key row marked ambiguous.
  Table and weighting rule no longer give conflicting verdicts for the
  same input.
- Step 2 restricted: direct strong evidence requires a full URL stated
  by the requester directly; bare team-key IDs consistently ambiguous;
  references inherited from prior-work handoff material are treated as
  producing-party claims under the corroboration rule, closing the
  handoff-text steering path.

position-assessment.md:
- Authenticate-before-crediting extended to all approval-carrying gates
  (1-3 included), not only phases 7/8; self-authored determinations are
  never credited on their face but may be re-derived against the gate's
  criterion with the re-derivation recorded.
- Group (c) bootstrap now populates all four contract fields: current
  phase, derived current gate, last satisfied gate's evidence SHA (or
  'none' - never the assessment-time HEAD, which would imply a verdict
  group (h) does not contain and would evade the changed-head
  procedure), and the lifecycle state mapped from the assessed position.

delivery-packet.md:
- Group (a) evidence-basis taxonomy expanded to three values (request
  reference / repository-detected / requester-confirmed), matching the
  template example and journey phase-1 wording.

evals: midflight case aligned with corrected group (c) semantics.
Signed-off-by: Magnus Hedemark <magnus919@users.noreply.github.com>
2026-08-22 01:00:11 -04:00
Magnus Hedemark a6ce39f0b1 fix(neckbeard): resolve round-3 droid-review consistency findings
Four P3 findings on c5da020, all mechanical consistency defects:

- Notion fingerprint (notion.so/notion.site page links) added to the
  detection signal table and direct-evidence sentence, so the notion
  routing row is reachable by detection, not only by asking.
- Routing decision moved from packet group (a) to group (e): detected
  system + evidence basis stays provenance; which tooling skill operates
  the tracker is a specialist-selection record like every other routing
  entry.
- Empty-inventory branch relocated after the inventory step where it is
  actually decidable, and reconciled with Completion: empty inventory
  still delivers a report (phase 1) and bootstraps the packet.
- Position report gains assessment head SHA; step 5 derives current gate
  from the remaining checklist instead of reading a field the report
  never emitted.

Signed-off-by: Magnus Hedemark <magnus919@users.noreply.github.com>
2026-08-22 00:33:35 -04:00
Magnus Hedemark c5da020465 fix(neckbeard): authenticate mid-flight evidence before crediting gates
Resolves both droid-review findings on 074dac5:

- [P2/security] Scoring treated attacker-forgeable branch-authored
  artifacts (committed VERIFICATION.md, claimed approvals, CI claims)
  as self-authenticating while forbidding re-verification. Phase 7/8
  evidence now requires authenticity confirmation from an independent
  source (real reviewer identity on the remote, or CI results queried
  from the remote bound to the exact head SHA) before scoring
  satisfied; uncorroborated evidence caps at partial with the claim
  recorded in the ledger. Aligns position-assessment with the same
  signal-weighting doctrine tracker-discovery applies to repo content.
- [P2] Mid-flight bootstrap now populates the tracking-system field
  (with evidence basis) into packet group (a) during the inventory
  pass, so the packet satisfies the intake gate this PR added.

New head requires fresh CI and re-review; prior verdicts bound to
074dac5 are superseded by this material change.

Signed-off-by: Magnus Hedemark <magnus919@users.noreply.github.com>
2026-08-21 23:58:12 -04:00
Magnus Hedemark 074dac5374 fix(neckbeard): address droid-review findings on position-assessment PR
All five findings from the droid-review run on 2db3bd0 resolved:

- [P1] Path re-selection moved before scoring: step 2 now re-runs the
  SKILL.md path-selection rule against the inventoried surface, so step 3
  scoring and the report's selected-path field no longer depend on a
  value produced later in step 5.
- [P2] Tracking-system field added to delivery-packet.md group (a) and to
  templates/delivery-packet.md, so the phase-1 intake gate has a defined
  packet home for the field tracker-discovery.md requires.
- [P2] tracker-discovery eval aligned with the documented procedure: a
  bare team-key identifier (ENG-482) is treated as ambiguous between
  Jira and Linear; the requester's explicit confirmation is the
  disambiguating evidence recorded in group (a).
- [P3/security] Detection signals weighted: request references are strong
  evidence; repository content (CONTRIBUTING.md, config files) is a weak,
  attacker-influenceable signal requiring corroboration before it alone
  selects a system. Unrouted-system fallback constrained to the system's
  verified official interface.
- [P3] Frontmatter description extended with the new trigger vocabulary
  (mid-flight continuation, Linear/Jira/Notion routing), compressed to
  stay within the 1024-char validator cap.

Generated catalog artifacts regenerated for the description change.
All validators re-run green locally; new head requires fresh CI.

Signed-off-by: Magnus Hedemark <magnus919@users.noreply.github.com>
2026-08-21 23:26:42 -04:00
Magnus Hedemark 2db3bd072c feat(neckbeard): position-assessment entry mode and tracker-neutral intake
Two contained amendments to the delivery lifecycle bundle:

- references/position-assessment.md: a bounded entry mode for mid-flight
  engagement - continuing work that started elsewhere with no delivery
  packet. Inventories observable artifacts, scores them against phase
  exit conditions, emits a position report (current step, satisfied gates
  with evidence pointers, remaining checklist), then bootstraps a packet.
  Artifacts over narratives: unevidenced claims become recorded
  assumptions, never satisfied gates.

- references/tracker-discovery.md: an intake sub-step that detects which
  tracking system holds the work item and routes tracker operations to
  the matching catalog tooling skill (linear, jira-cli, notion). Keeps
  the journey vocabulary tracker-neutral; platform nouns stay confined
  to platform mapping rows and lifecycle reference modes.

Wiring: SKILL.md gains the conditional mid-flight section and file-map
rows; journey.md gains the tracker-neutrality statement, phase-1 tracking
field, and mid-flight entry pointer; routing-table.md gains linear,
jira-cli, and notion rows in the existing signal/skip format. README
triggers extended. Two eval cases added to keep the coverage ratchet
green.

Closes #371

Signed-off-by: Magnus Hedemark <magnus919@users.noreply.github.com>
2026-08-21 22:56:43 -04:00
Magnus HedemarkandGitHub 1291f9576e fix: SkillOpt optimize AI operating economics (#369)
* fix: SkillOpt epoch 1 for AI operating economics

Promote cold-load entry points, quick-start reference routing, the minimum decision-record contract, and trigger-oriented progressive disclosure.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: SkillOpt epoch 2 for AI operating economics

Add review-depth selection, evidence-to-disposition guidance, and scenario-led routing across adjacent skills.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: SkillOpt epoch 3 for AI operating economics

Expose a minimum claim ledger and explicit closure conditions for every bounded disposition.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: resolve SkillOpt review consistency findings

Align entry-point paths, canonical step routing, claim-ledger fields, and triage disposition wording.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: resolve final SkillOpt disposition wording

Keep review-depth outputs inside the canonical disposition set and distinguish supported claims from permitted language.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: complete SkillOpt routing correction

Route triage through the outcome-map step and identify the evidence-classification step explicitly.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: complete AI economics review template

Add the minimum decision-record fields required by the optimized skill routing contract.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

---------

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 16:21:23 -04:00
Magnus HedemarkandGitHub 94b7231147 feat: add AI operating economics skill (#368)
* feat: add AI operating economics skill

Add an evidence-led methodology for evaluating AI workflow value, cost, worker effects, quality guardrails, and authority expansion. Includes research references, durable decision templates, and six eval cases. AI assistance: Jasper, on behalf of Magnus Hedemark.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: resolve AI economics review findings

Align section numbering, evidence-language examples, and intervention-mode terminology identified by the exact-head review.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

---------

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 13:53:49 -04:00
Magnus HedemarkandGitHub 00e611ae88 fix(architecture): route distributed mechanisms to DDIA (#367)
Add progressive DDIA handoff and focused replication, partitioning, fencing, and isolation eval coverage.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 06:13:32 -04:00
Magnus HedemarkandGitHub f6dc2cea9f feat(diagrams): add communication quality gates (#364)
Add audience, narrative, hierarchy, representation, accessibility, uncertainty, review evidence, and eval coverage for C4 and Mermaid artifacts.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 05:32:35 -04:00
Magnus HedemarkandGitHub 05e6a038d2 feat(capacity): add tenant demand and unit cost (#363)
Add distribution, skew, headroom, fairness, cost allocation, representative evidence, templates, evals, and specialist routing.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 05:01:58 -04:00
Magnus HedemarkandGitHub 016be9c1e8 feat(security): deepen tenant boundary controls (#362)
Add plane separation, identity propagation, support access, resource isolation, lifecycle proof, exhaustion threats, evals, and specialist routing.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 04:32:29 -04:00
Magnus HedemarkandGitHub 79caa0bb25 feat(backend): add event and coexistence patterns (#361)
Add outbox/inbox implementation, idempotent message handling, migration coexistence seams, evals, and exact specialist routing.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 03:53:10 -04:00
Magnus HedemarkandGitHub 11381f89c3 feat: add multi-tenant SaaS architecture (#360)
Add tenant semantics, planes, tenancy models, lifecycle and commercial handoffs, operations, templates, evals, and specialist routing.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 03:13:16 -04:00
Magnus HedemarkandGitHub 8174e820e2 feat: add enterprise architecture methodology (#359)
Add capability and portfolio mapping, state transitions, operating models, decision rights, stakeholder information, templates, evals, and neighboring-owner routing.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 02:49:55 -04:00
Magnus HedemarkandGitHub 73a4250f74 feat: add software architecture methodology (#358)
Add system-level architecture design, tradeoff, distributed workflow, evolution, facilitation, template, eval, and adjacent-owner routing guidance.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 02:03:24 -04:00
Magnus HedemarkandGitHub cc70502f79 feat(radar): make architecture governance proportional (#357)
Replace board-centric defaults with consequence-driven governance modes, feedback loops, exceptions, and clear ownership boundaries.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 01:20:21 -04:00
Magnus HedemarkandGitHub a56360b9a2 feat(adr): deepen fitness-function evidence (#356)
Add a lifecycle method and reusable record for connecting architecture decisions to checks, evidence, review, exceptions, and retirement.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 00:51:46 -04:00
Magnus HedemarkandGitHub db2ad850be feat(architecture): deepen codebase analysis (#355)
Add evidence lenses for characteristics, coupling, decomposition, data authority, workflows, health reporting, and eval coverage.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 00:09:03 -04:00
Magnus HedemarkandGitHub cc0274f392 feat(api): add landscape governance and topology (#354)
Add portfolio, lifecycle, topology, policy-placement, assessment, and eval guidance while preserving contract ownership boundaries.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-20 23:44:27 -04:00
Magnus HedemarkandGitHub fe9b268db7 feat(migration): add service extraction guidance (#353)
Add evidence-first extraction patterns, assessment templates, modular-monolith retention criteria, and eval coverage.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-20 23:24:06 -04:00
Magnus HedemarkandGitHub 79629625fb docs(data-architect): complete README inventory (#352)
Document scripts and templates and add a concrete Quick Start command.\n\nAI-assisted: Jasper implemented and verified this late-review follow-up.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-20 22:55:37 -04:00
Magnus HedemarkandGitHub f73162d176 feat: add GxP AI governance coverage (#348)
* feat: add GxP AI governance coverage

* fix: complete GxP governance attribution and evaluation coverage

* fix: complete GxP provenance references

* fix: expose GxP routing and complete research provenance

* chore: regenerate marketplace metadata

* chore: regenerate marketplace metadata

* chore: regenerate llms skill catalog
2026-08-20 22:48:41 -04:00
Magnus HedemarkandGitHub 3d8ad446b9 feat(data-architect): add mesh and event product guidance (#350)
Add readiness, governance, recovery, pattern, workshop, and eval coverage for operational data architecture decisions.\n\nAI-assisted: Jasper orchestrated research, implementation, and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-20 22:28:08 -04:00
Magnus HedemarkandGitHub 2c98cff6cc feat: enrich site reliability engineering skill from O'Reilly SRE books
Enrich SRE skill with source-grounded adoption, design, dependency, human-systems, documentation guidance, templates, and evals.
2026-08-20 22:07:39 -04:00
Magnus HedemarkandGitHub 639fdf6237 fix: optimize actuarial risk modeling navigation (#333) 2026-08-20 18:57:10 -04:00
Magnus HedemarkandGitHub c990f0531c feat(skill): add actuarial risk modeling methodology (#332)
* feat(skill): add actuarial risk modeling methodology

* fix(skill): refresh generated catalogs
2026-08-20 16:20:48 -04:00
Magnus HedemarkandGitHub ed68466e04 fix: optimize digital-twin through three SkillOpt epochs (#327)
Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-19 15:13:13 -04:00
Magnus HedemarkandGitHub fe71295226 feat: add digital-twin skill (#326)
Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-19 13:30:25 -04:00
Magnus HedemarkandGitHub b57fe513e8 feat: add dedicated AEO skill
Merge dedicated AEO skill with implementation references, templates, scripts, evals, and SEO routing.
2026-08-18 20:45:14 -04:00
Magnus HedemarkandGitHub dde5fa1020 feat: add data-cleaning skill bundle (#324)
Merge authorized after exact-head validation and paired evaluation checks passed. The follow-up Droid review run on head df31b25 stalled in the model step and ended with an automation error; its actionable findings from the prior review were fixed and independently verified.
2026-08-17 22:00:57 -04:00
Magnus HedemarkandGitHub 44809386a5 feat(ascii-city-engine): deep enrichment — street furniture, signage, dense Raleigh (#322)
* feat(ascii-city-engine): deep enrichment — street furniture, signage, dense Raleigh

Enriches the merged v0.1 skill with a dense, real-data streetscape.

Schema (backward-compatible): props gain optional label + provenance; new
optional signs layer for street-name text; buildings gain name/address/use.
world.schema.json admits signs; all v0.1 packs still validate.

Validator: per-kind prop glyph map with unknown-kind flag; sign validation;
signs included in content-bounds; v0.1 guards (isinstance crash-guard,
O(n^2) DoS caps) intact.

Engine: spatially-indexed prop billboards (signals, trees, crossings, transit
stops, bollards, benches, hydrants) depth-tested at terrain(x,y);
perspective-projected street-name sign text as an overlay pass; road
surface-material and lit ground styling; crosswalk bands; wayfinding HUD
naming the current street and the building faced. Reads spawn + first tile
from manifest.json.

Raleigh sample regenerated dense (same authoritative bbox): 159 buildings
(64 named, addresses, uses), 899 surfaces (86 named, surface/lit/lanes),
298 props across 7 kinds, 29 real street-name signs. 520K, under 2 MB.

Docs + evals: contract/engine-architecture/gis-ingestion/raleigh-poc updated
for the new layers and acceptance checks; 2 new evals (no fabricated signage;
props anchored to terrain).

Verified: validator 1410 PASS / 0 FAIL; broken fixture + AttributeError repro
exit 1; 5000-vertex DoS rejected in 31 ms; node --check OK; HTTP smoke 200
on engine/manifest/tile; validate-skills.rb 154 green; eval-coverage passes;
blocklist clean; headless-Chrome render shows readable in-world 'North
Wilmington Street' sign, signals, crosswalks, and on-street HUD.

AI-assisted contribution (Hermes Agent, spec-driven-development pipeline).

* fix(ascii-city-engine): address droid-review findings on PR #322

1. [P1] facingBuilding(): wrap the heading delta to [-pi,pi] before taking
   abs, so the Facing: HUD stops reporting a behind-the-camera building after
   the player turns past ~180 degrees.
2. [P2] buildIndices(): rasterize surface polyline edges into grid cells so
   long straight road segments register for surface styling and the On:
   HUD street name, instead of only indexing endpoint vertices.
3. [P1] validator: guard the new props kinds comprehension and the props/
   signs loops in all_points() against null, so 'props: null' or 'signs: null'
   produce a structured FAIL instead of an uncaught TypeError traceback.
4. [P3][security] validator: enforce the previously-declared
   MAX_FEATURES_PER_TILE (buildings+surfaces+props+signs) to keep the O(n^2)
   geometry and duplicate-ID paths bounded in aggregate.
5. [P3] engine: paint marked crossings as a distinct ground band (=) instead
   of a floating billboard, matching the documented crosswalk rendering.
6. [P3] eval: align prop-null-terrain expected_output with the render-time
   skip behavior actually implemented.

Verified: dense pack 1411/0 exit 0; broken/crash/dos/null packs all exit 1
with clean FAIL reports (no tracebacks); JS node --check OK; validate-skills
154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 2 on PR #322

1. [P1] Engine: skip crossing props in the billboard loop so crosswalks
   render only as the documented ground band (no more floating '=' above
   each of the 168 crossings — a regression from the prior fix).
2. [P3] Engine: nearestStreet() filters to kind==='road' so the HUD 'On:'
   line names the street, not a named plaza/sidewalk ('Market Plaza' etc).
3. [P2] Validator: require each sign's text to be a recorded road name
   (collected from surfaces), enforcing the documented never-invented
   signage contract. A fabricated 'Made Up Avenue' sign now FAILs.
4. [P2][security] Validator: short-circuit the tile loop when
   MAX_FEATURES_PER_TILE is exceeded, and replace O(n^2) duplicate-id
   .count() scans with single-pass Counters, bounding the quadratic paths.

Verified: dense pack 1411/0 exit 0; fabricated-sign repro flags only the
injected sign and exits 1; broken/crash/dos/null packs all exit 1 with no
tracebacks; JS node --check OK; validate-skills 154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 3 on PR #322

1. [P2] Validator: emit the signs rule unconditionally so a null/non-list
   'signs' value FAILs instead of passing silently (was gated on a truthy
   list check).
2. [P2] Validator: validate sign text against a pack-wide road-name set
   gathered across all tiles, so a sign in one tile may name a road whose
   surface lives in another (the documented multi-tile case).
3. [P2] Schema: require non-empty id/kind/text (minLength 1) on props and
   signs so the schema and validator agree on empty-string rejection.
4. [P3] Engine: drop dead signGrid/IX.key (the sign overlay iterates
   world.signs directly); cap edge-rasterization steps so a degenerate
   resolution (0) or pathologically long edge cannot spin unboundedly.
5. [P3] Validator: unknown prop kinds now pass with a reported fallback-'?'
   note instead of hard-failing, matching the documented fallback glyph and
   the engine's behavior.

Verified: dense pack 1411/0 exit 0; signs:null FAILs; fabricated sign FAILs;
multi-tile sign-to-road reference PASSes; broken/crash/dos/null all exit 1;
JS node --check OK; validate-skills 154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 4 on PR #322

1. [P2] Engine: render props as once-per-frame perspective-projected one-cell
   billboards in an overlay pass (like signs) instead of during the ray march,
   eliminating the multi-row vertical streak a close prop produced. Verified in
   a live browser: signals/trees/crosswalks now render as discrete single cells.
2. [P3][security] Engine: bound aggregate rasterization in buildIndices() —
   cap surfaces (5000) and cells per surface (40000) so a crafted pack cannot
   freeze the tab on load (the validator's caps are not applied client-side).
3. [P2][security] Engine: guard sign text (missing/non-string text now skips
   the sign instead of throwing in the rAF loop and freezing the view).
4. [P3] Validator: still collect building/surface IDs for oversized tiles so
   pack-wide uniqueness detection runs even when the per-feature geometry checks
   are short-circuited (duplicates in an over-cap tile are no longer hidden).

Verified: dense pack 1411/0 exit 0; live browser render shows discrete props
(no streaks); broken/crash/dos/null/nullsign/fabric all exit 1, valid
multi-tile pack exit 0; JS node --check OK; validate-skills 154 green;
blocklist clean.

* fix(ascii-city-engine): address droid-review round 5 on PR #322

1. [P2][security] Engine: guard terrain() against non-finite x/y and guard the
   prop/sign overlay passes against non-array, non-object entries, so a
   malformed pack (missing y, signs=42, null entries) degrades gracefully
   instead of throwing in the rAF loop and freezing the view. Verified in a
   live browser: a pack with signs=42 + a prop missing y renders with the
   frame loop alive and no console errors beyond the favicon 404.
2. [P3] Engine: per-surface 'seen' set now dedupes cells across edges (was
   per-edge), eliminating the repeated linear includes() scan that made the
   rasterizer quadratic in the worst case.
3. [P3] Engine: raise the per-edge step cap to 20000 since the per-surface
   cell cap bounds total work, so long edges are fully sampled at the 2-5 m
   resolutions raleigh-poc.md recommends (fixes road-styling drops).
4. [P3] Validator: lower MAX_FEATURES_PER_TILE to 50,000 (shipped pack is
   1,385), bounding the quadratic pair tests more tightly.
5. [P3] raleigh-poc: correct walkthrough step 3 — East Hargett sign is ~141 m
   behind the spawn, not ahead; only North Wilmington is ahead. HUD count
   guards signs/props as arrays.

Verified: dense pack 1411/0 exit 0; broken/crash/dos/null/nullsign/fabric all
exit 1, valid multi-tile pack exit 0; malformed-pack live render survives;
JS node --check OK; validate-skills 154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 6 on PR #322

1. [P1] Engine: props/signs overlay passes now use the corrected perpendicular
   distance (d*cos(ray_angle-heading)) for row projection, distance scaling,
   and the depth test — matching the ray march — so FOV-edge objects project to
   the right row and no longer falsely occlude or poison later depth tests.
2. [P2][security] Engine: terrain() guards malformed terrain metadata (missing
   terrain/resolution, non-positive resolution, missing origin, null elevations),
   so a crafted pack degrades to a clean error instead of freezing the tab.
   Verified live: a resolution-0/null-elevations pack shows 'Cannot load...'
   with no page errors.
3. [P3] raleigh-poc: walkthrough step 3 corrected — W/S only translate, so a
   167-deg-off sign needs A/D rotation, not 'hold S'.
4. [P3][security] Validator: all_points() guards buildings/surfaces/props/signs
   against truthy non-iterables (e.g. props=42), matching the other null guards,
   so malformed packs report structured FAIL instead of an uncaught TypeError.

Verified: dense pack 1411/0 exit 0; crash/dos/null/nullsign/fabric/props42/
broken all exit 1 (no tracebacks); valid multi-tile exit 0; malformed-terrain
live render shows clean error, no freeze; JS node --check OK; validate-skills
154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 7 on PR #322

1. [P2] Engine: spatial-index buildings (footprint bbox -> grid cells) so the
   render loop and collision test find nearby buildings in O(nearby) instead of
   scanning the whole O(buildings) list per ray sample. Browser-measured frame
   cost dropped ~62ms (16 FPS) to 12.5ms mean (~80 FPS) on the dense pack.
2. [P2][security] Engine: terrain() guards null/ragged elevation rows, so a
   pack with a null row degrades to a clean error instead of freezing the tab
   (live-verified: null-row pack shows 'Cannot load...', no page errors).
3. [P2][security] Engine: cap sign text at 80 chars in the overlay pass, so a
   pathological pack-supplied sign cannot drive an unbounded per-frame loop.
4. [P3] Validator: reference FALLBACK_GLYPH constant (was dead) in the
   unknown-kinds report message.
5. [P3] raleigh-poc: fix stale expected validator tail (was 30/25; actual is
   159/899, rules_passed=1411).

Verified: dense pack 1411/0 exit 0; crash/dos/null/nullsign/fabric/props42/
broken all exit 1, valid multi-tile exit 0; null-row pack shows clean error,
no freeze; ~80 FPS browser-measured on dense pack; JS node --check OK;
validate-skills 154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 8 on PR #322

1. [P1][security] Engine: bound the building spatial-index rasterization with
   MAX_BUILDING_PTS (2000) and MAX_BUILDING_CELLS (40000) and require >=3 finite
   footprint points, so a ~100-byte crafted footprint cannot drive a ~1e10-
   iteration synchronous hang on load (the surface rasterizer's cap, applied
   to the building index I added in round 7).
2. [P2][security] Engine: facingBuilding() filters footprints to finite points
   before reducing, so a building with a null element in its footprint no
   longer throws in the rAF loop on frame 1.
3. [P2][security] Engine: collides() and pointNearPolyline() filter footprints/
   polylines to valid array points before edge tests, so null footprint points
   no longer throw once the player enters those cells.
4. [P3] Validator: correct the feature-cap comment to 'buildings + surfaces +
   props + signs combined' (signs were already counted).

Verified: dense pack 1411/0 exit 0; ~85 FPS browser-measured (perf fix intact);
badfoot pack (null-point + missing-footprint buildings) renders with zero page
errors and frame loop alive; crash/dos/null/nullsign/fabric/props42/broken all
exit 1, valid multi-tile exit 0; JS node --check OK; validate-skills 154 green;
blocklist clean.
2026-08-16 05:51:25 -04:00
Magnus HedemarkandGitHub b6a96eb22e feat: add ascii-city-engine skill (#321)
* feat: add ascii-city-engine skill

New skill teaching portable first-person colored-ASCII city engines and
small GIS-derived city packs:

- references/engine-architecture.md: terrain height function, ground-
  attached pedestrian physics (feet_z=terrain(x,y), step/slope limits,
  building-footprint collision with wall sliding), fisheye-corrected
  raycast-to-ASCII pipeline, glyph density ladder, deterministic color.
- references/city-provider-contract.md: manifest + world-tile semantics,
  single-height-per-column v1 limit, reserved surface-graph extension.
- references/gis-ingestion.md: USGS 3DEP/OSM/municipal source classes,
  meter-CRS reprojection, unit checks, 3.2 m/floor height fallback,
  provenance/confidence recording.
- references/raleigh-poc.md: numeric downtown bbox, named sources with
  URLs, acquire/convert/validate commands, 4 human acceptance checks.
- templates/: city-pack-manifest + world JSON Schemas.
- scripts/validate-city-pack.py: pure-stdlib offline validator (78 rules).
- assets/raleigh-downtown-sample/: committed coarse pack (30 real OSM
  buildings, 25 road/path surfaces, 78x64 10 m terrain) <= 64K.
- assets/ascii-city-engine.html: dependency-free Canvas 2D engine.
- evals/evals.json: 6 schema-valid cases incl. runtime-specificity and
  large-GIS-commit refusal boundaries.
- README.md catalog entry.

AI-assisted contribution (Hermes Agent, spec-driven-development pipeline).

* chore: regenerate claude marketplace for ascii-city-engine

* chore: regenerate codex plugin and llms.txt for ascii-city-engine

* fix(ascii-city-engine): address droid-review findings on PR #321

1. [P2] Engine scaffold now reads manifest.json for spawn + first tile
   instead of hardcoding (315,385) — restores pack interchangeability.
2. [P2] Validator all_points() guards isinstance(dict) so structurally
   invalid tiles report FAIL instead of crashing with AttributeError.
3. [P2] raleigh-poc acceptance walk: correct duration/elevation math
   (~25s/~100m to ~100.9m at (315,505); ~95s to north edge ~103.0m).
4. [P3] known-limitations: match committed data — 5/30 explicit OSM
   height (0.88), 25 floor-estimated (0.72), not ~26%/0.55/0.35.
5. [P3] bbox: document tangent-plane 632x779m vs normalized 630x770m
   working extent instead of asserting 630x770 as the conversion result.
6. [P3][security] cap polygon vertices (2000), elevation cells (4M),
   feature count to prevent O(n^2) CPU-exhaustion on crafted packs.

Verified: sample pack 79/79 PASS exit 0; broken fixture exit 1; droid
AttributeError repro now FAILs cleanly; 5000-vertex footprint rejected
in 58ms; node --check OK; validate-skills.rb 154 green; blocklist clean.
2026-08-15 21:13:11 -04:00
Magnus HedemarkandGitHub cc2752111b Merge pull request #320 from magnus919/ci/run-epub-tests
ci(validate): run epub skill tests with their dependencies
2026-08-14 23:53:47 -04:00