Commit 8e78920
fix(governance): recurse into rule-parameter array elements
Address the final Copilot review comment: droppedKeyPath previously treated
array elements as opaque, so an unrecognized key inside an array element
(e.g. required_status_checks[].integration_ids, a typo for integration_id)
was silently dropped by go-github's JSON unmarshal without being caught --
the resulting rule would then accept a status check from any integration
instead of only the one requested.
This round-trip is entirely local (our own marshal/unmarshal of a go-github
struct, not a remote API response), so slice order and length are
deterministic and safe to compare by index. droppedKeyPath now delegates to
a new droppedValuePath helper that recurses into both nested objects and
array elements, reporting paths like
"required_status_checks[0].integration_ids" when a caller-supplied key
disappears in either a map or an array position.
Added a regression test for the array-nested typo, and a companion test
confirming valid array-nested parameters still round-trip without being
misflagged.
Note: committed unsigned -- the local 1Password SSH-signing agent is still
unavailable (session locked).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent 0c25c92 commit 8e78920
2 files changed
Lines changed: 135 additions & 13 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
869 | 869 | | |
870 | 870 | | |
871 | 871 | | |
872 | | - | |
873 | | - | |
874 | | - | |
875 | | - | |
876 | | - | |
877 | | - | |
878 | | - | |
| 872 | + | |
| 873 | + | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
879 | 881 | | |
880 | 882 | | |
881 | 883 | | |
| |||
885 | 887 | | |
886 | 888 | | |
887 | 889 | | |
888 | | - | |
889 | | - | |
890 | | - | |
891 | | - | |
892 | | - | |
893 | | - | |
| 890 | + | |
| 891 | + | |
894 | 892 | | |
895 | 893 | | |
896 | 894 | | |
897 | 895 | | |
898 | 896 | | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
899 | 933 | | |
900 | 934 | | |
901 | 935 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
667 | 667 | | |
668 | 668 | | |
669 | 669 | | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
670 | 758 | | |
671 | 759 | | |
672 | 760 | | |
| |||
0 commit comments