Home / Input Output / plutus
Feb 11, 12-1 PM (0)
Feb 11, 1-2 PM (1)
Feb 11, 2-3 PM (2)
Feb 11, 3-4 PM (2)
Feb 11, 4-5 PM (2)
Feb 11, 5-6 PM (1)
Feb 11, 6-7 PM (0)
Feb 11, 7-8 PM (1)
Feb 11, 8-9 PM (0)
Feb 11, 9-10 PM (0)
Feb 11, 10-11 PM (1)
Feb 11, 11-12 AM (0)
Feb 12, 12-1 AM (1)
Feb 12, 1-2 AM (1)
Feb 12, 2-3 AM (1)
Feb 12, 3-4 AM (1)
Feb 12, 4-5 AM (0)
Feb 12, 5-6 AM (0)
Feb 12, 6-7 AM (0)
Feb 12, 7-8 AM (0)
Feb 12, 8-9 AM (0)
Feb 12, 9-10 AM (0)
Feb 12, 10-11 AM (1)
Feb 12, 11-12 PM (0)
Feb 12, 12-1 PM (0)
Feb 12, 1-2 PM (2)
Feb 12, 2-3 PM (13)
Feb 12, 3-4 PM (3)
Feb 12, 4-5 PM (2)
Feb 12, 5-6 PM (2)
Feb 12, 6-7 PM (3)
Feb 12, 7-8 PM (1)
Feb 12, 8-9 PM (3)
Feb 12, 9-10 PM (0)
Feb 12, 10-11 PM (1)
Feb 12, 11-12 AM (3)
Feb 13, 12-1 AM (0)
Feb 13, 1-2 AM (1)
Feb 13, 2-3 AM (1)
Feb 13, 3-4 AM (0)
Feb 13, 4-5 AM (0)
Feb 13, 5-6 AM (0)
Feb 13, 6-7 AM (0)
Feb 13, 7-8 AM (0)
Feb 13, 8-9 AM (0)
Feb 13, 9-10 AM (25)
Feb 13, 10-11 AM (0)
Feb 13, 11-12 PM (0)
Feb 13, 12-1 PM (1)
Feb 13, 1-2 PM (1)
Feb 13, 2-3 PM (2)
Feb 13, 3-4 PM (2)
Feb 13, 4-5 PM (2)
Feb 13, 5-6 PM (3)
Feb 13, 6-7 PM (6)
Feb 13, 7-8 PM (1)
Feb 13, 8-9 PM (7)
Feb 13, 9-10 PM (0)
Feb 13, 10-11 PM (1)
Feb 13, 11-12 AM (1)
Feb 14, 12-1 AM (2)
Feb 14, 1-2 AM (0)
Feb 14, 2-3 AM (0)
Feb 14, 3-4 AM (5)
Feb 14, 4-5 AM (0)
Feb 14, 5-6 AM (2)
Feb 14, 6-7 AM (0)
Feb 14, 7-8 AM (0)
Feb 14, 8-9 AM (0)
Feb 14, 9-10 AM (0)
Feb 14, 10-11 AM (0)
Feb 14, 11-12 PM (0)
Feb 14, 12-1 PM (0)
Feb 14, 1-2 PM (0)
Feb 14, 2-3 PM (0)
Feb 14, 3-4 PM (0)
Feb 14, 4-5 PM (0)
Feb 14, 5-6 PM (0)
Feb 14, 6-7 PM (0)
Feb 14, 7-8 PM (0)
Feb 14, 8-9 PM (0)
Feb 14, 9-10 PM (0)
Feb 14, 10-11 PM (0)
Feb 14, 11-12 AM (0)
Feb 15, 12-1 AM (0)
Feb 15, 1-2 AM (0)
Feb 15, 2-3 AM (0)
Feb 15, 3-4 AM (1)
Feb 15, 4-5 AM (0)
Feb 15, 5-6 AM (0)
Feb 15, 6-7 AM (0)
Feb 15, 7-8 AM (0)
Feb 15, 8-9 AM (0)
Feb 15, 9-10 AM (0)
Feb 15, 10-11 AM (0)
Feb 15, 11-12 PM (0)
Feb 15, 12-1 PM (0)
Feb 15, 1-2 PM (0)
Feb 15, 2-3 PM (0)
Feb 15, 3-4 PM (0)
Feb 15, 4-5 PM (0)
Feb 15, 5-6 PM (0)
Feb 15, 6-7 PM (0)
Feb 15, 7-8 PM (0)
Feb 15, 8-9 PM (0)
Feb 15, 9-10 PM (0)
Feb 15, 10-11 PM (0)
Feb 15, 11-12 AM (0)
Feb 16, 12-1 AM (0)
Feb 16, 1-2 AM (0)
Feb 16, 2-3 AM (0)
Feb 16, 3-4 AM (0)
Feb 16, 4-5 AM (0)
Feb 16, 5-6 AM (0)
Feb 16, 6-7 AM (0)
Feb 16, 7-8 AM (0)
Feb 16, 8-9 AM (4)
Feb 16, 9-10 AM (1)
Feb 16, 10-11 AM (2)
Feb 16, 11-12 PM (0)
Feb 16, 12-1 PM (0)
Feb 16, 1-2 PM (0)
Feb 16, 2-3 PM (0)
Feb 16, 3-4 PM (0)
Feb 16, 4-5 PM (3)
Feb 16, 5-6 PM (1)
Feb 16, 6-7 PM (2)
Feb 16, 7-8 PM (1)
Feb 16, 8-9 PM (0)
Feb 16, 9-10 PM (0)
Feb 16, 10-11 PM (0)
Feb 16, 11-12 AM (0)
Feb 17, 12-1 AM (4)
Feb 17, 1-2 AM (0)
Feb 17, 2-3 AM (2)
Feb 17, 3-4 AM (0)
Feb 17, 4-5 AM (0)
Feb 17, 5-6 AM (1)
Feb 17, 6-7 AM (1)
Feb 17, 7-8 AM (0)
Feb 17, 8-9 AM (8)
Feb 17, 9-10 AM (1)
Feb 17, 10-11 AM (1)
Feb 17, 11-12 PM (1)
Feb 17, 12-1 PM (7)
Feb 17, 1-2 PM (2)
Feb 17, 2-3 PM (0)
Feb 17, 3-4 PM (1)
Feb 17, 4-5 PM (1)
Feb 17, 5-6 PM (8)
Feb 17, 6-7 PM (1)
Feb 17, 7-8 PM (0)
Feb 17, 8-9 PM (1)
Feb 17, 9-10 PM (2)
Feb 17, 10-11 PM (4)
Feb 17, 11-12 AM (0)
Feb 18, 12-1 AM (2)
Feb 18, 1-2 AM (1)
Feb 18, 2-3 AM (0)
Feb 18, 3-4 AM (2)
Feb 18, 4-5 AM (0)
Feb 18, 5-6 AM (0)
Feb 18, 6-7 AM (0)
Feb 18, 7-8 AM (0)
Feb 18, 8-9 AM (4)
Feb 18, 9-10 AM (0)
Feb 18, 10-11 AM (0)
Feb 18, 11-12 PM (0)
Feb 18, 12-1 PM (0)
181 commits this week Feb 11, 2026 - Feb 18, 2026
refactor(benchmarks): unify Text benchmarks on 4-byte worst-case generator
All Text benchmarks now use 4-byte-only characters (worst case for
costing). Since ceil(bytes/4) = chars for 4-byte characters, the same
fitted parameters work for both char-count (A/B/C) and byte-length (D/E)
sizing. This eliminates the separate 4Byte benchmark functions, reducing
the suite from 7 to 4 benchmarks.

Add named-with-wrapper benchmark helpers in Common.hs and a 4-byte text
generator in Generators.hs.
feat(cost-model): measure Text memory in bytes instead of characters
Change ExMemoryUsage for Text from character count to byte-length-based
measurement (ceil(bytes/8) words), consistent with ByteString. Preserve
memoryUsage 0 for empty Text as a special case. Update encodeUtf8 and
decodeUtf8 memory model slopes to reflect byte-based sizing. Add
ExMemoryUsage property tests for Text values.
feat(builtins): add TextCostingByteLength for byte-based string costing
Gate string builtin costing by semantics variant via TextCostingByteLength:
A/B/C use character count, D/E use ceil(byte-length/4) half-words. The
byte-length metric is O(1) to compute (vs O(n) char traversal) and more
accurately reflects actual work done by string operations.

Add D/E cost model files (builtinCostModelD.json, builtinCostModelE.json).
Update test golden files for the new variant D type signatures and
conformance budget expectations.
feat(cost-model): add 4-byte worst-case benchmarks and adjust size ranges
Add benchOneTextString4Byte for EncodeUtf8: generates strings using only
4-byte UTF-8 characters (U+10000..U+10FFFF) with char-count x-axis.
For these inputs, ceil(bytes/4) = char_count exactly, so fitting with
denominator 4 should produce parameters matching the char-count model.

Adjust size ranges to match master's effective range (which was doubled
by the old 2*n generator bug):
  oneArgumentSizes: [0,100..10000] -> [0,200..20000] (101 points)
  twoArgumentSizes: [0,250..5000]  -> [0,500..10000] (21 points)
refactor(cek): fuse free-variable shifting into discharge traversal
Replace the two-pass dischargeCekValue implementation (discharge + shiftTermBy
post-pass) with a single-pass approach that threads a global shift parameter
through goValue/goValEnv. This avoids a separate traversal for shifting and
handles truly free variables (not found in the environment) consistently.

- Add shiftNamedDeBruijn utility to PlutusCore.DeBruijn
- Thread `global` shift parameter through goValue and goValEnv
- Delete the standalone shiftTermBy function
- Add 4 new tests for truly free vars past non-empty environments
fix(cek): shift free variables in VBuiltin during discharge
VBuiltin values can be stored in an environment and later discharged
under additional binders. The previous code returned VBuiltin terms
without shifting, causing variable capture. Add shiftTerm helper to
shift free variables in discharged VBuiltin terms, add bang pattern
to shiftNamedDeBruijn for consistency, and add a VBuiltin test case
reproducing basetunnel's example from issue #7526.
test(cek): add comprehensive discharge tests for free variables
Add 8 test cases covering variable capture scenarios in dischargeCekValue:

- Free variables under 1, 2, and 3 lambdas

- Deeply indexed free variables

- Multiple free variables in the same term

- Nested environment structures

Tests verify that free variables are correctly shifted to prevent capture when terms are discharged from the evaluation environment.

Tests for #7526
fix(cek): prevent variable capture in dischargeCekValue
Add shiftTermBy function to correctly shift free variables when discharging values from the environment. Previously, free variables in discharged terms could be captured by outer lambdas, causing incorrect variable references in the output term.

The fix tracks binding depth during discharge and shifts free variables (those with indices beyond the current binding depth) by the appropriate amount to maintain correct scoping.

Resolves #7526