Skip to content

docs: publish IntelIP pricing recommendation#41

Merged
hudsonaikins merged 1 commit into
mainfrom
codex/intelip-pricing-decision-pass
Apr 13, 2026
Merged

docs: publish IntelIP pricing recommendation#41
hudsonaikins merged 1 commit into
mainfrom
codex/intelip-pricing-decision-pass

Conversation

@hudsonaikins
Copy link
Copy Markdown
Contributor

@hudsonaikins hudsonaikins commented Apr 13, 2026

Summary

  • let IntelIP mix scenarios preserve reference limits metadata so the shipped scenario pack runs as documented
  • add an Apr 2026 pricing recommendation memo based on current executable ProfitCtl scenario outputs
  • link the recommendation into the docs index

Testing

  • go test ./...
  • go run . simulate -f benchmark_scenarios/intelip_ops_conservative.yml --quiet
  • go run . simulate -f benchmark_scenarios/intelip_ops_target.yml --quiet
  • go run . simulate -f benchmark_scenarios/intelip_ops_stress.yml --quiet
  • go run . simulate -f benchmark_scenarios/intelip_rollout_paid_pilot.yml --quiet
  • go run . simulate -f benchmark_scenarios/intelip_rollout_tight_free.yml --quiet
  • go run . simulate -f benchmark_scenarios/intelip_rollout_workspace_minimum_proxy.yml --quiet

Greptile Summary

This PR fixes a validator bug where pricing.mode: mix plans were incorrectly rejected when they carried limits fields, and ships an Apr 2026 pricing recommendation memo based on the six IntelIP benchmark scenario outputs.

The validator change removes the limits-rejection guard from validateMixPricing so that limits.users is preserved as reference metadata; calculateMixRevenue in the pricing engine already ignores Limits entirely and allocates users only by share, so there is no behavioral change to simulations. New tests cover both the parser round-trip and the updated validation rule. All six referenced benchmark scenario files exist in the repo and their pass/fail results are consistent with the documented covenant thresholds.

Confidence Score: 5/5

Safe to merge — the validator fix is narrow, well-tested, and the engine was already ignoring limits in mix mode.

All findings are P2 or lower. The core change (removing the limits-rejection guard in validateMixPricing) is confirmed safe because calculateMixRevenue never reads Limits. New tests cover both the parser and validator behavior. Documentation is consistent with actual scenario outputs.

No files require special attention.

Important Files Changed

Filename Overview
internal/config/validator.go validateMixPricing no longer rejects plans with limits — they are silently accepted as reference metadata; engine (calculateMixRevenue) never reads Limits, so no behavioral side-effect
internal/config/parser_test.go Adds TestParseConfig_MixModePreservesReferenceLimits confirming parsed limits are stored in the config struct when mode is mix; correct and sufficient
internal/config/validator_test.go Adds TestValidateConfig_MixModeAllowsReferenceLimits covering the new permissive behavior; shares still validated to sum to 1.0
docs/intelip-pricing-recommendation-apr-2026.md New pricing memo with scenario result table and launch recommendations; all referenced scenario files exist and were verified to pass/fail as documented
docs/DOCS_INDEX.md Adds link to new pricing recommendation doc at the expected position in the product docs section

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[ValidateConfig] --> B{pricing.Mode?}
    B -->|tiered / empty| C[validateTieredPricing\nLimits required + ascending order]
    B -->|mix| D[validateMixPricing\nShares required, sum to 1.0\nLimits accepted as reference metadata ✅]
    B -->|hybrid| E[validateHybridPricing\nContract required, no Plans]
    B -->|workspace_hybrid| F[validateWorkspaceHybridPricing\nShares required, Limits rejected ❌]
    D --> G[calculateMixRevenue\nallocateUsersByShare\nLimits field never read]
    C --> H[calculateTieredRevenue\nLimits.Users used for tier caps]
Loading

Comments Outside Diff (1)

  1. internal/config/validator.go, line 213-245 (link)

    P2 Missing comment explaining reference-only limits in mix mode

    validateMixPricing now silently accepts Limits on plans, but there is no code comment explaining that they carry reference metadata only and are not enforced at simulation time. Without this context, a future contributor may add ordering/presence validation for limits here (matching the pattern in validateTieredPricing) or may wonder why workspace_hybrid rejects limits while mix does not.

    Prompt To Fix With AI
    This is a comment left during a code review.
    Path: internal/config/validator.go
    Line: 213-245
    
    Comment:
    **Missing comment explaining reference-only limits in mix mode**
    
    `validateMixPricing` now silently accepts `Limits` on plans, but there is no code comment explaining that they carry reference metadata only and are not enforced at simulation time. Without this context, a future contributor may add ordering/presence validation for limits here (matching the pattern in `validateTieredPricing`) or may wonder why `workspace_hybrid` rejects limits while `mix` does not.
    
    
    
    How can I resolve this? If you propose a fix, please make it concise.
Prompt To Fix All With AI
This is a comment left during a code review.
Path: internal/config/validator.go
Line: 213-245

Comment:
**Missing comment explaining reference-only limits in mix mode**

`validateMixPricing` now silently accepts `Limits` on plans, but there is no code comment explaining that they carry reference metadata only and are not enforced at simulation time. Without this context, a future contributor may add ordering/presence validation for limits here (matching the pattern in `validateTieredPricing`) or may wonder why `workspace_hybrid` rejects limits while `mix` does not.

```suggestion
func validateMixPricing(pricing *PricingConfig) error {
	const shareTolerance = 1e-9
	if len(pricing.Plans) == 0 {
		return fmt.Errorf("pricing mode mix requires plans: %w", ErrPricingInconsistency)
	}
	if pricing.Contract != nil {
		return fmt.Errorf("pricing mode mix does not support contract: %w", ErrPricingInconsistency)
	}

	// limits on mix-mode plans are accepted as reference metadata (e.g. documenting
	// tier caps in the product UI) but are not used by the simulation engine.
	// calculateMixRevenue allocates users by share only.
	plans := pricing.Plans
```

How can I resolve this? If you propose a fix, please make it concise.

Reviews (1): Last reviewed commit: "docs: publish IntelIP pricing recommenda..." | Re-trigger Greptile

Context used:

  • Context used - Summarize the changes made in the overall PR so we... (source)

@hudsonaikins hudsonaikins merged commit c899c0f into main Apr 13, 2026
3 checks passed
@hudsonaikins hudsonaikins deleted the codex/intelip-pricing-decision-pass branch April 13, 2026 19:55
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