AgentSkillsCN

slabbed-minimal-hook-implementation-playbook

实现最小化的端到端板块支持方案(包括放置与存活机制),并为最终结果打上标签。

SKILL.md
--- frontmatter
name: slabbed-minimal-hook-implementation-playbook
description: Implement one minimal end-to-end slab support slice (placement plus survival) and tag the result.

Slabbed — Minimal Hook Implementation Playbook (One Block, End-to-End)

Goal

Implement the smallest complete vertical slice:

  • ONE “object” category works on slab tops
  • includes both placement and survival (no pop-off)
  • strict visuals (correct height/shape)
  • minimal invasiveness
  • savepoint tagged

Recommended first block category: floor torch (small surface + simple support logic)

Non-goals

  • No “all items” yet
  • No broad sweeping hooks unless proven safe
  • No performance tuning beyond “don’t spam logs”

Preconditions

  • slabbed-mixin-target-discovery completed and provides concrete Yarn targets
  • slabbed-test-matrix-and-repro-world exists and repro lanes are ready
  • Working branch is clean
  • ./gradlew build currently passes

Step 0) Create a working branch

  • Branch: feat/torch-on-slabs
  • Confirm clean status

Step 1) Add SlabSupport helper (if not already)

Implement com.slabbed.init.SlabSupport per slabbed-slab-support-helper-contract.

Do NOT add extra behavior. Keep it generic to “top support”.

Step 2) Add ONE mixin for placement

Using the Yarn target plan:

  • Create ONE mixin file (placement-time for torch)
  • Hook should only widen “supported on top” when below is slab top face

Rules:

  • Keep injection narrow (one method)
  • Avoid redirecting huge helper methods unless necessary
  • If you must intercept a predicate, do it at the closest call site for torch placement

Step 3) Add ONE mixin for survival

Add ONE mixin that prevents torch breaking due to slab support:

  • Hook the torch’s canPlaceAt (or equivalent survival predicate) to allow slab-top support

Ensure:

  • it still breaks when truly unsupported (air, liquids, etc.)
  • it still follows vanilla where appropriate

Step 4) Strict visuals sanity

Validate that the torch visually sits on slab top:

  • bottom slab: torch base at y+0.5
  • top slab: torch base at y+1.0

If visual mismatch exists due to vanilla model assumptions:

  • stop and report the exact mismatch
  • do not hack around with unrelated rendering changes yet

Step 5) Test the vertical slice

Run the test matrix only for the torch category:

  • Full blocks lane must still pass
  • Bottom slab lane must pass
  • Top slab lane must pass Run update triggers:
  • neighbor update
  • chunk unload/reload

Step 6) Savepoint

If torch passes:

  • ./gradlew build
  • commit message: feat: allow floor torches on slab tops
  • tag: slabbed-first-placement-pass

If survival also passes after updates:

  • add second commit if needed: fix: prevent torch popping off on slab updates
  • tag: slabbed-first-survival-pass

Output report format (required)

  • Strategy used (1 line)
  • Yarn target(s) touched (class#method)
  • Files changed
  • Test result summary (torch only)
  • Commit hash(es) + tag(s)

Stop conditions

  • If any mixin target is missing (“no targets”): stop and rerun discovery
  • If torch works but breaks another block in baseline lane: revert to last tag and reduce scope